#include #include #define ADC_VREF_TYPE 0x40 /////////////////////////////////////////////////////////////////////////////////// // АЦП №1 // 1-0101-010101010101-1010-101010101010-1-0000 // пакет 38 бит - 31дел -00000000...00111111 // с- № - -АЦП- - и№ - и АЦП - -c-пауза // ШИМ №1 // 1-1010-010101010101-0101-101010101010-1-0000 // пакет 38 бит - 31дел -00000000...00111111 // с- № - -ШИМ- - и№ - и ШИМ - -c-пауза // кнопка №1 // 1-1011-001010101011-0110-101100100101-1-0000 // пакет 38 бит // - - - - - - -код- - - - - - - - - - -c-пауза // кнопка №2 // 1-1010-011011010010-1010-101001100101-1-0000 // пакет 38 бит // - - - - - - -код- - - - - - - - - - -c-пауза // кнопка №3 // 1-1101-010100101011-0010-101100100101-1-0000 // пакет 38 бит // - - - - - - -код- - - - - - - - - - -c-пауза // кнопка №4 // 1-1001-101101010100-1100-110101100101-1-0000 // пакет 38 бит // - - - - - - -код- - - - - - - - - - -c-пауза // кнопка №5 // 1-0110-100110110101-0101-010110100101-1-0000 // пакет 38 бит // - - - - - - -код- - - - - - - - - - -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/8; //u=ADCW/8;-5v-01111111-128, 128/2=64 -5v-64-00111111. //////////////////////////////////////////// фильтр входа - гистерезис if (u>a+1) { PORTD=u/2; //+128/2=64-00111111 a=u; } if (ub+1) { PORTD=y/2; //+128/2=64-00011111 b=y; } if (y