#include #include #define ADC_VREF_TYPE 0x40 /////////////////////////////////////////////////////////////////////////////////// // АЦП №1 // 1-0101-0101010101-1010-1010101010-1-0000 // пакет 34 бит - 31дел -00000000...00011111 // с- № - -АЦП- - и№ - и АЦП - -c-пауза // ШИМ №1 // 1-1010-0101010101-0101-1010101010-1-0000 // пакет 34 бит - 31дел -00000000...00011111 // с- № - -ШИМ- - и№ - и ШИМ - -c-пауза // кнопка №1 // 1-1011-0010101010-1101-1010110010-1-0000 // пакет 35 бит // - - - - - - -код- - - - - - - - -c-пауза // кнопка №2 // 1-1010-0110110100-1010-1010100110-1-0000 // пакет 35 бит // - - - - - - -код- - - - - - - - -c-пауза // кнопка №3 // 1-1101-0101001010-1100-1010110010-1-0000 // пакет 35 бит // - - - - - - -код- - - - - - - - -c-пауза // кнопка №4 // 1-1001-1011010101-0011-0011010110-1-0000 // пакет 35 бит // - - - - - - -код- - - - - - - - -c-пауза // кнопка №5 // 1-0110-1001101101-0101-0101011010-1-0000 // пакет 35 бит // - - - - - - -код- - - - - - - - -c-пауза ////////////////////////////////////////////////////////////////////////////////// char a=0,u=0,b=0,y=0,w=0,e=0; // u-напряжение вход ацп №1,y-напряжение вход ацп №2 /////////////////////////////////////////////// ацп unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); delay_us(10); ADCSRA|=0x40; while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCW; } /////////////////////////////////////////////// void main(void) { DDRC=0b00000000; // вход PORTC.5=0; // вход АЦП №1 PORTC.4=0; // вход ШИМ №1 PORTC.3=1; // вход кнопка №4 PORTC.2=1; // вход кнопка №3 PORTC.1=1; // вход кнопка №2 PORTC.0=1; // вход кнопка №1 DDRB.2=0; // вход кнопка №5 PORTB.2=1; // вход кнопка №5 DDRD=0b11111111; // выход индикатор PORTD=0b00000000; // индикатор DDRB.1=1; // выход PORTB.1=0; // выход - передатчик ADMUX=ADC_VREF_TYPE & 0xff; // настройка ацп ADCSRA=0x83; ///////////////////////////////////////////// вкл mesto_1: PORTD=w; //////////////////////////////////////////// измерение АЦП №1(PC5) read_adc(5); // вызов функции. измерение №1 PC5. u=ADCW/16; //u=ADCW/16;-5v-00111111-63, 63/2=31 -5v-31-00011111. //////////////////////////////////////////// фильтр входа - гистерезис if (u>a+1) { PORTD=u/2; //+63/2=31-00011111 a=u; } if (ub+1) { PORTD=y/2; //+63/2=31-00011111 b=y; } if (y