ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
885946
avrdude (02.12.2018 18:37, просмотров: 8834)
Братцы ткните носом где не так сделал, тактируюсь от внутреннего 8МГц, отладчика с дебагом нету прибор должен считать обороты и при просадки ниже 1200 отключать реле вход датчика холла PB0, реле PB5 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/wdt.h> #define RELAY_PORT PORTB #define RELAY_PORT_DIR DDRB #define RELAY_PIN 5 #define HALL_PORT PORTB #define HALL_PORT_DIR DDRB #define HALL_PIN 0 #define HALL_STATE PINB #define F_CPU 8000000UL // 8 MHz unsigned char OVF_counter, zamer_1, zamer_T, zamer_t, duty; unsigned long t, T, f=0; unsigned int rising_1, rising_2, falling; ////прерывание захвата ICP1 ISR(TIMER1_CAPT_vect) { switch(zamer_T) { case 0: rising_1 = ICR1; // Запоминаем значение счётчика OVF_counter = 0; // Обнуляем количество переполнений счётчика zamer_T = 1; // Переходим к следующему вычислению break; case 1: rising_2 = ICR1; // Запоминаем значение счётчика // Приводим все переменные к одному типу и вычисляем период импульса T = (unsigned long)rising_2 - (unsigned long)rising_1 + ((unsigned long)OVF_counter * 65536); zamer_T = 0; zamer_1 = 2; // Переходим к следующему вычислению break; } } //прерывание переполнения Т1 ISR(TIMER1_OVF_vect) { OVF_counter++; // Увеличиваем счетчик переполнений } int main() { TCCR1B |= (1 << ICNC1)|(1 << CS11); // Активируем входной подавитель шума, предделитель на 8 TIMSK1 |= (1 << ICIE1)|(1 << TOIE1); // Разрешаем прерывание по захвату и переполнению zamer_T=0; //rpm_setup(); wdt_disable(); //RELAY_PORT_DIR |= 1 << RELAY_PIN; //relay control pin as output //HALL_PORT_DIR &= ~(1 << HALL_PIN); //relay control pin as output DDRB = 0b00100000; //RELAY_PORT |= 1 << RELAY_PIN; //relay off init RELAY_PORT |= 1 << RELAY_PIN; //relay on sei(); while(1) { wdt_disable(); if (zamer_1 ==2); {f = 8000000/T; // Вычисляем частоту сигнала в Гц} if (f <1200) { RELAY_PORT |= 1 << RELAY_PIN; //relay off } if (f>1250) { RELAY_PORT |= 1 << RELAY_PIN; //relay on } } } }