#include #include //////////////////////////////////////////////////////////////////////////////////////////// // ATmega128: // RC -8 МHz; //////////////////////////////////////////////////////////////////////////////////////////// // nRF24L01: преамбула -1, адрес -5, Data -32, CRC16 -2 // скорость: 250kbps; 0,001.280с. // 32 пак/c. цикл 0,031.25c. //////////////////////////////////////////////////////////////////////////////////////////// // OLED 1: SSD1309 // OLED 2: SH1106 //////////////////////////////////////////////////////////////////////////////////////////// // Data пульт // IP/частота/мощность/кнопки/кнопки1/обдув/помпа/0/ //8 // АЦП/АЦП1/АЦП2/АЦП3/АЦП4/АЦП5/АЦП6/АЦП7 //8 // kor0/kor1/kor2/kor3/kor4/kor5/kor6/kor7 //8 // 0/0/0/0/0/0/CRC16/CRC16 //8 // IP - модель: 0...255 -начальное 1 // ch - частота: 2.400GHz...2.525GHz. (0)...(125) -начальное 0 // pw - мощность: TX -11 10 01 00 -начальное 3 // k - кнопки: // (.......1) 0- меню вниз // (......1.) 1- меню + // (.....1..) 2- меню - // (....1...) 3- меню вверх // (...1....) 4- Нагрузка // (..1.....) 5- Нагрузка // (.1......) 6- Нагрузка // (1.......) 7- Нагрузка // kn - кнопки1: // (.......1) 0- // (......1.) 1- // (.....1..) 2- // (....1...) 3- // (...1....) 4- без фиксации // (..1.....) 5- без фиксации // (.1......) 6- без фиксации // (1.......) 7- // obduv - обдув: // (.......1) 0- // (......1.) 1- // (.....1..) 2- // (....1...) 3- // (...1....) 4- // (..1.....) 5- // (.1......) 6- обдув // (1.......) 7- обдув1 // pompa - помпа: // (.......1) 0- // (......1.) 1- // (.....1..) 2- // (....1...) 3- // (...1....) 4- // (..1.....) 5- помпа // (.1......) 6- // (1.......) 7- // - : // u - АЦП: 0...255 MOTOR_L // u1 - АЦП1: 0...255 Руль // u2 - АЦП2: 0...255 MOTOR_R // u3 - АЦП3: 0...255 BUNKER_L // u4 - АЦП4: 0...255 ШИМ 3 // u5 - АЦП5: 0...255 BUNKER_R // u6 - АЦП6: 0...255 // u7 - АЦП7: 0...255 // kor0: 0...255 // kor1: 0...255 // kor2: 0...255 // kor4: 0...255 // kor5: 0...255 // kor6: 0...255 // kor7: 0...255 // - : // - : // - : // - : // - : // - : // CRC16 // CRC16 //////////////////////////////////////////////////////////////////////////////////////////// // Data модель // IP/вода/температура/температура1/температура2/температура3/0/0 //8 // АЦП/АЦП1/АЦП2/АЦП3/АЦП4/АЦП5/АЦП6/АЦП7 //8 // _0/_1/_2/_3/_4/_5/_6/_7 //8 // 0/0/0/0/0/0/CRC16/CRC16 //8 // IP - модель: 0...255 -начальное 1 // v - вода: // (.......1) 1 - вода модель // (......1.) 1 - // (.....1..) 1 - // (....1...) 1 - // (...1....) 1 - // (..1.....) 1 - // (.1......) 1 - // (1.......) 1 - // t - температура: ds18b20: 0 C^...128 C^(начальное 85 C^ - 01010101) // t1 - температура1: ds18b20: 0 C^...128 C^(начальное 85 C^ - 01010101) // t2 - температура2: ds18b20: 0 C^...128 C^(начальное 85 C^ - 01010101) // t3 - температура3: ds18b20: 0 C^...128 C^(начальное 85 C^ - 01010101) // - : // - : // u - АЦП: 0...255 g -аккум модель // u1 - АЦП1: 0...255 BUNKER_L // u2 - АЦП2: 0...255 BUNKER_R // u3 - АЦП3: 0...255 // u4 - АЦП4: 0...255 // u5 - АЦП5: 0...255 // u6 - АЦП6: 0...255 // u7 - АЦП7: 0...255 // ASCII _0: 0...255 // ASCII _1: 0...255 // ASCII _2: 0...255 // ASCII _4: 0...255 // ASCII _5: 0...255 // ASCII _6: 0...255 // ASCII _7: 0...255 // - : // - : // - : // - : // - : // - : // CRC16 // CRC16 //////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////// crc unsigned int crc; // crc - crc unsigned int bcrc; // bcrc - crc буфер /////////////////////////////////////////////// счёт unsigned int a; // счёт unsigned int b; // счёт unsigned char x; // счёт unsigned char x1; // счёт unsigned char z; // счёт unsigned char zn; // счёт /////////////////////////////////////////////// связь unsigned char IP = 1; // IP модель -начальное 1 unsigned char ch; // частота unsigned char chb; // буфер частота 2.400 GHz. -(0) - вызывной канал unsigned char pw = 3; // мощность TX -11 10 01 00 -начальное 3 unsigned char pwb; // буфер мощность TX -11 10 01 00 /////////////////// цикл unsigned char c; // цикл unsigned char fc; // флаг связи unsigned char zvuk_c; // счёт звук нет связи /////////////////// S - метр unsigned char s; // счётчик пакетов s = sT - sR unsigned char sT; // счётчик пакетов пульт unsigned char sR; // счётчик пакетов модель /////////////////// контроль unsigned int kontrol_TX; // контрольTX unsigned int kontrol_TX_b; // буфер контроль TX unsigned int kontrol_RX; // контроль RX unsigned int kontrol_RX_b; // буфер контроль RX unsigned int kontrol_CRC; // контроль CRC unsigned int kontrol_CRC_b; // буфер контроль CRC //////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////// пульт unsigned char bufer[128]={ // пульт буфер 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //32 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //32 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //32 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //32 }; /////////////////// таймер unsigned char taimer; // таймер unsigned char n; // номер таймер /////////////////// /////////////////// кнопки unsigned char k; // кнопки /////////////////// 0- меню вниз unsigned char k0; // счётчик кнопки 0 unsigned char flag_k0; // флаг кнопки 0 /////////////////// 1- меню + unsigned char k1; // счётчик кнопки 1 unsigned char flag_k1; // флаг кнопки 1 /////////////////// 2- меню - unsigned char k2; // счётчик кнопки 2 unsigned char flag_k2; // флаг кнопки 2 /////////////////// 3- меню вверх unsigned char k3; // счётчик кнопки 3 unsigned char flag_k3; // флаг кнопки 3 /////////////////// 4- Нагрузка unsigned char k4; // счётчик кнопки 4 unsigned char flag_k4; // флаг кнопки 4 /////////////////// 5- Нагрузка unsigned char k5; // счётчик кнопки 5 unsigned char flag_k5; // флаг кнопки 5 /////////////////// 6- Нагрузка unsigned char k6; // счётчик кнопки 6 unsigned char flag_k6; // флаг кнопки 6 /////////////////// 7- Нагрузка unsigned char k7; // счётчик кнопки 7 unsigned char flag_k7; // флаг кнопки 7 /////////////////// /////////////////// кнопки1 unsigned char kn; /////////////////// 4- Нагрузка unsigned char kn4; // счётчик кнопки 4 unsigned char flag_kn4; // флаг кнопки 4 /////////////////// 5- Нагрузка unsigned char kn5; // счётчик кнопки 5 unsigned char flag_kn5; // флаг кнопки 5 /////////////////// 6- Нагрузка unsigned char kn6; // счётчик кнопки 6 unsigned char flag_kn6; // флаг кнопки 6 ////////////////// кнопки interrupt [TIM0_OVF] void timer0_ovf_isr(void) // 8.000.000/8=1.000.000/256= 3.906 { //PORTD.0=1; // контроль if (PINC.0==0) flag_k0 = 1; // кнопка 0 - меню вниз if (PINC.1==0) flag_k1 = 1; // кнопка 1 - меню + if (PINC.2==0) flag_k2 = 1; // кнопка 2 - меню - if (PINC.3==0) flag_k3 = 1; // кнопка 3 - меню вверх if (PINC.4==0) flag_k4 = 1; // кнопка 4 - Нагрузка if (PINC.5==0) flag_k5 = 1; // кнопка 5 - Нагрузка if (PINC.6==0) flag_k6 = 1; // кнопка 6 - Нагрузка if (PINC.7==0) flag_k7 = 1; // кнопка 7 - Нагрузка /////////////////// кнопки1 if (PIND.4==0) flag_kn4 = 1; // кнопка 4 - Нагрузка if (PIND.5==0) flag_kn5 = 1; // кнопка 5 - Нагрузка if (PIND.6==0) flag_kn6 = 1; // кнопка 6 - Нагрузка //PORTD.0=0; // контроль } /////////////////// АЦП unsigned int u; // АЦП unsigned int ub; // буфер АЦП unsigned int u1; // АЦП1 unsigned int ub1; // буфер АЦП1 unsigned int u2; // АЦП2 unsigned int ub2; // буфер АЦП2 unsigned int u3; // АЦП3 unsigned int ub3; // буфер АЦП3 unsigned int u4; // АЦП4 unsigned int ub4; // буфер АЦП4 unsigned int u5; // АЦП5 unsigned int ub5; // буфер АЦП5 unsigned int u6; // АЦП6 unsigned int ub6; // буфер АЦП6 unsigned int u7; // АЦП7 unsigned int ub7; // буфер АЦП7 /////////////////// АЦП: -0,000.070c void adc(unsigned char adc_input) { ADMUX = 0b01000000 | adc_input; // опорное AVCC // ADC0...ADC7 delay_us(10); ADCSRA|=0b01000000; while (ADCSRA & 0b01000000); } /////////////////// kor unsigned char kor0 = 128; // АЦП / MOTOR L PF 0 > PB5 unsigned char kor1 = 128; // АЦП1 / РУЛЬ PF 1 > PE5 unsigned char kor2 = 128; // АЦП2 / MOTOR R PF 2 > PB6 unsigned char kor3 = 128; // АЦП3 / SERVO L PF 3 > PE3 unsigned char kor4 = 128; // АЦП4 / ШИМ 3 PF 4 > PB7 unsigned char kor5 = 128; // АЦП5 / SERVO R PF 5 > PE4 unsigned char kor6 = 128; // АЦП6 unsigned char kor7 = 128; // АЦП7 /////////////////// MOTOR unsigned int MOTOR_L_MAX = 255; // unsigned int MOTOR_L_MIN = 0; // unsigned int MOTOR_R_MAX = 255; // unsigned int MOTOR_R_MIN = 0; // /////////////////// ШИМ //unsigned char w; // ШИМ /////////////////// аккум пульт unsigned char p; // аккум пульт /////////////////// бузер unsigned char f_buzer=0xFF; // флаг бузер -начальное 0xFF /////////////////// /////////////////// обдув unsigned char obduv; // обдув /////////////////// помпа unsigned char pompa; // помпа /////////////////// /////////////////// температура 0 модель (MOTOR) unsigned char t; // температура 0 модель unsigned char f_obduv_ON; // флаг обдув 0 ON unsigned char t_MAX; // температура MAX 0 модель unsigned char t_MIN; // температура MIN 0 модель /////////////////// температура 1 модель (MOTOR) unsigned char t1; // температура 1 модель //unsigned char f_obduv1_ON; // флаг обдув 1 ON //unsigned char t_MAX1; // температура MAX 1 модель //unsigned char t_MIN1; // температура MIN 1 модель /////////////////// /////////////////// температура 2 модель (ESC) unsigned char t2; // температура 2 модель unsigned char f_obduv2_ON; // флаг обдув 2 ON unsigned char t_MAX2; // температура MAX 2 модель unsigned char t_MIN2; // температура MIN 2 модель /////////////////// температура 3 модель (ESC) unsigned char t3; // температура 3 модель //unsigned char f_obduv3_ON; // флаг обдув 3 ON //unsigned char t_MAX3; // температура MAX 3 модель //unsigned char t_MIN3; // температура MIN 3 модель //////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////// модель unsigned char v; // вода модель unsigned char g; // аккум модель unsigned int servo_0; // серво модель 1,142v-(1,700v)-2,200v unsigned int servo_1; // серво модель 1,142v-(1,700v)-2,200v //////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// кораблик: unsigned char mini_kartinki_korablik_0[32]={ 0b11111111, 0b00000001, 0b00000001, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b11100001, 0b11100001, 0b11100001, 0b11100001, 0b11111001, 0b11111001, 0b11111001, 0b11111001, 0b11100001, 0b11100001, 0b11100001, 0b11100001, 0b11100001, 0b10000001, 0b10000001, 0b11111101, 0b10000001, 0b10000001, 0b10000001, 0b00000001, 0b00000001, 0b00000001, 0b00000001, 0b11111111 }; unsigned char mini_kartinki_korablik_1[32]={ 0b01111111, 0b01000000, 0b01000000, 0b01000000, 0b01000001, 0b01000011, 0b01000111, 0b01001111, 0b01001111, 0b01001111, 0b01001111, 0b01001111, 0b01001111, 0b01001111, 0b01001111, 0b01001111, 0b01001111, 0b01001111, 0b01001111, 0b01001111, 0b01001111, 0b01001111, 0b01001111, 0b01000111, 0b01000011, 0b01000001, 0b01000000, 0b01000000, 0b01000000, 0b01000000, 0b01000000, 0b01111111 }; //////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// индикатор: unsigned char antenka[9]={ 0b00000011, 0b00000101, 0b00001001, 0b00010001, 0b01111111, 0b00010001, 0b00001001, 0b00000101, 0b00000011 }; unsigned char S_metr[8]={ 0b01000000, 0b01100000, 0b01110000, 0b01111000, 0b01111100, 0b01111110, 0b01111111, 0b01111111 }; unsigned char pw_metr[3]={ 0b01110000, 0b01111000, 0b01111100 }; //////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// LED: unsigned char menu; // счёт меню LED 1 unsigned char menu2; // счёт меню LED 2 unsigned char flag_menu_1;// флаг меню + unsigned char flag_menu_2;// флаг меню - unsigned char h; // шкала unsigned char hp; // шкала аккум пульт unsigned char hg; // шкала аккум модель ////////////////////////////////////////////// Display ON/OFF: /* void LCD_ON_OFF(void) { PORTB.7=0; // SS OLED 128x64 PORTG &= 0b11110111; // SS OLED2 128x64 PORTB.5=0; // D/C. 0 – Function, 1 – data. OLED 128x64 if (LCD_ON) {SPDR=0xAF; while(!(SPSR & (1<<7)));} // Display ON - 0xAF else {SPDR=0xAE; while(!(SPSR & (1<<7)));}; // Display OFF - 0xAE PORTB.5=1; // D/C. 0 – Function, 1 – data. OLED 128x64 PORTG |= 0b00001000; // SS OLED2 128x64 PORTB.7=1; // SS OLED 128x64 } */ /////////////////////////////////////////////// курсор: // 128x64 = 1024 байт: цифра 5 + пробел 1 = 6 байт. 128/6=21 цифры/строка +2. void kursor(unsigned char bi) { PORTB.5=0; // D/C. 0 – Function, 1 – data. OLED 128x64 SPDR=0b10110000|bi; while(!(SPSR & (1<<7))); // Y - адрес 1011xxxx SPDR=0b00010000; while(!(SPSR & (1<<7))); // X - адрес 0001xxxx Hig //////////////////////////////////////////////////////////////////////// //SPDR=0b00000010; while(!(SPSR & (1<<7))); // X - адрес 0000xxxx Low (Начальное 2). // SH1106 SPDR=0b00000000; while(!(SPSR & (1<<7))); // X - адрес 0000xxxx Low (Начальное 0).// HDG12864F-1 // SSD1309 //////////////////////////////////////////////////////////////////////// PORTB.5=1; // D/C. 0 – Function, 1 – data. OLED 128x64 } /////////////////////////////////////////////// курсор1: // 128x64 = 1024 байт: цифра 5 + пробел 1 = 6 байт. 128/6=21 цифры/строка +2. void kursor1(unsigned char bi) { PORTB.5=0; // D/C. 0 – Function, 1 – data. OLED 128x64 SPDR=0b10110000|bi; while(!(SPSR & (1<<7))); // Y - адрес 1011xxxx SPDR=0b00010000; while(!(SPSR & (1<<7))); // X - адрес 0001xxxx Hig //////////////////////////////////////////////////////////////////////// //SPDR=0b00000010; while(!(SPSR & (1<<7))); // X - адрес 0000xxxx Low (Начальное 2). // SH1106 SPDR=0b00000000; while(!(SPSR & (1<<7))); // X - адрес 0000xxxx Low (Начальное 0).// HDG12864F-1 // SSD1309 //////////////////////////////////////////////////////////////////////// PORTB.5=1; // D/C. 0 – Function, 1 – data. OLED 128x64 } //////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////// ASCII: unsigned char ASCII[256][5]={ /////////////////////////////////////// 0...31 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. /////////////////////////////////////// 32...63 0x00, 0x00, 0x00, 0x00, 0x00, //пробел 0x00, 0x00, 0x5F, 0x00, 0x00, //! 0x00, 0x07, 0x00, 0x07, 0x00, //" 0x14, 0x7F, 0x14, 0x7F, 0x14, //# 0x24, 0x2A, 0x7F, 0x2A, 0x12, //$ 0x23, 0x13, 0x08, 0x64, 0x62, //% 0x36, 0x49, 0x55, 0x22, 0x50, //& 0x00, 0x05, 0x03, 0x00, 0x00, //' 0x00, 0x1C, 0x22, 0x41, 0x00, //( 0x00, 0x41, 0x22, 0x1C, 0x00, //) 0x08, 0x2A, 0x1C, 0x2A, 0x08, //* 0x08, 0x08, 0x3E, 0x08, 0x08, //+ 0x00, 0x50, 0x30, 0x00, 0x00, //, 0x08, 0x08, 0x08, 0x08, 0x08, //- 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x20, 0x10, 0x08, 0x04, 0x02, /// 0x3E, 0x51, 0x49, 0x45, 0x3E, //0 0x00, 0x42, 0x7F, 0x40, 0x00, //1 0x42, 0x61, 0x51, 0x49, 0x46, //2 0x21, 0x41, 0x45, 0x4B, 0x31, //3 0x18, 0x14, 0x12, 0x7F, 0x10, //4 0x27, 0x45, 0x45, 0x45, 0x39, //5 0x3C, 0x4A, 0x49, 0x49, 0x30, //6 0x01, 0x71, 0x09, 0x05, 0x03, //7 0x36, 0x49, 0x49, 0x49, 0x36, //8 0x06, 0x49, 0x49, 0x29, 0x1E, //9 0x00, 0x36, 0x36, 0x00, 0x00, //: 0x00, 0x56, 0x36, 0x00, 0x00, //; 0x00, 0x08, 0x14, 0x22, 0x41, //< 0x14, 0x14, 0x14, 0x14, 0x14, //= 0x41, 0x22, 0x14, 0x08, 0x00, //> 0x02, 0x01, 0x51, 0x09, 0x06, //? /////////////////////////////////////// 64...95 0x32, 0x49, 0x79, 0x41, 0x3E, //@ 0x7E, 0x11, 0x11, 0x11, 0x7E, //A 0x7F, 0x49, 0x49, 0x49, 0x36, //B 0x3E, 0x41, 0x41, 0x41, 0x22, //C 0x7F, 0x41, 0x41, 0x22, 0x1C, //D 0x7F, 0x49, 0x49, 0x49, 0x41, //E 0x7F, 0x09, 0x09, 0x01, 0x01, //F 0x3E, 0x41, 0x41, 0x51, 0x32, //G 0x7F, 0x08, 0x08, 0x08, 0x7F, //H 0x00, 0x41, 0x7F, 0x41, 0x00, //I 0x20, 0x40, 0x41, 0x3F, 0x01, //J 0x7F, 0x08, 0x14, 0x22, 0x41, //K 0x7F, 0x40, 0x40, 0x40, 0x40, //L 0x7F, 0x02, 0x04, 0x02, 0x7F, //M 0x7F, 0x04, 0x08, 0x10, 0x7F, //N 0x3E, 0x41, 0x41, 0x41, 0x3E, //O 0x7F, 0x09, 0x09, 0x09, 0x06, //P 0x3E, 0x41, 0x51, 0x21, 0x5E, //Q 0x7F, 0x09, 0x19, 0x29, 0x46, //R 0x46, 0x49, 0x49, 0x49, 0x31, //S 0x01, 0x01, 0x7F, 0x01, 0x01, //T 0x3F, 0x40, 0x40, 0x40, 0x3F, //U 0x1F, 0x20, 0x40, 0x20, 0x1F, //V 0x7F, 0x20, 0x18, 0x20, 0x7F, //W 0x63, 0x14, 0x08, 0x14, 0x63, //X 0x03, 0x04, 0x78, 0x04, 0x03, //Y 0x61, 0x51, 0x49, 0x45, 0x43, //Z 0x00, 0x00, 0x7F, 0x41, 0x41, //[ 0x02, 0x04, 0x08, 0x10, 0x20, //\ 0x41, 0x41, 0x7F, 0x00, 0x00, //] 0x04, 0x02, 0x01, 0x02, 0x04, //^ 0x40, 0x40, 0x40, 0x40, 0x40, //_ /////////////////////////////////////// 96...127 0x00, 0x01, 0x02, 0x04, 0x00, //` 0x20, 0x54, 0x54, 0x54, 0x78, //a 0x7F, 0x48, 0x44, 0x44, 0x38, //b 0x38, 0x44, 0x44, 0x44, 0x00, //c 0x38, 0x44, 0x44, 0x48, 0x7F, //d 0x38, 0x54, 0x54, 0x54, 0x18, //e 0x08, 0x7E, 0x09, 0x01, 0x02, //f 0x08, 0x14, 0x54, 0x54, 0x3C, //g 0x7F, 0x08, 0x04, 0x04, 0x78, //h 0x00, 0x44, 0x7D, 0x40, 0x00, //i 0x20, 0x40, 0x44, 0x3D, 0x00, //j 0x00, 0x7F, 0x10, 0x28, 0x44, //k 0x00, 0x41, 0x7F, 0x40, 0x00, //l 0x7C, 0x04, 0x18, 0x04, 0x78, //m 0x7C, 0x08, 0x04, 0x04, 0x78, //n 0x38, 0x44, 0x44, 0x44, 0x38, //o 0x7C, 0x14, 0x14, 0x14, 0x08, //p 0x08, 0x14, 0x14, 0x18, 0x7C, //q 0x7C, 0x08, 0x04, 0x04, 0x08, //r 0x48, 0x54, 0x54, 0x54, 0x20, //s 0x04, 0x3F, 0x44, 0x40, 0x20, //t 0x3C, 0x40, 0x40, 0x20, 0x7C, //u 0x1C, 0x20, 0x40, 0x20, 0x1C, //v 0x3C, 0x40, 0x30, 0x40, 0x3C, //w 0x44, 0x28, 0x10, 0x28, 0x44, //x 0x0C, 0x50, 0x50, 0x50, 0x3C, //y 0x44, 0x64, 0x54, 0x4C, 0x44, //z 0x00, 0x08, 0x36, 0x41, 0x00, //{ 0x00, 0x00, 0x7F, 0x00, 0x00, //| 0x00, 0x41, 0x36, 0x08, 0x00, //} 0x10, 0x08, 0x08, 0x10, 0x08, //~ 0x00, 0x60, 0x60, 0x00, 0x00, //. /////////////////////////////////////// 128...159 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. /////////////////////////////////////// 160...191 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. 0x00, 0x60, 0x60, 0x00, 0x00, //. /////////////////////////////////////// 192...223 0x7E, 0x11, 0x11, 0x11, 0x7E, //A 0x7F, 0x49, 0x49, 0x49, 0x30, //Б 0x7F, 0x49, 0x49, 0x49, 0x36, //B 0x7F, 0x01, 0x01, 0x01, 0x01, //Г 0x60, 0x3E, 0x21, 0x3F, 0x60, //Д 0x7F, 0x49, 0x49, 0x49, 0x41, //Е 0x67, 0x18, 0x7F, 0x18, 0x67, //Ж 0x22, 0x41, 0x49, 0x49, 0x36, //3 0x7F, 0x10, 0x08, 0x04, 0x7F, //И 0x7F, 0x10, 0x09, 0x04, 0x7F, //Й 0x7F, 0x08, 0x14, 0x22, 0x41, //K 0x40, 0x3E, 0x01, 0x01, 0x7E, //Л 0x7F, 0x02, 0x04, 0x02, 0x7F, //M 0x7F, 0x08, 0x08, 0x08, 0x7F, //H 0x3E, 0x41, 0x41, 0x41, 0x3E, //O 0x7F, 0x01, 0x01, 0x01, 0x7F, //П 0x7F, 0x09, 0x09, 0x09, 0x06, //P 0x3E, 0x41, 0x41, 0x41, 0x22, //C 0x01, 0x01, 0x7F, 0x01, 0x01, //T 0x27, 0x48, 0x48, 0x48, 0x3F, //У 0x1E, 0x21, 0x7F, 0x21, 0x1E, //Ф 0x63, 0x14, 0x08, 0x14, 0x63, //X 0x3F, 0x20, 0x20, 0x3F, 0x40, //Ц 0x1F, 0x10, 0x10, 0x10, 0x7F, //Ч 0x7F, 0x40, 0x7F, 0x40, 0x7F, //Ш 0x3F, 0x20, 0x3F, 0x20, 0x7F, //Щ 0x01, 0x7F, 0x44, 0x44, 0x38, //Ъ 0x7F, 0x44, 0x7C, 0x00, 0x7F, //Ы 0x7F, 0x44, 0x44, 0x44, 0x38, //Ь 0x22, 0x41, 0x49, 0x49, 0x3E, //Э 0x7F, 0x08, 0x7F, 0x41, 0x7F, //Ю 0x46, 0x29, 0x19, 0x09, 0x7F, //Я 0x20, 0x54, 0x54, 0x54, 0x78, //a 0x3C, 0x4A, 0x4A, 0x4B, 0x30, //б 0x7C, 0x54, 0x54, 0x58, 0x20, //в 0x7C, 0x04, 0x04, 0x04, 0x04, //г 0x60, 0x38, 0x24, 0x3C, 0x60, //д 0x38, 0x54, 0x54, 0x54, 0x18, //e 0x74, 0x08, 0x7C, 0x08, 0x74, //ж 0x28, 0x44, 0x54, 0x54, 0x28, //з 0x7C, 0x20, 0x10, 0x08, 0x7C, //и 0x7C, 0x21, 0x12, 0x09, 0x7C, //й 0x7C, 0x10, 0x10, 0x28, 0x44, //к 0x40, 0x78, 0x04, 0x04, 0x7C, //л 0x7C, 0x08, 0x10, 0x08, 0x7C, //м 0x7C, 0x10, 0x10, 0x10, 0x7C, //н 0x38, 0x44, 0x44, 0x44, 0x38, //o 0x7C, 0x04, 0x04, 0x04, 0x7C, //п 0x7C, 0x14, 0x14, 0x14, 0x08, //p 0x38, 0x44, 0x44, 0x44, 0x28, //c 0x04, 0x04, 0x7C, 0x04, 0x04, //т 0x0C, 0x50, 0x50, 0x50, 0x3C, //y 0x18, 0x24, 0x7C, 0x24, 0x18, //ф 0x44, 0x28, 0x10, 0x28, 0x44, //х 0x3C, 0x20, 0x20, 0x3C, 0x40, //ц 0x1C, 0x20, 0x20, 0x20, 0x7C, //ч 0x7C, 0x40, 0x7C, 0x40, 0x7C, //ш 0x3C, 0x20, 0x3C, 0x20, 0x7C, //щ 0x04, 0x7C, 0x48, 0x48, 0x30, //ъ 0x7C, 0x48, 0x48, 0x30, 0x7C, //ы 0x7C, 0x48, 0x48, 0x48, 0x30, //ь 0x28, 0x44, 0x54, 0x54, 0x38, //э 0x7C, 0x38, 0x44, 0x44, 0x38, //ю 0x48, 0x34, 0x14, 0x14, 0x7C //я }; /////////////////////////////////////////////// ASCII: void LED(unsigned char bi) { for (zn=0; zn<5; zn++) { SPDR=ASCII[bi][zn]; while(!(SPSR & (1<<7))); }; SPDR=0b00000000; while(!(SPSR & (1<<7))); // " " } ////////////////////////////////////////////////////// /////////////////////////////////////////////////// 0: void st_10(unsigned char bi) { z=0; while (bi>99) {z++; bi=bi-100;}; //LED(z+48); z=0; while (bi>9) {z++; bi=bi-10;}; //LED(z+48); z=0; while (bi) {z++; bi=bi-1;}; LED(z+48); } ////////////////////////////////////////////////// 00: void st_100(unsigned char bi) { z=0; while (bi>99) {z++; bi=bi-100;}; //LED(z+48); z=0; while (bi>9) {z++; bi=bi-10;}; LED(z+48); z=0; while (bi) {z++; bi=bi-1;}; LED(z+48); } ///////////////////////////////////////////////// 000: -0,6mc void st_1000(unsigned int bi) { z=0; while (bi>9999){z++; bi=bi-10000;}; //LED(z+48); z=0; while (bi>999) {z++; bi=bi-1000;}; //LED(z+48); z=0; while (bi>99) {z++; bi=bi-100;}; LED(z+48); z=0; while (bi>9) {z++; bi=bi-10;}; LED(z+48); z=0; while (bi) {z++; bi=bi-1;}; LED(z+48); } //////////////////////////////////////////////// 0000: -0,6mc void st_10000(unsigned int bi) { z=0; while (bi>9999){z++; bi=bi-10000;}; //LED(z+48); z=0; while (bi>999) {z++; bi=bi-1000;}; LED(z+48); z=0; while (bi>99) {z++; bi=bi-100;}; LED(z+48); z=0; while (bi>9) {z++; bi=bi-10;}; LED(z+48); z=0; while (bi) {z++; bi=bi-1;}; LED(z+48); } /////////////////////////////////////////////// 00000: -0,6mc void st_100000(unsigned int bi) { z=0; while (bi>9999){z++; bi=bi-10000;}; LED(z+48); z=0; while (bi>999) {z++; bi=bi-1000;}; LED(z+48); z=0; while (bi>99) {z++; bi=bi-100;}; LED(z+48); z=0; while (bi>9) {z++; bi=bi-10;}; LED(z+48); z=0; while (bi) {z++; bi=bi-1;}; LED(z+48); } //////////////////////////////////////////////// 000: -2mc //-akselerometr //-азимут void sta_10000(unsigned long bi) { z=0; while (bi>999999999){z++; bi=bi-1000000000;}; //LED(z+48); z=0; while (bi>99999999) {z++; bi=bi-100000000;}; //LED(z+48); z=0; while (bi>9999999) {z++; bi=bi-10000000;}; //LED(z+48); z=0; while (bi>999999) {z++; bi=bi-1000000;}; //LED(z+48); z=0; while (bi>99999) {z++; bi=bi-100000;}; //LED(z+48); z=0; while (bi>9999) {z++; bi=bi-10000;}; //LED(z+48); z=0; while (bi>999) {z++; bi=bi-1000;}; //LED(z+48); z=0; while (bi>99) {z++; bi=bi-100;}; LED(z+48); z=0; while (bi>9) {z++; bi=bi-10;}; LED(z+48); z=0; while (bi) {z++; bi=bi-1;}; LED(z+48); } ////////////////////////////////////////// 00.000000: -2mc //-GPS void st_100000000(unsigned long bi) { z=0; while (bi>999999999){z++; bi=bi-1000000000;}; //LED(z+48); z=0; while (bi>99999999) {z++; bi=bi-100000000;}; //LED(z+48); z=0; while (bi>9999999) {z++; bi=bi-10000000;}; LED(z+48); z=0; while (bi>999999) {z++; bi=bi-1000000;}; LED(z+48); LED('.'); // "." z=0; while (bi>99999) {z++; bi=bi-100000;}; LED(z+48); z=0; while (bi>9999) {z++; bi=bi-10000;}; LED(z+48); z=0; while (bi>999) {z++; bi=bi-1000;}; LED(z+48); z=0; while (bi>99) {z++; bi=bi-100;}; LED(z+48); z=0; while (bi>9) {z++; bi=bi-10;}; LED(z+48); z=0; while (bi) {z++; bi=bi-1;}; LED(z+48); } //////////////////////////////////////////////// f - пауза : void fpp(unsigned char bi) { for (x=0; x 99) bi = 99; //////////////////////////////////// z=0; while (bi>9) {z++; bi=bi-10;}; LED(z+48); SPDR=0b01000000; // "." while(!(SPSR & (1<<7))); SPDR=0b00000000; // " " while(!(SPSR & (1<<7))); z=0; while (bi>0) {z++; bi=bi-1;}; LED(z+48); } /////////////////////////////////////////////// аккум модель: void ak_model(unsigned char bi) {// опорное 5V; + 7...13,2 V; Делитель 1/5,12. (1/2,56). //////////////////////////////////// z=0; while (bi>99) {z++; bi=bi-100;}; LED(z+48); z=0; while (bi>9) {z++; bi=bi-10;}; LED(z+48); SPDR=0b01000000; // "." while(!(SPSR & (1<<7))); SPDR=0b00000000; // " " while(!(SPSR & (1<<7))); z=0; while (bi>0) {z++; bi=bi-1;}; LED(z+48); } ////////////////////////////////////////////// шкала 0 аккум: void skala_0_ak(unsigned char bi) { SPDR=0b11111110; // | while(!(SPSR & (1<<7))); for (x=0;x<31;x++) { if (x<(bi/2)) h=0b11111110; // |--- else h=0b10000010; SPDR=h; while(!(SPSR & (1<<7))); }; SPDR=0b11111110; // |---| while(!(SPSR & (1<<7))); SPDR=0b00111000; // |---|| while(!(SPSR & (1<<7))); } /////////////////////////////////////////// шкала ползунок: --||-- void skala_ADC(unsigned char bi) { bi /= 4; for (x=0;x<64;x++) { if (x==(bi)) { SPDR=0b01111111; while(!(SPSR & (1<<7))); SPDR=0b01111111; while(!(SPSR & (1<<7))); } else { SPDR=0b00001000; while(!(SPSR & (1<<7))); }; }; } //////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// буфер LED2: unsigned char bufer_LED[128][8]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; //////////////////////////////////////////////////////////////////////////////////////////// unsigned char stroka_y_8; // счёт Y_8 unsigned char stroka_y_1; // счёт Y_1 unsigned char st_x; // счёт X unsigned char st_y; // счёт Y unsigned char bufer_x; // буфер X unsigned char bufer_y; // буфер Y ///////////////////////////////////////////////////////// очистка буфер LED: -7mc void CLS_LED(void) { ///////////////////////////////// строка Y: for (st_y = 0; st_y < 4; st_y++) { //////////////////////////////// строка X: for (st_x = 0; st_x < 128; st_x++) { bufer_LED[st_x][st_y]=0x00; // буфер 0x00 }; }; } //////////////////////////////////////////////////////// очистка буфер2 LED: -7mc void CLS_LED2(void) { ///////////////////////////////// строка Y: for (st_y = 4; st_y < 8; st_y++) { //////////////////////////////// строка X: for (st_x = 0; st_x < 128; st_x++) { bufer_LED[st_x][st_y]=0x00; // буфер 0x00 }; }; } //////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// автопилот GPS: //unsigned char flag_GPS_avtopilot; // флаг GPS автопилот unsigned long kurs; // курс unsigned long katet_x; // катет_x unsigned long katet_y; // катет_y /////////////////////////////////////// точки GPS > EEPROM unsigned long N_1; // точка 1 unsigned long E_1; // точка 1 //////////////////////////////////////////////////////////////////// компас LED unsigned long azimut; // азимут //////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// GPS: unsigned char flag_M8N_m8n; // флаг M8N (0)/m8n (1) //////////////////////////////////////////////////////////////////////////// //unsigned char st_bufer_GPS; // счёт буфер GPS -начальное 0 unsigned char bufer_GPS[80]={ // протокол NMEA 0183 -маскимальная длина 82 //M8N (0) //"$GNGGA,181547.000,4911.6021,N,02650.2441,E,1,10,1.0,377.6,M,0.0,M,,*73........." //-70 //m8n (1) "$GNGGA,185759.00,4911.60694,N,02650.23747,E,1,05,8.73,339.8,M,31.6,M,,*4D......"//-73 }; ///////////////////////////////////////////////////// GPS_radio //unsigned char flag_GPS_radio; // флаг GPS radio полный //////////////////////////////// GPS crc^ - $...* unsigned char crc_GPS; // crc GPS unsigned char bcrc_GPS; // буфер crc GPS //////////////////////////////// GPS полный unsigned char flag3_GPS; // флаг3 GPS полный unsigned char flag4_GPS; // флаг4 GPS разбор //////////////////////////////////////////////////////////////// USART0 RX -GPS: unsigned char filtr_GPS[]={"$GNGGA"}; // фильтр GPS "$GNGGA" unsigned char st_filtr_GPS; // счёт фильтр GPS unsigned char st_GPS = 6; // счёт GPS unsigned char flag_GPS; // флаг GPS interrupt [USART0_RXC] void usart0_rx_isr(void) // -0,000.018c { //PORTD.0=1; // контроль //////////////////////// буфер GPS if (flag_GPS) { bufer_GPS[st_GPS] = UDR0; // буфер GPS st_GPS++; // счёт GPS if (st_GPS > 72) { // протокол NMEA 0183 -маскимальная длина 82 flag_GPS = 0; // флаг GPS //flag_GPS_radio = 1; // флаг GPS radio полный flag3_GPS = 1; // флаг3 GPS полный st_GPS = 6; // счёт GPS UCSR0B=0x00; // USART0 //PORTD.1=0; // контроль }; } ///////////////////////// фильтр GPS else { bufer_GPS[st_filtr_GPS] = UDR0; if (bufer_GPS[st_filtr_GPS] == filtr_GPS[st_filtr_GPS]) { st_filtr_GPS++; // счёт фильтр GPS if (st_filtr_GPS == 6) { st_filtr_GPS = 0; flag_GPS = 1; // флаг GPS //PORTD.1=1; // контроль }; } else { st_filtr_GPS = 0; // счёт фильтр GPS }; }; ///////////////////////// //PORTD.0=0; // контроль } ///////////////////////////////////////////////////////////////////////////// GPS: /////////////////////////////////////// старт LED GPS: unsigned char flag_start_LCD; // старт GPS /////////////////////////////////////// часы GPS unsigned char hour; // час 00 unsigned char min; // минуты 00 unsigned char sec; // секунды 00 /////////////////////////////////////// спутники GPS unsigned char sputnik_GPS;// спутник /////////////////////////////////////// GPS_N -широта GPS unsigned long bufer_N; // градусы 00 unsigned long N_min; // минуты 00.0000 unsigned long b_N; // буфер LED /////////////////////////////////////// GPS_E -долгота GPS unsigned long bufer_E; // градусы 00 unsigned long E_min; // минуты 00.0000 unsigned long b_E; // буфер LED /////////////////////////////////////// точка GPS unsigned long start_N; // старт unsigned long start_E; // старт unsigned char flag_EN; // флаг старт >0< unsigned int del_EN = 1; // делитель точка /////////////////////////////////////// LED GPS unsigned char cikl_GPS; // счёт цикл GPS //////////////////////////////////////////////////// точкка GPS > буфер LED: -11mc void tochka_GPS(unsigned char x, unsigned char y) { bufer_x = x; //буфер X -128; bufer_y = (64-y); //буфер Y -64; ///////////////////////////////// строка Y_8, Y_1: stroka_y_8 = 0; while (bufer_y > 8) {stroka_y_8++; bufer_y -= 8;}; stroka_y_1 = 0; while (bufer_y) {stroka_y_1++; bufer_y -= 1;}; if (stroka_y_1 == 8) {stroka_y_1 = 0; stroka_y_8++;}; bufer_y = (1 << stroka_y_1); ///////////////////////////////// строка Y: for (st_y = 0; st_y < 4; st_y++) { //////////////////////////////// строка X: for (st_x = 0; st_x < 128; st_x++) { ///////////////////////////////////////////// точка > буфер if ((st_x == bufer_x)&&(st_y == stroka_y_8)) {bufer_LED[st_x][st_y] |= bufer_y;}; }; }; } /////////////////////////////////////////////////// точкка GPS 2 > буфер LED: -11mc void tochka_GPS_2(unsigned char x, unsigned char y) { bufer_x= x; //буфер X -128; bufer_y = (64-y); //буфер Y -64; ///////////////////////////////// строка Y_8, Y_1: stroka_y_8 = 0; while (bufer_y > 8) {stroka_y_8++; bufer_y -= 8;}; stroka_y_1 = 0; while (bufer_y) {stroka_y_1++; bufer_y -= 1;}; if (stroka_y_1 == 8) {stroka_y_1 = 0; stroka_y_8++;}; bufer_y = (1 << stroka_y_1); ///////////////////////////////// строка Y: for (st_y = 4; st_y < 8; st_y++) { //////////////////////////////// строка X: for (st_x = 0; st_x < 128; st_x++) { ///////////////////////////////////////////// точка > буфер if ((st_x == bufer_x)&&(st_y == stroka_y_8)) {bufer_LED[st_x][st_y] |= bufer_y;}; }; }; } //////////////////////////////////////////////////// развёртка GPS > буфер LED: -8mc void razvertka_GPS(void) { kursor1(0); st_100(hour); LED(':'); // час 00 st_100(min); LED(':'); // минуты 00 st_100(sec); // секунды 00 ////////////////////////// fpp(4); sta_10000(azimut/100); // азимут LED('>'); sta_10000(kurs); // курс fpp(4); //////////////////////////// st_1000(del_EN); // делитель 000 st_100(sputnik_GPS); // спутники ///////////////////////////////// строка Y: for (st_y = 1; st_y < 4; st_y++) { kursor1(st_y); //////////////////////////////// строка X: for (st_x = 0; st_x < 128; st_x++) { SPDR=(bufer_LED[st_x][st_y]); while(!(SPSR & (1<<7))); // буфер LED }; }; } /////////////////////////////////////////////////// развёртка GPS 2 > буфер LED: -8mc void razvertka_GPS_2(void) { ////////////////////////////////// строка Y: for (st_y = 4; st_y < 7; st_y++) { kursor1(st_y); ///////////////////////////////// строка X: for (st_x = 0; st_x < 128; st_x++) { SPDR=(bufer_LED[st_x][st_y]); while(!(SPSR & (1<<7))); // буфер LED }; }; ////////////////////////////////// строка Y: kursor1(7); ////////////////////////////////// Data X,Y: st_100000000(bufer_N); fpp(2); LED('N'); fpp(4); st_100000000(bufer_E); fpp(2); LED('E'); } //////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// fcrc: void fcrc(void) { crc ^= bcrc; for( a = 0; a < 16; a++ ){ if (crc & 0x8000) crc = ( crc << 1 ) ^ 0x1021; // CRC-16-CCITT // 0x1021 else crc = crc << 1; }; } //////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// EEPROM_TX_RX: void EEPROM_TX_RX(void) { PORTB.7=0; // SS OLED 128x64 PORTB.5=0; // D/C. 0 – Function, 1 – data. OLED 128x64 // > ЗАПИСЬ EEPROM kursor(0); fpp(128);// kursor(1); fpp(128);// kursor(2); fpp(128);// kursor(3); // fpp(24); LED('З'); LED('А'); LED('П'); LED('И'); LED('С'); LED('Ь'); fpp(8); LED('E'); LED('E'); LED('P'); LED('R'); LED('O'); LED('M'); fpp(24); kursor(4); fpp(128);// kursor(5); fpp(128);// kursor(6); fpp(128);// kursor(7); fpp(128);// PORTB.5=1; // D/C. 0 – Function, 1 – data. OLED 128x64 PORTB.7=1; // SS OLED 128x64 } //////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// EEPROM: unsigned char flag_TX_EEPROM; // флаг запись EEPROM //////////////////////////////////////////////////////////////////////////// EEPROM_TX: void EEPROM_TX(void) { ////////////////////////// пульт > буфер: bufer[0]=IP; // IP модель bufer[1]=ch; // частота nRF24L01: 2.400GHz...2.525GHz. (0)...(125). bufer[2]=pw; // мощность TX -11 10 01 00 -начальное 3 bufer[3]=f_buzer; // флаг бузер ///////////////////////////// bufer[4]=f_obduv_ON; // флаг обдув 0 ON (MOTOR) bufer[5]=t_MAX; // температура MAX 0 модель (MOTOR) bufer[6]=t_MIN; // температура MIN 0 модель (MOTOR) bufer[7]=0; // bufer[8]=0; // bufer[9]=0; // bufer[10]=f_obduv2_ON; // флаг обдув 2 ON (ESC) bufer[11]=t_MAX2; // температура MAX 2 модель (ESC) bufer[12]=t_MIN2; // температура MIN 2 модель (ESC) bufer[13]=0; // bufer[14]=0; // bufer[15]=0; // ///////////////////////////// bufer[16]=kor0; // bufer[17]=kor1; // bufer[18]=kor2; // bufer[19]=kor3; // bufer[20]=kor4; // bufer[21]=kor5; // bufer[22]=kor6; // bufer[23]=kor7; // ///////////////////////////// bufer[24]=MOTOR_L_MAX; // bufer[25]=MOTOR_L_MIN; // bufer[26]=MOTOR_R_MAX; // bufer[27]=MOTOR_R_MIN; // ///////////////////////////// bufer[28]=0; // bufer[29]=0; // bufer[30]=0; // bufer[31]=0; // ////////////////////////////// crc буфер: crc=0xFFFF; for (b=0;b<32;b=b+2) { bcrc=bufer[b]; bcrc=(bcrc<<8)|bufer[b+1]; fcrc(); }; bufer[32]=(crc>>8); // crc bufer[33]=crc; // crc /////////////////////////////// буфер > EEPROM: for (x=0;x<34;x++) { EEAR = x; EEDR = bufer[x]; EECR |= 0b00000100; EECR |= 0b00000010; while(EECR & 0b00000010); }; /////////////////////////////// верификация: EEPROM == буфер: for (x=0;x<34;x++) { EEAR = x; EECR |= 0b00000001; x1=EEDR; if ( bufer[x] != x1 ) {menu = 255;}; // верификация: // bufer[x] != x1 > ошибка EEPROM }; } //////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// EEPROM_RX: void EEPROM_RX(void) { ////////////////////////// EEPROM > буфер: for (x=0;x<34;x++) { EEAR = x; EECR |= 0b00000001; bufer[x]=EEDR; }; ////////////////////////// crc буфер: crc=0xFFFF; for (b=0;b<34;b=b+2) { bcrc=bufer[b]; bcrc=(bcrc<<8)|bufer[b+1]; fcrc(); }; /////////////////////////// crc: if (crc==0) { IP=bufer[0]; // IP модель ch=bufer[1]; // частота nRF24L01: 2.400GHz...2.525GHz. (0)...(125). //pw =bufer[2]; // мощность TX -11 10 01 00 -начальное 3 f_buzer=bufer[3]; // флаг бузер ///////////////////////////// f_obduv_ON=bufer[4]; // флаг обдув 0 ON (MOTOR) t_MAX=bufer[5]; // температура MAX 0 модель (MOTOR) t_MIN=bufer[6]; // температура MIN 0 модель (MOTOR) //=bufer[7]; // //=bufer[8]; // //=bufer[9]; // f_obduv2_ON=bufer[10]; // флаг обдув 2 ON (ESC) t_MAX2=bufer[11]; // температура MAX 2 модель (ESC) t_MIN2=bufer[12]; // температура MIN 2 модель (ESC) //=bufer[13]; // //=bufer[14]; // //=bufer[15]; // ///////////////////////////// kor0=bufer[16]; // kor1=bufer[17]; // kor2=bufer[18]; // kor3=bufer[19]; // kor4=bufer[20]; // kor5=bufer[21]; // kor6=bufer[22]; // kor7=bufer[23]; // ///////////////////////////// MOTOR_L_MAX=bufer[24]; // MOTOR_L_MIN=bufer[25]; // MOTOR_R_MAX=bufer[26]; // MOTOR_R_MIN=bufer[27]; // ///////////////////////////// ///////////////////////////// //=bufer[28]; // //=bufer[29]; // //=bufer[30]; // //=bufer[31]; // } ////////////////////////// ошибка crc: else { menu = 255; // > ошибка EEPROM }; } //////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// pult_TX_UART1: unsigned char pult_TX_UART1[84]={ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0...5 синхро 0x00, // 6 menu 0x00, // 7 menu2 0x00, // 8 s // S-метр 0x00, // 9 p // аккум пульт 0x00, // 10 g // аккум модель //////////////////////// 0x00, // 11 синхро //////////////////////// 0x00, // 12 ch // частота 0x00, // 13 pw // мощность 0x00, // 14 IP // модель 0x00, // 15 // kontrol_TX_b 0x00, // 16 // kontrol_TX_b //////////////////////// 0x00, // 17 синхро //////////////////////// 0x00, // 18 // kontrol_RX_b 0x00, // 19 // kontrol_RX_b 0x00, // 20 // kontrol_CRC_b 0x00, // 21 // kontrol_CRC_b 0x00, // 22 // флаг f_buzer //////////////////////// 0x00, // 23 синхро //////////////////////// 0x00, // 24 t; // температура 0 модель 0x00, // 25 t_MAX; // температура MAX 0 модель 0x00, // 26 t_MIN; // температура MIN 0 модель 0x00, // 27 // 0x00, // 28 f_obduv_ON; // флаг обдув 0 ON //////////////////////// 0x00, // 29 синхро //////////////////////// 0x00, // 30 t1; // температура 1 модель 0x00, // 31 // 0x00, // 32 // 0x00, // 33 // 0x00, // 34 // //////////////////////// 0x00, // 35 синхро //////////////////////// 0x00, // 36 t2; // температура 2 модель 0x00, // 37 t_MAX2; // температура MAX 2 модель 0x00, // 38 t_MIN2; // температура MIN 2 модель 0x00, // 39 // 0x00, // 40 f_obduv2_ON; // флаг обдув 2 ON //////////////////////// 0x00, // 41 синхро //////////////////////// 0x00, // 42 t3; // температура 3 модель 0x00, // 43 // 0x00, // 44 // 0x00, // 45 // 0x00, // 46 // //////////////////////// 0x00, // 47 синхро //////////////////////// 0x00, // 48 obduv; // обдув 0x00, // 49 0x00, // 50 0x00, // 51 0x00, // 52 //////////////////////// 0x00, // 53 синхро //////////////////////// 0x00, // 54 pompa // помпа 0x00, // 55 0x00, // 56 0x00, // 57 0x00, // 58 //////////////////////// 0x00, // 59 синхро //////////////////////// 0x00, // 60 kor0 0x00, // 61 kor1 0x00, // 62 kor2 0x00, // 63 kor3 0x00, // 64 //////////////////////// 0x00, // 65 синхро //////////////////////// 0x00, // 66 kor4 0x00, // 67 kor5 0x00, // 68 kor6 0x00, // 69 kor7 0x00, // 70 //////////////////////// 0x00, // 71 синхро //////////////////////// 0x00, // 72 // MOTOR_L_MAX 0x00, // 73 // MOTOR_L_MIN 0x00, // 74 // MOTOR_R_MAX 0x00, // 75 // MOTOR_R_MIN 0x00, // 76 //////////////////////// 0x00, // 77 синхро //////////////////////// 0x00, // 78 0x00, // 79 0x00, // 80 0x00, // 81 0x00, // 82 //////////////////////// 0x00 // 83 синхро }; unsigned char st_pult_TX_UART1; // счёт pult_TX_UART1 -начальное 0 interrupt [USART1_TXC] void usart1_tx_isr(void) { PORTD.0=1; // контроль st_pult_TX_UART1++; if (st_pult_TX_UART1 < 84) {UDR1 = pult_TX_UART1[st_pult_TX_UART1];}; // буфер if (st_pult_TX_UART1 == 84) {UDR1 = 0x0D;}; //0x0D // строка \r\n if (st_pult_TX_UART1 == 85) {UDR1 = 0x0A;}; //0x0A // строка \r\n if (st_pult_TX_UART1 == 86) { st_pult_TX_UART1 = 0; UCSR1B=0x00; // USART0 //UCSR1B=0x90; // RX 1 PORTD.0=0; // контроль }; //PORTD.0=0; // контроль } //////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////// void main(void) { /////////////////////////////////////////////////////////////////// инициализация: ////////////////////////////////////////////// индикатор: //DDRD.4=1; // вода модель /температура 40-50-60-70 /защита аккумов / EEPROM //PORTD.4=1; // вода модель /температура 40-50-60-70 /защита аккумов / EEPROM ////////////////////////////////////////////// бузер: DDRD.7=1; // бузер -начальное бузер 0xFF; / EEPROM PORTD.7=1; // бузер вкл / EEPROM ////////////////////////////////////////////// чтение EEPROM: -4,5mc delay_ms(500); // стаб EEPROM EEPROM_RX(); // RX EEPROM ////////////////////////////////////////////// SPI: DDRB.1=1; // SCK PORTB.1=0; // SCK DDRB.3=0; // MISO PORTB.3=0; // MISO DDRB.2=1; // MOSI PORTB.2=0; // MOSI DDRB.0=1; // SS (CSN) nRF24L01+ PORTB.0=1; // SS (CSN +) nRF24L01+ ////////////////////////////////////////////// nRF24L01+: DDRB.4=1; // CE nRF24L01+ PORTB.4=0; // CE nRF24L01+ ////////////////////////////////////////////// OLED 128x64: - SH1106 DDRB.6=1; // RESET OLED 128x64 / OLED2 128x64 PORTB.6=1; // RESET OLED 128x64 / OLED2 128x64 DDRB.5=1; // D/C 1 – data, 0 – Function. OLED 128x64 PORTB.5=1; // D/C 1 – data, 0 – Function. OLED 128x64 DDRB.7=1; // SS (SE) OLED 128x64 PORTB.7=1; // SS (SE +) OLED 128x64 ////////////////////////////////////////////// OLED2 128x64: - SH1106 DDRG=0x1F; // LED2 PORTG |= 0b00001000; // SS (SE+) OLED2 128x64 ////////////////////////////////////////////// кнопки: DDRC.0=0; // меню вниз PORTC.0=1; // меню вниз DDRC.1=0; // меню + PORTC.1=1; // меню + DDRC.2=0; // меню - PORTC.2=1; // меню - DDRC.3=0; // меню вверх PORTC.3=1; // меню вверх DDRC.4=0; // Нагрузка PORTC.4=1; // Нагрузка DDRC.5=0; // Нагрузка PORTC.5=1; // Нагрузка DDRC.6=0; // Нагрузка PORTC.6=1; // Нагрузка DDRC.7=0; // Нагрузка PORTC.7=1; // Нагрузка ////////////////////////////////////////////// кнопки1: DDRD.4=0; // Нагрузка PORTD.4=1; // Нагрузка DDRD.5=0; // Нагрузка PORTD.5=1; // Нагрузка DDRD.6=0; // Нагрузка PORTD.6=1; // Нагрузка ////////////////////////////////////////////// контроль: DDRD.0=1; // контроль PORTD.0=0; // контроль DDRD.1=1; // контроль 2 PORTD.1=0; // контроль 2 //////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////// таймер № 0: -кнопки TCCR0=0x02; // 8.000.000/8=1.000.000/256= цикл 3.906 ////////////////////////////////////////////// таймер № 1: -цикл ICR1=31250; // 1.000.000/31250/32 Hz = 0,031.25c. TCCR1A=0x02; // быстрая ШИМ // выкл.PB1(OC1A); выкл.PB2(OC1B) TCCR1B=0x1A; // быстрая ШИМ // 8.000.000/8=1.000.000 Hz ////////////////////////////////////////////// Маска прерывание таймер № 0,1,2,3: TIMSK=0x01; // Таймер 0 // переполнение TOV0 -кнопки ////////////////////////////////////////////// АЦП: ADCSRA=0x85; // ADC 8 МГц/32=250.000 Hz ////////////////////////////////////////////// SPI SPCR=0x50; // 8 МГц/4 = 2.000.000 Hz -режим мастер ////////////////////////////////////////////// UART0 - RX 0 GPS DDRE.0=0; // UART0 - RX PORTE.0=1; // UART0 - RX // USART1 initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART1 Receiver: On // USART1 Transmitter: Off // USART1 Mode: Asynchronous // USART1 Baud Rate: 9600 UCSR1A=0x00; UCSR1B=0x90; // RX UCSR1C=0x06; UBRR1H=0x00; UBRR1L=0x33; ////////////////////////////////////////////// UART1 - TX 1 DDRD.3=0; // UART1 - TX PORTD.3=1; // UART1 - TX // USART1 initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART1 Receiver: Off // USART1 Transmitter: On // USART1 Mode: Asynchronous // USART1 Baud Rate: 56000 UCSR1A=0x00; UCSR1B=0x48; // TX UCSR1C=0x06; UBRR1H=0x00; UBRR1L=0x08; ////////////////////////////////////////////// Ст таймер: //WDTCR=0x1F; // вкл Ст таймер. //WDTCR=0x0F; // переполнения 2,0c. ////////////////////////////////////////////// Global interrupts: #asm("sei") //#asm("cli") ///////////////////////////////////////// инициализация OLED 128x64 -SH1106 // SSD1309: // 128x64 = 1024 байт: цифра 5 + пробел 1 = 6 байт. 128/6=21 цифры/строка +2. /////////////////////////////////////////////////////////////////// RESET: //delay_ms(100); // Power on reset 100ms PORTB.6=0; // RESET > 100 nс или более delay_ms(1); // PORTB.6=1; // RESET > 100 mс delay_ms(1); // ///////////////////////////////////////////////// Режим OLED 128x64 -SH1106 // SSD1309: PORTB.7=0; // SS OLED 128x64 PORTG &= 0b11110111; // SS OLED2 128x64 PORTB.5=0; // D/C. 0 – Function, 1 – data. OLED 128x64 SPDR=0xA8; while(!(SPSR & (1<<7))); // сколько строк будет использовано. SPDR=0x3F; while(!(SPSR & (1<<7))); // (128x64) 64 - строки. SPDR=0x81; while(!(SPSR & (1<<7))); // контрастность. SPDR=250; while(!(SPSR & (1<<7))); // контрастность 0...255. SPDR=0xA1; while(!(SPSR & (1<<7))); // развёртка слева направо (>>). /////////////////////////////////////////////////////////////////////////////// //SPDR=0xC8; while(!(SPSR & (1<<7))); // развертка сверху вниз. // SH1106 // SSD1309 SPDR=0xC0; while(!(SPSR & (1<<7)));// развертка снизу вверх. // HDG12864F-1 /////////////////////////////////////////////////////////////////////////////// SPDR=0xDA; while(!(SPSR & (1<<7))); // развертка. SPDR=0x12; while(!(SPSR & (1<<7))); // прогрессивная. SPDR=0xD3; while(!(SPSR & (1<<7))); // смещение. SPDR=0x00; while(!(SPSR & (1<<7))); // смещение 0. SPDR=0x40; while(!(SPSR & (1<<7))); // 01xx xxxx - начальное строка 0. SPDR=0xAF; while(!(SPSR & (1<<7))); // Display 0xAF - ON. //SPDR=0xAE; while(!(SPSR & (1<<7))); // Display 0xAE - OFF. PORTB.5=1; // D/C. 0 – Function, 1 – data. OLED 128x64 PORTG |= 0b00001000; // SS OLED2 128x64 PORTB.7=1; // SS OLED 128x64 ///////////////////////////////////////////////////////////// инициализация nRF24L01+ : PORTB.0=0; // SS SPDR=0b00100001; while(!(SPSR & (1<<7))); // 0x01 EN_AA: (Enhanced ShockBurst ™) -выкл. SPDR=0b00000000; while(!(SPSR & (1<<7))); // EN_AA = 0x00. PORTB.0=1; // SS PORTB.0=0; // SS SPDR=0b00100100; while(!(SPSR & (1<<7))); // 0x04 SETUP_RETR: (Enhanced ShockBurst ™) -выкл. SPDR=0b00000000; while(!(SPSR & (1<<7))); // SETUP_RETR = 0x00. PORTB.0=1; // SS PORTB.0=0; // SS SPDR=0b00110000; while(!(SPSR & (1<<7))); // 0x10 TX_ADDR_P0: Адрес TX SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x........C7 SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x......C7.. SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x....C7.... SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x..C7...... SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0xC7........ PORTB.0=1; // SS PORTB.0=0; // SS SPDR=0b00101010; while(!(SPSR & (1<<7))); // 0x0A RX_ADDR_P0: Адрес RX SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x........C7 SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x......C7.. SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x....C7.... SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x..C7...... SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0xC7........ PORTB.0=1; // SS PORTB.0=0; // SS SPDR=0b00110001; while(!(SPSR & (1<<7))); // 0x11 RX_PW_P0: размер FIFO_RX SPDR=32; while(!(SPSR & (1<<7))); // 32. PORTB.0=1; // SS ////////////////////////////////////////////////////////////////// инициализация бузер: if (f_buzer) DDRD.7=1; // -начальное 0xFF. else DDRD.7=0; // бузер / EEPROM PORTD.7=0; // бузер / EEPROM ///////////////////////////////////////////////////////////////////// инициализация END //PORTD.4=0; // вода модель /температура 40-50-60-70 /защита аккумов / EEPROM // индикатор. //////////////////////////////////////////////////////////////////////////////////////////// _1: PORTD.1=1; // контроль //#asm("wdr") // ст таймер 2,0 c //////////////////////////////////////////////////////////////////////////////////////////// таймер: if ((n & 0b00001111)==15) taimer = ~taimer; // 0,5s /////////////////////////////////////////////// 32 пак/c. цикл 0,031.25c. while (!(TIFR & 0b00100000)); // флаг ICF1 - верхний предел счета ICR1. TIFR|=0b00100000; // сброс флага ICF1 PORTD.1=0; // контроль //////////////////////////////////////////////////////////////////////////////////////////// связь: //контроль: //c=0; //tok=u; t=u-30; g=u+20; g2=u; v |= 0b00000010; /////////////////////////////////////////////// контроль связи: (нет ответа > 1c): if ( (c==0) && (fc==1) ) { fc=0; // сброс флаг цикл PORTD.7=0; // бузер }; /////////////////////////////////////////////// нет связи: c++; if (c > 31) { // > 1c // 32 пак/c. цикл 0,031.25c. c=31; // сброс цикл fc=1; // флаг цикл chb=0; // сброс частота буфер > начальное - 2.400 GHz. -вызывной канал v=0; // сброс вода модель g=0; // сброс аккум модель t=0; // сброс температура 0 модель t1=0; // сброс температура 1 модель t2=0; // сброс температура 2 модель t3=0; // сброс температура 3 модель obduv=0; // сброс обдув pompa=0; // сброс помпа //PORTD.4=0; // индикатор }; /////////////////////////////////////////////// бузер нет связи: if (fc) {zvuk_c++;}; // zvuk_c - счёт звук if (zvuk_c==1) {PORTD.7=1;}; // бузер - вкл. 0c if (zvuk_c==8) {PORTD.7=0;}; // бузер - выкл. 0,25c if (zvuk_c==32) {zvuk_c=0;}; // сброс /////////////////////////////////////////////////////////////////////////////////////// индикатор: /* /////////////////////////////////////////////// индикатор температура модель t: in_t++; // счёт if (in_t==32) {in_t=0;}; // сброс if ( (in_t==0) && (t>39) ) {PORTD.4=1;}; // индикатор t if ( (in_t==8) && (t<50) ) {PORTD.4=0;}; // индикатор t if ( (in_t==16) && (t<60) ) {PORTD.4=0;}; // индикатор t if ( (in_t==24) && (t<70) ) {PORTD.4=0;}; // индикатор t */ /////////////////////////////////////////////// защита аккумов от переразряда: ////////////////////////////// аккум 1 /* if (c==1) { if ( (g < zasita_1) && (f_zasita_1) ) { ff_zasita_1 = 1; PORTD.7=1; // бузер - вкл. PORTD.4=1; // вкл. индикатор - переразряд }; ////////////// if ( (g > zasita_1) && (ff_zasita_1) ) { ff_zasita_1 = 0; PORTD.7=0; // бузер - выкл. PORTD.4=0; // выкл. индикатор - переразряд }; ////////////////////////////// аккум 2 if ( (g2 < zasita_2) && (f_zasita_2) ) { ff_zasita_2 = 1; PORTD.7=1; // бузер - вкл. PORTD.4=1; // вкл. индикатор - переразряд }; //////////////// if ( (g2 > zasita_2) && (ff_zasita_2) ) { ff_zasita_2 = 0; PORTD.7=0; // бузер - выкл. PORTD.4=0; // выкл. индикатор - переразряд }; }; */ //////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////// индикатор вода модель v: if (c==1) { // связь if (v & 0b00000001) {PORTD.7=1;} // бузер вода модель else {PORTD.7=0;}; // бузер вода модель }; //////////////////////////////////////////////////////////////////////////////////////////// запись EEPROM: if (flag_TX_EEPROM) { // EEPROM TCCR1B=0x00; // стоп цикл // быстрая ШИМ // 8.000.000/8=1.000.000 Hz EEPROM_TX_RX(); // EEPROM_TX_RX // индикатор EEPROM EEPROM_TX(); // TX EEPROM // запись EEPROM TCCR1B=0x1A; // пуск цикл // быстрая ШИМ // 8.000.000/8=1.000.000 Hz flag_TX_EEPROM = 0; // EEPROM }; //////////////////////////////////////////////////////////////////////////////////////////// // пульт //////////////////////////////////////////////////////////////////////////////////////////// кнопки: ///////////////////////////////////// 0- меню вниз if ( (flag_k0) && (k0==0) ) { // цикл 31,25 ms k0++; // счёт PORTD.7=1; // бузер menu++; // меню ++ }; ///////////////////////////////////// if ( (8>k0) && (k0) ) {k0++;}; // счёт if (k0 == 8) { PORTD.7=0; // бузер k0++; }; ///////////////////////////////////// if ( (PINC.0==1) && (k0 == 9) ) {k0++;}; if (k0 > 9) {k0++;}; // счёт if (k0 == 17) { k0=0; // сброс flag_k0=0; // сброс }; ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////// 1- Выбор меню + if ( (flag_k1) && (k1==0) ) { // цикл 31,25 ms k1++; // счёт if (menu) flag_menu_1 = 1; // флаг выбор меню + PORTD.7=1; // бузер }; ///////////////////////////////////// if ( (8>k1) && (k1) ) {k1++;}; // счёт if (k1 == 8) { PORTD.7=0; // бузер k1++; }; ///////////////////////////////////// if ( (PINC.1==1) && (k1 == 9) ) {k1++;}; if (k1 > 9) {k1++;}; // счёт if (k1 == 17) { k1=0; // сброс flag_k1=0; // сброс }; ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////// 2- Выбор меню - if ( (flag_k2) && (k2==0) ) { // цикл 31,25 ms k2++; // счёт PORTD.7=1; // бузер if (menu) flag_menu_2 = 1; // флаг выбор меню - }; ///////////////////////////////////// if ( (8>k2) && (k2) ) {k2++;}; // счёт if (k2 == 8) { PORTD.7=0; // бузер k2++; }; ///////////////////////////////////// if ( (PINC.2==1) && (k2 == 9) ) {k2++;}; if (k2 > 9) {k2++;}; // счёт if (k2 == 17) { k2=0; // сброс flag_k2=0; // сброс }; ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////// 3- меню вверх if ( (flag_k3) && (k3==0) ) { // цикл 31,25 ms k3++; // счёт PORTD.7=1; // бузер if (menu) menu--; // меню -- }; ///////////////////////////////////// if ( (8>k3) && (k3) ) {k3++;}; // счёт if (k3 == 8) { PORTD.7=0; // бузер k3++; }; ///////////////////////////////////// if ( (PINC.3==1) && (k3 == 9) ) {k3++;}; if (k3 > 9) {k3++;}; // счёт if (k3 == 17) { k3=0; // сброс flag_k3=0; // сброс }; ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////// 4- Нагрузка if ( (flag_k4) && (k4==0) ) { // цикл 31,25 ms k4++; // счёт PORTD.7=1; // бузер k ^= 0b00010000; }; ///////////////////////////////////// if ( (8>k4) && (k4) ) {k4++;}; // счёт if (k4 == 8) { PORTD.7=0; // бузер k4++; }; ///////////////////////////////////// if ( (PINC.4==1) && (k4 == 9) ) {k4++;}; if (k4 > 9) {k4++;}; // счёт if (k4 == 17) { k4=0; // сброс flag_k4=0; // сброс }; ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////// 5- Нагрузка if ( (flag_k5) && (k5==0) ) { // цикл 31,25 ms k5++; // счёт k ^= 0b00100000; PORTD.7=1; // бузер - вкл. }; ///////////////////////////////////// if ( (8>k5) && (k5) ) {k5++;}; // счёт if (k5 == 8) { PORTD.7=0; // бузер k5++; }; ///////////////////////////////////// if ( (PINC.5==1) && (k5 == 9) ) {k5++;}; if (k5 > 9) {k5++;}; // счёт if (k5 == 17) { k5=0; // сброс flag_k5=0; // сброс }; ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////// 6- Нагрузка if ( (flag_k6) && (k6==0) ) { // цикл 31,25 ms k6++; // счёт k ^= 0b01000000; PORTD.7=1; // бузер - вкл. }; ///////////////////////////////////// if ( (8>k6) && (k6) ) {k6++;}; // счёт if (k6 == 8) { PORTD.7=0; // бузер k6++; }; ///////////////////////////////////// if ( (PINC.6==1) && (k6 == 9) ) {k6++;}; if (k6 > 9) {k6++;}; // счёт if (k6 == 17) { k6=0; // сброс flag_k6=0; // сброс }; ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////// 7- Нагрузка if ( (flag_k7) && (k7==0) ) { // цикл 31,25 ms k7++; // счёт PORTD.7=1; // бузер k ^= 0b10000000; }; if ( (8>k7) && (k7) ) {k7++;}; // счёт if (k7 == 8) { PORTD.7=0; // бузер k7++; }; /////////////////////////////// if ( (PINC.6==1) && (k7 == 9) ) {k7++;}; if (k7 > 9) {k7++;}; // счёт if (k7 == 17) { k7=0; // сброс flag_k7=0; // сброс }; //////////////////////////////////////////////////////////////////////////////////////////// кнопки1: ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////// 4- Нагрузка if ( (flag_kn4) && (kn4==0) ) { // цикл 31,25 ms kn4++; // счёт PORTD.7=1; // бузер //kn ^= 0b00010000; }; ///////////////////////////////////// if ( (8>kn4) && (kn4) ) {kn4++;}; // счёт if (kn4 == 8) { PORTD.7=0; // бузер kn4++; }; ///////////////////////////////////// if ( (PIND.4==1) && (kn4 == 9) ) {kn4++;}; if (kn4 > 9) {kn4++;}; // счёт if (kn4 == 17) { kn4=0; // сброс flag_kn4=0; // сброс }; ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////// 5- Нагрузка if ( (flag_kn5) && (kn5==0) ) { // цикл 31,25 ms kn5++; // счёт //kn ^= 0b00100000; PORTD.7=1; // бузер - вкл. }; ///////////////////////////////////// if ( (8>kn5) && (kn5) ) {kn5++;}; // счёт if (kn5 == 8) { PORTD.7=0; // бузер kn5++; }; ///////////////////////////////////// if ( (PIND.5==1) && (kn5 == 9) ) {kn5++;}; if (kn5 > 9) {kn5++;}; // счёт if (kn5 == 17) { kn5=0; // сброс flag_kn5=0; // сброс }; ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////// 6- Нагрузка if ( (flag_kn6) && (kn6==0) ) { // цикл 31,25 ms kn6++; // счёт //kn ^= 0b01000000; PORTD.7=1; // бузер - вкл. }; ///////////////////////////////////// if ( (8>kn6) && (kn6) ) {kn6++;}; // счёт if (kn6 == 8) { PORTD.7=0; // бузер kn6++; }; ///////////////////////////////////// if ( (PIND.6==1) && (kn6 == 9) ) {kn6++;}; if (kn6 > 9) {kn6++;}; // счёт if (kn6 == 17) { kn6=0; // сброс flag_kn6=0; // сброс }; //////////////////////////////////////////////////////////////////////// кнопки1 без фиксации: if (kn4) kn = kn | 0b00010000; // (...1....) 4- else kn = kn & 0b11101111; // (...1....) 4- if (kn5) kn = kn | 0b00100000; // (..1.....) 5- else kn = kn & 0b11011111; // (..1.....) 5- if (kn6) kn = kn | 0b01000000; // (.1......) 6- else kn = kn & 0b10111111; // (.1......) 6- //////////////////////////////////////////////////////////////////////////////////////////// обдув: MOTOR_L_R // t // температура 0 модель // флаг обдув 0 ON if ( t && f_obduv_ON ) { if ( (t > t_MAX) || (t1 > t_MAX) ) {obduv = obduv | 0b01000000;}; // температура MAX 0 модель // (.1......)обдув if ( (t_MIN > t) && (t_MIN > t1) ) {obduv = obduv & 0b10111111;}; // температура MIN 0 модель // (.1......)обдув } else { obduv = obduv & 0b10111111; // температура 0 модель // (.1......) 0- обдув }; //////////////////////////////////////////////////////////////////////////////////////////// обдув: ESC_L_R // t2 // температура 2 модель // флаг обдув 2 ON if ( t2 && f_obduv2_ON ) { if ( (t2 > t_MAX2) || (t3 > t_MAX2) ) {obduv = obduv | 0b10000000;}; // температура MAX2 2 модель // (1.......)обдув1 if ( (t_MIN2 > t2) && (t_MIN2 > t3)) {obduv = obduv & 0b01111111;}; // температура MIN2 2 модель // (1.......)обдув1 } else { obduv = obduv & 0b01111111; // температура 2 модель // (1.......)обдув1 }; //////////////////////////////////////////////////////////////////////////////////////////// помпа: if (v & 0b00000001) {pompa = pompa | 0b00100000;} // (..1.....)помпа else {pompa = pompa & 0b11011111;}; // (..1.....)помпа //////////////////////////////////////////////////////////////////////////////////////////// АЦП: ////////////////////////////////////////////// АЦП0: adc(0); a=ADCW/2; if (a>ub+1) {u=a/2; ub=a;}; if (aub1+1) {u1=a/2; ub1=a;}; if (aub2+1) {u2=a/2; ub2=a;}; if (aub3+1) {u3=a/2; ub3=a;}; if (aub4+1) {u4=a/2; ub4=a;}; if (aub5+1) {u5=a/2; ub5=a;}; if (aub6+1) {u6=a/2; ub6=a;}; if (aub7+1) {u7=a/2; ub7=a;}; if (a 127) w=(u1-128); // >> //if (u1 < 128) w=(127-u1); // << ////////////////// ШИМ вкл./выкл.: //if ( 9 > w) w=0; // 0 ////////////////////////////////////////////// аккум пульт: делитель 1/3,9: p=u7; //////////////////////////////////////////////////////////////////////////////////////////// // TX //////////////////////////////////////////////////////////////////////////////////////////// // IP/частота/мощность/кнопки/кнопки1/обдув/помпа/0/ //8 // АЦП/АЦП1/АЦП2/АЦП3/АЦП4/АЦП5/АЦП6/АЦП7 //8 // kor0/kor1/kor2/kor3/kor4/kor5/kor6/kor7 //8 // 0/0/0/0/0/0/CRC16/CRC16 //8 //////////////////////////////////////////////////////////////////////////////////////////// пульт > буфер: bufer[0]=IP; // IP модель bufer[1]=ch; // частота bufer[2]=pw; // мощность bufer[3]=k; // кнопки bufer[4]=kn; // кнопки2 bufer[5]=obduv; // обдув bufer[6]=pompa; // помпа bufer[7]=0; // //////////////////////////////// АЦП / MOTOR L PF 0 > PB5 bufer[8]=u; if (bufer[8] > MOTOR_L_MAX) {bufer[8] = MOTOR_L_MAX;}; if (MOTOR_L_MIN > bufer[8]) {bufer[8] = MOTOR_L_MIN;}; //////////////////////////////// АЦП1 / РУЛЬ PF 1 > PE5 bufer[9]=u1; //////////////////////////////// АЦП2 / MOTOR R PF 2 > PB6 bufer[10]=u2; if (bufer[10] > MOTOR_R_MAX) {bufer[10] = MOTOR_R_MAX;}; if (MOTOR_R_MIN > bufer[10]) {bufer[10] = MOTOR_R_MIN;}; //////////////////////////////// АЦП3 / SERVO L PF 3 > PE3 bufer[11]=u3; //////////////////////////////// АЦП4 / ШИМ 3 PF 4 > PB7 bufer[12]=u4; //////////////////////////////// АЦП5 / SERVO R PF 5 > PE4 bufer[13]=u5; //////////////////////////////// АЦП6 bufer[14]=u6; //////////////////////////////// АЦП7 bufer[15]=u7; //////////////////////////////// kor: bufer[16]=kor0; // bufer[17]=kor1; // bufer[18]=kor2; // bufer[19]=kor3; // bufer[20]=kor4; // bufer[21]=kor5; // bufer[22]=kor6; // bufer[23]=kor7; // //////////////////////////////// bufer[24]=0; // bufer[25]=0; // bufer[26]=0; // bufer[27]=0; // bufer[28]=0; // bufer[29]=0; // //////////////////////////////////////////////////////////////// crc буфер: -1,4mc crc=0xFFFF; for (b=0;b<30;b=b+2) { bcrc=bufer[b]; bcrc=(bcrc<<8)|bufer[b+1]; fcrc(); }; bufer[30]=(crc>>8); // crc bufer[31]=crc; // crc //////////////////////////////////////////////////////////////////////////////////////////// TX: //////////////////////////////////////////////////////////////// ch - частота //////////////////////////////////////////////////////////////// chb - частота буфер PORTB.0=0; // SS SPDR=0b00100101; while(!(SPSR & (1<<7)));// 0x05 RF_CH: Частота SPDR=chb; while(!(SPSR & (1<<7)));// chb - 2.400GHz...2.525GHz. (0)...(125) PORTB.0=1; // SS //////////////////////////////////////////////////////////////// pw - мощность pwb = pw; // pw - мощность TX 0b00000011 pwb = (pwb<<1)|0b00100000; // 0b00100110 // ..1. .... RF_SETUP = RF_DR_LOW - 250kbps. PORTB.0=0; // SS SPDR=0b00100110; while(!(SPSR & (1<<7)));// 0x06 RF_SETUP: скорость, мощность TX SPDR=pwb; while(!(SPSR & (1<<7)));// 250kbps; 0dBm...-18dBm. PORTB.0=1; // SS //////////////////////////////////////////////////////////////// TX: PORTB.0=0; // SS SPDR=0b00100000; while(!(SPSR & (1<<7)));// 0x00 CONFIG: SPDR=0b01111110; while(!(SPSR & (1<<7)));// CRC=2, POWER=1, TX=0. PORTB.0=1; // SS //////////////////////////////////////////////////////////////// буфер TX > TX_FIFO: PORTB.0=0; // SS SPDR=0b10100000; while(!(SPSR & (1<<7))); // TX FIFO for (x=0;x<32;x++) { SPDR=bufer[x]; while(!(SPSR & (1<<7))); }; PORTB.0=1; // SS //////////////////////////////////////////////////////////////// вкл. TX: PORTB.4=1; // CE 1; вкл. TX delay_us(1500); // TX: пакет - 250kbps; 0,001.280с. + 0,000.130с PLL = 0,001.410с//+ interrupts = 1,5mc PORTB.4=0; // CE 0; выкл. TX //////////////////////////////////////////////////////////////////////////////////////////// sT++; // счётчик пакетов пульт kontrol_TX++; // контроль TX if (kontrol_TX == 0) kontrol_RX = 0; // сброс // RX //////////////////////////////////////////////////////////////////////////////////////////// // IP/вода/температура/температура1/температура2/температура3/0/0 //8 // АЦП/АЦП1/АЦП2/АЦП3/АЦП4/АЦП5/АЦП6/АЦП7 //8 // _0/_1/_2/_3/_4/_5/_6/_7 //8 // 0/0/0/0/0/0/CRC16/CRC16 //8 //////////////////////////////////////////////////////////////// RX: PORTB.0=0; // SS SPDR=0b00100000; while(!(SPSR & (1<<7)));// 0x00 CONFIG: SPDR=0b01111111; while(!(SPSR & (1<<7)));// CRC=2, POWER=1, RX=1. PORTB.0=1; // SS //////////////////////////////////////////////////////////////// вкл. RX: PORTB.4=1; // CE 1; вкл. RX //////////////////////////////////////////////////////////////// delay_ms(10); // ждём ответ RX 8ms + // 32 пак/c. цикл 0,031.25c. //////////////////////////////////////////////////////////////// выкл. RX: PORTB.4=0; // CE 0; выкл. RX //////////////////////////////////////////////////////////////// STATUS: PORTB.0=0; // SS SPDR=0; while(!(SPSR & (1<<7))); x=SPDR; PORTB.0=1; // SS //////////////////////////////////////////////////////////////// .... 111. - RX FIFO - пуст if ((x & 0b00001110)==0b00001110) { delay_us(1200); // коррекция RX FIFO + CRC16 // SPI = 4 Мгц goto _3; // > LED }; //////////////////////////////////////////////////////////////// RX FIFO > буфер: PORTB.0=0; // SS SPDR=0b01100001; while(!(SPSR & (1<<7))); // RX FIFO for (x=0;x<32;x++) { SPDR=0; while(!(SPSR & (1<<7))); bufer[x]=SPDR; }; PORTB.0=1; // SS //////////////////////////////////////////////////////////////// crc буфер: -1,5mc crc=0xFFFF; for (b=0;b<32;b=b+2) { bcrc=bufer[b]; bcrc=(bcrc<<8)|bufer[b+1]; fcrc(); }; //////////////////////////////////////////////////////////////// проверка crc: if (crc==0) { // IP/вода/температура/температура1/температура2/температура3/0/0 //8 // АЦП/АЦП1/АЦП2/АЦП3/АЦП4/АЦП5/АЦП6/АЦП7 //8 // _0/_1/_2/_3/_4/_5/_6/_7 //8 // 0/0/0/0/0/0/CRC16/CRC16 //8 // if (IP != bufer[0]) { goto _3; }; // (!) IP модель -начальное 1 // > LED v=bufer[1]; // вода модель t=bufer[2]; // температура модель t1=bufer[3]; // температура1 модель t2=bufer[4]; // температура2 модель t3=bufer[5]; // температура3 модель //=bufer[6]; // //=bufer[7]; // ///////////////////////////// g=bufer[8]; // аккум модель servo_0=bufer[9]; // серво_0 модель servo_1=bufer[10]; // серво_1 модель //=bufer[11]; // //=bufer[12]; // //=bufer[13]; // //=bufer[14]; // //=bufer[15]; // ///////////////////////////// /* //////////////////////////////////////////////// GPS if ((bufer[12])&&(flag_GPS_radio == 0)) { // флаг GPS radio полный // флаг GPS radio полный /////////////////////////// x=st_bufer_GPS; // счёт буфер GPS -начальное 0x00 bufer_GPS[x]=bufer[14]; // bufer_GPS[0] x++; // счёт буфер GPS bufer_GPS[x]=bufer[15]; // bufer_GPS[1] x++; // счёт буфер GPS bufer_GPS[x]=bufer[16]; // bufer_GPS[2] x++; // счёт буфер GPS bufer_GPS[x]=bufer[17]; // bufer_GPS[3] x++; // счёт буфер GPS bufer_GPS[x]=bufer[18]; // bufer_GPS[4] x++; // счёт буфер GPS bufer_GPS[x]=bufer[19]; // bufer_GPS[5] x++; // счёт буфер GPS bufer_GPS[x]=bufer[20]; // bufer_GPS[6] x++; // счёт буфер GPS bufer_GPS[x]=bufer[21]; // bufer_GPS[7] x++; // счёт буфер GPS bufer_GPS[x]=bufer[22]; // bufer_GPS[8] x++; // счёт буфер GPS bufer_GPS[x]=bufer[23]; // bufer_GPS[9] x++; // счёт буфер GPS bufer_GPS[x]=bufer[24]; // bufer_GPS[10] x++; // счёт буфер GPS bufer_GPS[x]=bufer[25]; // bufer_GPS[11] x++; // счёт буфер GPS bufer_GPS[x]=bufer[26]; // bufer_GPS[12] x++; // счёт буфер GPS bufer_GPS[x]=bufer[27]; // bufer_GPS[13] x++; // счёт буфер GPS bufer_GPS[x]=bufer[28]; // bufer_GPS[14] x++; // счёт буфер GPS bufer_GPS[x]=bufer[29]; // bufer_GPS[15] /////////////////////////// st_bufer_GPS += 16; // счёт буфер GPS +16 if (st_bufer_GPS > 79){// буфер -80 st_bufer_GPS = 0; // счёт буфер GPS -начальное 0 flag_GPS_radio = 1; // флаг GPS radio полный //////////////////// flag3_GPS = 1; // флаг3 GPS полный }; }; ////////////////////// if (bufer[12] == 0) { // флаг2 GPS полный flag_GPS_radio = 0; // флаг GPS radio полный st_bufer_GPS = 0; // счёт буфер GPS -начальное 0x00 }; //////////////////////////////////////////////////////////////// kompas if ((bufer[13])&&(flag_kompas_radio == 0)) { // флаг kompas radio полный // флаг kompas radio полный /////////////////////////// x=st_bufer_kompas; // счёт буфер kompas -начальное 0x00 bufer_kompas[x]=bufer[14]; // bufer_kompas[0] x++; // счёт буфер kompas bufer_kompas[x]=bufer[15]; // bufer_kompas[1] x++; // счёт буфер kompas bufer_kompas[x]=bufer[16]; // bufer_kompas[2] x++; // счёт буфер kompas bufer_kompas[x]=bufer[17]; // bufer_kompas[3] x++; // счёт буфер kompas bufer_kompas[x]=bufer[18]; // bufer_kompas[4] x++; // счёт буфер kompas bufer_kompas[x]=bufer[19]; // bufer_kompas[5] x++; // счёт буфер kompas bufer_kompas[x]=bufer[20]; // bufer_kompas[6] x++; // счёт буфер kompas bufer_kompas[x]=bufer[21]; // bufer_kompas[7] x++; // счёт буфер kompas bufer_kompas[x]=bufer[22]; // bufer_kompas[8] x++; // счёт буфер kompas bufer_kompas[x]=bufer[23]; // bufer_kompas[9] x++; // счёт буфер kompas bufer_kompas[x]=bufer[24]; // bufer_kompas[10] x++; // счёт буфер kompas bufer_kompas[x]=bufer[25]; // bufer_kompas[11] x++; // счёт буфер kompas bufer_kompas[x]=bufer[26]; // bufer_kompas[12] x++; // счёт буфер kompas bufer_kompas[x]=bufer[27]; // bufer_kompas[13] x++; // счёт буфер kompas bufer_kompas[x]=bufer[28]; // bufer_kompas[14] x++; // счёт буфер kompas bufer_kompas[x]=bufer[29]; // bufer_kompas[15] x++; // счёт буфер kompas /////////////////////////// st_bufer_kompas += 16; // счёт буфер kompas +16 if (st_bufer_kompas > 63){// буфер -64 st_bufer_kompas = 0; // счёт буфер kompas -начальное 0x00 flag_kompas_radio = 1; // флаг kompas radio полный //////////////////// flag3_kompas_exolot = 1;// флаг3 kompas_эхолот полный }; }; ////////////////////// if (bufer[13] == 0) { // флаг2 kompas полный flag_kompas_radio = 0; // флаг kompas radio полный st_bufer_kompas = 0; // счёт буфер kompas -начальное 0x00 }; */ //////////////////////////////////////////////////////////////////////////////////////////// } //////////////////////////////////////////////////////////////// ошибка crc: else { kontrol_CRC++; // контроль CRC goto _3; // > LED }; //////////////////////////////////////////////////////////////////////////////////////////// sR++; // счётчик пакетов модель c=0; // сброс цикл chb = ch; // частота > частота буфер kontrol_RX++; // контроль RX //////////////////////////////////////////////////////////////////////////////////////////// _3: //////////////////////////////////////////////////////////////////////////////////////////// LED: //////////////////////////////////////////////////////////////// S-метр: if (sT == 8) { s = sT - sR; s = 8 - s; sT = 0; sR = 0; }; //////////////////////////////////////////////////////////////// LED 1/2: SPSR |= 0b00000001; // > SPI2X 8 Мгц/2 = 4 МГц if (n & 0b00000001) { PORTB.7=0; // SS OLED goto LED_1; // > LED 1 } else { PORTG &= 0b11110111; // SS OLED2 goto LED_2; // > LED 2 }; //////////////////////////////////////////////////////////////////////////////////////////// LED_1: // LED 1: //////////////////////////////////////////////////////////////// pult > TX UART1: //////////////////////////////////////////////////////////////// pult_TX_UART1[6] = menu; // menu pult_TX_UART1[7] = menu2; // menu2 pult_TX_UART1[8] = s; // s // S-метр pult_TX_UART1[9] = p; // p // аккум пульт pult_TX_UART1[10] = g; // g // аккум модель // 11 синхро pult_TX_UART1[12] = ch; // ch // частота pult_TX_UART1[13] = pw; // pw // мощность pult_TX_UART1[14] = IP; // IP // модель pult_TX_UART1[15] = (kontrol_TX_b >> 8); // kontrol_TX_b pult_TX_UART1[16] = kontrol_TX_b; // kontrol_TX_b // 17 синхро pult_TX_UART1[18] = (kontrol_RX_b >> 8); // kontrol_RX_b pult_TX_UART1[19] = kontrol_RX_b; // kontrol_RX_b pult_TX_UART1[20] = (kontrol_CRC_b >> 8); // kontrol_CRC_b pult_TX_UART1[21] = kontrol_CRC_b; // kontrol_CRC_b pult_TX_UART1[22] = f_buzer; // флаг f_buzer // 23 синхро pult_TX_UART1[24] = t; // температура 0 модель pult_TX_UART1[25] = t_MAX; // температура MAX 0 модель pult_TX_UART1[26] = t_MIN; // температура MIN 0 модель pult_TX_UART1[27] = 0; // pult_TX_UART1[28] = f_obduv_ON; // флаг обдув 0 ON // 29 синхро pult_TX_UART1[30] = t1; // температура 1 модель pult_TX_UART1[31] = 0; // pult_TX_UART1[32] = 0; // pult_TX_UART1[33] = 0; // pult_TX_UART1[34] = 0; // // 35 синхро pult_TX_UART1[36] = t2; // температура 2 модель pult_TX_UART1[37] = t_MAX2; // температура MAX 2 модель pult_TX_UART1[38] = t_MIN2; // температура MIN 2 модель pult_TX_UART1[39] = 0; // pult_TX_UART1[40] = f_obduv2_ON; // флаг обдув 2 ON // 41 синхро pult_TX_UART1[42] = t3; // температура 3 модель pult_TX_UART1[43] = 0; // pult_TX_UART1[44] = 0; // pult_TX_UART1[45] = 0; // pult_TX_UART1[46] =0; // // 47 синхро pult_TX_UART1[48] = obduv; // обдув pult_TX_UART1[49] = 0; // pult_TX_UART1[50] = 0; // pult_TX_UART1[51] = 0; // pult_TX_UART1[52] = 0; // // 53 синхро pult_TX_UART1[54] = pompa; // помпа pult_TX_UART1[55] = 0; // pult_TX_UART1[56] = 0; // pult_TX_UART1[57] = 0; // pult_TX_UART1[58] = 0; // //////////////////////// // 59 синхро //////////////////////// pult_TX_UART1[60] = kor0; // kor0 pult_TX_UART1[61] = kor1; // kor1 pult_TX_UART1[62] = kor2; // kor2 pult_TX_UART1[63] = kor3; // kor3 pult_TX_UART1[64] = 0; // //////////////////////// // 65 синхро //////////////////////// pult_TX_UART1[66] = kor4; // kor4 pult_TX_UART1[67] = kor5; // kor5 pult_TX_UART1[68] = kor6; // kor6 pult_TX_UART1[69] = kor7; // kor7 pult_TX_UART1[70] = 0; // //////////////////////// // 71 синхро pult_TX_UART1[72] = MOTOR_L_MAX; // MOTOR_L_MAX pult_TX_UART1[73] = MOTOR_L_MIN; // MOTOR_L_MIN pult_TX_UART1[74] = MOTOR_R_MAX; // MOTOR_R_MAX pult_TX_UART1[75] = MOTOR_R_MIN; // MOTOR_R_MIN pult_TX_UART1[76] = 0; // //////////////////////// // 77 синхро //////////////////////// pult_TX_UART1[78] = 0; // pult_TX_UART1[79] = 0; // pult_TX_UART1[80] = 0; // pult_TX_UART1[81] = 0; // pult_TX_UART1[82] = 0; // //////////////////////// // 83 синхро //////////////////////////////////////////////////////////////// буфер > TX UART 1 UCSR1B=0x48; // TX 1 UDR1 = pult_TX_UART1[0]; // старт TX UART 1 //////////////////////////////////////////////////////////////////////////////////////////// menu LED 1: -10mc if (menu == 255) goto _255; // menu == 255: > ошибка EEPROM if (menu > 59) goto _61; // меню 6: зуммер if (menu > 49) goto _51; // меню 5: температура if (menu > 39) goto _41; // меню 4: питание if (menu > 29) goto _31; // меню 3: MOTOR if (menu > 19) goto _21; // меню 2: связь if (menu) goto _11; // меню 1: // караблик: 0 //////////////////////////////////////////////////////////////////////////////////////////// kursor(0); ///////////////////// антеннка: for (x=0;x<9;x++) { SPDR=antenka[x]; while(!(SPSR & (1<<7))); }; // антеннка ///////////////////// уровень сигнала (S_metr): for (x=0;x<8;x++) { if (s>x)h = S_metr[x]; else h = 0b00000000; SPDR=h; while(!(SPSR & (1<<7))); SPDR=0; while(!(SPSR & (1<<7))); }; fpp(4); ////////////////////// мощность: LED('Р'); ////////////////////// шкала мощность: for (x=0;x<5;x++) { SPDR=0b01100000; while(!(SPSR & (1<<7))); // мощность -0 }; SPDR=0; while(!(SPSR & (1<<7))); for (z=0;z<3;z++) { for (x=0;x<5;x++) { if (pw>z) h = pw_metr[z]; else h = 0b00000000; SPDR=h; while(!(SPSR & (1<<7))); // мощность -1,2,3 }; SPDR=0; while(!(SPSR & (1<<7))); }; fpp(4); ////////////////////// IP модель: st_10(IP); // 0...9 fpp(3); ////////////////////// частота: st_10000(2400 + ch); // 0...9999 ////////////////////// кораблик: for (x=0;x<32;x++) { SPDR=mini_kartinki_korablik_0[x]; while(!(SPSR & (1<<7))); }; kursor(1); skala_ADC(u); // шкала АЦП fpp(4); st_1000(u);// 0...999 fpp(9); ////////////////////// кораблик: for (x=0;x<32;x++) { SPDR=mini_kartinki_korablik_1[x]; while(!(SPSR & (1<<7))); }; kursor(2); LED('T'); LED(' '); st_1000(t);// 0...999 LED(' '); LED('M'); LED('A'); LED('X'); LED(' '); st_1000(t_MAX); // 0...999 LED(' '); LED('M'); LED('I'); LED('N'); LED(' '); st_1000(t_MIN); // 0...999 fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); kursor(3); LED('T'); LED(' '); st_1000(t1);// 0...999 LED(' '); LED('M'); LED('A'); LED('X'); LED(' '); st_1000(t_MAX); // 0...999 LED(' '); LED('M'); LED('I'); LED('N'); LED(' '); st_1000(t_MIN); // 0...999 fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); kursor(4); LED('T'); LED(' '); st_1000(t2);// 0...999 LED(' '); LED('M'); LED('A'); LED('X'); LED(' '); st_1000(t_MAX); // 0...999 LED(' '); LED('M'); LED('I'); LED('N'); LED(' '); st_1000(t_MIN); // 0...999 fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); kursor(5); LED('T'); LED(' '); st_1000(t3);// 0...999 LED(' '); LED('M'); LED('A'); LED('X'); LED(' '); st_1000(t_MAX); // 0...999 LED(' '); LED('M'); LED('I'); LED('N'); LED(' '); st_1000(t_MIN); // 0...999 fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); kursor(6); //////////////////// аккум пульт 5 V LED('П'); fpp(13); ak_pult(p/2); // p - аккум пульт 5 V fpp(14); //////////////////// аккум модель 12 V -1 // k: - //(..1.....) 5- Вкл(Выкл) резервный аккумулятор LED('1'); LED('-'); // fpp(1); ak_model(g); // g - аккум модель 12 V fpp(13); ///////////////////// аккум модель 12 V -1 // k: - //(..1.....) 5- Вкл(Выкл) резервный аккумулятор LED('1'); LED('-'); // fpp(1); ak_model(g); // g - аккум модель 12 V fpp(2); kursor(7); //////////////////////////// шкала аккум пульт: // опорное 3,3V; + 5...8,4 V; 5/3,9 -99,000; 8,4/3,9 -166,000; // +62 hp = p; // hp - буфер шкала аккум пульт if (hp>99) hp = hp - 100; else hp=0; skala_0_ak(hp); fpp(13); /////////////////////////// шкала аккум модель 1: // опорное 5V; + 7...13,2 V; 6.0/5,1 -70,000; 13.2/5,1 -132,000; // +62 hg = g; // hg - буфер шкала аккум модель if (hg>69) hg = hg - 70; else hg=0; skala_0_ak(hg); fpp(12); /////////////////////////// шкала аккум модель 1: // опорное 5V; + 7...13,2 V; 6.0/5,1 -70,000; 13.2/5,1 -132,000; // +62 hg = u; //hg = g;// hg2 - буфер шкала аккум модель 1 if (hg>69) hg = hg - 70; else hg=0; skala_0_ak(hg); fpp(1); goto _5; // LCD > //////////////////////////////////////////////////////////////////////////////////////////// _11: // меню 0: караблик //////////////////////////////////////////////////////////////////////////////////////////// kursor(0); //////////////////////// МЕНЮ КОРАБЛИК: LED('М'); LED('Е'); LED('Н'); LED('Ю'); LED(' '); LED('К'); LED('О'); LED('Р'); LED('А'); LED('Б'); LED('Л'); LED('И'); LED('К'); LED(':'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); kursor(1); if (menu == 1) LED('>'); // > else LED(' '); // /////////////////////// СВЯЗЬ LED('С'); LED('В'); LED('Я'); LED('З'); LED('Ь'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 1) && flag_menu_1 ) { menu = 21; // > СВЯЗЬ 1: связь flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(2); if (menu == 2) LED('>'); // > else LED(' '); // /////////////////////// MOTOR LED('M'); LED('O'); LED('T'); LED('O'); LED('R'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 2) && flag_menu_1 ) { menu = 31; // > КАНАЛ 2: пульт flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(3); if (menu == 3) LED('>'); // > else LED(' '); // ////////////////////// ПИТАНИЕ LED('П'); LED('И'); LED('Т'); LED('А'); LED('Н'); LED('И'); LED('Е'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 3) && flag_menu_1 ) { menu = 41; // > ПИТАНИЕ 3: модель flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(4); if (menu == 4) LED('>'); // > else LED(' '); // ////////////////////// ТЕМПЕРАТУРА LED('Т'); LED('Е'); LED('М'); LED('П'); LED('Е'); LED('Р'); LED('А'); LED('Т'); LED('У'); LED('Р'); LED('А'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 4) && flag_menu_1 ) { menu = 51; // > ТЕМПЕРАТУРА 5: GPS flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(5); if (menu == 5) LED('>'); // > else LED(' '); // ////////////////////// ЗУММЕР LED('З'); LED('У'); LED('М'); LED('М'); LED('Е'); LED('Р'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 5) && flag_menu_1 ) { menu = 61; // > ЗУММЕР 6: flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(6); fpp(128); kursor(7); fpp(128); //////////////////////// menu > if ( menu == 6 ) { menu = 0; // > кораблик flag_TX_EEPROM = 1; // флаг запись EEPROM }; goto _5; // LED > //////////////////////////////////////////////////////////////////////////////////////////// _21: // меню 1: связь //////////////////////////////////////////////////////////////////////////////////////////// kursor(0); ///////////////////// МЕНЮ СВЯЗЬ LED('М'); LED('Е'); LED('Н'); LED('Ю'); LED(' '); LED('С'); LED('В'); LED('Я'); LED('З'); LED('Ь'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(1); ///////////////////// антеннка: for (x=0;x<9;x++) { SPDR=antenka[x]; while(!(SPSR & (1<<7))); }; // антеннка ///////////////////// уровень сигнала (S_metr): for (x=0;x<8;x++) { if (s>x)h = S_metr[x]; else h = 0b00000000; SPDR=h; while(!(SPSR & (1<<7))); SPDR=0; while(!(SPSR & (1<<7))); }; kursor(1); LED(' '); // " " ///////////////////// ЧACТОТА ВЫЗОВ LED('Ч'); LED('А'); LED('С'); LED('Т'); LED('О'); LED('Т'); LED('А'); LED(' '); LED('В'); LED('Ы'); LED('З'); LED('О'); LED('В'); LED(' '); LED(' '); LED(' '); fpp(2); st_10000(2400); // 0...9999 kursor(2); if (menu == 21) LED('>'); // > else LED(' '); // //////////////////// ЧACТОТА КАНАЛ LED('Ч'); LED('А'); LED('С'); LED('Т'); LED('О'); LED('Т'); LED('А'); LED(' '); LED('К'); LED('А'); LED('Н'); LED('А'); LED('Л'); LED(' '); LED(' '); LED(' '); fpp(2); st_10000(2400 + ch); // 0...9999 if ( (menu == 21) && (flag_menu_1 || flag_menu_2) ) { if (flag_menu_1) { ch++; // ch - частота: 2.400GHz до 2.525GHz. (0)...(125) if (ch > 125) ch = 0; }; if (flag_menu_2) { ch--; // ch - частота: 2.400GHz до 2.525GHz. (0)...(125) if (ch > 125) ch = 125; }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(3); if (menu == 22) LED('>'); // > else LED(' '); // ///////////////////// IP МОДЕЛЬ LED('I'); LED('P'); LED(' '); LED('М'); LED('О'); LED('Д'); LED('Е'); LED('Л'); LED('Ь'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); ///////////////////// адрес nRF24L01 -начальное 1. st_10(IP); // счётчик 0...9 if ( (menu == 22) && flag_menu_1 ) { IP ++; // адрес модель -начальное 1. if (IP > 5) IP = 1; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(4); fpp(128); kursor(5); fpp(128); kursor(6); if ((n & 0b00011111)==31) { // 32 пак/1s kontrol_TX_b = kontrol_TX; kontrol_RX_b = kontrol_RX; kontrol_CRC_b = kontrol_CRC; }; ///////////////////////// КОНТОЛЬ: LED('К'); LED('О'); LED('Н'); LED('Т'); LED('Р'); LED('О'); LED('Л'); LED('Ь'); LED(':'); LED(' '); LED(' '); LED(' '); fpp(2); ///////////////////////// CRC LED('C'); LED('R'); LED('C'); LED(' '); st_100000(kontrol_CRC_b); // счётчик 0...99999: kursor(7); ///////////////////////// TX LED('T'); LED('X'); LED(' '); st_100000(kontrol_TX_b); // счётчик 0...99999: fpp(2); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); //////////////////////// RX LED('R'); LED('X'); LED(' '); st_100000(kontrol_RX_b); // счётчик 0...99999: ///////////////////// menu > if ( menu == 23 || menu == 20 ) { menu = 1; }; // > меню 1: связь goto _5; // LCD > //////////////////////////////////////////////////////////////////////////////////////////// _31: // меню 2: MOTOR //////////////////////////////////////////////////////////////////////////////////////////// kursor(0); //////////////////////// MOTOR LED('M'); LED('O'); LED('T'); LED('O'); LED('R'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); kursor(1); if (menu == 31) LED('>'); // > else LED(' '); // //////////////////////// MOTOR_L_MAX LED('M'); LED('O'); LED('T'); LED('O'); LED('R'); LED('-'); LED('L'); LED('-'); LED('M'); LED('A'); LED('X'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); //LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 31) && flag_menu_1 ) { MOTOR_L_MAX ++; // MOTOR_L_MAX if (MOTOR_L_MAX > 255) {MOTOR_L_MAX = 255;}; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 31) && flag_menu_2 ) { MOTOR_L_MAX --; // MOTOR_L_MAX if (MOTOR_L_MAX > 255) {MOTOR_L_MAX = 0;}; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// интдикатор st_1000(MOTOR_L_MAX); kursor(2); if (menu == 32) LED('>'); // > else LED(' '); // //////////////////////// MOTOR_L_СРЕДН LED('M'); LED('O'); LED('T'); LED('O'); LED('R'); LED('-'); LED('L'); LED('-'); LED('С'); LED('Р'); LED('Е'); LED('Д'); LED('Н'); LED(' '); LED(' '); LED(' '); LED(' '); //LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 32) && flag_menu_1 ) { kor0 ++; // kor0 flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 32) && flag_menu_2 ) { kor0 --; // kor0 flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// интдикатор st_1000(kor0); kursor(3); if (menu == 33) LED('>'); // > else LED(' '); // //////////////////////// MOTOR_L_MIN LED('M'); LED('O'); LED('T'); LED('O'); LED('R'); LED('-'); LED('L'); LED('-'); LED('M'); LED('I'); LED('N'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); //LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 33) && flag_menu_1 ) { MOTOR_L_MIN ++; // MOTOR_L_MIN if (MOTOR_L_MIN > 255) {MOTOR_L_MIN = 255;}; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 33) && flag_menu_2 ) { MOTOR_L_MIN --; // MOTOR_L_MIN if (MOTOR_L_MIN > 255) {MOTOR_L_MIN = 0;}; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// интдикатор st_1000(MOTOR_L_MIN); kursor(4); if (menu == 34) LED('>'); // > else LED(' '); // //////////////////////// MOTOR_R_MAX LED('M'); LED('O'); LED('T'); LED('O'); LED('R'); LED('-'); LED('R'); LED('-'); LED('M'); LED('A'); LED('X'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); //LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 34) && flag_menu_1 ) { MOTOR_R_MAX ++; // MOTOR_R_MAX if (MOTOR_R_MAX > 255) {MOTOR_R_MAX = 255;}; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 34) && flag_menu_2 ) { MOTOR_R_MAX --; // MOTOR_R_MAX if (MOTOR_R_MAX > 255) {MOTOR_R_MAX = 0;}; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// интдикатор st_1000(MOTOR_R_MAX); kursor(5); if (menu == 35) LED('>'); // > else LED(' '); // //////////////////////// MOTOR_R_СРЕДН LED('M'); LED('O'); LED('T'); LED('O'); LED('R'); LED('-'); LED('R'); LED('-'); LED('С'); LED('Р'); LED('Е'); LED('Д'); LED('Н'); LED(' '); LED(' '); LED(' '); LED(' '); //LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 35) && flag_menu_1 ) { kor2 ++; // kor2 flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 35) && flag_menu_2 ) { kor2 --; // kor2 flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// интдикатор st_1000(kor2); kursor(6); if (menu == 36) LED('>'); // > else LED(' '); // //////////////////////// MOTOR_R_MIN LED('M'); LED('O'); LED('T'); LED('O'); LED('R'); LED('-'); LED('R'); LED('-'); LED('M'); LED('I'); LED('N'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); //LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 36) && flag_menu_1 ) { MOTOR_R_MIN ++; // MOTOR_R_MIN if (MOTOR_R_MIN > 255) {MOTOR_R_MIN = 255;}; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 36) && flag_menu_2 ) { MOTOR_R_MIN --; // MOTOR_R_MIN if (MOTOR_R_MIN > 255) {MOTOR_R_MIN = 0;}; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// интдикатор st_1000(MOTOR_R_MIN); kursor(7); fpp(128); /////////////////////// menu > if ( menu == 37 || menu == 30 ) { menu = 2;}; // > меню 2: канал goto _5; // LED > //////////////////////////////////////////////////////////////////////////////////////////// _41: // меню 3: питание //////////////////////////////////////////////////////////////////////////////////////////// kursor(0); //////////////////////// ПИТАНИЕ LED('П'); LED('И'); LED('Т'); LED('А'); LED('Н'); LED('И'); LED('Е'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); kursor(1); if (menu == 41) LED('>'); // > else LED(' '); // //////////////////////// ПИТАНИЕ 1 LED('П'); LED('И'); LED('Т'); LED('А'); LED('Н'); LED('И'); LED('Е'); LED(' '); LED('1'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 41) && flag_menu_1 ) { flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 41) && flag_menu_2 ) { flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(2); if (menu == 42) LED('>'); // > else LED(' '); // //////////////////////// ПИТАНИЕ 2 LED('П'); LED('И'); LED('Т'); LED('А'); LED('Н'); LED('И'); LED('Е'); LED(' '); LED('2'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 42) && flag_menu_1 ) { flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 42) && flag_menu_2 ) { flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(3); if (menu == 43) LED('>'); // > else LED(' '); // //////////////////////// ПИТАНИЕ 3 LED('П'); LED('И'); LED('Т'); LED('А'); LED('Н'); LED('И'); LED('Е'); LED(' '); LED('3'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 43) && flag_menu_1 ) { flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 43) && flag_menu_2 ) { flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(4); if (menu == 44) LED('>'); // > else LED(' '); // //////////////////////// ПИТАНИЕ 4 LED('П'); LED('И'); LED('Т'); LED('А'); LED('Н'); LED('И'); LED('Е'); LED(' '); LED('4'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 44) && flag_menu_1 ) { flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 44) && flag_menu_2 ) { flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(5); if (menu == 45) LED('>'); // > else LED(' '); // //////////////////////// ПИТАНИЕ 5 LED('П'); LED('И'); LED('Т'); LED('А'); LED('Н'); LED('И'); LED('Е'); LED(' '); LED('5'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 45) && flag_menu_1 ) { flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 45) && flag_menu_2 ) { flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(6); if (menu == 46) LED('>'); // > else LED(' '); // //////////////////////// ПИТАНИЕ 6 LED('П'); LED('И'); LED('Т'); LED('А'); LED('Н'); LED('И'); LED('Е'); LED(' '); LED('6'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 46) && flag_menu_1 ) { flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 46) && flag_menu_2 ) { flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(7); fpp(128); /////////////////// menu > if ( menu == 47 || menu == 40 ) { menu = 3;}; // > меню 3: питание goto _5; // LCD > //////////////////////////////////////////////////////////////////////////////////////////// _51: // меню 4: температура //////////////////////////////////////////////////////////////////////////////////////////// kursor(0); //////////////////////// ТЕМПЕРАТУРА LED('Т'); LED('Е'); LED('М'); LED('П'); LED('Е'); LED('Р'); LED('А'); LED('Т'); LED('У'); LED('Р'); LED('А'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); kursor(1); if (menu == 51) LED('>'); // > else LED(' '); // //////////////////// MOTOR ОБДУВ LED('M'); LED('O'); LED('T'); LED('O'); LED('R'); LED(' '); LED('О'); LED('Б'); LED('Д'); LED('У'); LED('В'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); //LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 51) && flag_menu_1 ) { f_obduv_ON = 1; // флаг обдув 0 ON flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 51) && flag_menu_2 ) { f_obduv_ON = 0; // флаг обдув 0 ON flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// флаг if (f_obduv_ON) {LED('O'); LED('N'); } // ON else {f_(2);}; // -- kursor(2); if (menu == 52) LED('>'); // > else LED(' '); // //////////////////// MOTOR MAX 0 LED('M'); LED('O'); LED('T'); LED('O'); LED('R'); LED(' '); LED('M'); LED('A'); LED('X'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); //LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 52) && flag_menu_1 ) { t_MAX ++; // температура MAX 0 if (t_MAX > 100) {t_MAX = 0;}; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 52) && flag_menu_2 ) { t_MAX --; // температура MAX 0 if (t_MAX > 100) {t_MAX = 100;}; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// интдикатор st_1000(t_MAX); kursor(3); if (menu == 53) LED('>'); // > else LED(' '); // //////////////////// MOTOR MIN 0 LED('M'); LED('O'); LED('T'); LED('O'); LED('R'); LED(' '); LED('M'); LED('I'); LED('N'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); //LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 53) && flag_menu_1 ) { t_MIN ++; // температура MIN 0 if (t_MIN > 100) {t_MIN = 0;}; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 53) && flag_menu_2 ) { t_MIN --; // температура MIN 0 if (t_MIN > 100) {t_MIN = 100;}; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// интдикатор st_1000(t_MIN); kursor(4); if (menu == 54) LED('>'); // > else LED(' '); // //////////////////// ESC ОБДУВ LED('E'); LED('S'); LED('C'); LED(' '); LED('О'); LED('Б'); LED('Д'); LED('У'); LED('В'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); //LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 54) && flag_menu_1 ) { f_obduv2_ON = 1; // флаг обдув 2 ON flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 54) && flag_menu_2 ) { f_obduv2_ON = 0; // флаг обдув 2 ON flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// флаг if (f_obduv2_ON) {LED('O'); LED('N'); } // ON else {f_(2);}; // -- kursor(5); if (menu == 55) LED('>'); // > else LED(' '); // //////////////////// ESC MAX 2 LED('E'); LED('S'); LED('C'); LED(' '); LED('M'); LED('A'); LED('X'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); //LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 55) && flag_menu_1 ) { t_MAX2 ++; // температура MAX 2 if (t_MAX2 > 100) {t_MAX2 = 0;}; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 55) && flag_menu_2 ) { t_MAX2 --; // температура MAX 2 if (t_MAX2 > 100) {t_MAX2 = 100;}; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// интдикатор st_1000(t_MAX2); kursor(6); if (menu == 56) LED('>'); // > else LED(' '); // //////////////////// ESC MIN 2 LED('E'); LED('S'); LED('C'); LED(' '); LED('M'); LED('I'); LED('N'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); //LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 56) && flag_menu_1 ) { t_MIN2 ++; // температура MIN 2 if (t_MIN2 > 100) {t_MIN2 = 0;}; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 56) && flag_menu_2 ) { t_MIN2 --; // температура MIN 2 if (t_MIN2 > 100) {t_MIN2 = 100;}; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// интдикатор st_1000(t_MIN2); kursor(7); fpp(128); /////////////////// menu > if ( menu == 57 || menu == 50 ) { menu = 4;}; // > меню 4: температура goto _5; // LCD > //////////////////////////////////////////////////////////////////////////////////////////// _61: // меню 5: зуммер //////////////////////////////////////////////////////////////////////////////////////////// kursor(0); //////////////////////// ЗУММЕР LED('З'); LED('У'); LED('М'); LED('М'); LED('Е'); LED('Р'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); kursor(1); //////////////////////// ЗУММЕР if (menu == 61) LED('>'); // > else LED(' '); // LED('З'); LED('У'); LED('М'); LED('М'); LED('Е'); LED('Р'); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); LED(' '); //LED(' '); //LED(' '); fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); if ( (menu == 61) && flag_menu_1 ) { f_buzer = 1; // флаг бузер DDRD.7=1; // бузер flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 61) && flag_menu_2 ) { f_buzer = 0; // флаг бузер DDRD.7=0; // бузер flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// флаг if (f_buzer) {LED('O'); LED('N');} // ON else {f_(2);}; // --- //fpp(2); //SPDR=0b01000100; while(!(SPSR & (1<<7))); SPDR=0b01000100; while(!(SPSR & (1<<7))); kursor(2); fpp(128); kursor(3); fpp(128); kursor(4); fpp(128); kursor(5); fpp(128); kursor(6); fpp(128); kursor(7); fpp(128); /////////////////////// menu > if ( menu == 62 || menu == 60 ) { menu = 5;}; // > меню 5: зуммер goto _5; // LED > //////////////////////////////////////////////////////////////////////////////////////////// LED_2: // LED 2: //////////////////////////////////////////////////////////////////////////////////////////// menu LED 2: //if (menu2) goto _EXO; // menu 1 > эхолот // NAV: //////////////////////////////////////////////////////////////////////////////////////////// //if (!PINC.4) {flag3_UART =1;}; // контроль if (!flag3_GPS) goto start_LCD; // > старт GPS if (flag_M8N_m8n) goto m8n; // > m8n (1) ////////////////////////////////////////////////////////////////////////// crc bufer_UART: // M8N (0): //////////////////////////////// bufer_GPS -0,8mc crc_GPS = 0; for (x=1; x<67; x++) { // NMEA 0183 -80 // crc - $...* crc_GPS ^= bufer_GPS[x]; }; //////////////////////////////// bcrc bufer_GPS if (bufer_GPS[68] > 64) {x = bufer_GPS[68] - 55;} // A...F else {x = bufer_GPS[68] - 48;}; // 0...9 bcrc_GPS = x; if (bufer_GPS[69] > 64) {x = bufer_GPS[69] - 55;} // A...F else {x = bufer_GPS[69] - 48;}; // 0...9 bcrc_GPS = (bcrc_GPS<<4)|x; //////////////////////////////// проверка crc bufer_UART: if (crc_GPS != bcrc_GPS) { flag3_GPS = 0; // флаг3 GPS полный UCSR0B=0x90; // USART0 RX > GPS PORTA.5=0; // контроль goto _5; // LED > }; //////////////////////////////////////////////////////////////////////////////////////////// if (flag4_GPS) goto start_LCD; // > старт LED //////////////////////////////////////////////////////////////////////////////////////////// разбор GPS: //////////////////////////////// часы 181547.000 /////////////// часы hour = (bufer_GPS[7] - 48)*10; // час 0. hour += bufer_GPS[8] - 48; // час 00 /////////////// минуты min = (bufer_GPS[9] - 48)*10; // мин 0. min += bufer_GPS[10] - 48; // мин 00 /////////////// секунды sec = (bufer_GPS[11] - 48)*10; // сек 0. sec += bufer_GPS[12] - 48; // сек 00 //////////////////////////////// GPS_N -широта 4911.6021 bufer_N = (bufer_GPS[18] - 48)*10000000; // 4 bufer_N += (bufer_GPS[19] - 48)*1000000; // 49 //long N_min; // минуты 50.2441 N_min = (long)(bufer_GPS[20] - 48)*100000; // 49.1 N_min += (long)(bufer_GPS[21] - 48)*10000; // 49.11 N_min += (long)(bufer_GPS[23] - 48)*1000; // 49.116 N_min += (long)(bufer_GPS[24] - 48)*100; // 49.1160 N_min += (long)(bufer_GPS[25] - 48)*10; // 49.11602 N_min += (long)(bufer_GPS[26] - 48); // 49.116021 //long N_min; // минуты 11.6021 N_min = N_min * 100; // минуты 11602100 N_min /= 60; // градусы 193368 bufer_N += N_min; // 49.193368 //////////////////////////////////////////////////////////// //////////////////////////////// GPS_E -долгота 02650.2441 bufer_E = (bufer_GPS[31] - 48)*10000000; // 2 bufer_E += (bufer_GPS[32] - 48)*1000000; // 26 //long E_min; // минуты 50.2441 E_min = (long)(bufer_GPS[33] - 48)*100000; // 26.5 E_min += (long)(bufer_GPS[34] - 48)*10000; // 26.50 E_min += (long)(bufer_GPS[36] - 48)*1000; // 26.502 E_min += (long)(bufer_GPS[37] - 48)*100; // 26.5024 E_min += (long)(bufer_GPS[38] - 48)*10; // 26.50244 E_min += (long)(bufer_GPS[39] - 48); // 26.502441 //long E_min; // минуты 50.2441 E_min = E_min * 100; // минуты 50244100 E_min /= 60; // градусы 837401 bufer_E += E_min; // 26.837401 //////////////////////////////////////////////////////////// //////////////////////////////// спутник 10 sputnik_GPS = (bufer_GPS[45] - 48)*10; // спутники 0. sputnik_GPS += bufer_GPS[46] - 48; // спутники 00 //////////////////////////////////////////////////////////// //PORTD.5=0; // контроль flag4_GPS = 1; // флаг4 UART разбор goto start_LCD; // > старт LED m8n: // m8n (1) //////////////////////////////////////////////////////////////////////////////////////////// crc bufer_UART: // m8n (1): //////////////////////////////// bufer_UART -0,8mc crc_GPS = 0; for (x=1; x<70; x++) { // NMEA 0183 -80 // crc - $...* crc_GPS ^= bufer_GPS[x]; }; //////////////////////////////// bcrc bufer_UART if (bufer_GPS[71] > 64) {x = bufer_GPS[71] - 55;} // A...F else {x = bufer_GPS[71] - 48;}; // 0...9 bcrc_GPS = x; if (bufer_GPS[72] > 64) {x = bufer_GPS[72] - 55;} // A...F else {x = bufer_GPS[72] - 48;}; // 0...9 bcrc_GPS = (bcrc_GPS<<4)|x; //////////////////////////////// проверка crc bufer_UART: if (crc_GPS != bcrc_GPS) { flag3_GPS = 0; // флаг3 UART полный UCSR0B=0x90; // USART0 RX > GPS PORTA.5=0; // контроль goto _5; // LED > }; /////////////////////////////////////////////////////// if (flag4_GPS) goto start_LCD; // > старт LED ////////////////////////////////////////////////////////// разбор GPS: //////////////////////////////// часы 181547.000 /////////////// часы hour = (bufer_GPS[7] - 48)*10; // час 0. hour += bufer_GPS[8] - 48; // час 00 /////////////// минуты min = (bufer_GPS[9] - 48)*10; // мин 0. min += bufer_GPS[10] - 48; // мин 00 /////////////// секунды sec = (bufer_GPS[11] - 48)*10; // сек 0. sec += bufer_GPS[12] - 48; // сек 00 //////////////////////////////// GPS_N -широта 4911.6069 bufer_N = (bufer_GPS[17] - 48)*10000000; // 4 bufer_N += (bufer_GPS[18] - 48)*1000000; // 49 //long N_min; // минуты 50.2441 N_min = (long)(bufer_GPS[19] - 48)*100000; // 49.1 N_min += (long)(bufer_GPS[20] - 48)*10000; // 49.11 N_min += (long)(bufer_GPS[22] - 48)*1000; // 49.116 N_min += (long)(bufer_GPS[23] - 48)*100; // 49.1160 N_min += (long)(bufer_GPS[24] - 48)*10; // 49.11606 N_min += (long)(bufer_GPS[25] - 48); // 49.116069 //long N_min; // минуты 11.6069 N_min = N_min * 100; // минуты 11606900 N_min /= 60; // градусы 193448 bufer_N += N_min; // 49.193448 //////////////////////////////////////////////////////////// //////////////////////////////// GPS_E -долгота 02650.2374 bufer_E = (bufer_GPS[31] - 48)*10000000; // 2 bufer_E += (bufer_GPS[32] - 48)*1000000; // 26 //long E_min; // минуты 50.2441 E_min = (long)(bufer_GPS[33] - 48)*100000; // 26.5 E_min += (long)(bufer_GPS[34] - 48)*10000; // 26.50 E_min += (long)(bufer_GPS[36] - 48)*1000; // 26.502 E_min += (long)(bufer_GPS[37] - 48)*100; // 26.5023 E_min += (long)(bufer_GPS[38] - 48)*10; // 26.50237 E_min += (long)(bufer_GPS[39] - 48); // 26.502374 //long E_min; // минуты 50.2374 E_min = E_min * 100; // минуты 50237400 E_min /= 60; // градусы 837290 bufer_E += E_min; // 26.837290 //////////////////////////////////////////////////////////// //////////////////////////////// спутник 10 sputnik_GPS = (bufer_GPS[46] - 48)*10; // спутники 0. sputnik_GPS += bufer_GPS[47] - 48; // спутники 00 //////////////////////////////////////////////////////////// /* ////////////////////////////////////////// АЦП0: // контроль adc(stik_0); a=ADCW/2; if (a>ub+1) {u=a/2; ub=a;}; if (aub1+1) {u1=a/2; ub1=a;}; if (a bufer_N) { // N_1 - точка 1 > bufer_N - с.ш. if (E_1 > bufer_E) { // E_1 - точка 1 > bufer_E - в.д. katet_x = E_1 - bufer_E; // катет_x katet_y = N_1 - bufer_N; // катет_y kurs = 1; // контроль } else { // E_1 - точка 1 < bufer_E - в.д. katet_x = bufer_E - E_1; // катет_x katet_y = N_1 - bufer_N; // катет_y kurs = 4; // контроль }; /////////////////////////// } else { // N_1 - точка 1 < bufer_N - с.ш. if (E_1 > bufer_E) { // E_1 - точка 1 > bufer_E - в.д. katet_x = E_1 - bufer_E; // катет_x katet_y = bufer_N - N_1; // катет_y kurs = 2; // контроль } else { // E_1 - точка 1 < bufer_E - в.д. katet_x = bufer_E - E_1; // катет_x katet_y = bufer_N - N_1; // катет_y kurs = 3; // контроль }; }; /////////////////////////////////////////// тангенс: //katet_x = katet_x * 7; // катет_x -сантиметры //katet_y = katet_y * 11; // катет_y -сантиметры //katet_x_y = katet_y / katet_x; // катет_x_y //kurs = katet_x_y; // контроль /////////////////////////////////////////// точка 0: //if ( (N_1 == 0) || (E_1 == 0) ) {kurs = 0;}; //////////////////////////////////////////////////////////// flag4_GPS = 1; // флаг4 UART разбор start_LCD: // > старт LED if (flag_start_LCD) goto GPS_LED; // > LED /////////////////////////////////////////// очистка буфер LED: if (cikl_GPS==0) { // счёт цикл GPS CLS_LED(); // очистка буфер LED -7mc }; if (cikl_GPS==1) { // счёт цикл GPS CLS_LED2(); // очистка буфер2 LED -7mc }; ////////////////////////////////////////// координаты: if (cikl_GPS==2) { // счёт цикл GPS tochka_GPS(b_E, b_N); // E(x), N(y) // буфер LED -4mc }; ////////////////////////////////////////// if (cikl_GPS==3) { // счёт цикл GPS tochka_GPS_2(b_E, b_N); // E(x), N(y) // буфер LED -4mc }; ////////////////////////////////////////// развёртка: if (cikl_GPS==4) { // счёт цикл GPS razvertka_GPS(); // буфер LED -8mc }; ////////////////////////////////////////// if (cikl_GPS==5) { // счёт цикл GPS razvertka_GPS_2(); // буфер LED -8mc }; ////////////////////////////////////////// счёт LED: cikl_GPS++; // счёт цикл GPS if (cikl_GPS > 5){ // счёт цикл GPS cikl_GPS=0; // счёт цикл GPS flag_start_LCD = 1; // старт LCD }; ////////////////////////////////////////// goto _5; // LED > GPS_LED: // > LED if (!flag3_GPS) goto _5; // LED > //////////////////////////////////////////////////// масштаб: ////////////////////////////////////////// GPS_ старт >0<: if (!flag_EN) { // флаг >0< start_E = bufer_E; // старт start_N = bufer_N; // старт flag_EN = 1; }; ////////////////////////////////////// делитель -начальное 1 if (del_EN == 0) del_EN = 1; // делитель ////////////////////////////////////////// GPS_Data +/-: if (bufer_E > start_E) { b_E = bufer_E - start_E; // градусы b_E /= del_EN; // делитель -начальное 1 if (b_E > 63) b_E = 63; b_E = b_E + 64; } else { b_E = start_E - bufer_E; // градусы b_E /= del_EN; // делитель -начальное 1 if (b_E > 64) b_E = 64; b_E = 64 - b_E; }; ////////////////////////// if (bufer_N > start_N) { b_N = bufer_N - start_N; // градусы b_N /= del_EN; // делитель -начальное 1 if (b_N > 31) b_N = 31; b_N = b_N + 32; } else { b_N = start_N - bufer_N; // градусы b_N /= del_EN; // делитель -начальное 1 if (b_N > 32) b_N = 32; b_N = 32 - b_N; }; //////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////// LED: /////////////////////////////////////////// очистка буфер LED: if (cikl_GPS==0) { // счёт цикл GPS CLS_LED(); // очистка буфер LED -7mc }; if (cikl_GPS==1) { // счёт цикл GPS CLS_LED2(); // очистка буфер2 LED -7mc }; ////////////////////////////////////////// TX UART: if (cikl_GPS==2) { // счёт цикл GPS bufer_GPS[0]='$'; bufer_GPS[1]='G'; bufer_GPS[2]='N'; bufer_GPS[3]='G'; bufer_GPS[4]='G'; bufer_GPS[5]='A'; //UCSR0B=0x48; // TX 0 GPS //UDR0 = bufer_GPS[0]; // старт TX UART }; ////////////////////////////////////////// координаты: if (cikl_GPS==3) { // счёт цикл GPS tochka_GPS(b_E, b_N); // E(x), N(y) > буфер LED -4mc }; ////////////////////////////////////////// if (cikl_GPS==4) { // счёт цикл GPS tochka_GPS_2(b_E, b_N); // E(x), N(y) > буфер LED -4mc }; ////////////////////////////////////////// развёртка: if (cikl_GPS==5) { // счёт цикл GPS razvertka_GPS(); // буфер LED -8mc }; ////////////////////////////////////////// if (cikl_GPS==6) { // счёт цикл GPS razvertka_GPS_2(); // буфер LED -8mc }; ////////////////////////////////////////// счёт LED: cikl_GPS++; // счёт цикл GPS if (cikl_GPS > 6){ // счёт цикл GPS cikl_GPS=2; flag3_GPS = 0; // флаг3 GPS полный flag4_GPS = 0; // флаг4 GPS разбор UCSR0B=0x90; // RX 0 GPS //PORTA.5=0; // контроль }; ////////////////////////////////////////// goto _5; // LED > //////////////////////////////////////////////////////////////////////////////////////////// _255: //menu = 255: > ОШИБКА EEPROM //////////////////////////////////////////////////////////////////////////////////////////// kursor(0); fpp(128); // kursor(1); fpp(128); // kursor(2); fpp(128); // kursor(3); // fpp(24); LED('О'); LED('Ш'); LED('И'); LED('Б'); LED('К'); LED('А'); fpp(8); LED('E'); LED('E'); LED('P'); LED('R'); LED('O'); LED('M'); fpp(24); kursor(4); fpp(128); // kursor(5); fpp(128); // kursor(6); fpp(128); // kursor(7); fpp(128); // goto _5; // LCD > //////////////////////////////////////////////////////////////////////////////////////////// _5: // LED > PORTB.7=1; // SS OLED 128x64 PORTG |= 0b00001000; // SS OLED2 128x64 SPSR &= 0b11111110; // SPI 8 Мгц/4 = 2 МГц > /////////////////////// n++; // таймер /////////////////////// goto _1; // > цикл //////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////// }