#include #include ///////////////////////////////////////////////////////////////////////////////////////////// // ATmega128: // RC -8 МHz; фьюзы: Low E4; Higt 99 (CKOPT -off); Extended FE (Watchdog -on; M103C -off). // кварц -8 МHz; фьюзы: Low EF; Higt 89 (CKOPT -on); Extended FE (Watchdog -on; M103C -off). ///////////////////////////////////////////////////////////////////////////////////////////// // nRF24L01: преамбула -1, адрес -5, Data -32, CRC16 -2 // скорость: 250kbps; 0,001.280с. // 32 пак/c. цикл 0,031.25c. ///////////////////////////////////////////////////////////////////////////////////////////// // OLED 1: SSD1309 СЕРВИСНЫЙ // OLED 2: SH1106 АВТОПИЛОТ // OLED 3: SH1106 ЭХОЛОТ ///////////////////////////////////////////////////////////////////////////////////////////// // Data пульт // MAC_D/MAC_S/Type/IP_D/IP_S/кнопки/частота/мощность/ //8 // АЦП/АЦП1/АЦП2/АЦП3/АЦП4/АЦП5/АЦП6/АЦП7 //8 // kor0/kor1/kor2/kor3/kor4/kor5/kor6/kor7 //8 // GPS_F/GPS_N/kompas_F/kompas_N/0/номер/CRC16/CRC16 //8 //////////////////////////////////// // 00 MAC_Destination: 0...255 // 01 MAC_Source: 0...255 // 02 Type: 0...255 // 03 IP_Destination: 0...255 // 04 IP_Source: 0...255 // 05 k - кнопки: 0...255 // (........) // (........) // (........) 0- меню // (........) 1- меню + / 3- фары // (.....1..) 2- обдув 40/50/60/70/80; // (....1...) 3- Вкл(Выкл) фары // (........) // (..1.....) 5- меню - / 5- аккумулятор // (.1......) 6- Вкл выгрузка // (1.......) 7- флаг свет // 06 ch - частота: 2.450GHz (2.400GHz...2.525GHz) // 07 pw - мощность: TX -11 10 01 00 -начальное 0 //////////////////////////////////// // 08 u - АЦП: 0...255. // 09 u1 - АЦП1: 0...255. / ШИМ1 // 10 u2 - АЦП2: 0...255. / ШИМ2 // 11 u3 - АЦП3: 0...255. / ШИМ3 // 12 u4 - АЦП4: 0...255. // 13 u5 - АЦП5: 0...255. // 14 u6 - АЦП6: 0...255. // 15 u7 - АЦП7: 0...255. //////////////////////////////////// // 16 kor0: 0...255 // 17 kor1: 0...255 // 18 kor2: 0...255 // 19 kor3: 0...255 // 20 kor4: 0...255 // 21 kor5: 0...255 // 22 kor6: 0...255 // 23 kor7: 0...255 //////////////////////////////////// // 24 флаг2 GPS_F: 0/1. // 25 номер GPS_N: 0...79 // 26 флаг2 kompas_F: 0/1. // 27 номер kompas_N: 0...79 // 28 // 29 n - номер пакета пульт: 0...255. // 30 CRC16 // 31 CRC16 ///////////////////////////////////////////////////////////////////////////////////////////// // Data модель // MAC_D/MAC_S/Type/IP_D/IP_S/вода/температура/тахометр/ //8 // АЦП/АЦП1/АЦП2/АЦП3/АЦП4/АЦП5/АЦП6/АЦП7 //8 // ASCII/ASCII/ASCII/ASCII/ASCII/ASCII/ASCII/ASCII //8 // GPS_F/kompas_F/0/0/0/номер/CRC16/CRC16 //8 //////////////////////////////////// // 00 MAC_Destination: 0...255 // 01 MAC_Source: 0...255 // 02 Type: 0...255 // 03 IP_Destination: 0...255 // 04 IP_Source: 0...255 // 05 v - вода: // (.......1) 1 - вода модель // (......1.) 1 - выгрузка модель (геркон 2 база) // (.....1..) 1 - выгрузка модель (геркон 1 выгрузка) // (....1...) 1 - выгрузка модель (реле 2 база) // (...1....) 1 - выгрузка модель (реле 1 выгрузка) // (..1.....) 1 - 1PPS - GPS // 06 t - температура модель: ds18b20: 0 C^...128 C^(начальное 85 C^ - 01010101) // 07 tax - тахометр модель: 0...255. //////////////////////////////////// // 08 u - АЦП: 0...255. серво_0 модель // 09 u1 - АЦП1: 0...255. серво_1 модель // 10 u2 - АЦП2: 0...255. серво_2 модель // 11 u3 - АЦП3: 0...255. серво_3 модель // 12 u4 - АЦП4: 0...255. серво_4 модель // 13 u5 - АЦП5: 0...255. tok -датчик тока // 14 u6 - АЦП6: 0...255. g -аккум модель // 15 u7 - АЦП7: 0...255. g2 -аккум2 модель //////////////////////////////////// // 16 ASCII _0: 0...255. // 17 ASCII _1: 0...255. // 18 ASCII _2: 0...255. // 19 ASCII _3: 0...255. // 20 ASCII _4: 0...255. // 21 ASCII _5: 0...255. // 22 ASCII _6: 0...255. // 23 ASCII _7: 0...255. //////////////////////////////////// // 24 флаг2 GPS_F: 0/1. // 25 флаг2 kompas_F: 0/1. // 26 // 27 // 28 // 29 m - номер пакета модель: 0...255. (n (запрос) = m (ответ)). // 30 CRC16 // 31 CRC16 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// SPI: unsigned char tx; // tx - SPI unsigned char rx; // rx - SPI /////////////////////////////////////////////// SPI: void SPI(void) { SPDR=tx; while(!(SPSR & (1<<7))); rx=SPDR; } ///////////////////////////////////////////////////////////////////////////////////////////// LCD: //////////////////////////////////////////////////////////////////////// кораблик - заставка void mini_kartinki_korablik_0(void) { tx=0b11111111; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b10000001; SPI(); tx=0b10000001; SPI(); tx=0b10000001; SPI(); tx=0b10000001; SPI(); tx=0b10000001; SPI(); tx=0b11100001; SPI(); tx=0b11100001; SPI(); tx=0b11100001; SPI(); tx=0b11100001; SPI(); tx=0b11111001; SPI(); tx=0b11111001; SPI(); tx=0b11111001; SPI(); tx=0b11111001; SPI(); tx=0b11100001; SPI(); tx=0b11100001; SPI(); tx=0b11100001; SPI(); tx=0b11100001; SPI(); tx=0b11100001; SPI(); tx=0b10000001; SPI(); tx=0b10000001; SPI(); tx=0b11111101; SPI(); tx=0b10000001; SPI(); tx=0b10000001; SPI(); tx=0b10000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b11111111; SPI(); } void mini_kartinki_korablik_1(void) { tx=0b01111111; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000001; SPI(); tx=0b01000011; SPI(); tx=0b01000111; SPI(); tx=0b01001111; SPI(); tx=0b01001111; SPI(); tx=0b01001111; SPI(); tx=0b01001111; SPI(); tx=0b01001111; SPI(); tx=0b01001111; SPI(); tx=0b01001111; SPI(); tx=0b01001111; SPI(); tx=0b01001111; SPI(); tx=0b01001111; SPI(); tx=0b01001111; SPI(); tx=0b01001111; SPI(); tx=0b01001111; SPI(); tx=0b01001111; SPI(); tx=0b01001111; SPI(); tx=0b01001111; SPI(); tx=0b01000111; SPI(); tx=0b01000011; SPI(); tx=0b01000001; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01111111; SPI(); } //////////////////////////////////////////////////////////////////////// значки - " " void mini_kartinki_0(void) { tx=0b11111111; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b11111111; SPI(); } void mini_kartinki_1(void) { tx=0b01111111; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01111111; SPI(); } //////////////////////////////////////////////////////////////////////// значки - аккумулятор void mini_kartinki_akkum_0(void) { tx=0b11111111; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b11110001; SPI(); tx=0b00010001; SPI(); tx=0b00010001; SPI(); tx=0b00011101; SPI(); tx=0b11011101; SPI(); tx=0b00011101; SPI(); tx=0b00010001; SPI(); tx=0b00010001; SPI(); tx=0b00010001; SPI(); tx=0b00010001; SPI(); tx=0b00010001; SPI(); tx=0b00010001; SPI(); tx=0b00010001; SPI(); tx=0b00010001; SPI(); tx=0b00010001; SPI(); tx=0b00010001; SPI(); tx=0b00011101; SPI(); tx=0b00011101; SPI(); tx=0b00011101; SPI(); tx=0b00010001; SPI(); tx=0b00010001; SPI(); tx=0b11110001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b11111111; SPI(); } void mini_kartinki_akkum_1(void) { tx=0b01111111; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01011111; SPI(); tx=0b01010000; SPI(); tx=0b01010001; SPI(); tx=0b01010001; SPI(); tx=0b01010111; SPI(); tx=0b01010001; SPI(); tx=0b01010001; SPI(); tx=0b01010000; SPI(); tx=0b01010000; SPI(); tx=0b01010000; SPI(); tx=0b01010000; SPI(); tx=0b01010000; SPI(); tx=0b01010000; SPI(); tx=0b01010000; SPI(); tx=0b01010000; SPI(); tx=0b01010001; SPI(); tx=0b01010001; SPI(); tx=0b01010001; SPI(); tx=0b01010001; SPI(); tx=0b01010001; SPI(); tx=0b01010000; SPI(); tx=0b01011111; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01111111; SPI(); } //////////////////////////////////////////////////////////////////////// значки - потоп void mini_kartinki_potop_0(void) { tx=0b11111111; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00100001; SPI(); tx=0b01000001; SPI(); tx=0b10000001; SPI(); tx=0b01000001; SPI(); tx=0b00100001; SPI(); tx=0b01000001; SPI(); tx=0b10000001; SPI(); tx=0b01000001; SPI(); tx=0b00100001; SPI(); tx=0b01000101; SPI(); tx=0b10000101; SPI(); tx=0b11111101; SPI(); tx=0b00100101; SPI(); tx=0b01000101; SPI(); tx=0b10000001; SPI(); tx=0b01000001; SPI(); tx=0b00100001; SPI(); tx=0b01000001; SPI(); tx=0b10000001; SPI(); tx=0b01000001; SPI(); tx=0b00100001; SPI(); tx=0b01000001; SPI(); tx=0b10000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b11111111; SPI(); } void mini_kartinki_potop_1(void) { tx=0b01111111; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000001; SPI(); tx=0b01000010; SPI(); tx=0b01000100; SPI(); tx=0b01000010; SPI(); tx=0b01000001; SPI(); tx=0b01000010; SPI(); tx=0b01000100; SPI(); tx=0b01000010; SPI(); tx=0b01000001; SPI(); tx=0b01000010; SPI(); tx=0b01000100; SPI(); tx=0b01001111; SPI(); tx=0b01000001; SPI(); tx=0b01000010; SPI(); tx=0b01000100; SPI(); tx=0b01000010; SPI(); tx=0b01000001; SPI(); tx=0b01000010; SPI(); tx=0b01000100; SPI(); tx=0b01000010; SPI(); tx=0b01000001; SPI(); tx=0b01000010; SPI(); tx=0b01000100; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01111111; SPI(); } //////////////////////////////////////////////////////////////////////// значки - кулер void mini_kartinki_kuler_0(void) { tx=0b11111111; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00001101; SPI(); tx=0b00011101; SPI(); tx=0b00111001; SPI(); tx=0b01110001; SPI(); tx=0b11100001; SPI(); tx=0b11000001; SPI(); tx=0b11100001; SPI(); tx=0b01110001; SPI(); tx=0b00111001; SPI(); tx=0b00011101; SPI(); tx=0b00001101; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b11111111; SPI(); } void mini_kartinki_kuler_1(void) { tx=0b01111111; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01011000; SPI(); tx=0b01011100; SPI(); tx=0b01001110; SPI(); tx=0b01000111; SPI(); tx=0b01000011; SPI(); tx=0b01000001; SPI(); tx=0b01000011; SPI(); tx=0b01000111; SPI(); tx=0b01001110; SPI(); tx=0b01011100; SPI(); tx=0b01011000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01111111; SPI(); } //////////////////////////////////////////////////////////////////////// значки - ФАРЫ - вкл. void mini_kartinki_fari_ON_0(void) { tx=0b11111111; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b11000001; SPI(); tx=0b00100001; SPI(); tx=0b00010001; SPI(); tx=0b00001001; SPI(); tx=0b00001001; SPI(); tx=0b00001001; SPI(); tx=0b00001001; SPI(); tx=0b11111001; SPI(); tx=0b00000001; SPI(); tx=0b01010001; SPI(); tx=0b01010001; SPI(); tx=0b01010001; SPI(); tx=0b01010001; SPI(); tx=0b01010001; SPI(); tx=0b01010001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b11111111; SPI(); } void mini_kartinki_fari_ON_1(void) { tx=0b01111111; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000001; SPI(); tx=0b01000010; SPI(); tx=0b01000100; SPI(); tx=0b01001000; SPI(); tx=0b01001000; SPI(); tx=0b01001000; SPI(); tx=0b01001000; SPI(); tx=0b01001111; SPI(); tx=0b01000000; SPI(); tx=0b01000101; SPI(); tx=0b01000101; SPI(); tx=0b01000101; SPI(); tx=0b01000101; SPI(); tx=0b01000101; SPI(); tx=0b01000101; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01111111; SPI(); } //////////////////////////////////////////////////////////////////////// значки - ФАРЫ - выкл. void mini_kartinki_fari_OFF_0(void) { tx=0b11111111; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b11000001; SPI(); tx=0b00100001; SPI(); tx=0b00010001; SPI(); tx=0b00001001; SPI(); tx=0b00001001; SPI(); tx=0b00001001; SPI(); tx=0b00001001; SPI(); tx=0b11111001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b00000001; SPI(); tx=0b11111111; SPI(); } void mini_kartinki_fari_OFF_1(void) { tx=0b01111111; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000001; SPI(); tx=0b01000010; SPI(); tx=0b01000100; SPI(); tx=0b01001000; SPI(); tx=0b01001000; SPI(); tx=0b01001000; SPI(); tx=0b01001000; SPI(); tx=0b01001111; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01000000; SPI(); tx=0b01111111; SPI(); } ///////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// индикатор 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 }; ///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// crc: unsigned int crc; // crc - crc unsigned int bcrc; // bcrc - crc буфер unsigned int a; // счёт unsigned int b; // счёт ///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// 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; }; } ///////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// счёт: unsigned char x; // счёт unsigned char z; // счёт unsigned char zn; // счёт ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// связь: unsigned char MAC_Destination; unsigned char MAC_Source; unsigned char Type; unsigned char IP_Destination = 1; // -начальное 1 unsigned char IP_Source; /////////////////////////////////////////////// цикл unsigned char c; // цикл unsigned char fc; // флаг связи unsigned char zvuk_c; // счёт звук нет связи unsigned char flag_radio = 0xFF; // радио -начальное 0xFF /////////////////////////////////////////////// S - метр unsigned char s; // счётчик пакетов s = sT - sR unsigned char sT; // счётчик пакетов пульт unsigned char sR; // счётчик пакетов модель unsigned char kp; // контроль номер пакетов Tx(n) > Rx(m) /////////////////////////////////////////////// контроль CRC 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 n; // номер пакета пульт unsigned char k; // кнопки unsigned char ch=50; // частота запроса -начальное 2.450GHz. -вызывной канал unsigned char chb=50; // частота буфер -начальное 2.450GHz. -вызывной канал unsigned int chi; // частота индикатор unsigned char pw; // мощность TX -11 10 01 00 unsigned char pwb; // буфер мощность TX -11 10 01 00 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 /////////////////////////////////////////////// unsigned char kor0 = 128; // АЦП unsigned char kor1 = 128; // АЦП1 unsigned char kor2 = 128; // АЦП2 unsigned char kor3 = 128; // АЦП3 unsigned char kor4 = 128; // АЦП4 unsigned char kor5 = 128; // АЦП5 unsigned char kor6 = 128; // АЦП6 unsigned char kor7 = 128; // АЦП7 /////////////////////////////////////////////// unsigned char w; // ШИМ unsigned char p; // аккум пульт unsigned char flag_obduv = 0xFF; // флаг обдув -начальное 0xFF unsigned char obduv = 40; // обдув 40/50/60/70/80 unsigned char taimer; // таймер ///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////// модель: unsigned char m; // номер пакета модель unsigned char v; // датчик вода модель unsigned char t; // датчик температура модель unsigned char in_t; // счёт индикатор t модель unsigned int tax; // тахометр модель unsigned char g; // аккум модель unsigned char g2; // аккум модель 2 unsigned int tok; // датчик тока модель unsigned int btok; // буфер датчик тока модель unsigned int kor_tok = 255; // коррекция датчик тока модель -начальное 255 unsigned int servo_0; // серво модель 1,142v-(1,700v)-2,200v unsigned int bservo_0; // буфер серво модель unsigned int kor_servo_0 = 87; // коррекция серво модель -начальное 87(1,700v) unsigned int servo_1; // серво модель 1,142v-(1,700v)-2,200v unsigned int servo_2; // серво модель 1,142v-(1,700v)-2,200v unsigned int servo_3; // серво модель 1,142v-(1,700v)-2,200v unsigned int servo_4; // серво модель 1,142v-(1,700v)-2,200v ///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////// кнопки: /////////////////////////////////////////////// 3- меню верх unsigned char k3; // счётчик кнопки 3 unsigned char flag_k3; // флаг кнопки 3 /////////////////////////////////////////////// 0- меню низ unsigned char k0; // счётчик кнопки 0 unsigned char flag_k0; // флаг кнопки 0 /////////////////////////////////////////////// 1- Выбор меню + / фары unsigned char k1; // счётчик кнопки 1 unsigned char flag_k1; // флаг кнопки 1 /////////////////////////////////////////////// 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 /////////////////////////////////////////////// кнопки -0,000.006c: interrupt [TIM0_OVF] void timer0_ovf_isr(void) // 8.000.000/8=1.000.000/256= цикл 3.906 { //PORTA.6=1; // контроль if (PINC.3==0) flag_k3 = 1; // кнопка 3 - меню верх if (PINC.0==0) flag_k0 = 1; // кнопка 0 - меню низ if (PINC.1==0) flag_k1 = 1; // кнопка 1 - Выбор меню + / фары if (PINC.2==0) flag_k5 = 1; // кнопка 5 - Выбор меню - / резервный аккумулятор if (PINC.4==0) flag_k6 = 1; // кнопка 6 - выгрузка if (PINC.5==0) flag_k7 = 1; // кнопка 7 - круиз-контроль //PORTA.6=0; // контроль } ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// часы: //char hr; // счётчик //char dni; // дни 00 //char hour; // час 00 //char min; // минуты 00 //char sec; // секунды 00 unsigned int kor=31250; // коррекция часы // 8 MHz ///////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// индикатор LED: unsigned char LED_1_2_3 ; // счёт LED_1_2_3 -начальное 0 unsigned char y; // счёт заставка LED unsigned char LCD_ON = 0xFF; // LED_ON -начальное 0xFF unsigned char menu; // счёт меню LED 1 unsigned char flag_menu_1;// флаг выбор меню+ unsigned char flag_menu_2;// флаг выбор меню- unsigned char bufer_menu = 1; // буфер счётчик меню LED -начальное 1 (быбор модель) unsigned char menu2; // счёт меню LED 2 unsigned char kontr=250; // контрастность LED -начальное 250 unsigned char h; // шкала unsigned char hp; // шкала аккум пульт unsigned char hg; // шкала аккум модель unsigned char hg2; // шкала аккум модель 2 /////////////////////////////////////////////// авто выкл. LED unsigned char flag_AU_OFF_LED = 0xFF; // флаг АВТО выкл. LED -начальное 0xFF unsigned int y1; // счёт авто выкл. LED unsigned char bufer_u; // буфер АЦП unsigned char bufer_u1; // буфер ШИМ ///////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// бузер: unsigned char f_buzer=0xFF; // флаг бузер ///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////// защита аккумов от переразряда: unsigned char zasita_1=40; // защита аккум от переразряда модель 1 unsigned char f_zasita_1=0x00; // флаг защита аккум от переразряда модель 1 -начальное 0x00 unsigned char ff_zasita_1; // флаг unsigned char zasita_2=40; // защита аккум от переразряда модель 2 unsigned char f_zasita_2=0x00; // флаг защита аккум от переразряда модель 2 -начальное 0x00 unsigned char ff_zasita_2; // флаг зуммер ///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////// ГОТОВ: unsigned char gotov; // готов ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// круиз-контроль: unsigned char flag_ON_kruiz; // флаг вкл. круиз-контроль unsigned char flag_kruiz; // флаг круиз-контроль unsigned char f_flag_kruiz = 0xFF; // флаг круиз-контроль unsigned char b_bufer_kruiz; // буфер круиз-контроль unsigned char bb_bufer_kruiz; // буфер круиз-контроль unsigned char bufer_kruiz=127;// буфер круиз-контроль ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// Вкл свет: unsigned char flag_svet = 0xFF; // флаг свет -начальное 0xFF ///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// Вкл потоп: unsigned char flag_potop = 0xFF;// флаг потоп ///////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// PPM: unsigned char PPM_ON = 0xFF; //PPM -вкл/выкл. -начальное 0xFF вкл. unsigned char PPM_pozitiv; //PPM -позитивный 0xFF/негативный 0x00 сигнал. -начальное 0x00 unsigned int PPM_kanal=878; //PPM -длительность канальных имп. unsigned int PPM_strob=366; //PPM -длительность строб имп. unsigned int PPM_pauza=7000; //PPM -длительность синхро паузы. unsigned char st_PPM; //PPM счёт /////////////////////////////////////////////// unsigned int PPM[9]={ //PPM: 0, // 0 -PPM 0 0, // 1 -PPM 1 0, // 2 -PPM 2 0, // 3 -PPM 3 0, // 4 -PPM 4 0, // 5 -PPM 5 0, // 6 -PPM 6 0, // 7 -PPM 7 0 // 8 -синхропауза }; /////////////////////////////////////////////// PPM -0,000.022c interrupt [TIM3_COMPA] void timer3_compa_isr(void) { //PORTA.6=1; // контроль ICR3H=(PPM[st_PPM]>>8); ICR3L=PPM[st_PPM]; st_PPM++; // счёт PPM if (st_PPM==9) { st_PPM=0; //PORTD.0=~PORTD.0; // контроль }; //PORTA.6=0; // контроль } ///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// стик 0...7 > выбор АЦП 0...7: unsigned char stik_0 = 0x00; // стик 0 unsigned char stik_1 = 0x01; // стик 1 unsigned char stik_2 = 0x02; // стик 2 unsigned char stik_3 = 0x03; // стик 3 unsigned char stik_4 = 0x04; // стик 4 unsigned char stik_5 = 0x05; // стик 5 unsigned char stik_6 = 0x06; // стик 6 unsigned char stik_7 = 0x07; // стик 7 /////////////////////////////////////////////////////////// стик 0...7 > инверсия: unsigned char stik_in_0 = 0xFF; // стик 0 unsigned char stik_in_1 = 0xFF; // стик 1 unsigned char stik_in_2 = 0xFF; // стик 2 unsigned char stik_in_3 = 0xFF; // стик 3 unsigned char stik_in_4 = 0xFF; // стик 4 unsigned char stik_in_5 = 0xFF; // стик 5 unsigned char stik_in_6 = 0xFF; // стик 6 unsigned char stik_in_7 = 0xFF; // стик 7 ///////////////////////////////////////////////////////////////////////////////////////////// RESET: unsigned char flag_RESET = 0x00; // RESET -начальное 0x00. ///////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// 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) {tx=0xAF; SPI();} // Display ON - 0xAF else {tx=0xAE; SPI();}; // 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 tx=0b10110000|bi; SPI(); // Y - адрес 1011xxxx tx=0b00010000; SPI(); // X - адрес 0001xxxx Hig //////////////////////////////////////////////////////////////////////// //tx=0b00000010; SPI(); // X - адрес 0000xxxx Low (Начальное 2). // SH1106 tx=0b00000000; SPI(); // X - адрес 0000xxxx Low (Начальное 0).// HDG12864F-1 // SSD //////////////////////////////////////////////////////////////////////// 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 tx=0b10110000|bi; SPI(); // Y - адрес 1011xxxx tx=0b00010000; SPI(); // X - адрес 0001xxxx Hig //////////////////////////////////////////////////////////////////////// tx=0b00000010; SPI(); // X - адрес 0000xxxx Low (Начальное 2). // SH1106 tx=0b00000000; SPI(); // 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++) { tx=ASCII[bi][zn]; SPI(); }; tx=0b00000000; SPI(); // " " } ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// 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); } ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// 0000: -2mc //-эхолот void st_exolot(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); tx=0b01000000; SPI(); // "." tx=0b00000000; SPI(); // " " 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); tx=0b01000000; SPI(); // "." tx=0b00000000; SPI(); // " " z=0; while (bi>0) {z++; bi=bi-1;}; LED(z+48); } ///////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// шкала 0 аккум: void skala_0_ak(unsigned char bi) { tx=0b11111110; SPI(); // | for (x=0;x<31;x++) { if (x<(bi/2)) h=0b11111110; // |--- else h=0b10000010; tx=h; SPI(); }; tx=0b11111110; SPI(); // |---| tx=0b00111000; SPI(); // |---|| } ///////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// датчик тока 00.0: void st_tok(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); tx=0b01000000; SPI(); // "." tx=0b00000000; SPI(); // " " z=0; while (bi) {z++; bi=bi-1;}; LED(z+48); } ///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// шкала АЦП: --||-- void skala_ADC(unsigned char bi) { bi /= 4; for (x=0;x<64;x++) { if (x==(bi)) { tx=0b01111111; SPI(); tx=0b01111111; SPI(); } else { tx=0b00001000; SPI(); }; }; } ///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// автопилот GPS: unsigned char flag_GPS_avtopilot; // флаг GPS автопилот unsigned long kurs; // курс unsigned long katet_x; // катет_x unsigned long katet_y; // катет_y //unsigned long katet_x_y; // катет_x_y /////////////////////////////////////////////// точки GPS > EEPROM unsigned long N_1; // точка 1 unsigned long E_1; // точка 1 unsigned long N_2; // точка 2 unsigned long E_2; // точка 2 unsigned long N_3; // точка 3 unsigned long E_3; // точка 3 unsigned long N_4; // точка 4 unsigned long E_4; // точка 4 unsigned long N_5; // точка 5 unsigned long E_5; // точка 5 unsigned long N_6; // точка 6 unsigned long E_6; // точка 6 unsigned long N_7; // точка 7 unsigned long E_7; // точка 7 unsigned long N_8; // точка 8 unsigned long E_8; // точка 8 /////////////////////////////////////////////// буфер точки GPS > EEPROM unsigned long bufer_N_1; // точка 1 unsigned long bufer_E_1; // точка 1 unsigned long bufer_N_2; // точка 2 unsigned long bufer_E_2; // точка 2 unsigned long bufer_N_3; // точка 3 unsigned long bufer_E_3; // точка 3 unsigned long bufer_N_4; // точка 4 unsigned long bufer_E_4; // точка 4 unsigned long bufer_N_5; // точка 5 unsigned long bufer_E_5; // точка 5 unsigned long bufer_N_6; // точка 6 unsigned long bufer_E_6; // точка 6 unsigned long bufer_N_7; // точка 7 unsigned long bufer_E_7; // точка 7 unsigned long bufer_N_8; // точка 8 unsigned long bufer_E_8; // точка 8 ///////////////////////////////////////////////////////////////////////////////////////////// GPS: //////////////////////////////////////////////////////////////////////// буфер LED1 GPS: unsigned char bufer_LED1[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 }; /////////////////////////////////////////////// GPS unsigned char stroka1_y_8; // счёт Y_8 unsigned char stroka1_y_1; // счёт Y_1 unsigned char st1_x; // счёт X unsigned char st1_y; // счёт Y unsigned char bufer1_x; // буфер X unsigned char bufer1_y; // буфер Y /////////////////////////////////////////////// очистка буфер LED1: -7mc void CLS1_LED(void) { ///////////////////////////////// строка Y: for (st1_y = 0; st1_y < 4; st1_y++) { //////////////////////////////// строка X: for (st1_x = 0; st1_x < 128; st1_x++) { bufer_LED1[st1_x][st1_y]=0x00; // буфер 0x00 }; }; } /////////////////////////////////////////////// очистка буфер2 LED1: -7mc void CLS1_LED2(void) { ///////////////////////////////// строка Y: for (st1_y = 4; st1_y < 8; st1_y++) { //////////////////////////////// строка X: for (st1_x = 0; st1_x < 128; st1_x++) { bufer_LED1[st1_x][st1_y]=0x00; // буфер 0x00 }; }; } ///////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// 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 }; /////////////////////////////////////////////// unsigned char flag_GPS_radio; // флаг GPS radio полный /////////////////////////////////////////////// unsigned char crc_GPS; // crc GPS crc^ - $...* unsigned char bcrc_GPS; // буфер crc GPS crc^ - $...* /////////////////////////////////////////////// unsigned char flag3_GPS; // флаг3 GPS полный unsigned char flag4_GPS; // флаг4 GPS разбор ///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// GPS > USART0 RX: 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 { //PORTA.6=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 //PORTA.6=0; // контроль //PORTA.5=1; // контроль }; } ///////////////////////// фильтр 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 //PORTA.6=1; // контроль }; } else { st_filtr_GPS = 0; // счёт фильтр GPS }; }; ///////////////////////// //PORTA.6=0; // контроль } ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// GPS > UART0 TX: unsigned char st_GPS_TX; // счёт GPS TX -начальное 0 /////////////////////////////////////////////// interrupt [USART0_TXC] void usart0_tx_isr(void) { //PORTA.6=1; // контроль if (!flag_M8N_m8n) { // флаг M8N (0)/m8n (1) st_GPS_TX++; // M8N (0) if (st_GPS_TX < 70) {UDR0 = bufer_GPS[st_GPS_TX];}; // буфер GPS if (st_GPS_TX == 70) {UDR0 = 0x0D;}; //0x0D, 0x0A // строка \r\n if (st_GPS_TX == 71) {UDR0 = 0x0A;}; //0x0D, 0x0A // строка \r\n if (st_GPS_TX > 71) { st_GPS_TX = 0; UCSR0B=0x00; // USART0 }; } else { // m8n (1) st_GPS_TX++; if (st_GPS_TX < 73) {UDR0 = bufer_GPS[st_GPS_TX];}; // буфер GPS if (st_GPS_TX == 73) {UDR0 = 0x0D;}; //0x0D, 0x0A // строка \r\n if (st_GPS_TX == 74) {UDR0 = 0x0A;}; //0x0D, 0x0A // строка \r\n if (st_GPS_TX > 74) { st_GPS_TX = 0; UCSR0B=0x00; // USART0 }; }; //PORTA.6=0; // контроль } /////////////////////////////////////////////// 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 /////////////////////////////////////////////// компас LED unsigned long azimut; // азимут /////////////////////////////////////////////// точкка GPS > буфер LED1: -11mc void tochka_GPS(unsigned char x, unsigned char y) { bufer1_x = x; //буфер X -128; bufer1_y = (64-y); //буфер Y -64; ///////////////////////////////// строка Y_8, Y_1: stroka1_y_8 = 0; while (bufer1_y > 8) {stroka1_y_8++; bufer1_y -= 8;}; stroka1_y_1 = 0; while (bufer1_y) {stroka1_y_1++; bufer1_y -= 1;}; if (stroka1_y_1 == 8) {stroka1_y_1 = 0; stroka1_y_8++;}; bufer1_y = (1 << stroka1_y_1); ///////////////////////////////// строка Y: for (st1_y = 0; st1_y < 4; st1_y++) { //////////////////////////////// строка X: for (st1_x = 0; st1_x < 128; st1_x++) { ///////////////////////////////////////////// точка > буфер if ((st1_x == bufer1_x)&&(st1_y == stroka1_y_8)) {bufer_LED1[st1_x][st1_y] |= bufer1_y;}; }; }; } /////////////////////////////////////////////// точкка GPS 2 > буфер LED1: -11mc void tochka_GPS_2(unsigned char x, unsigned char y) { bufer1_x= x; //буфер X -128; bufer1_y = (64-y); //буфер Y -64; ///////////////////////////////// строка Y_8, Y_1: stroka1_y_8 = 0; while (bufer1_y > 8) {stroka1_y_8++; bufer1_y -= 8;}; stroka1_y_1 = 0; while (bufer1_y) {stroka1_y_1++; bufer1_y -= 1;}; if (stroka1_y_1 == 8) {stroka1_y_1 = 0; stroka1_y_8++;}; bufer1_y = (1 << stroka1_y_1); ///////////////////////////////// строка Y: for (st1_y = 4; st1_y < 8; st1_y++) { //////////////////////////////// строка X: for (st1_x = 0; st1_x < 128; st1_x++) { ///////////////////////////////////////////// точка > буфер if ((st1_x == bufer1_x)&&(st1_y == stroka1_y_8)) {bufer_LED1[st1_x][st1_y] |= bufer1_y;}; }; }; } /////////////////////////////////////////////// развёртка GPS > буфер LED1: -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); //////////////////////////// //for (st_x = 47; st_x < 98; st_x++) { // SPDR=(bufer_LED[st_x][st_y]); while(!(SPSR & (1<<7))); // буфер LED1 //}; st_1000(del_EN); // делитель 000 st_100(sputnik_GPS); // спутники ///////////////////////////////// строка Y: for (st1_y = 1; st1_y < 4; st1_y++) { kursor1(st1_y); //////////////////////////////// строка X: for (st1_x = 0; st1_x < 128; st1_x++) { tx=(bufer_LED1[st1_x][st1_y]); SPI(); // буфер LED1 }; }; } /////////////////////////////////////////////// развёртка GPS 2 > буфер LED1: -8mc void razvertka_GPS_2(void) { ////////////////////////////////// строка Y: for (st1_y = 4; st1_y < 7; st1_y++) { kursor1(st1_y); ///////////////////////////////// строка X: for (st1_x = 0; st1_x < 128; st1_x++) { tx=(bufer_LED1[st1_x][st1_y]); SPI(); // буфер LED1 }; }; ////////////////////////////////// строка Y: kursor1(7); ////////////////////////////////// Data X,Y: st_100000000(bufer_N); fpp(2); LED('N'); fpp(4); st_100000000(bufer_E); fpp(2); LED('E'); } ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// эхолот: ////////////////////////////////////////////////////////////////////// буфер LED эхолот: 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 }; }; } /////////////////////////////////////////////// unsigned long glubina; // глубина -1693 unsigned long bufer_glubina; // буфер глубина -1693 unsigned char mashtab_exolot = 1;// масштаб эхолот -начальное 1 /////////////////////////////////////////////// эхолот LED unsigned char sdvig_exolot; // счёт сдвиг эхолот << unsigned char cikl_exolot; // счёт цикл эхолот /////////////////////////////////////////////// точка эхолот > буфер LED: -0,1mc void tochka_exolot(unsigned char x, unsigned char y) { bufer_x= x/2; //буфер X -128; bufer_y = y/4; //буфер 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 = (0b11111111 << stroka_y_1); ///////////////////////////////// строка Y: for (st_y = 0; st_y < 8; st_y++) { if (st_y == stroka_y_8) {bufer_LED[bufer_x][st_y] = bufer_y;} // буфер LED else { if (st_y > stroka_y_8) {bufer_LED[bufer_x][st_y] = 0xFF;} // буфер LED else {bufer_LED[bufer_x][st_y] = 0x00; }; // буфер LED }; }; } /////////////////////////////////////////////// развёртка эхолот > буфер LED: -8mc void razvertka_exolot(void) { ////////////////////////////////// строка Y: kursor1(0); ////////////////////////////////// Data X,Y: st_exolot(glubina); // 0...9999 -эхолот // глубина -1000 ////////////////////////////////// строка X: for (st_x = 24; st_x < 128; st_x++) { tx=(bufer_LED[st_x][0]); SPI(); // буфер > LED }; //////////////////////////////// строка Y: for (st_y = 1; st_y < 4; st_y++) { kursor1(st_y); //////////////////////////////// строка X: for (st_x = 0; st_x < 128; st_x++) { tx=(bufer_LED[st_x][st_y]); SPI(); // буфер > LED }; }; } /////////////////////////////////////////////// развёртка эхолот > буфер 2 LED: -8mc void razvertka_exolot_2(void) { ///////////////////////////////// строка Y: for (st_y = 4; st_y < 8; st_y++) { kursor1(st_y); //////////////////////////////// строка X: for (st_x = 0; st_x < 128; st_x++) { tx=(bufer_LED[st_x][st_y]); SPI(); // буфер > LED }; }; } /////////////////////////////////////////////// сдвиг эхолот > буфер LED <<: -12mc void sdvig_exolot_LED(void) { ///////////////////////////////// строка Y: for (st_y = 0; st_y < 4; st_y++) { //////////////////////////////// строка X: sdvig_exolot=0; for (st_x = 0; st_x < 128; st_x++) { sdvig_exolot++; bufer_LED[st_x][st_y]=bufer_LED[sdvig_exolot][st_y]; // буфер LED << }; }; } /////////////////////////////////////////////// сдвиг эхолот > 2 буфер LED <<: -12mc void sdvig_exolot_2_LED(void) { ///////////////////////////////// строка Y: for (st_y = 4; st_y < 8; st_y++) { //////////////////////////////// строка X: sdvig_exolot=0; for (st_x = 0; st_x < 128; st_x++) { sdvig_exolot++; bufer_LED[st_x][st_y]=bufer_LED[sdvig_exolot][st_y]; // буфер LED << }; }; } ///////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// эхолот: unsigned char st_bufer_exolot; // счёт буфер kompas -начальное 0 //unsigned char bufer_kompas[64]={ // протокол ... //"Ypr 320 336 352Raw 004,28.51,970.97,358.09!Gap=1000mm.........." // -64 //}; // Ypr 320 336 352Raw 004,28.51,970.97,358.09!Gap=0413mm // -53 // Raw 008-азимут 27.36-температура 989.88-давление 196.40-высота // Gap 1000-глубина unsigned char bufer_exolot[12]={ // протокол ... "Gap=1000mm." // -11 }; // Gap 1000-глубина /////////////////////////////////////////////// unsigned char flag_exolot_radio; // флаг exolot_radio полный /////////////////////////////////////////////// unsigned char flag_exolot_full; // флаг эхолот полный ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// UART1 RX > эхолот: unsigned char filtr_exolot[]={"Gap"}; // фильтр exolot "Gap" unsigned char st_filtr_exolot; // счёт фильтр exolot unsigned char st_st_exolot = 3; // счёт kompas unsigned char flag_filtr_exolot; // флаг filtr_exolot interrupt [USART1_RXC] void usart1_rx_isr(void) // -0,000.010c { //PORTA.7=1; // контроль 2 //////////////////////// буфер kompas if (flag_filtr_exolot) { bufer_exolot[st_st_exolot] = UDR1; // буфер st_st_exolot st_st_exolot++; // счёт st_st_exolot if (st_st_exolot > 7) { // протокол. Gap flag_exolot_full = 1; // флаг эхолот полный st_st_exolot = 3; // счёт st_st_exolot UCSR1B=0x00; // USART1 //PORTA.5=1; // контроль //PORTA.6=0; // контроль }; } ///////////////////////// фильтр kompas else { bufer_exolot[st_filtr_exolot] = UDR1; if (bufer_exolot[st_filtr_exolot] == filtr_exolot[st_filtr_exolot]) { st_filtr_exolot++; // счёт фильтр exolot if (st_filtr_exolot == 3) { flag_filtr_exolot = 1; // флаг flag_filtr_exolot st_filtr_exolot = 0; PORTA.6=1; // контроль }; } else { st_filtr_exolot = 0; // счёт фильтр exolot }; }; ///////////////////////// //PORTA.7=0; // контроль 2 } ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// эхолот > UART1_TX: unsigned char st_UART1_TX; //unsigned char st_kompas_TX; // счёт kompas TX -начальное 0 /////////////////////////////////////////////// /* interrupt [USART1_TXC] void usart1_tx_isr(void) { //PORTA.6=1; // контроль st_kompas_TX++; // if (st_kompas_TX < 52) {UDR1 = bufer_kompas[st_kompas_TX];}; // буфер kompas if (st_kompas_TX == 52) {UDR1 = 0x0D;}; //0x0D, 0x0A // строка \r\n if (st_kompas_TX == 53) {UDR1 = 0x0A;}; //0x0D, 0x0A // строка \r\n if (st_kompas_TX > 53) { st_kompas_TX = 0; UCSR1B=0x00; // USART1 }; //PORTA.6=0; // контроль //UCSR1B=0x00; // USART1 //UCSR1B=0x90; // RX 1 } */ ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// LCD_EEPROM: unsigned char flag_TX_EEPROM; // флаг запись EEPROM unsigned char flag_AU_EEPROM = 0xFF; // флаг АВТО сохр EEPROM -начальное 0xFF (вкл.) /////////////////////////////////////////////// EEPROM_TX_RX: void LCD_EEPROM(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_TX: void EEPROM_TX(void) { /////////////////////////////////////////////// пульт > буфер: bufer[0]=kontr; // контрастность OLED 128x64 - SH1106. bufer[1]=(kor>>8); // коррекция часы: -8 МHz. bufer[2]=kor; // коррекция часы: -8 МHz. bufer[3]=ch; // частота (2.400GHz...2.525GHz). bufer[4]=pw; // мощность nRF24L01+: 11 10 01 00 bufer[5]=del_EN; // делитель GPS -начальное 0x01 bufer[6]=obduv; // обдув 40/50/60/70/80 bufer[7]=zasita_1; // защита аккум от переразряда модель 1 bufer[8]=f_zasita_1; // флаг защита аккум от переразряда модель 1 bufer[9]=zasita_2; // защита аккум от переразряда модель 2 bufer[10]=f_zasita_2; // флаг защита аккум от переразряда модель 2 bufer[11]=f_buzer; // флаг бузер bufer[12]=bufer_kruiz; // буфер круиз-контроль bufer[13]=IP_Destination;// IP_Destination -начальное 1 bufer[14]=flag_svet; // флаг Вкл свет bufer[15]=flag_potop; // флаг Вкл потоп bufer[16]=bufer_menu; // буфер меню LED 1 bufer[17]=flag_AU_EEPROM; // флаг АВТО сохр EEPROM -начальное 0xFF bufer[18]=menu2; // меню LED 2 bufer[19]=flag_AU_OFF_LED; // флаг АВТО выкл. LED bufer[20]=flag_obduv; // флаг обдув -начальное 0xFF bufer[21]=flag_radio; // флаг радио -начальное 0xFF bufer[22]=PPM_ON; // PPM -вкл/выкл. -начальное 0x00 выкл. bufer[23]=PPM_pozitiv; // PPM -позитивный 0xFF/негативный 0x00 сигнал. -начальное 0x00 bufer[24]=(PPM_kanal>>8); // PPM -длительность канальных имп. bufer[25]=PPM_kanal; // PPM -длительность канальных имп. bufer[26]=(PPM_strob>>8); // PPM -длительность строб имп. bufer[27]=PPM_strob; // PPM -длительность строб имп. bufer[28]=(PPM_pauza>>8); // PPM -длительность синхро паузы. bufer[29]=PPM_pauza; // PPM -длительность синхро паузы. bufer[30]=(kor_tok>>8); // коррекция датчик тока -начальное 255 bufer[31]=kor_tok; // коррекция датчик тока -начальное 255 bufer[32]=stik_0; // стик 0 bufer[33]=stik_1; // стик 1 bufer[34]=stik_2; // стик 2 bufer[35]=stik_3; // стик 3 bufer[36]=stik_4; // стик 4 bufer[37]=stik_5; // стик 5 bufer[38]=stik_6; // стик 6 bufer[39]=stik_7; // стик 7 bufer[40]=stik_in_0; // стик 0 bufer[41]=stik_in_1; // стик 1 bufer[42]=stik_in_2; // стик 2 bufer[43]=stik_in_3; // стик 3 bufer[44]=stik_in_4; // стик 4 bufer[45]=stik_in_5; // стик 5 bufer[46]=stik_in_6; // стик 6 bufer[47]=stik_in_7; // стик 7 /////////////////////////////////////////////// точки bufer[48]=(N_1>>24); bufer[49]=(N_1>>16); bufer[50]=(N_1>>8); bufer[51]=N_1; // точка 1 bufer[52]=(E_1>>24); bufer[53]=(E_1>>16); bufer[54]=(E_1>>8); bufer[55]=E_1; // точка 1 bufer[56]=(N_2>>24); bufer[57]=(N_2>>16); bufer[58]=(N_2>>8); bufer[59]=N_2; // точка 2 bufer[60]=(E_2>>24); bufer[61]=(E_2>>16); bufer[62]=(E_2>>8); bufer[63]=E_2; // точка 2 bufer[64]=(N_3>>24); bufer[65]=(N_3>>16); bufer[66]=(N_3>>8); bufer[67]=N_3; // точка 3 bufer[68]=(E_3>>24); bufer[69]=(E_3>>16); bufer[70]=(E_3>>8); bufer[71]=E_3; // точка 3 bufer[72]=(N_4>>24); bufer[73]=(N_4>>16); bufer[74]=(N_4>>8); bufer[75]=N_4; // точка 4 bufer[76]=(E_4>>24); bufer[77]=(E_4>>16); bufer[78]=(E_4>>8); bufer[79]=E_4; // точка 4 bufer[80]=(N_5>>24); bufer[81]=(N_5>>16); bufer[82]=(N_5>>8); bufer[83]=N_5; // точка 5 bufer[84]=(E_5>>24); bufer[85]=(E_5>>16); bufer[86]=(E_5>>8); bufer[87]=E_5; // точка 5 bufer[88]=(N_6>>24); bufer[89]=(N_6>>16); bufer[90]=(N_6>>8); bufer[91]=N_6; // точка 6 bufer[92]=(E_6>>24); bufer[93]=(E_6>>16); bufer[94]=(E_6>>8); bufer[95]=E_6; // точка 6 bufer[96]=(N_7>>24); bufer[97]=(N_7>>16); bufer[98]=(N_7>>8); bufer[99]=N_7; // точка 7 bufer[100]=(E_7>>24); bufer[101]=(E_7>>16); bufer[102]=(E_7>>8); bufer[103]=E_7; // точка 7 bufer[104]=(N_8>>24); bufer[105]=(N_8>>16); bufer[106]=(N_8>>8); bufer[107]=N_8; // точка 8 bufer[108]=(E_8>>24); bufer[109]=(E_8>>16); bufer[110]=(E_8>>8); bufer[111]=E_8; // точка 8 /////////////////////////////////////////////// bufer[112]=flag_M8N_m8n; // флаг M8N (0)/m8n (1) bufer[113]=mashtab_exolot;// масштаб эхолот -начальное 1 /////////////////////////////////////////////// crc буфер: crc=0xFFFF; for (b=0;b<114;b=b+2) { bcrc=bufer[b]; bcrc=(bcrc<<8)|bufer[b+1]; fcrc(); }; bufer[114]=(crc>>8); // crc bufer[115]=crc; // crc /////////////////////////////////////////////// буфер > EEPROM: for (x=0;x<116;x++) { EEAR = x; EEDR = bufer[x]; EECR |= 0b00000100; EECR |= 0b00000010; while(EECR & 0b00000010); }; } ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// EEPROM_RX: void EEPROM_RX(void) { /////////////////////////////////////////////// EEPROM > буфер: for (x=0;x<116;x++) { EEAR = x; EECR |= 0b00000001; bufer[x]=EEDR; }; /////////////////////////////////////////////// crc буфер: crc=0xFFFF; for (b=0;b<116;b=b+2) { bcrc=bufer[b]; bcrc=(bcrc<<8)|bufer[b+1]; fcrc(); }; /////////////////////////////////////////////// crc: if (crc==0) { kontr=bufer[0]; // контрастность OLED 128x64 - SH1106. kor=bufer[1]; // коррекция часы: -8 МHz. kor=(kor<<8)|bufer[2]; // коррекция часы: -8 МHz. ch=bufer[3]; // частота (2.400GHz...2.525GHz). pw=bufer[4]; // мощность nRF24L01+: 11 10 01 00 del_EN=bufer[5]; // делитель GPS -начальное 0x01 obduv=bufer[6]; // обдув 40/50/60/70/80 zasita_1=bufer[7]; // защита аккум от переразряда модель 1 f_zasita_1=bufer[8]; // флаг защита аккум от переразряда модель 1 zasita_2=bufer[9]; // защита аккум от переразряда модель 2 f_zasita_2=bufer[10]; // флаг защита аккум от переразряда модель 2 f_buzer=bufer[11]; // флаг бузер bufer_kruiz=bufer[12]; // буфер круиз-контроль IP_Destination=bufer[13];// IP_Destination -начальное 1 flag_svet=bufer[14]; // флаг Вкл свет flag_potop=bufer[15]; // флаг Вкл потоп bufer_menu=bufer[16]; // буфер меню LED 1 flag_AU_EEPROM=bufer[17]; // флаг АВТО сохр EEPROM -начальное 0xFF menu2=bufer[18]; // меню LED 2 flag_AU_OFF_LED=bufer[19]; // флаг АВТО выкл. LED flag_obduv=bufer[20]; // флаг обдув -начальное 0xFF flag_radio=bufer[21]; // флаг радио -начальное 0xFF PPM_ON=bufer[22]; // PPM -вкл/выкл. -начальное 0x00 выкл. PPM_pozitiv=bufer[23]; // PPM -позитивный 0xFF/негативный 0x00 сигнал. -начальное 0x00 PPM_kanal=bufer[24]; // PPM -длительность канальных имп. PPM_kanal=(PPM_kanal<<8)|bufer[25]; // PPM -длительность канальных имп. PPM_strob=bufer[26]; // PPM -длительность строб имп. PPM_strob=(PPM_strob<<8)|bufer[27]; // PPM -длительность строб имп. PPM_pauza=bufer[28]; // PPM -длительность синхро паузы. PPM_pauza=(PPM_pauza<<8)|bufer[29]; // PPM -длительность синхро паузы. kor_tok=bufer[30]; // коррекция датчик тока -начальное 255 kor_tok=(kor_tok<<8)|bufer[31]; // коррекция датчик тока -начальное 255 stik_0=bufer[32]; // стик 0 stik_1=bufer[33]; // стик 1 stik_2=bufer[34]; // стик 2 stik_3=bufer[35]; // стик 3 stik_4=bufer[36]; // стик 4 stik_5=bufer[37]; // стик 5 stik_6=bufer[38]; // стик 6 stik_7=bufer[39]; // стик 7 stik_in_0=bufer[40]; // стик 0 stik_in_1=bufer[41]; // стик 1 stik_in_2=bufer[42]; // стик 2 stik_in_3=bufer[43]; // стик 3 stik_in_4=bufer[44]; // стик 4 stik_in_5=bufer[45]; // стик 5 stik_in_6=bufer[46]; // стик 6 stik_in_7=bufer[47]; // стик 7 /////////////////////////////////////////////// точки N_1=bufer[48]; N_1=(N_1<<8)|bufer[49]; N_1=(N_1<<8)|bufer[50]; N_1=(N_1<<8)|bufer[51]; // точка 1 E_1=bufer[52]; E_1=(E_1<<8)|bufer[53]; E_1=(E_1<<8)|bufer[54]; E_1=(E_1<<8)|bufer[55]; // точка 1 N_2=bufer[56]; N_2=(N_2<<8)|bufer[57]; N_2=(N_2<<8)|bufer[58]; N_2=(N_2<<8)|bufer[59]; // точка 2 E_2=bufer[60]; E_2=(E_2<<8)|bufer[61]; E_2=(E_2<<8)|bufer[62]; E_2=(E_2<<8)|bufer[63]; // точка 2 N_3=bufer[64]; N_3=(N_3<<8)|bufer[65]; N_3=(N_3<<8)|bufer[66]; N_3=(N_3<<8)|bufer[67]; // точка 3 E_3=bufer[68]; E_3=(E_3<<8)|bufer[69]; E_3=(E_3<<8)|bufer[70]; E_3=(E_3<<8)|bufer[71]; // точка 3 N_4=bufer[72]; N_4=(N_4<<8)|bufer[73]; N_4=(N_4<<8)|bufer[74]; N_4=(N_4<<8)|bufer[75]; // точка 4 E_4=bufer[76]; E_4=(E_4<<8)|bufer[77]; E_4=(E_4<<8)|bufer[78]; E_4=(E_4<<8)|bufer[79]; // точка 4 N_5=bufer[80]; N_5=(N_5<<8)|bufer[81]; N_5=(N_5<<8)|bufer[82]; N_5=(N_5<<8)|bufer[83]; // точка 5 E_5=bufer[84]; E_5=(E_5<<8)|bufer[85]; E_5=(E_5<<8)|bufer[86]; E_5=(E_5<<8)|bufer[87]; // точка 5 N_6=bufer[88]; N_6=(N_6<<8)|bufer[89]; N_6=(N_6<<8)|bufer[90]; N_6=(N_6<<8)|bufer[91]; // точка 6 E_6=bufer[92]; E_6=(E_6<<8)|bufer[93]; E_6=(E_6<<8)|bufer[94]; E_6=(E_6<<8)|bufer[95]; // точка 6 N_7=bufer[96]; N_7=(N_7<<8)|bufer[97]; N_7=(N_7<<8)|bufer[98]; N_7=(N_7<<8)|bufer[99]; // точка 7 E_7=bufer[100]; E_7=(E_7<<8)|bufer[101]; E_7=(E_7<<8)|bufer[102]; E_7=(E_7<<8)|bufer[103]; // точка 7 N_8=bufer[104]; N_8=(N_8<<8)|bufer[105]; N_8=(N_8<<8)|bufer[106]; N_8=(N_8<<8)|bufer[107]; // точка 8 E_8=bufer[108]; E_8=(E_8<<8)|bufer[109]; E_8=(E_8<<8)|bufer[110]; E_8=(E_8<<8)|bufer[111]; // точка 8 /////////////////////////////////////////////// flag_M8N_m8n=bufer[112]; // флаг M8N (0)/m8n (1) mashtab_exolot=bufer[113];// масштаб эхолот -начальное 1 } /////////////////////////////////////////////// crc: else { menu = 255; // > ошибка EEPROM }; } ///////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// RESET_: void RESET_(void) { /////////////////////////////////////////////// kontr=250; // контрастность OLED 128x64 - SH1106. -начальное 250 kor=31250; // коррекция часы: -8 МHz. ch=50; // частота запроса -начальное 2.450GHz. -вызывной канал pw=0; // мощность 11 10 01 00 -начальное 18dBm(0,015 mW). del_EN = 1; // делитель GPS -начальное 0x01 obduv=40; // обдув 40/50/60/70/80 zasita_1=40; // защита аккум от переразряда модель 1 f_zasita_1=0; // флаг защита аккум от переразряда модель 1 zasita_2=40; // защита аккум от переразряда модель 2 f_zasita_2=0; // флаг защита аккум от переразряда модель 2 f_buzer=0xFF; // бузер bufer_kruiz=127; // буфер круиз-контроль IP_Destination=1; // IP_Destination -начальное 1 flag_svet=0xFF; // флаг свет flag_potop=0xFF; // флаг потоп bufer_menu=1; // буфер меню LED 1 -начальное 1 (быбор модель) menu2=0; // меню LED 2 -начальное 0x00 flag_AU_EEPROM=0xFF; // флаг АВТО сохр EEPROM -начальное 0xFF flag_AU_OFF_LED=0xFF; // флаг АВТО выкл. LED -начальное 0xFF flag_obduv=0xFF; // флаг обдув -начальное 0xFF flag_radio=0xFF; // флаг радио -начальное 0xFF PPM_ON=0xFF; // PPM -вкл/выкл. -начальное 0x00 выкл. PPM_pozitiv=0; // PPM -позитивный 0xFF/негативный 0x00 сигнал. -начальное 0x00 PPM_kanal=878; //PPM -длительность канальных имп. PPM_strob=366; //PPM -длительность строб имп. PPM_pauza=7000; //PPM -длительность синхро паузы. kor_tok=255; // коррекция датчик тока -начальное 255. stik_0 = 0x00; // стик 0 stik_1 = 0x01; // стик 1 stik_2 = 0x02; // стик 2 stik_3 = 0x03; // стик 3 stik_4 = 0x04; // стик 4 stik_5 = 0x05; // стик 5 stik_6 = 0x06; // стик 6 stik_7 = 0x07; // стик 7 stik_in_0 = 0xFF; // стик 0 stik_in_1 = 0xFF; // стик 1 stik_in_2 = 0xFF; // стик 2 stik_in_3 = 0xFF; // стик 3 stik_in_4 = 0xFF; // стик 4 stik_in_5 = 0xFF; // стик 5 stik_in_6 = 0xFF; // стик 6 stik_in_7 = 0xFF; // стик 7 /////////////////////////////////////////////// точки -64 байт N_1=0; // точка 1 E_1=0; // точка 1 N_2=0; // точка 2 E_2=0; // точка 2 N_3=0; // точка 3 E_3=0; // точка 3 N_4=0; // точка 4 E_4=0; // точка 4 N_5=0; // точка 5 E_5=0; // точка 5 N_6=0; // точка 6 E_6=0; // точка 6 N_7=0; // точка 7 E_7=0; // точка 7 N_8=0; // точка 8 E_8=0; // точка 8 /////////////////////////////////////////////// flag_M8N_m8n=0; // флаг M8N (0)/m8n (1) -начальное 0x00 /////////////////////////////////////////////// mashtab_exolot=1;// масштаб эхолот -начальное 1 } ///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// АЦП: -0,000.070c void adc(unsigned char adc_input) { ADMUX = 0b01000000 | adc_input; // опорное AVCC // ADC0...ADC7 delay_us(10); ADCSRA|=0b01000000; while (ADCSRA & 0b01000000); } ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// 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 /////////////////////////////////////////////// OLED1 128x64: - SH1106 DDRB.7=1; // SS (SE) OLED1 PORTB.7=1; // SS (SE +) OLED1 /////////////////////////////////////////////// OLED2 128x64: - SH1106 DDRG=0x1F; // SS (SE) OLED2 PORTG |= 0b00001000; // SS (SE+) OLED2 /////////////////////////////////////////////// OLED3 128x64: - SH1106 DDRG=0x1F; // SS (SE) OLED3 PORTG |= 0b00010000; // SS (SE+) OLED3 /////////////////////////////////////////////// кнопки: DDRC.3=0; // меню верх PORTC.3=1; // меню верх DDRC.0=0; // меню низ PORTC.0=1; // меню низ DDRC.1=0; // Выбор меню + / фары PORTC.1=1; // Выбор меню + / фары DDRC.2=0; // Выбор меню - / аккумулятор PORTC.2=1; // Выбор меню - / аккумулятор DDRC.4=0; // выгрузка PORTC.4=1; // выгрузка DDRC.5=0; // круиз-контроль PORTC.5=1; // круиз-контроль /////////////////////////////////////////////// контроль: DDRA.5=1; // контроль PORTA.5=0; // контроль DDRA.6=1; // контроль PORTA.6=0; // контроль DDRA.7=1; // контроль 2 PORTA.7=0; // контроль 2 ///////////////////////////////////////////////////////////////////////////////////////////// RESET: // сброс ///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////// таймер № 0: -кнопки TCCR0=0x02; // 8.000.000/8=1.000.000/256= цикл 3.906 /////////////////////////////////////////////// таймер № 1: -цикл //ICR1=kor; // 1.000.000/31250/32 Hz = 0,031.25c 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 /////////////////////////////////////////////// таймер № 2: //OCR2=0x00; //TCCR2=0x00; /////////////////////////////////////////////// таймер № 3: -PPM if (PPM_ON) { // -начальное 0xFF for (a=0;a<8;a++) { PPM[a]=PPM_kanal; // -начальное 0,51mc. }; PPM[8]=PPM_pauza; // -начальное 7 mc DDRE.3=1; // OC3A PORTE.3=0; // OC3A ICR3H=(PPM_kanal>>8); // -начальное 1,02mc. ICR3L=PPM_kanal; // -начальное 1,02mc. OCR3AH=(PPM_strob>>8);// -начальное 0,38mc. OCR3AL=PPM_strob; // -начальное 0,38mc. //////////////////////// if (PPM_pozitiv){ // -начальное 0x00 TCCR3A=0b11000010; // режим ШИМ // COM3A - установка при совпадении TCNT3 и OCR3A } else{ TCCR3A=0b10000010; // режим ШИМ // COM3A - сброс при совпадении TCNT3 и OCR3A }; //////////////////////// TCCR3B=0b00011010; // 8.000.000/8=1.000.000 Hz // верхний предел счета ICR3 }; /////////////////////////////////////////////// Маска прерывание таймер № 0,1,2,3: TIMSK=0x01; // Таймер 0 // переполнение TOV0 -кнопки ETIMSK=0x10; // Таймер 3 // совпадения TCNT3 и OCR3A -PPM /////////////////////////////////////////////// АЦП: ADCSRA=0x85; // ADC 8 МГц/32=250.000 Hz /////////////////////////////////////////////// SPI SPCR=0x50; // 8 МГц/4 = 2 МГц -режим мастер /////////////////////////////////////////////// UART0 - RX 0 GPS DDRE.0=0; // UART0 - RX PORTE.0=1; // UART0 - RX // USART0 initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART0 Receiver: On // USART0 Transmitter: Off // USART0 Mode: Asynchronous // USART0 Baud Rate: 9600 UCSR0A=0x00; UCSR0B=0x90; // RX 0 interrupt UCSR0C=0x06; UBRR0H=0x00; UBRR0L=0x33; /////////////////////////////////////////////// UART0 - TX 0 GPS DDRE.1=0; // UART0 - TX PORTE.1=1; // UART0 - TX // USART0 initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART0 Receiver: Off // USART0 Transmitter: On // USART0 Mode: Asynchronous // USART0 Baud Rate: 9600 //UCSR0A=0x00; //UCSR0B=0x48; // TX 0 interrupt //UCSR0C=0x06; //UBRR0H=0x00; //UBRR0L=0x33; /////////////////////////////////////////////// UART1 - RX 1 эхолот /**/ DDRD.2=0; // UART1 - RX PORTD.2=1; // UART1 - 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 1 interrupt UCSR1B=0x98; // RX 1 interrupt // TX 1 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: 9600 //UCSR1A=0x00; //UCSR1B=0x48; // TX 1 interrupt //UCSR1C=0x06; //UBRR1H=0x00; //UBRR1L=0x33; // USART1 initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART1 Receiver: Off // USART1 Transmitter: On // USART1 Mode: Asynchronous // USART1 Baud Rate: 9600 //UCSR1A=0x00; //UCSR1B=0x08; // TX 1 //UCSR1C=0x06; //UBRR1H=0x00; //UBRR1L=0x33; /////////////////////////////////////////////// Ст таймер: 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 PORTG &= 0b11101111; // SS OLED3 128x64 PORTB.5=0; // D/C. 0 – Function, 1 – data. OLED 128x64 tx=0xA8; SPI(); // сколько строк будет использовано. tx=0x3F; SPI(); // (128x64) 64 - строки. tx=0x81; SPI(); // контрастность. tx=kontr; SPI(); // контрастность 0...255. -начальное 250. tx=0xA1; SPI(); // развёртка слева направо (>>). /////////////////////////////////////////////// tx=0xC8; SPI(); // развертка сверху вниз. // SH1106 // SSD1309 //tx=0xC0; SPI(); // развертка снизу вверх. // HDG12864F-1 /////////////////////////////////////////////// tx=0xDA; SPI(); // развертка. tx=0x12; SPI(); // прогрессивная. tx=0xD3; SPI(); // смещение. tx=0x00; SPI(); // смещение 0. tx=0x40; SPI(); // 01xx xxxx - начальное строка 0. tx=0xAF; SPI(); // Display 0xAF - ON. //tx=0xAE; SPI(); // Display 0xAE - OFF. PORTB.5=1; // D/C. 0 – Function, 1 – data. OLED 128x64 PORTB.7=1; // SS OLED 128x64 PORTG |= 0b00001000; // SS OLED2 128x64 PORTG |= 0b00010000; // SS OLED3 128x64 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// инициализация nRF24L01: //delay_ms(100); // Power on reset 100ms // задержка ////////////////////////////////////////////// инициализация nRF24L01+ : PORTB.0=0; // SS tx=0b00100001; SPI();// 0x01 EN_AA: (Enhanced ShockBurst ™) - отключить. tx=0b00000000; SPI();// EN_AA = 0x00. PORTB.0=1; // SS ////////////////////////////////////////////// PORTB.0=0; // SS tx=0b00100100; SPI(); // 0x04 SETUP_RETR: (Enhanced ShockBurst ™) - отключить. tx=0b00000000; SPI(); // SETUP_RETR = 0x00. PORTB.0=1; // SS ////////////////////////////////////////////// PORTB.0=0; // SS tx=0b00100101; SPI(); // 0x05 RF_CH: Частота tx=50; SPI(); // 2.450GHz (2.400GHz...2.525GHz) PORTB.0=1; // SS ////////////////////////////////////////////// PORTB.0=0; // SS tx=0b00100110; SPI(); // 0x06 RF_SETUP: Скорость и мощность tx=0b00100000; SPI(); // 250kbps; -18dBm(0,015 mW). PORTB.0=1; // SS ////////////////////////////////////////////// PORTB.0=0; // SS tx=0b00101010; SPI(); // 0x0A RX_ADDR_P0: Адрес приёмника tx=0b11001100; SPI(); // 0x........CC tx=0b11001100; SPI(); // 0x......CC.. tx=0b11001100; SPI(); // 0x....CC.... tx=0b11001100; SPI(); // 0x..CC...... tx=0b11001100; SPI(); // 0xCC........ PORTB.0=1; // SS ////////////////////////////////////////////// PORTB.0=0; // SS tx=0b00110000; SPI(); // 0x10 TX_ADDR_P0: Адрес передатчика tx=0b11001100; SPI(); // 0x........CC tx=0b11001100; SPI(); // 0x......CC.. tx=0b11001100; SPI(); // 0x....CC.... tx=0b11001100; SPI(); // 0x..CC...... tx=0b11001100; SPI(); // 0xCC........ PORTB.0=1; // SS ////////////////////////////////////////////// PORTB.0=0; // SS tx=0b00110001; SPI(); // 0x11 RX_PW_P0: Длина полезной нагрузки для приёмника tx=32; SPI(); // (LSB)...(MSB)-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: PORTA.6=1; // контроль #asm("wdr") // ст таймер 1,0 c ///////////////////////////////////////////////////////////////////////////////////////////// таймер: if ((n & 0b00001111)==15) taimer = ~taimer; // 0,5s ///////////////////////////////////////////////////////////////////// 32 пак/c. цикл 0,031.25c. while (!(TIFR & 0b00100000)); // флаг ICF1 - верхний предел счета ICR1. TIFR|=0b00100000; // сброс флага ICF1 PORTA.6=0; // контроль ///////////////////////////////////////////////////////////////////// блок управления / кнопки: /////////////////////////////////////////////// 3- меню верх / NAV,EXO,AVT,GIR if ( (flag_k3) && (k3==0) ) { // цикл 31,25 ms k3++; // счёт PORTD.7=1; // бузер if (LCD_ON) { // счёт меню // LCD_ON -начальное 0xFF /////////////////////////////////// if (menu == 50) { //menu = 50 > караблик menu2++; if (menu2 > 3) {menu2 = 0;}; // NAV,EXO,AVT,GIR flag_EN = 0; // флаг >0< flag_start_LCD = 0; // старт LCD }; /////////////////////////////////// if (menu > 50) menu--; // menu = 50... > /////////////////////////////////// }; }; 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; // сброс }; ///////////////////////////////////// 0- меню низ if ( (flag_k0) && (k0==0) ) { // цикл 31,25 ms k0++; // счёт PORTD.7=1; // бузер if (LCD_ON) menu++; // счёт меню // LCD_ON -начальное 0xFF }; 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- Выбор меню 1(+) / фары if ( (flag_k1) && (k1==0) ) { // цикл 31,25 ms k1++; // счёт flag_menu_1 = 1; // флаг выбор меню 1(+) if (menu == 50) { // menu = 50 - караблик k = k ^ 0b00001000; // (....1...) 3- фары flag_menu_1 = 0; // сброс флаг выбор меню 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; // сброс }; ///////////////////////////////////// 5- Выбор меню 2(-) / аккумулятор //if ( (PINC.2==0) && (k5==0) ) { // цикл 31,25 ms if ( (flag_k5) && (k5==0) ) { // цикл 31,25 ms k5++; // счёт flag_menu_2 = 1; // флаг выбор меню 2(-) if (menu == 50) { // menu = 50 - караблик k = k ^ 0b00100000; // (..1.....) 5- аккумулятор flag_menu_2 = 0; // сброс флаг выбор меню 2(-) }; PORTD.7=1; // бузер - вкл. }; if ( (8>k5) && (k5) ) {k5++;}; // счёт if (k5 == 8) { PORTD.7=0; // бузер k5++; }; /////////////////////////////// if ( (PINC.2==1) && (k5 == 9) ) {k5++;}; if (k5 > 9) {k5++;}; // счёт if (k5 == 17) { k5=0; // сброс flag_k5=0; // сброс }; ///////////////////////////////////////////////////////////////////////////////////////////// menu: //menu = 0: > заставка //menu = 1...49: > выбор модели //menu = 50...149: > караблик //menu = 150...199: > машинка //menu = 200...249: > самолёт //menu = 250...254: > квадрик //menu = 255: > ошибка EEPROM //////////////////////////////////////////// menu / заставка: if (menu == 0) y++; // счёт заставка -1,5c. else y=0; // сброс счёт заставка if (y == 48) menu = bufer_menu; // bufer_menu > menu // bufer_menu -начальное 1. ////////////////////// if (menu < 50) goto _3; // > LED 1 выбор модели / модель ////////////////////// if (menu == 255) goto _3; // > LED 1 ошибка EEPROM ///////////////////////////////////////////////////////////////////////////////////////////// авто выкл. LED: if (flag_AU_OFF_LED) {// АВТО выкл. LED -начальное 0xFF y1++; // счёт авто выкл. LCD /////////////////////// //if (y1 == 90 ) { // счёт авто выкл. LCD -90 -3c. if (y1 == 900 ) { // счёт авто выкл. LCD -900 -30c. y1=0; // сброс счёт авто выкл. LCD if (LCD_ON) {LCD_ON = 0x00; LCD_ON_OFF(); }; // флаг LCD_ON - начальное 0xFF// LCD_ON_OFF }; /////////////////////// if (bufer_u != u) { // bufer_u - буфер АЦП bufer_u = u; // u > bufer_u y1=0; // сброс счёт авто выкл. LCD if (!LCD_ON) {LCD_ON = 0xFF; LCD_ON_OFF(); };// флаг LCD_ON - начальное 0xFF// LCD_ON_OFF }; /////////////////////// if (bufer_u1 != u1) {// bufer_u - буфер АЦП bufer_u1 = u1; // u > bufer_u y1=0; // сброс счёт авто выкл. LCD if (!LCD_ON) {LCD_ON = 0xFF; LCD_ON_OFF(); };// флаг LCD_ON - начальное 0xFF// LCD_ON_OFF }; /////////////////////// флаг кнопки 0 // 0- Вкл меню if (flag_k0) { y1=0; // сброс счёт авто выкл. LCD if (!LCD_ON) {LCD_ON = 0xFF; LCD_ON_OFF(); };// флаг LCD_ON - начальное 0xFF// LCD_ON_OFF }; /////////////////////// флаг кнопки 1 // 1- Выбор меню / 3- Вкл(Выкл) фары if (flag_k1) { y1=0; // сброс счёт авто выкл. LCD if (!LCD_ON) {LCD_ON = 0xFF; LCD_ON_OFF(); };// флаг LCD_ON - начальное 0xFF// LCD_ON_OFF }; /////////////////////// флаг кнопки 5 // 5- Вкл(Выкл) резервный аккумулятор if (flag_k5) { y1=0; // сброс счёт авто выкл. LCD if (!LCD_ON) {LCD_ON = 0xFF; LCD_ON_OFF(); };// флаг LCD_ON - начальное 0xFF// LCD_ON_OFF }; /////////////////////// флаг кнопки 3 // 3- Вкл(Выкл) фары //if (flag_k3) { // y1=0; // сброс счёт авто выкл. LCD // if (!LCD_ON) {LCD_ON = 0xFF; LCD_ON_OFF(); };// флаг LCD_ON - начальное 0xFF// LCD_ON_OFF //}; /////////////////////// флаг кнопки 6 // 6- Вкл выгрузка if (flag_k6) { y1=0; // сброс счёт авто выкл. LCD if (!LCD_ON) {LCD_ON = 0xFF; LCD_ON_OFF(); };// флаг LCD_ON - начальное 0xFF// LCD_ON_OFF }; /////////////////////// флаг кнопки 7 // 7- круиз-контроль if (flag_k7) { y1=0; // сброс счёт авто выкл. LCD if (!LCD_ON) {LCD_ON = 0xFF; LCD_ON_OFF(); };// флаг LCD_ON - начальное 0xFF// LCD_ON_OFF }; /////////////////////// флаг ГОТОВ if (!gotov) { // bufer_u - буфер АЦП y1=0; // сброс счёт авто выкл. LCD if (!LCD_ON) {LCD_ON = 0xFF; LCD_ON_OFF(); };// флаг LCD_ON - начальное 0xFF// LCD_ON_OFF }; }; ///////////////////////////////////////////////////////////////////////////////////////////// часы: //hr++; // счётчик часы // 32 пак/c. цикл 0,031.25c. //if (hr>31) {hr=0; sec++;}; // секунды 00 //if (sec>59) {sec=0; min++;}; // минуты 00 //if (min>59) {min=0; hour++;} // часы 00 //if (hour>23){hour=0; dni++; };// дни 00 //if (dni>99) {dni=0;}; // дни ///////////////////////////////////////////////////////////////////////////////////////////// RESET: if (flag_RESET) { // RESET RESET_(); // чтение RESET flag_RESET = 0; // RESET goto RESET; }; ///////////////////////////////////////////////////////////////////////////////////////////// EEPROM: if (flag_TX_EEPROM) { // EEPROM TCCR1B=0x00; // стоп цикл // быстрая ШИМ // 4.000.000/8=500.000 Hz LCD_EEPROM(); // LCD_EEPROM // индикатор EEPROM_TX(); // TX EEPROM // запись EEPROM EEPROM_RX(); // RX EEPROM // чтение EEPROM TCCR1B=0x1A; // пуск цикл // быстрая ШИМ // 4.000.000/8=500.000 Hz flag_TX_EEPROM = 0; // EEPROM }; ///////////////////////////////////////////////////////////////////////////////////////////// ГОТОВ: gotov = 1; // проверка систем: if (fc) {gotov = 0;}; // связь if (t > obduv) {gotov = 0;}; // температура if (v & 0b00000001) {gotov = 0;}; // v (.......1) 1 - вкл. вода модель if ((v & 0b00000010)!=2) {gotov = 0;}; // v (......1.) 1 - вкл. выгрузка модель (геркон 2 база) if ((g < zasita_1) && (f_zasita_1)) {gotov = 0;}; // защита аккум от переразряда модель 1 // f_zasita if ((g2 < zasita_2) && (f_zasita_2)) {gotov = 0;}; // защита аккум от переразряда модель 2 // f_zasita ///////////////////////////////////////////////////////////////////////////////////////////// //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=50; // сброс частота буфер > начальное - 2.450GHz. -вызывной канал g=0; // сброс аккум модель g2=0; // сброс аккум модель 2 v=0; // сброс вода модель t=0; // сброс температура модель tax=0; // сброс тахометр модель tok=0; // сброс датчик тока servo_0 = 0; // сброс серво_0 1,142v-(1,700v)-2,200v PORTD.4=0; // индикатор }; //////////////////////////////////////// бузер нет связи: if (flag_radio) { // флаг радио -начальное 0xFF 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 (flag_radio) { // флаг радио -начальное 0xFF 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 ( (v & 0b00000001) && flag_potop ) { // флаг потоп PORTD.7=1; // бузер вода модель PORTD.4=1; // индикатор вода модель }; ///////////////////////////////////////////////////////////////////////////////////////////// // пульт // номер/кнопки/частота/мощность/АЦП/АЦП1/АЦП2/АЦП3/АЦП4/АЦП5/АЦП6/АЦП7 // GPS_F/GPS_N/kompas_F/kompas_N/0/0/0/0/0/0/0/0/0/0/0/0/0/0/CRC16/CRC16. ////////////////////////////////////////////////////////////////////////////////// кнопки: //////////////////////////////////////// (.1......) 6- Вкл выгрузка if ( (flag_k6) && (k6==0) ) { // цикл 31,25 ms k6++; // счёт PORTD.7=1; // бузер - вкл. }; if ( (8>k6) && (k6) ) {k6++;}; // счёт if (k6 == 8) { PORTD.7=0; // бузер k6++; }; //////////////////////////////////////// if ( (PINC.4==1) && (k6 == 9) ) {k6++;}; if (k6 > 9) {k6++;}; // счёт if (k6 == 17) { k6=0; // сброс flag_k6=0; // сброс }; //////////////////////////////////////// if (k6) k = k | (1<<6); // (.1......) 6- Вкл выгрузка else k = k & 0b10111111; // (.1......) 6- Вкл выгрузка ///////////////////////////////////////////////////////////////////////// //////////////////////////////////////// (........) 7- круиз-контроль if ( (flag_k7) && (k7==0) ) { // цикл 31,25 ms k7++; // счёт PORTD.7=1; // бузер if (menu == 72) flag_ON_kruiz = 1; // флаг вкл. круиз-контроль else flag_kruiz = ~flag_kruiz; // флаг круиз-контроль }; if ( (8>k7) && (k7) ) {k7++;}; // счёт if (k7 == 8) { PORTD.7=0; // бузер k7++; }; //////////////////////////////////////// if ( (PINC.5==1) && (k7 == 9) ) {k7++;}; if (k7 > 9) {k7++;}; // счёт if (k7 == 17) { k7=0; // сброс flag_k7=0; // сброс }; //////////////////////////////////////// if ( (t > obduv) && (flag_obduv) ) { // флаг обдув -начальное 0xFF k = k | 0b00000100; } // (.....1..) 2- Вкл(Выкл) обдув 40/50/60/70/80; else { k = k & 0b11111011; }; // (.....1..) 2- Вкл(Выкл) обдув 40/50/60/70/80; //////////////////////////////////////// if (flag_svet) k = k | 0b10000000; // (1.......) 7- Вкл флаг свет -начальное 0xFF else k = k & 0b01111111; // (1.......) 7- Вкл флаг свет -начальное 0xFF ///////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////// АЦП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 (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; ///////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////// PPM0: if (stik_in_0) {PPM[0]=(u*4) + PPM_kanal;} else {PPM[0]=(255-u)*4 + PPM_kanal;}; //////////////////////////////////////// PPM1: if (stik_in_1) {PPM[1]=(u1*4) + PPM_kanal;} else {PPM[1]=(255-u1)*4 + PPM_kanal;}; //////////////////////////////////////// PPM2: if (stik_in_2) {PPM[2]=(u2*4) + PPM_kanal;} else {PPM[2]=(255-u2)*4 + PPM_kanal;}; //////////////////////////////////////// PPM3: if (stik_in_3) {PPM[3]=(u3*4) + PPM_kanal;} else {PPM[3]=(255-u3)*4 + PPM_kanal;}; //////////////////////////////////////// PPM4: if (stik_in_4) {PPM[4]=(u4*4) + PPM_kanal;} else {PPM[4]=(255-u4)*4 + PPM_kanal;}; //////////////////////////////////////// PPM5: if (stik_in_5) {PPM[5]=(u5*4) + PPM_kanal;} else {PPM[5]=(255-u5)*4 + PPM_kanal;}; //////////////////////////////////////// PPM6: if (stik_in_6) {PPM[6]=(u6*4) + PPM_kanal;} else {PPM[6]=(255-u6)*4 + PPM_kanal;}; //////////////////////////////////////// PPM7: if (stik_in_7) {PPM[7]=(u7*4) + PPM_kanal;} else {PPM[7]=(255-u7)*4 + PPM_kanal;}; ///////////////////////////////////////////////////////////////////////////////////////////// if (!flag_radio ) goto _3; // радио -начальное 0xFF // > LED // TX // номер/кнопки/частота/мощность/АЦП/АЦП1/АЦП2/АЦП3/АЦП4/АЦП5/АЦП6/АЦП7 // GPS_F/GPS_N/kompas_F/kompas_N/0/0/0/0/0/0/0/0/0/0/0/0/0/0/CRC16/CRC16. ///////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////// > буфер: bufer[0]=MAC_Destination; // bufer[1]=MAC_Source; // bufer[2]=Type; // bufer[3]=IP_Destination; // bufer[4]=IP_Source; // bufer[5]=k; // кнопки bufer[6]=ch; // частота bufer[7]=pw; // мощность 11-10-01-00 //////////////////////////////////////// АЦП: if (stik_in_0) {bufer[8]=u;} else {bufer[8]=255-u;}; //////////////////////////////////////// АЦП1/ШИМ: if (stik_in_1) {bufer[9]=u1;} else {bufer[9]=255-u1;}; if (flag_kruiz) bufer[9]=bufer_kruiz; // круиз-контроль //////////////////////////////////////// АЦП2: if (stik_in_2) {bufer[10]=u2;} else {bufer[10]=255-u2;}; //////////////////////////////////////// АЦП3: if (stik_in_3) {bufer[11]=u3;} else {bufer[11]=255-u3;}; //////////////////////////////////////// АЦП4: if (stik_in_4) {bufer[12]=u4;} else {bufer[12]=255-u4;}; //////////////////////////////////////// АЦП5: if (stik_in_5) {bufer[13]=u5;} else {bufer[13]=255-u5;}; //////////////////////////////////////// АЦП6: if (stik_in_6) {bufer[14]=u6;} else {bufer[14]=255-u6;}; //////////////////////////////////////// АЦП7: if (stik_in_7) {bufer[15]=u7;} else {bufer[15]=255-u7;}; //////////////////////////////////////// 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]=flag_GPS_radio; // флаг GPS radio полный bufer[25]=st_bufer_GPS; // счёт буфер GPS -начальное 0x00 bufer[26]=flag_exolot_radio; // флаг exolot radio полный bufer[27]=st_bufer_exolot; // счёт буфер exolot -начальное 0x00 bufer[28]=0; // bufer[29]=n; // номер пакета пульт //////////////////////////////////////// crc буфер: 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: //////////////////////////////////////// chb - частота буфер PORTB.0=0; // SS tx=0b00100101; SPI(); // 0x05 RF_CH: Частота tx=chb; SPI(); // chb - частота буфер (2.400GHz...2.525GHz) PORTB.0=1; // SS //////////////////////////////////////// pwb = pw; // pw - мощность TX 0b00000011 pwb = (pwb<<1)|0b00100000; // ..1. .... RF_SETUP = RF_DR_LOW - 250kbps. PORTB.0=0; // SS tx=0b00100110; SPI(); // 0x06 RF_SETUP: скорость, мощность TX tx=pwb; SPI(); // 250kbps; 0dBm...-18dBm. PORTB.0=1; // SS //////////////////////////////////////// PORTB.0=0; // SS tx=0b00100000; SPI(); // 0x00 CONFIG: tx=0b01111110; SPI(); // CRC=2, POWER=1, TX=0. PORTB.0=1; // SS //////////////////////////////////////// буфер TX > TX_FIFO PORTB.0=0; // SS tx=0b10100000; SPI(); // TX FIFO for (x=0;x<32;x++) { tx=bufer[x]; SPI(); }; 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 // номер/вода/температура/тахометр/АЦП/АЦП1/АЦП2/АЦП3/АЦП4/АЦП5/АЦП6/АЦП7 // GPS_F/kompas_F/_0/_1/_2/_3/_4/_5/_6/_7/_8/_9/_10/_11/_12/_13/_14/_15/CRC16/CRC16. ///////////////////////////////////////////////////////////////////////////////////////// вкл. RX: PORTB.0=0; // SS tx=0b00100000; SPI(); // 0x00 CONFIG: tx=0b01111111; SPI(); // 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 tx=0; SPI(); x=rx; PORTB.0=1; // SS //////////////////////////////////////// .... 111. - RX FIFO - пуст if ((x & 0b00001110)==0b00001110) { delay_us(1200); // коррекция RX FIFO + CRC16 // SPI = 1 Мгц goto _3; // > LED }; //////////////////////////////////////// RX FIFO > буфер: PORTB.0=0; // SS tx=0b01100001; SPI(); // RX FIFO for (x=0;x<32;x++) { tx=0; SPI(); bufer[x]=rx; }; PORTB.0=1; // SS //////////////////////////////////////// crc буфер: crc=0xFFFF; for (b=0;b<32;b=b+2) { bcrc=bufer[b]; bcrc=(bcrc<<8)|bufer[b+1]; fcrc(); }; //////////////////////////////////////// проверка crc: if (crc==0) { /////////////////////////////////////// //MAC_Destination=bufer[0]; // //MAC_Source =bufer[1]; // //Type =bufer[2]; // //IP_Destination =bufer[3]; // //IP_Source =bufer[4]; // /////////////////////////////////////// v=bufer[5]; // вода модель t=bufer[6]; // температура модель tax=bufer[7]; // тахометр модель /////////////////////////////////////// servo_0=bufer[8]; // серво_0 модель servo_1=bufer[9]; // серво_1 модель servo_2=bufer[10]; // серво_2 модель servo_3=bufer[11]; // серво_3 модель servo_4=bufer[12]; // серво_4 модель tok=bufer[13]; // датчик тока g=bufer[14]; // аккум модель g2=bufer[15]; // аккум модель 2 /////////////////////////////////////// m=bufer[29]; // номер пакета модель /* //////////////////////////////////////////////////////////////////////////// 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; // частота запроса > частота буфер (2.400GHz...2.525GHz) kontrol_RX++; // контроль RX tok = tok *2; // ток модель *2 ///////////////////////////////////////////////////////////////////////////////////////////// // контроль номер пакет: if (n==m) kp=1; // контроль номер пакетов Tx (n) == Rx (m): else kp=0; // контроль номер пакетов Tx (n) != Rx (m): ///////////////////////////////////////////////////////////////////////////////////////////// _3: //tok = u*2; t=u1; tax = u; ///////////////////////////////////////////////////////////////////////////////////////////// LED: ////////////////////////////////////////////////// S-метр: if (sT == 8) { // счётчик пакетов s = sT - sR; s = 8 - s; sT = 0; sR = 0; }; //////////////////////////////////////////////////////////////// буфер > TX UART 0 //UCSR0B=0x48; // TX 0 GPS //UDR0 = bufer_GPS[0]; // старт TX UART 0 //////////////////////////////////////////////////////////////// буфер > TX UART 1 //UCSR1B=0x48; // TX 1 kompas //UDR1 = bufer_kompas[0]; // старт TX UART 1 //UDR1 = 0x01; // старт TX UART 1 st_UART1_TX++; if (st_UART1_TX > 31) { UDR1 = 0x01; // старт TX UART 1 st_UART1_TX = 0; }; ////////////////////////////////////////////////// LED 1/2/3: SPSR |= 0b00000001; // > SPI2X 8 Мгц/2 = 4 МГц ////////////////////////////////////////////////// LED_1_2_3 ++; // счёт LED_1_2_3 -начальное 0 if (LED_1_2_3 > 3) {LED_1_2_3 = 1;}; ////////////////////////////////////////////////// if (LED_1_2_3 == 1) { PORTB.7=0; // SS OLED goto LED_1; // > LED 1 }; if (LED_1_2_3 == 2) { PORTG &= 0b11110111; // SS OLED2 goto LED_2; // > LED 2 }; if (LED_1_2_3 == 3) { PORTG &= 0b11101111; // SS OLED3 goto LED_3; // > LED 3 }; ///////////////////////////////////////////////////////////////////////////////////////////// LED_1: // LED 1: //////////////////////////////////////////////////////////////////////////////// menu LED 1: -10mc //menu = 0: > заставка //menu = 1...49: > выбор модели //menu = 50...149: > караблик //menu = 150...199: > машинка //menu = 200...249: > самолёт //menu = 250...254: > квадрик //menu = 255: > ошибка EEPROM if (menu == 255) goto _255; // menu == 255: > ошибка EEPROM //if (menu > 199) goto _200; // menu = 200...249: > квадрокик //if (menu > 149) goto _150; // menu = 150...199: > самолёт //if (menu > 109) goto _110; // menu = 110...149: > машинка if (menu > 49) goto _50; // menu = 50...109: > караблик if (menu) goto _10; // menu = 1...49 > выбор модели // заставка: ///////////////////////////////////////////////////////////////////////////////////////////// kursor(0); fpp(128); kursor(1); fpp(128); kursor(2); fpp(128); kursor(3); LED('s'); LED('a'); LED('s'); LED('h'); LED('a'); LED('m'); LED('e'); LED('l'); LED('j'); LED('a'); fpp(4); LED('&'); fpp(4); LED('r'); LED('o'); LED('m'); LED('a'); LED('n'); LED('.'); LED('c'); LED('o'); LED('m'); kursor(4); fpp(128); kursor(5); fpp(25); LED('v'); LED('3'); LED('.'); LED('2'); LED('('); LED('1'); LED('2'); LED('8'); LED('-'); LED('1'); LED('2'); LED('8'); LED(')'); fpp(25); kursor(6); fpp(128); kursor(7); fpp(128); flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 goto _5; // LCD > ///////////////////////////////////////////////////////////////////////////////////////////// _10: // выбор модели: > караблик > машинка > самолёт > квадрик. if (menu > 4) menu = 1; ///////////////////////////////////////////////////////////////////////////////////////////// kursor(0); if (menu == 1) LED('>'); // > else LED(' '); // ///////////////////// КОРАБЛИК LED('К'); LED('О'); LED('Р'); LED('А'); LED('Б'); LED('Л'); LED('И'); LED('К'); if ( (menu == 1) && flag_menu_1 ) { menu = 50; // > КОРАБЛИК bufer_menu = menu; // menu > bufer_menu flag_TX_EEPROM = 1; // запись EEPROM flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(11); if (menu == 2) LED('>'); // > else LED(' '); // ///////////////////// МАШИНКА LED('М'); LED('А'); LED('Ш'); LED('И'); LED('Н'); LED('К'); LED('А'); if ( (menu == 2) && flag_menu_1 ) { //menu = 50; // > КОРАБЛИК //bufer_menu = menu; // menu > bufer_menu //flag_TX_EEPROM = 1; // запись EEPROM flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(15); //////////////////////////////////////////////////////////// картинки: //kursor(1); //for (x=0;x<128;x++) { SPDR=kartinki_1[x]; while(!(SPSR & (1<<7))); }; //kursor(2); ///for (x=0;x<128;x++) { SPDR=kartinki_2[x]; while(!(SPSR & (1<<7))); }; //kursor(3); //for (x=0;x<128;x++) { SPDR=kartinki_3[x]; while(!(SPSR & (1<<7))); }; kursor(1); fpp(128); // kursor(2); fpp(128); // kursor(3); fpp(128); // ////////////////////////////////////////////////////////////////////// kursor(4); if (menu == 3) LED('>'); // > else LED(' '); // ///////////////////// САМОЛЕТ LED('С'); LED('А'); LED('М'); LED('О'); LED('Л'); LED('Е'); LED('Т'); if ( (menu == 3) && flag_menu_1 ) { //menu = 50; // > КОРАБЛИК //bufer_menu = menu; // menu > bufer_menu //flag_TX_EEPROM = 1; // запись EEPROM flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(17); if (menu == 4) LED('>'); // > else LED(' '); // ///////////////////// КВАДРИК LED('К'); LED('В'); LED('А'); LED('Д'); LED('Р'); LED('И'); LED('К'); if ( (menu == 4) && flag_menu_1 ) { //menu = 50; // > КОРАБЛИК //bufer_menu = menu; // menu > bufer_menu //flag_TX_EEPROM = 1; // запись EEPROM flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(15); //////////////////////////////////////////////////////////// картинки: //kursor(5); //for (x=0;x<128;x++) { SPDR=kartinki_4[x]; while(!(SPSR & (1<<7))); }; //kursor(6); //for (x=0;x<128;x++) { SPDR=kartinki_5[x]; while(!(SPSR & (1<<7))); }; //kursor(7); //for (x=0;x<128;x++) { SPDR=kartinki_6[x]; while(!(SPSR & (1<<7))); }; kursor(5); fpp(128); // kursor(6); fpp(128); // kursor(7); fpp(128); // /////////////////////////////////////////////////////////////////////// goto _5; // LED > ///////////////////////////////////////////////////////////////////////////////////////////// _50: // караблик: ///////////////////////////////////////////////////////////////////////////////////////////// //menu = 50...149: > караблик if (menu > 139) goto _141; // меню 9: эхолот if (menu > 129) goto _131; // меню 8: GPS маршрут if (menu > 119) goto _121; // меню 7: GPS точки if (menu > 109) goto _111; // меню 6: GPS if (menu > 99) goto _101; // меню 5: стик if (menu > 89) goto _91; // меню 4: PPM if (menu > 79) goto _81; // меню 3: модель караблик if (menu > 69) goto _71; // меню 2: пульт караблик if (menu > 59) goto _61; // меню 1: связь караблик if (menu > 50) goto _51; // меню 0: меню караблик // караблик: ///////////////////////////////////////////////////////////////////////////////////////////// kursor(0); if (flag_radio) { // радио -начальное 0xFF ///////////////////// антеннка: if (fc) { // флаг - нет связи if (taimer) { // таймер 0,5c for (x=0;x<9;x++) { tx=antenka[x]; SPI(); }; // антеннка } else { fpp(9); // " " }; } else { for (x=0;x<9;x++) { tx=antenka[x]; SPI(); }; // антеннка }; ///////////////////// уровень сигнала (S_metr): for (x=0;x<8;x++) { if (s>x) h = S_metr[x]; else h = 0b00000000; tx=h; SPI(); tx=0; SPI(); }; fpp(4); } else { fpp(29); }; ////////////////////// мощность: if (flag_radio) { // флаг радиомодуль -начальное 0xFF //LCD(26); // "P" LED('Р'); ////////////////////// шкала мощность: for (x=0;x<5;x++) { tx=0b01100000; SPI(); }; tx=0; SPI(); for (z=0;z<3;z++) { for (x=0;x<5;x++) { if (pw>z) h = pw_metr[z]; else h = 0b00000000; tx=h; SPI(); // мощность -1,2,3 }; tx=0; SPI(); }; fpp(4); } else { fpp(34); }; ////////////////////// ГОТОВ //gotov =1; if (gotov) { LED('Г'); LED('О'); LED('Т'); LED('О'); LED('В'); } // ГОТОВ else { f_(5); }; // ----- fpp(3); ////////////////////// мини картинка модель - кораблик - заставка: mini_kartinki_korablik_0(); kursor(1); /* // стик_0 if (stik_in_0) {skala_ADC(u);} // шкала АЦП else {skala_ADC(255-u);};// шкала АЦП fpp(4); if (stik_in_0) {st_1000(u);} // 0...999 else {st_1000(255-u);}; // 0...999 fpp(9); */ //servo_0 = u; // серво 0 1,142v-(1,700v)-2,200v bservo_0 = servo_0; // буфер серво модель ///////////////////////////// if (bservo_0 > kor_servo_0) { bservo_0 = bservo_0 - kor_servo_0; // коррекция серво модель -начальное 87(1,700v) bservo_0 = bservo_0*4; if (bservo_0 > 127) bservo_0 = 127; bservo_0 = bservo_0 + 128; } else { bservo_0 = kor_servo_0 - bservo_0; // коррекция серво модель -начальное 87(1,700v) bservo_0 = bservo_0*4; if (bservo_0 > 127) bservo_0 = 127; bservo_0 = 128 - bservo_0; }; ///////////////////////////// if (servo_0) { skala_ADC(bservo_0); // шкала АЦП -буфер серво модель } else { fpp(65); }; ///////////////////////////// fpp(4); if (servo_0) { st_1000(bservo_0); // серво модель 1,142v-(1,700v)-2,200v // 0...999 } else { LED('-'); LED('-'); LED('-'); }; fpp(9); ////////////////////// мини картинка модель - кораблик - заставка: mini_kartinki_korablik_1(); kursor(2); ///////////////////// аккумулятор: if ( f_zasita_1 || f_zasita_2 ){ // флаг защита аккум от переразряда модель 1, 2 mini_kartinki_akkum_0(); // аккумулятор 1 } else { mini_kartinki_0(); // " " }; ///////////////////// потоп: // индикатор вода модель v: //v |= 0b00000001; if (flag_potop) { // флаг Вкл потоп -начальное 0xFF if (v & 0b00000001) { // v (.......1) 1 - вкл. вода модель if (taimer) { // таймер 0,5c mini_kartinki_potop_0(); // потоп вкл. } else { mini_kartinki_0(); // " " }; } else { mini_kartinki_potop_0(); // потоп вкл. }; } else { mini_kartinki_0(); // " " }; ///////////////////// бдув: // k: - (.....0..) // 2- Вкл(Выкл) обдув 40/50/60/70/80; if (flag_obduv) { if (k & 0b00000100) { if (taimer) { // таймер 0,5c mini_kartinki_kuler_0(); // кулер вкл. } else { mini_kartinki_0(); // " " }; } else { mini_kartinki_kuler_0(); // кулер вкл. }; } else { mini_kartinki_0(); // " " }; ///////////////////// фары: // k: - (....1...) // 3- Вкл(Выкл) фары if (flag_svet) { if (k & 0b00001000) { mini_kartinki_fari_ON_0(); // ФАРЫ - вкл. } else { mini_kartinki_fari_OFF_0(); // ФАРЫ - выкл. }; } else { mini_kartinki_0(); // " " }; kursor(3); //////////////////// аккумулятор: if ( f_zasita_1 || f_zasita_2 ){ // флаг защита аккум от переразряда модель 1, 2 mini_kartinki_akkum_1(); // аккумулятор 1 } else { mini_kartinki_1(); // " " }; ///////////////////// потоп: // индикатор вода модель v: //v |= 0b00000001; if (flag_potop) { // флаг Вкл потоп -начальное 0xFF if (v & 0b00000001) { // v (.......1) 1 - вкл. вода модель if (taimer) { // таймер 0,5c mini_kartinki_potop_1(); // потоп вкл. } else { mini_kartinki_1(); // " " }; } else { mini_kartinki_potop_1(); // потоп вкл. }; } else { mini_kartinki_1(); // " " }; ///////////////////// обдув: // k: - (.....0..) // 2- Вкл(Выкл) обдув 40/50/60/70/80; if (flag_obduv) { if (k & 0b00000100) { if (taimer) { // таймер 0,5c mini_kartinki_kuler_1(); // кулер вкл. } else { mini_kartinki_1(); // " " }; } else { mini_kartinki_kuler_1(); // кулер вкл. }; } else { mini_kartinki_1(); // " " }; ///////////////////// фары: // k: - (....1...) // 3- Вкл(Выкл) фары if (flag_svet) { if (k & 0b00001000) { mini_kartinki_fari_ON_1(); // ФАРЫ - вкл. } else { mini_kartinki_fari_OFF_1(); // ФАРЫ - выкл. }; } else { mini_kartinki_1(); // " " }; kursor(4); ///////////////////// ШИМ/круиз-контроль: if (flag_kruiz) { LED('К'); LED('Р'); LED('У'); } else { LED('Ш'); LED('И'); LED('М'); }; fpp(4); if (flag_kruiz) { if (bufer_kruiz > 127) { st_1000(bufer_kruiz-128); // круиз-контроль // >> // 0...999 } else { st_1000(127-bufer_kruiz); // круиз-контроль // << // 0...999 }; } else { st_1000(w); // ШИМ // 0...999 }; fpp(1); SPDR=0b01111111; while(!(SPSR & (1<<7))); // | fpp(2); ///////////////////// температура: t LED('Т'); LED('Е'); LED('М'); // ТЕМ fpp(4); if (t) { st_1000(t); // 0...999 } else { LED('-'); LED('-'); LED('-'); }; fpp(1); SPDR=0b01111111; while(!(SPSR & (1<<7))); // | fpp(2); ///////////////////// датчик тока модель: tok LED('Т'); LED('О'); LED('К'); // ТОК btok = tok; // > буфер ток if (btok) { if (btok > kor_tok) btok = btok - kor_tok; // коррекция датчик тока -начальное 255 else btok = kor_tok - btok; // коррекция датчик тока -начальное 255 fpp(2); st_tok(btok); } else { fpp(2); LED('-'); LED('-'); SPDR=0b01000000; while(!(SPSR & (1<<7))); // "." SPDR=0b00000000; while(!(SPSR & (1<<7))); // " " LED('-'); }; kursor(5); //v |= 0b00011110; /////////////////////// выгрузка:// v: - (......1.) 1 - вкл. выгрузка модель (геркон 2 база) if (v & 0b00000010){LED('Б'); LED('А'); LED('З'); LED('А'); } // БАЗА else {f_(4); }; // ---- fpp(7); /////////////////////// реле 6.1/6.2: (...11...) if (v & 0b00011000) { ////////////////// реле 6.2: // v: - (....1...) 1 - вкл. выгрузка модель (реле 6.2 база) << if (v & 0b00001000){LED('<'); LED('<'); } // << ////////////////// реле 6.1: // v: - (...1....) 1 - вкл. выгрузка модель (реле 6.1 выгрузка) >> else {LED('>'); LED('>'); };// >> } //////////////////// реле 6.1/6.2: (...00...) else {f_(2);}; // -- fpp(7); ///////////////////// сброс: // v: - (.....1..) 1 - вкл. выгрузка модель (геркон 1 выгрузка) if (v & 0b00000100){LED('С'); LED('Б'); LED('Р'); LED('О'); LED('С'); } // СБРОС else {f_(5);}; // ----- fpp(2); ///////////////////// GPS: //v: - (..1.....) 1 - 1PPS LED(' '); if (v & 0b00100000){LED('G');} // G else {LED('-');}; // - ///////////////////// тахометр: fpp(4); st_100000(tax*120); // 0...99999 kursor(6); //////////////////// аккум пульт 5 V LED('П'); fpp(13); ak_pult(p/2); // p - аккум пульт 5 V fpp(14); //////////////////// аккум модель 12 V -1 // k: - //(..1.....) 5- Вкл(Выкл) резервный аккумулятор if (k & 0b00100000) LED('-'); else LED('1'); if (f_zasita_1) LED('>'); // флаг защита аккум 1 -вкл. else LED(' '); // флаг защита аккум 1 -выкл. fpp(1); ak_model(g); // g - аккум модель 12 V fpp(13); ///////////////////// аккум модель 12 V -2 // k: - //(..1.....) 5- Вкл(Выкл) резервный аккумулятор if (k & 0b00100000) LED('2'); else LED('-'); if (f_zasita_2) LED('>'); // флаг защита аккум 2 -вкл. else LED(' '); // флаг защита аккум 2 -выкл. fpp(1); ak_model(g2); // g2 - аккум модель 2 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: if ( (f_zasita_1) && (!fc) ) { // флаг защита аккум 1 -вкл. // флаг - нет связи if (g < zasita_1) { // защита 1 if (taimer) { // таймер 0,5c //////////////////// шкала аккум модель 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); } else { fpp(46); }; } else { //////////////////// шкала аккум модель 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); }; } else { ////////////////////// шкала аккум модель 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); }; //////////////////////////// шкала аккум модель 2: if ( (f_zasita_2) && (!fc) ) { // флаг защита аккум 2 -вкл. // флаг - нет связи if (g2 < zasita_2) { // защита 2 if (taimer) { // таймер 0,5c //////////////////// шкала аккум модель 2: // опорное 5V; + 7...13,2 V; 6.0/5,1 -70,000; 13.2/5,1 -132,000; // +62 hg2 = g2;// hg2 - буфер шкала аккум модель 2 if (hg2>69) hg2 = hg2 - 70; else hg2=0; skala_0_ak(hg2); fpp(1); } else { fpp(35); }; } else { /////////////////////// шкала аккум модель 2: // опорное 5V; + 7...13,2 V; 6.0/5,1 -70,000; 13.2/5,1 -132,000; // +62 hg2 = g2;// hg2 - буфер шкала аккум модель 2 if (hg2>69) hg2 = hg2 - 70; else hg2=0; skala_0_ak(hg2); fpp(1); }; } else { //////////////////////// шкала аккум модель 2: // опорное 5V; + 7...13,2 V; 6.0/5,1 -70,000; 13.2/5,1 -132,000; // +62 hg2 = g2;// hg2 - буфер шкала аккум модель 2 if (hg2>69) hg2 = hg2 - 70; else hg2=0; skala_0_ak(hg2); fpp(1); }; goto _5; // LCD > ///////////////////////////////////////////////////////////////////////////////////////////// _51: // menu караблик: ///////////////////////////////////////////////////////////////////////////////////////////// kursor(0); //////////////////////// МЕНЮ КОРАБЛИК: LED('М'); LED('Е'); LED('Н'); LED('Ю'); LED(' '); LED('К'); LED('О'); LED('Р'); LED('А'); LED('Б'); LED('Л'); LED('И'); LED('К'); LED(':'); fpp(44); kursor(1); if (menu == 51) LED('>'); // > else LED(' '); // /////////////////////// СВЯЗЬ LED('С'); LED('В'); LED('Я'); LED('З'); LED('Ь'); fpp(92); if ( (menu == 51) && flag_menu_1 ) { menu = 61; // > меню 1: связь flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(2); if (menu == 52) LED('>'); // > else LED(' '); // /////////////////////// ПУЛЬТ LED('П'); LED('У'); LED('Л'); LED('Ь'); LED('Т'); fpp(92); if ( (menu == 52) && flag_menu_1 ) { menu = 71; // > меню 3: пульт flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(3); if (menu == 53) LED('>'); // > else LED(' '); // ////////////////////// МОДЕЛЬ LED('М'); LED('О'); LED('Д'); LED('Е'); LED('Л'); LED('Ь'); fpp(86); if ( (menu == 53) && flag_menu_1 ) { menu = 81; // > меню 4: модель flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(4); if (menu == 54) LED('>'); // > else LED(' '); // ////////////////////// ВЫБОР МОДЕЛЬ LED('В'); LED('Ы'); LED('Б'); LED('О'); LED('Р'); LED(' '); LED('М'); LED('О'); LED('Д'); LED('Е'); LED('Л'); LED('Ь'); fpp(50); if ( (menu == 54) && flag_menu_1 ) { menu = 1; // > выбор модель flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(5); if (menu == 55) LED('>'); // > else LED(' '); // ////////////////////// GPS LED('G'); LED('P'); LED('S'); fpp(104); if ( (menu == 55) && flag_menu_1 ) { menu = 111; // > меню 6: GPS flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(6); if (menu == 56) LED('>'); // > else LED(' '); // ////////////////////// ЭХОЛОТ LED('Э'); LED('Х'); LED('О'); LED('Л'); LED('О'); LED('Т'); fpp(86); if ( (menu == 56) && flag_menu_1 ) { menu = 141; // > меню 9: ЭХОЛОТ flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(7); if (menu == 57) LED('>'); // > else LED(' '); // ////////////////////// RESET LED('R'); LED('E'); LED('S'); LED('E'); LED('T'); fpp(92); if ( (menu == 57) && flag_menu_1 ) { flag_RESET = 1; // RESET flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; //////////////////////// menu > if ( menu == 58 ) { flag_TX_EEPROM = 1; // флаг запись EEPROM menu = 50; // > кораблик }; goto _5; // LED > ///////////////////////////////////////////////////////////////////////////////////////////// _61: // меню 1: связь ///////////////////////////////////////////////////////////////////////////////////////////// kursor(0); ///////////////////// МЕНЮ СВЯЗЬ LED('М'); LED('Е'); LED('Н'); LED('Ю'); LED(' '); LED('С'); LED('В'); LED('Я'); LED('З'); LED('Ь'); fpp(43); if (flag_radio) { // радио -начальное 0xFF ///////////////////// антеннка: if (fc) { // флаг - нет связи if (taimer) { // таймер 0,5c for (x=0;x<9;x++) { SPDR=antenka[x]; while(!(SPSR & (1<<7))); }; // антеннка } else { fpp(9); // " " }; } else { 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; tx=h; SPI(); tx=0; SPI(); }; } else { fpp(29); }; kursor(1); LED(' '); // " " ///////////////////// ЧACТОТА ЗАПРОСА LED('Ч'); LED('А'); LED('С'); LED('Т'); LED('О'); LED('Т'); LED('А'); LED(' '); LED('З'); LED('А'); LED('П'); LED('Р'); LED('О'); LED('С'); LED('А'); fpp(8); st_10000(2450); // 0...9999 2450 -вызывной канал kursor(2); if (menu == 61) LED('>'); // > else LED(' '); // //////////////////// ЧACТОТА +/-1MHz LED('Ч'); LED('А'); LED('С'); LED('Т'); LED('О'); LED('Т'); LED('А'); LED(' '); LED('+'); LED('/'); LED('-'); LED('1'); LED('M'); LED('H'); LED('z'); fpp(8); chi = 2400 + ch; // начальное 2400 st_10000(chi); // 0...9999 if ( (menu == 61) && (flag_menu_1 || flag_menu_2) ) { if (flag_menu_1) { ch++; // ch - частота: (2.400GHz...2.525GHz) if (ch > 125) ch = 0; }; if (flag_menu_2) { ch--; // ch - частота: (2.400GHz...2.525GHz) if (ch > 125) ch = 125; }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(3); if (menu == 62) LED('>'); // > else LED(' '); // //////////////////// МОЩНОСТЬ LED('М'); LED('О'); LED('Щ'); LED('Н'); LED('О'); LED('С'); LED('Т'); LED('Ь'); fpp(68); ///////////////////// pw - мощность: // k: - (......11) 11 10 01 00 st_10(pw); // 0...9 if ( (menu == 62) && flag_menu_1 ) { pw++; // pw - 11 10 01 00 if (pw > 3) pw = 0; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(4); if (menu == 63) 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); ///////////////////// IP_Destination начальное 1. st_10(IP_Destination); // счётчик 0...9 if ( (menu == 63) && flag_menu_1 ) { IP_Destination ++; // IP_Destination -начальное 1 if (IP_Destination > 5) IP_Destination = 1; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(5); if (menu == 64) LED('>'); // > else LED(' '); // ///////////////////// РАДИОМОДУЛЬ LED('Р'); LED('А'); LED('Д'); LED('И'); LED('О'); LED('М'); LED('О'); LED('Д'); LED('У'); LED('Л'); LED('Ь'); fpp(38); if ( (menu == 64) && flag_menu_1 ) { flag_radio = ~ flag_radio; // флаг радиомодуль -начальное 0xF flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if (flag_radio) {LED('В'); LED('К'); LED('Л');} // ВКЛ else {f_(3);}; // --- 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(':'); fpp(20); ///////////////////////// 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(13); ///////////////////////// контроль пакетов Tx (n) > Rx (m): if (kp) LED('K'); // K (Tx (n) == Rx (m)) else LED('-'); // - (Tx (n) != Rx (m)) fpp(13); //////////////////////// RX LED('R'); LED('X'); LED(' '); st_100000(kontrol_RX_b); // счётчик 0...99999: ///////////////////// menu > if ( menu == 65 || menu == 60 ) { menu = 51; }; // > меню 1: связь караблик goto _5; // LCD > ///////////////////////////////////////////////////////////////////////////////////////////// _71: // меню 2: пульт ///////////////////////////////////////////////////////////////////////////////////////////// kursor(0); ///////////////////// МЕНЮ ПУЛЬТ LED('М'); LED('Е'); LED('Н'); LED('Ю'); LED(' '); LED('П'); LED('У'); LED('Л'); LED('Ь'); LED('Т'); fpp(68); ///////////////////// БУЗЕР kursor(1); if (menu == 71) LED('>'); // > else LED(' '); // LED('Б'); LED('У'); LED('З'); LED('Е'); LED('Р'); fpp(74); if ( (menu == 71) && flag_menu_1 ) { f_buzer = ~ f_buzer; // флаг бузер if (f_buzer) DDRD.7=1; // звук бузер ВКЛ else DDRD.7=0; // звук бузер ВЫКЛ flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if (f_buzer) {LED('В'); LED('К'); LED('Л');} // ВКЛ else {f_(3);}; // --- //////////////////// КРУИЗ kursor(2); if (menu == 72) LED('>'); // > else LED(' '); // LED('К'); LED('Р'); LED('У'); LED('И'); LED('З'); fpp(50); if (f_flag_kruiz) bb_bufer_kruiz = bufer_kruiz; // буфер круиз-контроль else bb_bufer_kruiz = u1; // буфер круиз-контроль if (bb_bufer_kruiz > 127) { // -128 b_bufer_kruiz = (bb_bufer_kruiz-128); }; if (bb_bufer_kruiz < 128) { // -128 b_bufer_kruiz = (127-bb_bufer_kruiz); }; st_1000(b_bufer_kruiz); // 0...999 fpp(6); if ( (menu == 72) && flag_menu_1 ) { flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if ( (menu == 72) && flag_ON_kruiz ) { // флаг вкл. круиз-контроль f_flag_kruiz = ~f_flag_kruiz; // флаг круиз-контроль if (f_flag_kruiz) bufer_kruiz = u1; // буфер круиз-контроль // kb1 = 0; flag_ON_kruiz = 0; // флаг вкл. круиз-контроль }; if (f_flag_kruiz) {LED('В'); LED('К'); LED('Л');} // ВКЛ else {f_(3);}; // --- /////////////////////// АВТО ВЫКЛ ЭКРАН kursor(3); if (menu == 73) LED('>'); // > else LED(' '); // LED('А'); LED('В'); LED('Т'); LED('О'); LED(' '); LED('В'); LED('Ы'); LED('К'); LED('Л'); LED(' '); LED('Э'); LED('К'); LED('Р'); LED('А'); LED('Н'); fpp(14); if ( (menu == 73) && flag_menu_1 ) { flag_AU_OFF_LED = ~ flag_AU_OFF_LED; // флаг АВТО выкл экран -начальное 0xFF (вкл.) flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if (flag_AU_OFF_LED) { LED('3'); LED('0'); LED('с');} // 30c else { f_(3);}; // --- /////////////////////// PPM-ТРЕНЕР kursor(4); if (menu == 74) LED('>'); // > else LED(' '); // LED('P'); LED('P'); LED('M'); LED('-'); LED('т'); LED('р'); LED('е'); LED('н'); LED('е'); LED('р'); fpp(62); if ( (menu == 74) && flag_menu_1 ) { menu = 91; // > меню 4: PPM flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////////// КАНАЛЫ АЦП kursor(5); if (menu == 75) LED('>'); // > else LED(' '); // LED('К'); LED('А'); LED('Н'); LED('А'); LED('Л'); LED('Ы'); LED(' '); LED('А'); LED('Ц'); LED('П'); fpp(62); if ( (menu == 75) && flag_menu_1 ) { menu = 101; // > меню 5: стики flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(6); fpp(128); kursor(7); fpp(128); /////////////////////// menu > if ( menu == 76 || menu == 70 ) { menu = 52;}; // > меню 2: пульт караблик goto _5; // LED > ///////////////////////////////////////////////////////////////////////////////////////////// _81: // меню 3: модель ///////////////////////////////////////////////////////////////////////////////////////////// kursor(0); ///////////////////// МЕНЮ МОДЕЛЬ LED('М'); LED('Е'); LED('Н'); LED('Ю'); LED(' '); LED('М'); LED('О'); LED('Д'); LED('Е'); LED('Л'); LED('Ь'); fpp(62); kursor(1); if (menu == 81) LED('>'); // > else LED(' '); // //////////////////// ОБДУВ+10 // (.....0..) 2- Вкл(Выкл) обдув 40/50/60/70/80; LED('О'); LED('Б'); LED('Д'); LED('У'); LED('В'); LED('+'); LED('1'); LED('0'); fpp(62); if (flag_obduv) {st_100(obduv); } // 0...99 else { f_(2); }; // -- if ( (menu == 81) && flag_menu_1 ) { obduv = obduv + 10; // obduv - обдув 40/50/60/70/80; if (obduv > 80) flag_obduv = 0x00; // флаг обдув if (obduv > 90) { flag_obduv = 0xFF; // флаг обдув obduv = 40; }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(2); if (menu == 82) LED('>'); // > else LED(' '); // ///////////////////// ЗАЩИТА-1 LED('З'); LED('А'); LED('Щ'); LED('И'); LED('Т'); LED('А'); LED('-'); LED('1'); fpp(54); if (f_zasita_1) {ak_model(zasita_1);} // -начальное 0x00 else { fpp(2); f_(3); }; // --- if ( (menu == 82) && flag_menu_1 ) { zasita_1 = zasita_1 + 10; if (zasita_1 == 50) f_zasita_1 = 0xFF; // флаг защита аккум 1 if (zasita_1 > 100) f_zasita_1 = 0; // флаг защита аккум 1 if (zasita_1 > 110) { zasita_1 = 50; f_zasita_1 = 0xFF; // флаг защита аккум 1 }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(3); if (menu == 83) LED('>'); // > else LED(' '); // ////////////////// ЗАЩИТА-2 LED('З'); LED('А'); LED('Щ'); LED('И'); LED('Т'); LED('А'); LED('-'); LED('2'); fpp(54); if (f_zasita_2) {ak_model(zasita_2);} // -начальное 0x00 else { fpp(2); f_(3); }; // --- if ( (menu == 83) && flag_menu_1 ) { zasita_2 = zasita_2 + 10; if (zasita_2 == 50) f_zasita_2 = 0xFF; // флаг защита аккум 2 if (zasita_2 > 100) f_zasita_2 = 0; // флаг защита аккум 2 if (zasita_2 > 110) { zasita_2 = 50; f_zasita_2 = 0xFF; // флаг защита аккум 2 }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(4); if (menu == 84) LED('>'); // > else LED(' '); // ////////////////// СВЕТ LED('С'); LED('В'); LED('Е'); LED('Т'); fpp(80); if ( (menu == 84) && flag_menu_1 ) { flag_svet = ~ flag_svet; // флаг Вкл свет flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// флаг if (flag_svet) {LED('В'); LED('К'); LED('Л');} // ВКЛ else {f_(3);}; // --- kursor(5); if (menu == 85) LED('>'); // > else LED(' '); // ////////////////// ПОТОП LED('П'); LED('О'); LED('Т'); LED('О'); LED('П'); fpp(74); if ( (menu == 85) && flag_menu_1 ) { flag_potop = ~ flag_potop; // флаг Вкл потоп PORTD.7=0; // бузер вода модель - выкл. PORTD.4=0; // индикатор вода модель - выкл. flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// флаг if (flag_potop) {LED('В'); LED('К'); LED('Л');} // ВКЛ else {f_(3);}; // --- kursor(6); if (menu == 86) LED('>'); // > else LED(' '); // ///////////////////// ТОК УСТ 0 // датчик тока модель: tok LED('Т'); LED('О'); LED('К'); LED(' '); LED('У'); LED('С'); LED('Т'); LED(' '); LED('0'); fpp(46); if (tok) { if (tok > kor_tok) tok = tok - kor_tok; // коррекция датчик тока -начальное 255 else tok = kor_tok - tok; // fpp(2); st_tok(tok); } else { fpp(2); LED('-'); LED('-'); tx=0b01000000; SPI(); // "." tx=0b00000000; SPI(); // " " LED('-'); }; if ( (menu == 86) && (flag_menu_1 || flag_menu_2) ) { if (flag_menu_1) { kor_tok--; // коррекция датчик тока -начальное 255 }; if (flag_menu_2) { kor_tok++; // коррекция датчик тока -начальное 255 }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(7); fpp(128); /////////////////// menu > if ( menu == 87 || menu == 80 ) { menu = 53;}; // > меню 3: модель караблик goto _5; // LCD > ///////////////////////////////////////////////////////////////////////////////////////////// _91: // меню 4: PPM ///////////////////////////////////////////////////////////////////////////////////////////// kursor(0); ////////////////////////////PPM -вкл/выкл. if (menu == 91) LED('>'); // > else LED(' '); // ////////////////// PPM LED('P'); LED('P'); LED('M'); fpp(86); if ( (menu == 91) && flag_menu_1 ) { PPM_ON = ~ PPM_ON; //PPM -вкл/выкл. if (PPM_ON) { TCCR3B=0b00011010; // 8.000.000/8=1.000.000 Hz // верхний предел счета ICR3 DDRE.3=1; // OC3A } else { TCCR3B=0b00000000; // 8.000.000/8=1.000.000 Hz // верхний предел счета ICR3 DDRE.3=0; // OC3A }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// флаг if (PPM_ON) {LED('В'); LED('К'); LED('Л'); } // ВКЛ else {f_(3);}; // --- /////////////////////////////PPM -позитивный 0xFF/негативный 0x00 сигнал. kursor(1); if (menu == 92) LED('>'); // > else LED(' '); // ///////////////// if ( (menu == 92) && flag_menu_1 ) { PPM_pozitiv = ~ PPM_pozitiv; ////////////////////// -позитивный 0xFF/негативный 0x00 сигнал. if (PPM_pozitiv) { // PPM_pozitiv; TCCR3A=0b11000010; // режим ШИМ // COM3A - установка при совпадении TCNT3 и OCR3A } else { TCCR3A=0b10000010; // режим ШИМ // COM3A - сброс при совпадении TCNT3 и OCR3A }; ////////////////////// flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// флаг if (PPM_pozitiv){LED('П'); LED('О'); LED('З'); LED('И'); LED('Т'); LED('И'); LED('В'); } // ПОЗИТИВ else {LED('Н'); LED('Е'); LED('Г'); LED('А'); LED('Т'); LED('И'); LED('В'); };// НЕГАТИВ fpp(80); ////////////////////////////PPM -длительность канальных имп. kursor(2); if (menu == 93) LED('>'); // > else LED(' '); // ////////////////// КАНАЛ +/- LED('К'); LED('А'); LED('Н'); LED('А'); LED('Л'); LED(' '); LED('+'); LED('/'); LED('-'); fpp(50); st_1000(PPM_kanal); // 0...999 if ( (menu == 93) && (flag_menu_1 || flag_menu_2) ) { if (flag_menu_1) { PPM_kanal++; if (PPM_kanal > 1800 ) {PPM_kanal = 600; }; }; if (flag_menu_2) { PPM_kanal--; if (PPM_kanal < 600 ) {PPM_kanal = 1800; }; }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; ////////////////////////////PPM -длительность строб имп. kursor(3); if (menu == 94) LED('>'); // > else LED(' '); // ////////////////// СТРОБ +/- LED('С'); LED('Т'); LED('Р'); LED('О'); LED('Б'); LED(' '); LED('+'); LED('/'); LED('-'); fpp(50); st_1000(PPM_strob); // 0...999 if ( (menu == 94) && (flag_menu_1 || flag_menu_2) ) { if (flag_menu_1) { PPM_strob++; if (PPM_strob > 500 ) {PPM_strob = 100; }; }; if (flag_menu_2) { PPM_strob--; if (PPM_strob < 100 ) {PPM_strob = 500; }; }; OCR3AH=(PPM_strob>>8);//PPM -длительность строб имп OCR3AL=PPM_strob; //PPM -длительность строб имп flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; ////////////////////////////PPM -длительность синхро паузы. kursor(4); if (menu == 95) LED('>'); // > else LED(' '); // ////////////////// ПАУЗА +/- LED('П'); LED('А'); LED('У'); LED('З'); LED('А'); LED(' '); LED('+'); LED('/'); LED('-'); fpp(38); st_100000(PPM_pauza); // 0...99999 if ( (menu == 95) && (flag_menu_1 || flag_menu_2) ) { if (flag_menu_1) { PPM_pauza = PPM_pauza + 1000; // +1mc if (PPM_pauza > 40000 ) {PPM_pauza = 4000; }; }; if (flag_menu_2) { PPM_pauza = PPM_pauza - 1000; // -1mc if (PPM_pauza < 4000 ) {PPM_pauza = 40000; }; }; PPM[8]=PPM_pauza; // -синхропауза flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(5); fpp(128); kursor(6); fpp(128); kursor(7); fpp(128); /////////////////// menu > if ( menu == 96 || menu == 90 ) { menu = 74;}; // > меню пульт: > PPM goto _5; // LCD > ///////////////////////////////////////////////////////////////////////////////////////////// _101: // меню 5: стики ///////////////////////////////////////////////////////////////////////////////////////////// kursor(0); //////////////////////////// стик 0: -начальное 0x00 if (menu == 101) LED('>'); // > else LED(' '); // /////////////////////// КАНАЛ 0 LED('К'); LED('А'); LED('Н'); LED('А'); LED('Л'); fpp(5); LED('0'); if (stik_in_0) LED('+'); // + else LED('-'); // - fpp(2); if (stik_in_0) {skala_ADC(u);} else {skala_ADC(255-u);}; fpp(2); st_10(stik_0); // 0...9 if ( (menu == 101) && (flag_menu_1 || flag_menu_2) ) { if (flag_menu_1) { stik_0++; if (stik_0 > 7 ) { stik_0 = 0; stik_in_0 =~ stik_in_0; }; }; if (flag_menu_2) { stik_0--; if (stik_0 > 7 ) { stik_0 = 7; stik_in_0 =~ stik_in_0; }; }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; //////////////////////////// стик 1: -начальное 0x01 kursor(1); if (menu == 102) LED('>'); // > else LED(' '); // /////////////////////// КАНАЛ 1 LED('К'); LED('А'); LED('Н'); LED('А'); LED('Л'); fpp(5); LED('1'); if (stik_in_1) LED('+'); // + else LED('-'); // - fpp(2); if (stik_in_1) {skala_ADC(u1);} else {skala_ADC(255-u1);}; fpp(2); st_10(stik_1); // 0...9 if ( (menu == 102) && (flag_menu_1 || flag_menu_2) ) { if (flag_menu_1) { stik_1++; if (stik_1 > 7 ) { stik_1 = 0; stik_in_1 =~ stik_in_1; }; }; if (flag_menu_2) { stik_1--; if (stik_1 > 7 ) { stik_1 = 7; stik_in_1 =~ stik_in_1; }; }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; //////////////////////////// стик 2: -начальное 0x02 kursor(2); if (menu == 103) LED('>'); // > else LED(' '); // /////////////////////// КАНАЛ 2 LED('К'); LED('А'); LED('Н'); LED('А'); LED('Л'); fpp(5); LED('2'); if (stik_in_2) LED('+'); // + else LED('-'); // - fpp(2); if (stik_in_2) {skala_ADC(u2);} else {skala_ADC(255-u2);}; fpp(2); st_10(stik_2); // 0...9 if ( (menu == 103) && (flag_menu_1 || flag_menu_2) ) { if (flag_menu_1) { stik_2++; if (stik_2 > 7 ) { stik_2 = 0; stik_in_2 =~ stik_in_2; }; }; if (flag_menu_2) { stik_2--; if (stik_2 > 7 ) { stik_2 = 7; stik_in_2 =~ stik_in_2; }; }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; //////////////////////////// стик 3: -начальное 0x03 kursor(3); if (menu == 104) LED('>'); // > else LED(' '); // /////////////////////// КАНАЛ 3 LED('К'); LED('А'); LED('Н'); LED('А'); LED('Л'); fpp(5); LED('3'); if (stik_in_3) LED('+'); // + else LED('-'); // - fpp(2); if (stik_in_3) {skala_ADC(u3);} else {skala_ADC(255-u3);}; fpp(2); st_10(stik_3); // 0...9 if ( (menu == 104) && (flag_menu_1 || flag_menu_2) ) { if (flag_menu_1) { stik_3++; if (stik_3 > 7 ) { stik_3 = 0; stik_in_3 =~ stik_in_3; }; }; if (flag_menu_2) { stik_3--; if (stik_3 > 7 ) { stik_3 = 7; stik_in_3 =~ stik_in_3; }; }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; //////////////////////////// стик 4: -начальное 0x04 kursor(4); if (menu == 105) LED('>'); // > else LED(' '); // /////////////////////// КАНАЛ 4 LED('К'); LED('А'); LED('Н'); LED('А'); LED('Л'); fpp(5); LED('4'); if (stik_in_4) LED('+'); // + else LED('-'); // - fpp(2); if (stik_in_4) {skala_ADC(u4);} else {skala_ADC(255-u4);}; fpp(2); st_10(stik_4); // 0...9 if ( (menu == 105) && (flag_menu_1 || flag_menu_2) ) { if (flag_menu_1) { stik_4++; if (stik_4 > 7 ) { stik_4 = 0; stik_in_4 =~ stik_in_4; }; }; if (flag_menu_2) { stik_4--; if (stik_4 > 7 ) { stik_4 = 7; stik_in_4 =~ stik_in_4; }; }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; //////////////////////////// стик 5: -начальное 0x05 kursor(5); if (menu == 106) LED('>'); // > else LED(' '); // /////////////////////// КАНАЛ 0 LED('К'); LED('А'); LED('Н'); LED('А'); LED('Л'); fpp(5); LED('5'); if (stik_in_5) LED('+'); // + else LED('-'); // - fpp(2); if (stik_in_5) {skala_ADC(u5);} else {skala_ADC(255-u5);}; fpp(2); st_10(stik_5); // 0...9 if ( (menu == 106) && (flag_menu_1 || flag_menu_2) ) { if (flag_menu_1) { stik_5++; if (stik_5 > 7 ) { stik_5 = 0; stik_in_5 =~ stik_in_5; }; }; if (flag_menu_2) { stik_5--; if (stik_5 > 7 ) { stik_5 = 7; stik_in_5 =~ stik_in_5; }; }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; //////////////////////////// стик 6: -начальное 0x06 kursor(6); if (menu == 107) LED('>'); // > else LED(' '); // /////////////////////// КАНАЛ 6 LED('К'); LED('А'); LED('Н'); LED('А'); LED('Л'); fpp(5); LED('6'); if (stik_in_6) LED('+'); // + else LED('-'); // - fpp(2); if (stik_in_6) {skala_ADC(u6);} else {skala_ADC(255-u6);}; fpp(2); st_10(stik_6); // 0...9 if ( (menu == 107) && (flag_menu_1 || flag_menu_2) ) { if (flag_menu_1) { stik_6++; if (stik_6 > 7 ) { stik_6 = 0; stik_in_6 =~ stik_in_6; }; }; if (flag_menu_2) { stik_6--; if (stik_6 > 7 ) { stik_6 = 7; stik_in_6 =~ stik_in_6; }; }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; ///////////////////////////// стик 7: -начальное 0x07 kursor(7); if (menu == 108) LED('>'); // > else LED(' '); // /////////////////////// АКК П 0 LED('А'); LED('К'); LED('К'); LED(' '); LED('П'); fpp(5); LED('7'); if (stik_in_7) LED('+'); // + else LED('-'); // - fpp(2); if (stik_in_7) {skala_ADC(u7);} else {skala_ADC(255-u7);}; fpp(2); st_10(stik_7); // 0...9 if ( (menu == 108) && (flag_menu_1 || flag_menu_2) ) { if (flag_menu_1) { stik_7++; if (stik_7 > 7 ) { stik_7 = 0; stik_in_7 =~ stik_in_7; }; }; if (flag_menu_2) { stik_7--; if (stik_7 > 7 ) { stik_7 = 7; stik_in_7 =~ stik_in_7; }; }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; /////////////////// menu > if ( menu == 109 || menu == 100 ) { menu = 75;}; // > меню пульт: > стик goto _5; // LCD > ///////////////////////////////////////////////////////////////////////////////////////////// _111: // меню 6: GPS ///////////////////////////////////////////////////////////////////////////////////////////// kursor(0); /////////////////////////////// GPS LED('G'); LED('P'); LED('S'); fpp(110); kursor(1); if (menu == 111) LED('>'); // > else LED(' '); // /////////////////////////////// M8N (0)/m8n (1) //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 if ( (menu == 111) && flag_menu_1 ) { flag_M8N_m8n = ~flag_M8N_m8n; // флаг M8N (0)/m8n (1) -начальное 0x00 flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if (!flag_M8N_m8n) {LED('M'); LED('8'); LED('N'); fpp(104); } // M8N (0) else {LED('m'); LED('8'); LED('n'); fpp(104); }; // m8n (1) kursor(2); if (menu == 112) LED('>'); // > else LED(' '); // /////////////////////////////// МАСШТАБ LED('М'); LED('А'); LED('С'); LED('Ш'); LED('Т'); LED('А'); LED('Б'); fpp(62); if ( (menu == 112) && (flag_menu_1 || flag_menu_2) ) { if (flag_menu_1) { del_EN = del_EN + 1; // делитель -начальное 0x01 if (del_EN > 100)del_EN = 1; // делитель -начальное 0x01 }; if (flag_menu_2) { del_EN = del_EN - 1; // делитель -начальное 0x01 if (del_EN < 1)del_EN = 100; // делитель -начальное 0x01 }; cikl_GPS = 0; // счёт цикл GPS flag_EN = 0; // флаг >0< flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; st_1000(del_EN); // 000 kursor(3); if (menu == 113) LED('>'); // > else LED(' '); // ////////////////////// ТОЧКИ LED('Т'); LED('О'); LED('Ч'); LED('К'); LED('И'); fpp(92); if ( (menu == 113) && flag_menu_1 ) { menu = 121; // > меню 7: GPS точки flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(4); if (menu == 114) LED('>'); // > else LED(' '); // ////////////////////// МАРШРУТ LED('М'); LED('А'); LED('Р'); LED('Ш'); LED('Р'); LED('У'); LED('Т'); fpp(80); if ( (menu == 114) && flag_menu_1 ) { menu = 131; // > меню 8: GPS маршрут flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(5); if (menu == 115) LED('>'); // > else LED(' '); // ////////////////////// АВТОПИЛОТ LED('А'); LED('В'); LED('Т'); LED('О'); LED('П'); LED('И'); LED('Л'); LED('О'); LED('Т'); fpp(50); if ( (menu == 115) && flag_menu_1 ) { flag_GPS_avtopilot =~ flag_GPS_avtopilot; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; if (flag_GPS_avtopilot) {LED('В'); LED('К'); LED('Л'); } // ВКЛ else {f_(3);}; // --- kursor(6); if (menu == 116) LED('>'); // > else LED(' '); // ////////////////////// RESET LED('R'); LED('E'); LED('S'); LED('E'); LED('T'); fpp(92); if ( (menu == 116) && flag_menu_1 ) { cikl_GPS= 0; // счёт цикл GPS flag_EN = 0; // флаг >0< flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(7); fpp(128); /////////////////// menu > if ( menu == 117 || menu == 110 ) { menu = 55;}; // > меню 6: > GPS goto _5; // LCD > ///////////////////////////////////////////////////////////////////////////////////////////// _121: // меню 7: GPS точки ///////////////////////////////////////////////////////////////////////////////////////////// kursor(0); if (menu == 121) LED('>');// > else LED(' ');// ////////////////////// 1 LED('1'); if ( (menu == 121) && flag_menu_1 ) { N_1 = bufer_N; // точка E_1 = bufer_E; // точка flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(4); st_100000000(N_1); // точка fpp(4); st_100000000(E_1); // точка kursor(1); if (menu == 122) LED('>'); // > else LED(' '); // ////////////////////// 2 LED('2'); if ( (menu == 122) && flag_menu_1 ) { N_2 = bufer_N; // точка E_2 = bufer_E; // точка flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(4); st_100000000(N_2); // точка fpp(4); st_100000000(E_2); // точка kursor(2); if (menu == 123) LED('>');// > else LED(' ');// ////////////////////// 3 LED('3'); if ( (menu == 123) && flag_menu_1 ) { N_3 = bufer_N; // точка E_3 = bufer_E; // точка flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(4); st_100000000(N_3); // точка fpp(4); st_100000000(E_3); // точка kursor(3); if (menu == 124) LED('>'); // > else LED(' '); // ////////////////////// 4 LED('4'); if ( (menu == 124) && flag_menu_1 ) { N_4 = bufer_N; // точка E_4 = bufer_E; // точка flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(4); st_100000000(N_4); // точка fpp(4); st_100000000(E_4); // точка kursor(4); if (menu == 125) LED('>'); // > else LED(' '); // ////////////////////// 5 LED('5'); if ( (menu == 125) && flag_menu_1 ) { N_5 = bufer_N; // точка E_5 = bufer_E; // точка flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(4); st_100000000(N_5); // точка fpp(4); st_100000000(E_5); // точка kursor(5); if (menu == 126) LED('>'); // > else LED(' '); // ////////////////////// 6 LED('6'); if ( (menu == 126) && flag_menu_1 ) { N_6 = bufer_N; // точка E_6 = bufer_E; // точка flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(4); st_100000000(N_6); // точка fpp(4); st_100000000(E_6); // точка kursor(6); if (menu == 127) LED('>'); // > else LED(' '); // ////////////////////// 7 LED('7'); if ( (menu == 127) && flag_menu_1 ) { N_7 = bufer_N; // точка E_7 = bufer_E; // точка flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(4); st_100000000(N_7); // точка fpp(4); st_100000000(E_7); // точка kursor(7); if (menu == 128) LED('>'); // > else LED(' '); // ////////////////////// 8 LED('8'); if ( (menu == 128) && flag_menu_1 ) { N_8 = bufer_N; // точка E_8 = bufer_E; // точка flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(4); st_100000000(N_8); // точка fpp(4); st_100000000(E_8); // точка /////////////////// menu > if ( menu == 129 || menu == 120 ) { menu = 113;}; // > меню 7: > GPS точки goto _5; // LCD > ///////////////////////////////////////////////////////////////////////////////////////////// _131: // меню 7: GPS маршрут ///////////////////////////////////////////////////////////////////////////////////////////// kursor(0); if (menu == 131) LED('>');// > else LED(' ');// ////////////////////// 1 LED('1'); if ( (menu == 131) && flag_menu_1 ) { bufer_N_1 = N_1; // точка bufer_E_1 = N_1; // точка flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(4); st_100000000(N_1); // точка fpp(4); st_100000000(E_1); // точка kursor(1); if (menu == 132) LED('>'); // > else LED(' '); // ////////////////////// 2 LED('2'); if ( (menu == 132) && flag_menu_1 ) { bufer_N_2 = N_2; // точка bufer_E_2 = N_2; // точка flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(4); st_100000000(N_2); // точка fpp(4); st_100000000(E_2); // точка kursor(2); if (menu == 133) LED('>'); // > else LED(' '); // ////////////////////// 3 LED('3'); if ( (menu == 133) && flag_menu_1 ) { bufer_N_3 = N_3; // точка bufer_E_3 = N_3; // точка flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(4); st_100000000(N_3); // точка fpp(4); st_100000000(E_3); // точка kursor(3); if (menu == 134) LED('>'); // > else LED(' '); // ////////////////////// 4 LED('4'); if ( (menu == 134) && flag_menu_1 ) { bufer_N_4 = N_4; // точка bufer_E_4 = N_4; // точка flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(4); st_100000000(N_4); // точка fpp(4); st_100000000(E_4); // точка kursor(4); if (menu == 135) LED('>'); // > else LED(' '); // ////////////////////// 5 LED('5'); if ( (menu == 135) && flag_menu_1 ) { bufer_N_5 = N_5; // точка bufer_E_5 = N_5; // точка flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(4); st_100000000(N_5); // точка fpp(4); st_100000000(E_5); // точка kursor(5); if (menu == 136) LED('>'); // > else LED(' '); // ////////////////////// 6 LED('6'); if ( (menu == 136) && flag_menu_1 ) { bufer_N_6 = N_6; // точка bufer_E_6 = N_6; // точка flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(4); st_100000000(N_6); // точка fpp(4); st_100000000(E_6); // точка kursor(6); if (menu == 137) LED('>'); // > else LED(' '); // ////////////////////// 7 LED('7'); if ( (menu == 137) && flag_menu_1 ) { bufer_N_7 = N_7; // точка bufer_E_7 = N_7; // точка flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(4); st_100000000(N_7); // точка fpp(4); st_100000000(E_7); // точка kursor(7); if (menu == 138) LED('>'); // > else LED(' '); // ////////////////////// 8 LED('8'); if ( (menu == 138) && flag_menu_1 ) { bufer_N_8 = N_8; // точка bufer_E_8 = N_8; // точка flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; fpp(4); st_100000000(N_8); // точка fpp(4); st_100000000(E_8); // точка /////////////////// menu > if ( menu == 139 || menu == 130 ) { menu = 114;}; // > меню 8: > GPS маршрут goto _5; // LCD > ///////////////////////////////////////////////////////////////////////////////////////////// _141: // меню 9: эхолот ///////////////////////////////////////////////////////////////////////////////////////////// kursor(0); ////////////////////// ЭХОЛОТ LED('Э'); LED('Х'); LED('О'); LED('Л'); LED('О'); LED('Т'); fpp(92); kursor(1); if (menu == 141) LED('>'); // > else LED(' '); // ////////////////////// МАСШТАБ LED('М'); LED('А'); LED('С'); LED('Ш'); LED('T'); LED('А'); LED('Б'); fpp(62); if ( (menu == 141) && (flag_menu_1 || flag_menu_2) ) { if (flag_menu_1) { mashtab_exolot = mashtab_exolot + 1; // делитель -начальное 0x01 if (mashtab_exolot > 100)mashtab_exolot = 1; // делитель -начальное 0x01 }; if (flag_menu_2) { mashtab_exolot = mashtab_exolot - 1; // делитель -начальное 0x01 if (mashtab_exolot < 1)mashtab_exolot = 100; // делитель -начальное 0x01 }; flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; st_1000(mashtab_exolot); // масштаб эхолот -начальное 1 // 0...999 kursor(2); if (menu == 142) LED('>'); // > else LED(' '); // ////////////////////// RESET LED('R'); LED('E'); LED('S'); LED('E'); LED('T'); fpp(92); if ( (menu == 142) && flag_menu_1 ) { cikl_exolot = 0; // счёт цикл эхолот flag_EN = 0; // флаг >0< flag_menu_1 = 0; // сброс флаг выбор меню 1 flag_menu_2 = 0; // сброс флаг выбор меню 2 }; kursor(3); fpp(128); kursor(4); fpp(128); kursor(5); fpp(128); kursor(6); fpp(128); kursor(7); fpp(128); /////////////////// menu > if ( menu == 143 || menu == 140 ) { menu = 56;}; // > меню 9: > эхолот goto _5; // LCD > ///////////////////////////////////////////////////////////////////////////////////////////// LED_3: // LED 3: ///////////////////////////////////////////////////////////////////////////////////////////// menu LED : //menu = 50 > караблик / NAV,EXO,AVT,GIR //if (menu2 > 2) goto _GIR; // menu 3 > гироскоп //if (menu2 > 1) goto _AVT; // menu 2 > автопилот //if (menu2) goto _EXO; // menu 1 > эхолот // GPS: ///////////////////////////////////////////////////////////////////////////////////////////// //if (!PINC.4) {flag3_UART =1;}; // контроль if (!flag3_GPS) goto start_LCD; // > старт GPS // флаг3 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 CLS1_LED(); // очистка буфер LED -7mc }; if (cikl_GPS==1) { // счёт цикл GPS CLS1_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 CLS1_LED(); // очистка буфер LED -7mc }; if (cikl_GPS==1) { // счёт цикл GPS CLS1_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 > ///////////////////////////////////////////////////////////////////////////////////////////// /* _AVT: // menu 2 > компас //////////////////////////////////////////////////////////////////////////////////////////// CLS LED: //if (!PINC.1) { flag3_kompas = 1; }; // if (flag3_kompas_exolot) { //////////////////////////////////////////////////////////// //"Ypr 320 336 352Raw 004,28.51,970.97,358.09!Gap=1000mm.........." // -64 // Ypr 320 336 352Raw 004,28.51,970.97,358.09!Gap=0413mm // -53 // Raw=004-азимут 28.51-температура 970.97-давление 358.09-высота // Gap=1000mm-глубина //////////////////////////////////////////////////////////// //////////////////////////////// азимут azimut = (long)(bufer_kompas[19] - 48)*10000; azimut += (long)(bufer_kompas[20] - 48)*1000; azimut += (long)(bufer_kompas[21] - 48)*100; //////////////////////////////////////////////////////////// //////////////////////////////// температура temperatura = (long)(bufer_kompas[23] - 48)*1000; temperatura += (long)(bufer_kompas[24] - 48)*100; //. temperatura += (long)(bufer_kompas[26] - 48)*10; temperatura += (long)(bufer_kompas[27] - 48); //////////////////////////////////////////////////////////// //////////////////////////////// давление davlenie = (long)(bufer_kompas[29] - 48)*10000; davlenie += (long)(bufer_kompas[30] - 48)*1000; davlenie += (long)(bufer_kompas[31] - 48)*100; //. davlenie += (long)(bufer_kompas[33] - 48)*10; davlenie += (long)(bufer_kompas[34] - 48); //////////////////////////////////////////////////////////// //////////////////////////////// высота visota = (long)(bufer_kompas[36] - 48)*10000; visota += (long)(bufer_kompas[37] - 48)*1000; visota += (long)(bufer_kompas[38] - 48)*100; //. visota += (long)(bufer_kompas[40] - 48)*10; visota += (long)(bufer_kompas[41] - 48); //////////////////////////////////////////////////////////// flag3_kompas_exolot = 0;// флаг3 kompas_эхолот полный UCSR1B=0x90; // RX 1 kompas }; ////////////////////////////////////////// if (cikl_kompas==0) { // цикл компас kursor1(0); LED('А'); LED('З'); LED('И'); LED('М'); LED('У'); LED('Т'); fpp(56); st_1000000(azimut); kursor1(1); fpp(128);// kursor1(2); LED('Т'); LED('Е'); LED('М'); LED('П'); LED('Е'); LED('Р'); LED('А'); LED('Т'); LED('У'); LED('Р'); LED('А'); fpp(26); st_1000000(temperatura); kursor1(3); fpp(128);// kursor1(4); LED('Д'); LED('А'); LED('В'); LED('Л'); LED('Е'); LED('Н'); LED('И'); LED('Е'); fpp(44); st_1000000(davlenie); kursor1(5); fpp(128);// kursor1(6); LED('В'); LED('Ы'); LED('С'); LED('О'); LED('Т'); LED('А'); fpp(56); st_1000000(visota); kursor1(7); fpp(128);// }; ////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////// cikl_kompas++; // цикл компас if (cikl_kompas==1){ // cikl_kompas=0; // //PORTA.5=0; // контроль }; ////////////////////////////////////////// goto _5; // LED > ///////////////////////////////////////////////////////////////////////////////////////////// */ LED_2: // LED 2: // > эхолот ///////////////////////////////////////////////////////////////////////////////////////////// if (cikl_exolot==0) { // цикл эхолот CLS_LED(); // очистка буфер LED -7mc }; if (cikl_exolot==1) { // цикл эхолот CLS_LED2(); // очистка буфер2 LED -7mc }; ////////////////////////////////////////// if (cikl_exolot==2) { // цикл эхолот if (flag_exolot_full) { // флаг эхолот полный //////////////////////////////// глубина glubina = (long)(bufer_exolot[4] - 48)*1000; glubina += (long)(bufer_exolot[5] - 48)*100; glubina += (long)(bufer_exolot[6] - 48)*10; glubina += (long)(bufer_exolot[7] - 48); glubina = glubina*4; // 0...9999 flag_exolot_full = 0; // сброс флаг эхолот полный // UCSR1B=0x90; // RX 1 UCSR1B=0x98; // RX 1 interrupt // TX 1 }; //////////////////////////////// if (mashtab_exolot == 0) { mashtab_exolot = 1; }; // -начальное 1 //////////////////////////////// масштаб -начальное 1 bufer_glubina = glubina/mashtab_exolot; // 0...9999 //////////////////////////////// if (bufer_glubina > 255) { bufer_glubina = 255; }; // -255 tochka_exolot(255, bufer_glubina);//char x, char y -0,1mc //////////////////////////// razvertka_exolot(); // буфер LED -8mc }; /////////////////////////////////////////// if (cikl_exolot==3) { // цикл эхолот razvertka_exolot_2(); // буфер LED -8mc }; /////////////////////////////////////////// if (cikl_exolot==4) { // цикл эхолот sdvig_exolot_LED(); // буфер LED << -12mc }; if (cikl_exolot==5) { // цикл эхолот sdvig_exolot_2_LED(); // буфер LED << -12mc }; ////////////////////////////////////////// cikl_exolot++; // цикл эхолот //if (cikl_exolot==6){ // счёт цикл эхолот if (cikl_exolot==6){ // счёт цикл эхолот //////////////////////////////////////////////////////////////// буфер > TX UART 1 //UCSR1B=0x48; // TX 1 interrupt //UDR1 = bufer_exolot[0]; // старт TX UART 1 //UDR1 = 0x01; // старт TX UART 1 //////////////////////////////////////////////////////////////// cikl_exolot=2; }; ////////////////////////////////////////// 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 PORTG |= 0b00010000; // SS OLED3 128x64 SPSR &= 0b11111110; // SPI 8 Мгц/4 = 2 МГц > /////////////////////// n++; // номер пакета пульт 0...255 /////////////////////// goto _1; // > цикл ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// }