ATMega8. Подсчитать импульсы на PD6

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
kyraxinoff
Родился
Сообщения: 13
Зарегистрирован: Пн апр 19, 2010 09:58:37

ATMega8. Подсчитать импульсы на PD6

Сообщение kyraxinoff »

На ногу 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);
}
Реклама
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: ATMega8. Подсчитать импульсы на PD6

Сообщение akl »

Задействовать прерывание от аналогового компаратора или прерывание по захвату таймером Т1 события прихода активного уровня сигнала. Странно, что у Вас пропуски импульсов при опросе. Какая частота тактирования? Чем еще занят контроллер?
Реклама
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: ATMega8. Подсчитать импульсы на PD6

Сообщение Meteor »

akl писал(а):Странно, что у Вас пропуски импульсов при опросе. ...Чем еще занят контроллер?
На правах оффтопа
Контроллер занят пропуском импульсов!
Видимо по причине дребезга
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: ATMega8. Подсчитать импульсы на PD6

Сообщение ut1wpr »

kyraxinoff писал(а):На ногу PD6 ATMega8 идут импульсы, частоты могут быть разные, не выше 10кГц. Каждые 100 импульсов должно происходить событие, на например 1 на PB0.
Как счетчик организовать используя прерывания или что-то подобное понять не могу, нога то сидит либо просто порт либо на компараторе. Если использую просто опрос состояния порта PIND. То не которые импульсы Атмега не ловит. Прошу помочь в этом всем разобраться.
1. PD7 на среднюю точку делителя 2х10К между GND и +5V. Импульсы - на PD6. Гораздо лучше было бы импульсы подавать на PD5. Или хотя бы на PD2 либо PD3. Это уже от схемотехники зависит.
2. Написать обработчик по вектору прерывания от компаратора (Собственно сам счетчик). Не забыть объявить переменную счетчика как volatile.
3. В ините разрешить компаратор вообще (по умолчанию он выключен после сброса).
4. Разрешить прерывание от компаратора.
5. Разрешить глобальные прерывания.
Если импульсы чистые и без дребезга - наслаждаться их правильным подсчетом. Если дребезжит - избавляться от дребезга аппаратно или программно.
Вуаля.
С уважением,
Виктор.
Реклама
Эиком - электронные компоненты и радиодетали
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»