Dmitry Kovalev
/
LGstaandart
forkd
Fork of LG2 by
tabel.txt
- Committer:
- Kovalev_D
- Date:
- 2018-01-05
- Revision:
- 227:2774b56bfab0
- Parent:
- 209:224e7331a061
File content as of revision 227:2774b56bfab0:
________________________________________________________________________________________________ | Регистр |бит| описание | PIN | Состояние | | | | | | ВКЛ | ВЫКЛ | |------------------------|---|----------------------------------------------|------|------|------| | Gyro.PinReg | 0 | Описывает состояние ноги вибро 1 | 1.25 | 1 | 0 | | |---|----------------------------------------------|------|------|------| | Ргистр управения | 1 | Описывает состояние ноги вибро 2 | 1.28 | 1 | 0 | | ногами микрокнтроллера |---|----------------------------------------------|------|------|------| | | 2 | Описывает состояние подсветки | 2.12 | 1 | 0 | | |---|----------------------------------------------|------|------|------| | | 3 | Описывает состояние поджига | 0.4 | 1 | 0 | | |---|----------------------------------------------|------|------|------| | | 4 | Описывает состояние отладочного светодиода | 1.30 | 1 | 0 | |________________________|___|______________________________________________|______|______|______| ________________________________________________________________________________________________ | Регистр |бит| описание | PIN | Состояние | | | | | | ВКЛ | ВЫКЛ | каждую секунду проверяется нулевой бит регистра подсветки |------------------------|---|----------------------------------------------|------|------|------| затем сдвигаетя вправо на один бит для след значения. | Gyro.BackLight | 0 | 0 сек | 2.12 | 1 | 0 | | |---|----------------------------------------------|------|------|------| | сдвиговый регистр | 1 | 1 сек | 2.12 | 1 | 0 | | для задания последова- |---|----------------------------------------------|------|------|------| | тельности включения | 2 | 2 сек | 2.12 | 1 | 0 | |светодиодной подсветки. |---|----------------------------------------------|------|------|------| | | 3 | 3 сек | 2.12 | 1 | 0 | | |---|----------------------------------------------|------|------|------| | | 4 | 4 сек и тд. | 2.12 | 1 | 0 | |________________________|___|______________________________________________|______|______|______| ________________________________________________________________________________________________ | Регистр |бит| описание | PIN | Состояние | | | | | | ВКЛ | ВЫКЛ | каждую секунду проверяется нулевой бит регистра поджига |------------------------|---|----------------------------------------------|------|------|------| затем сдвигаетя вправо на один бит для след значения. | Gyro.Discharg | 0 | 0 сек | 0.4 | 1 | 0 | | |---|----------------------------------------------|------|------|------| | сдвиговый регистр | 1 | 1 сек | 0.4 | 1 | 0 | | для задания последова- |---|----------------------------------------------|------|------|------| | тельности включения | 2 | 2 сек | 0.4 | 1 | 0 | |светодиодной подсветки. |---|----------------------------------------------|------|------|------| | | 3 | 3 сек | 0.4 | 1 | 0 | | |---|----------------------------------------------|------|------|------| | | 4 | 4 сек и тд. | 0.4 | 1 | 0 | |________________________|___|______________________________________________|______|______|______| _______________________________________________________________________________________________________________________________________________________________________________________ | Параметр | описание | разрядность | диапозон | пересчет | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| | | Назначаемый собственный адрес устройства. | unsigned int | | | | Gyro.My_Addres | 0-технологический адрес. | 0xffff | 0x0000-0x0003 | ----------- | | | 1-3 - адрес в системе. | | | | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| | | Счетчик количества положительных импульсов за 1 такт | int | 0x0000-0xffff | | | Gyro.CaunPlus | виброподвеса.Сумируется из буфера Buff_Restored_sin[CountV31] | не обрезается | 1 байт 2 байт | ----------- | | | Обнуляется на CountV31=24.??? (VibroAMPRegul()) | | выдается как 0хff | 0хff | | |------------------------|---------------------------------------------------------------|----------------------|-----------------------------------------------------------------------| | | Счетчик количества отрицательных импульсов за 1 такт | int | 0x0000-0xffff | | | Gyro.CaunMin | виброподвеса.Сумируется из буфера Buff_Restored_sin[CountV31] | не обрезается | 1 байт 2 байт | ----------- | | | Обнуляется на CountV31=24.??? (VibroAMPRegul()) | | выдается как 0хff | 0хff | | |------------------------|---------------------------------------------------------------|----------------------|-----------------------------------------------------------------------| | |Счетчик, прирашение угла за период выдачи M_Rate - 1 раз в сек,| int | 0x0000-0xFFFF | | | Gyro.CuruAngle |Delta_500Hz - 1 раз в 500 Гц,Delta_Ext - по внешней защелке. | не обрезается | 1 байт 2 байт | 1 импульс = ?°?'?" | | |Сумируется по бувферу 32 точки (вычет виброподвеса) | | выдается как 0хff | 0хff | | | |Обнуляется при выдачи данных в ACK_GLD. | | | | |________________________|_______________________________________________________________|______________________|__________________________________|____________________________________| | | | Амплитуда синус косинус | |_______________________________________________________________________________________________________________________________________________________________________________________| | | | | | | | | | | 0 V - 4 V | | | Spi.ADC5 | Значение амплитуды ФД в текущий момент. | unsigned int | int 32767 - 0 | int 1 = 0.000122 | | | Считывается из АЦП5 по SPI | не обрезается | hex 0x7fff - 0x0000 | | | | | | | | |------------------------|---------------------------------------------------------------|----------------------|-----------------------------------------------------------------------| | | | unsigned int | 0 V - 4 V | | | TempA | Перевернутое и умноженное на 2 значение Spi.ADC5. | не обрезается | int 0 - 65535 | TempA = (0x7fff - Spi.ADC5) << 1; | | | | | hex 0x0000 - 0xffff | | | | | | | | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| | | | int | | | | Gyro.ADF_Accum | Сумма значенний Амплитуды с АЦП5 (sin(),cos()) | не обрезается | 0 - int | Gyro.ADF_Accum += TempA; | | | для расчтета отфильтровонного значения амплитуды | | максимальное значение | | | | за пол периода виброподвеса (16 тактов) (быстрый фильтр) | | | | |------------------------|---------------------------------------------------------------|----------------------|-----------------------------------------------------------------------| | | | int | | | | Gyro.ADS_Accum | Сумма значенний Амплитуды с АЦП5 ( sin(),cos() ) | не обрезается | 0 - int | Gyro.ADS_Accum += TempA; | | | для расчтета отфильтровонного значения амплитуды | | максимальное значение | | | | за 256 тактов виброподвеса (медленный фильтр) | | 7584065 | | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| | | | int | 0 - int | | | Gyro.AD_Slow | Значение Gyro.ADS_Accum и Gyro.ADF_Accum | не обрезается | максимальное значение | Gyro.AD_Fast = Gyro.ADF_Accum << 8 | | | приведенные к одной разрядной сетке | | 1941520832 | | | | | | | | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| | | | int | 0 - int | | | Gyro.AD_Fast | Значение Gyro.ADS_Accum и Gyro.ADF_Accum | не обрезается | максимальное значение |Gyro.AD_Fast = Gyro.ADF_Accum << 12 | | | приведенные к одной разрядной сетке | | 1941520832 | | | | | | | | |________________________|_______________________________________________________________|______________________|__________________________________|____________________________________| | | | Вибропривод | |_______________________________________________________________________________________________________________________________________________________________________________________| | Параметр | описание | разрядность | диапозон | пересчет | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| | | Знач частоты ВП в Гц формат 16.16 | | пример: | | | Gyro.Frq | персчитется каждй 16 | unsigned int | 300-500Гц | Gyro.Frq = Gyro.FrqHZ<<16; | | | для регуливки частоты записывается в | формат 16,16 | 19660800-32768000 | | | | LPC_TIM1->MR0 =(unsigned int)((103000000/(Gyro.Frq>>11) | | | | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| | | | | 0 - 500 | (задается) | | Gyro.FrqHZ | значение частоты ВП в Гц | unsigned int | максимальное значение | Gyro.FrqHZ = Gyro.Frq>>16 | | | используется только для инициализации | | 500 | | | | начаольной частоты ВП | | | | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| | | Максимально допустимая амплитуда в процентах | | | | | Gyro.AmpPer | используется для расчета ошумления | unsigned int | 0%-98% | (задается) | | | (Границ включения и отключения ног ВП) | | | | | | Ширнва импульса ВП. | | | | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| | | Частота ошумления ВП. При CountV31=0 входим в функцию | | | | | Gyro.AmpT |ошумления ВП. Если PeriodCount меньше Gyro.AmpT инкрементируем| unsigned int | ------------ | Gyro.AmpT | | |PeriodCount если счетчик больше или равен выполняем расчет | | --------------------- | = | | |амплитуды вибропривода. (псевдослучайно в диаппазоне) | | | rand() % Gyro.AmpTD+Gyro.AmpMin) | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|-----------------------------------------------------------| | | Левая и правая граница импульса ВП соответственно, | | При Gyro.FrqHZ = 500Hz : | N1 = ((Nmax*(100-Gyro.AmpPer))/Gyro.FrqHZ) | | Gyro.AmpN1 | используется для создания симетричной картины импульса ВП | unsigned int | N1(1-66) | N1 = ((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/Gyro.FrqHZ) | | Gyro.AmpN2 | относительно его центра при ушумлении | | 66-малая амплитуда | N2 = ((Nmax/2)-Gyro.AmpN1); | | | _______ ___ | | N2 (100-165) | Nmax =((100000/(Gyro.Frq>>16))-1) | | | _____/ = | = \____/=|=\_______ c-центр импульса | | 100-малая амплитуда | (максимальная длительность импульса) | | | 0 N1 c N2 N1 c N2 Gyro.Frq | | | при данной частоте Gyro.Frq | |________________________|_______________________________________________________________|______________________|__________________________________|___________________________________________________________| | | | АЦП и ЦАП | |_______________________________________________________________________________________________________________________________________________________________________________________| | | | | | Gyro.Termo=Spi.ADC1_Accum >> 5; | | Gyro.Termo | данные с первого АЦП температура | unsigned int | | Spi.ADC1_Accum - накопленные | | | Термодатчик типа LM337 | | 0V - 4V | данные за такт виброподвеса | | | | | 0 - 65536 | | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| | | | | | Gyro.Termo=Spi.ADC2_Accum >> 5; | | Gyro.DeltaT | данные с второго АЦП | unsigned int | ------------------------------ | Spi.ADC2_Accum - накопленные | | | (градиент температур между двумя термодатчиками0 | | ------------------------------ | данные за такт виброподвеса | | | | | | | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| | | | | | Gyro.Termo=Spi.ADC3_Accum >> 5; | | Gyro.In1 | ток в канале 1 | unsigned int | ----------------------------- | Spi.ADC3_Accum - накопленные | | | | | ----------------------------- | данные за такт виброподвеса | | | | | | | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| | | | | | Gyro.Termo=Spi.ADC4_Accum >> 5; | | Gyro.In2 | ток в канале 2 | unsigned int | ----------------------------- | Spi.ADC4_Accum - накопленные | | | | | ----------------------------- | данные за такт виброподвеса | | | | | | | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| /* void PlcRegul(void) //Программа расчет напряжения для модулятора(//выполняется 1.25 микросек.) { int templm=0; int PLC_In; int tempDac; if(start<=5) { if(ttt) {// +25 С° templm = (Gyro.TermoNKU-Gyro.Termo); //дельта if(templm>0) Gyro.Ktermo=1; else Gyro.Ktermo=0; Spi.DAC_B+=templm; ttt=0; } } if(!(Gyro.PinReg & PinRegBitL) && (start>0)) start--; else if((start==0)) { PLC_In = Gyro.AD_Slow; //выбираем даные для фильтрации Gyro.PLC_Delta = PLC_In - Gyro.PLC_Old; //узнаем приращение Gyro.PLC_DeltaADD = Gyro.PLC_Delta * Gyro.PLC_ADC_DOld; //приращение с учетом знака (и количества) прошлого приращения Gyro.PLC_Old = PLC_In; //запоминание значения if(Gyro.flagGph_W) { AD_MAX=0; Gyro.flagGph_W--; Gyro.PLC_Error2Mode=3; } //если изменился коэфициент усиления ФД //3600 (размер моды порядка 3000) if((Gyro.PLC_Lern < 150) && (Gyro.PLC_Error2Mode != 0)) { //пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды. if(Gyro.Ktermo)Spi.DAC_B += 0x3c; //добовляем в значение цапа 60 else Spi.DAC_B -= 0x3c; if(AD_MAX < PLC_In){AD_MAX = PLC_In;} //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду. else if ((AD_MAX>PLC_In)&&(AD_MAX>1550800000)) r++; //если текущая амплитуда меньше максимально найденной то инкрементируем счетчик. if (r>10) { Gyro.PLC_Lern=151; Gyro.PLC_Error2Mode=3; } //если текущая амплитуда меньше максимально найденной в течении 5 тактов то выходим из поиска Gyro.CuruAngle = 0; //не считаем угол пока ищем максивальную амплитуду. } //работает только первые ~30-40 секунд (37 сек). if (Gyro.PLC_Lern<160) Gyro.PLC_Lern++; if(AD_MAX < PLC_In) {AD_MAX = PLC_In; l=0;} //обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды. else l++; //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной) if((l > 300)&&(Gyro.PLC_Error2Mode == 0)) {AD_MAX -= 2107200;k=15;l=0;} //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). m if ((k == 15)&&(Gyro.PLC_Lern > 150)) Spi.DAC_B += 75; //после уменьшения максимальной амплитуды двигаем шевелем цап else if((k == 1)&&(Gyro.PLC_Lern > 150)) {Spi.DAC_B -= 75; k=0;l=0;} //для быстрог поиска новог максимума. if(k>0)k--; Gyro.PlC_MaxD=(unsigned int)(AD_MAX-PLC_In); //ищем разницу между желаемой и действительной амплитудами. if(Gyro.ModJump==1) { ///прыжок с моды на моду. (-->) Gyro.OldCuruAngle = Gyro.CuruAngle; Gyro.ModJump=0; Spi.DAC_B += 4300; Gyro.PLC_Error2Mode=1; Gyro.StopCuruAngle=2; } if(Gyro.ModJump==2) { ///прыжок с моды на моду. (<--) Gyro.OldCuruAngle = Gyro.CuruAngle; Gyro.ModJump=0; Spi.DAC_B -= 5250; Gyro.PLC_Error2Mode=1; Gyro.StopCuruAngle=2; } if(Gyro.RgConA&0x8) { // если контур регулирования замкнут if ( Gyro.PLC_Error2Mode > 0) { Gyro.PLC_Error2Mode --; Gyro.PLC_ADC_DOld = 0;} // если ошибка(нахожление в двух модовом) else if ( Gyro.PLC_DeltaADD > 0) { Gyro.PLC_ADC_DOld = 1;} else if ( Gyro.PLC_DeltaADD < 0) { Gyro.PLC_ADC_DOld = -1;} else { Gyro.PLC_ADC_DOld = 1;} } else {Gyro.PLC_Error2Mode = 1; Gyro.PLC_DeltaADD = 0;} ///прыжок с моды на моду. tempADC5=0x7fff-Spi.ADC5; // контур замкнут включен лазер if((Gyro.RgConA&0x8) && (tempADC5>1000)) { if(Gyro.PlC_MaxD>(50<<17)) { // 3 режим регулирования tempDac=(unsigned int)(Gyro.PlC_MaxD>>19); if(tempDac>600) tempDac=600; //ограничение на регулирование если очень большая разница амплитуд Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac; //новое значение в цап (±1 * значение регулировки) tempDac = Gyro.PLC_ADC_DOld * tempDac; //используется только для выдачи flagmod=3; } else if(Gyro.PlC_MaxD>(12<<17)) { // 2 режим регулирования tempDac=(unsigned int)(Gyro.PlC_MaxD>>19); Spi.DAC_B += Gyro.PLC_ADC_DOld * (tempDac); tempDac = Gyro.PLC_ADC_DOld * (tempDac); //используется только для выдачи flagmod=2; } else if(Gyro.PlC_MaxD<(2<<17)) { //режим если дельта равна 0; tempDac=2; Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac; flagmod=0; } else { tempDac=2; // 1 режим регулирования Spi.DAC_B += Gyro.PLC_ADC_DOld *tempDac; tempDac = Gyro.PLC_ADC_DOld * tempDac; flagmod=1; } } if ( Spi.DAC_B < 15300 ) {Spi.DAC_B = 32000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;} //проверка на переваливание за границу. else if ( Spi.DAC_B > 53000) {Spi.DAC_B = 32000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;} } if(Gyro.StopCuruAngle) {Gyro.CuruAngle = Gyro.OldCuruAngle; Gyro.StopCuruAngle--;} /////////////////////// //////////лог////////// /////////////////////// if(Gyro.LogPLC==1) { sprintf((Time),"%d %d %d %d %d %d %d %d %d \r\n",Gyro.CuruAngle, Gyro.Frq, Gyro.MaxAmp, Spi.DAC_B, tempDac, flagmod, AD_MAX, PLC_In, Gyro.Termo);//выдаем в терминал для постройки граффика регулировки периметра. Gyro.CuruAngle=0; Gyro.tempdelta=0; Gyro.tempdelta2=0; WriteCon(Time); } } */ void CalcAmpD(void) { // GyroP.Str.wall++; // if(GyroP.Str.wall>16) // { // GyroP.Str.wall=0; // klk++; // if(klk>32) klk = 0; // } unsigned int Nmax=0; Gyro.AmpPerDel = ModArrayTriangle[klk]; tempi++; srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин. Gyro.AmpT = (rand() %8-4);// ОШУМЛЕНИЕ amp Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); Gyro.AmpN1=(unsigned int)((Nmax*((100-Gyro.AmpPer)+Gyro.AmpPerDel+Gyro.AmpT))/(Gyro.Frq>>16)); //левая граница амплитуды Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового значение частоты вибро // LPC_TIM1->MR0 +=(Gyro.AmpT<<5); } . /* void Calc2AmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. { Gyro.AmpSC=0; static int PeriodCount = 0; unsigned int Nmax=0; Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp ; if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1); OldMaxAmp=Gyro.MaxAmp; if(Gyro.AmpSC <55)countA++; if(countA >2) { countA=0; srand(Global_Time); if(Cheng_AMP_Flag) { Cheng_AMP_Flag=0; Gyro.AmpPerDel = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/(Gyro.Frq>>16)); //левая граница амплитуды Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды } else { Cheng_AMP_Flag=1; Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer))/(Gyro.Frq>>16)); //левая граница амплитуды Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды } } //8046 LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового значение частоты вибро }*/ /* void CalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. { Gyro.AmpSC=0; static int PeriodCount = 0; unsigned int Nmax=0; Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp ; if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1); OldMaxAmp=Gyro.MaxAmp; if(Gyro.AmpSC <5)countA++; if(countA >3) { countA=0; Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/(Gyro.Frq>>16)); //левая граница амплитуды Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды Cheng_AMP_Flag=1; tempDP=Gyro.AmpPerDel; srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин. if(Gyro.flag==1) Gyro.AmpPerDel = 1; else Gyro.AmpPerDel = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp } //8046 LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового значение частоты вибро } */ /* void CalcAmpD(void) { unsigned int Nmax=0; countA++; if( countA>1) { countA=0; Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer-Gyro.AmpPerDel))/(Gyro.Frq>>16)); //левая граница амплитуды Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды Cheng_AMP_Flag=1; // if(Gyro.flag==1) Gyro.AmpPerDel = 1; switch(Znak) { case 0: Gyro.AmpPerDel++; if (Gyro.AmpPerDel>10){Znak=1; fnoize++;} break; case 1: Gyro.AmpPerDel--; if (Gyro.AmpPerDel<1)Znak=0; if (fnoize>6)Znak=2; break; case 2: Gyro.AmpPerDel++; if (Gyro.AmpPerDel>7){Znak=3; fnoize++;} break; case 3: Gyro.AmpPerDel--; if (Gyro.AmpPerDel<1)Znak=2; if (fnoize>12){Znak=4;} break; case 4: Gyro.AmpPerDel++; if (Gyro.AmpPerDel>15){Znak=5; fnoize++;} break; case 5: Gyro.AmpPerDel--; if (Gyro.AmpPerDel<1)Znak=4; if (fnoize>18){Znak=6;} break; case 6: Gyro.AmpPerDel++; if (Gyro.AmpPerDel>6){Znak=7;fnoize++;} break; case 7: Gyro.AmpPerDel--; if (Gyro.AmpPerDel<1)Znak=6; if (fnoize>24){Znak=0;fnoize=0;} break; } } LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового значение частоты вибро } */ int Mrand(void) { int b=0; z=z*Gyro.AD_Slow; b = ((z>>10) & 0xf)+20; /* sprintf((Time),"%d\r\n", b); WriteCon(Time);*/ return b; } /*дол лучших времен unsigned long mwc() { static unsigned long x3456789, y=362436069, z=77465321, c=13579; unsigned long long t; tС6905990LL*x+c; x=y; y=z; c=(t>>32); return z=(t&0xffffffff); } */