Я сейчас пытаюсь разобараться в прерываниях в AVR
Есть вот такая схема (заранее скажу я незнаю как на схеме рисовать реле):
И есть такой код:
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
void setting(void){
//Настройка всех портов на выход
DDRC = 0xFF;
//Устанавливаем везде 0
PORTC = 0x00;
//Настройка всех портов на вход
DDRD = 0x00;
// Подтягиваем резистор чтобы еденица четко читалась
PORTD|= 0xFF;
EIMSK |= (1 << INT0); // Turns on INT0
EICRA |= 0b00000011; // set INT0 to trigger on ANY logic change
}
ISR (INT0_vect){
_delay_ms(100);
PORTC = (1<<PIN0);
_delay_ms(10000);
PORTC &=~(1<<PIN0);
_delay_ms(2000);
}
int main(){
setting();
while(1) {
cli();
_delay_ms(1000);
sei();
_delay_ms(1000);
}
return 0;
}
И вот с 1 диодом все работает. (тоесть я зажимаю кнопку нечего не происходит так как я сделал реагировние на возврастающий фронт, я отжимаю через какое то время все срабатывает). Если же подключить реле с нагрузкой, то прерывание происходит постоянно .Если же нагрузку убрать , то иногда нормально срабатывает иногда так же зависает цикла на три или больше. Я так понял это помехи похожие на помехи от дребизжания кнопки но от реле и нагрузки. И у меня вопрос в следующем. Как мне обойти эту пакасть. Или у меня проблема в коде.
Заранее Блогодарен.
P.S. И как в тостер добавить тег языка си? У меня не как не получается.