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

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

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

Сообщение akl »

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

Сообщение Meteor »

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

Сообщение ut1wpr »

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

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