ATMega8. Подсчитать импульсы на PD6
Добавлено: Пт фев 17, 2012 13:43:57
На ногу PD6 ATMega8 идут импульсы, частоты могут быть разные, не выше 10кГц. Каждые 100 импульсов должно происходить событие, на например 1 на PB0.
Как счетчик организовать используя прерывания или что-то подобное понять не могу, нога то сидит либо просто порт либо на компараторе. Если использую просто опрос состояния порта PIND. То не которые импульсы Атмега не ловит. Прошу помочь в этом всем разобраться.
Вот пример последнего кода:
инициал портов оставил в мэине. It глобальная переменная.
10 выбрал, для удобства подсчета импульсов на осциле, PORTC добавил что бы видеть, что оно там себе насчитало.
void IT (void)
{
while (It<10)
{
while (bit_is_set(PIND,PD6))
{
if (bit_is_clear(PIND,PD6))
{
PORTB&=~_BV(PB1);
It=It++;
}
}
}
PORTC=It;
It=0x00;
PORTB|=_BV(PB1);
}
Как счетчик организовать используя прерывания или что-то подобное понять не могу, нога то сидит либо просто порт либо на компараторе. Если использую просто опрос состояния порта PIND. То не которые импульсы Атмега не ловит. Прошу помочь в этом всем разобраться.
Вот пример последнего кода:
инициал портов оставил в мэине. It глобальная переменная.
10 выбрал, для удобства подсчета импульсов на осциле, PORTC добавил что бы видеть, что оно там себе насчитало.
void IT (void)
{
while (It<10)
{
while (bit_is_set(PIND,PD6))
{
if (bit_is_clear(PIND,PD6))
{
PORTB&=~_BV(PB1);
It=It++;
}
}
}
PORTC=It;
It=0x00;
PORTB|=_BV(PB1);
}