реклама на сайте
подробности

 
 
> Помогите разобраться с PCINT на меге
hwdev
сообщение Jun 19 2009, 08:50
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 334
Регистрация: 1-09-06
Из: Москва
Пользователь №: 20 008



Выбрал atmega325 из-за дешевизны и уже кусаю локти..

Завел сигнал (прямоугольные импульсы) на вход PE2 (PCINT2). Понятно, что на входе есть 0 и 5В.

Инициализирую:
DDRE = BIT1; // TXD
PORTE = BIT2; // PullUp for PE2

EICRA = (1<<ISC01);
EIMSK = (1<<INT0)|(1<<PCIE0); // INT0 + PCIE0
PCMSK0 = PCINT2; // RPM interrupt;

sei(); /* enable interrupts */
bla..bla

Обработчик:
ISR(PCINT0_vect)
{ /* signal handler for external interrupt pcint2 */
rpm1++;
}

По таймеру считываю значение переменной rpm и сбрасываю её в 0, значение передаю по UART. В состоянии покоя линии PE2 (смотрю осциллографом) обработчик PCINT0_vect успевает насчитать 90-96 импульсов за 100мс. Интересный эффект. Делаю проверку на состояние линии, чтобы считать только перепады по одной линии: считает всего 2-3 импульса за 100мс (реально порядка 40 имп/100мс). Пробовал очищать флаг EIFR |= 1<<PCIF0; - опять 2 импульса считает вместо 40.

Кто-нибудь может объяснить где я накосячил?

P.S. Завел тот же сигнал на INT0 - считает всё четко и как надо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SysRq
сообщение Jun 19 2009, 10:37
Сообщение #2


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Оно (маску сделать забыли, 1 << ...):
Цитата(hwdev @ Jun 19 2009, 12:50) *
PCMSK0 = PCINT2; // RPM interrupt;


А вот это еще и глюков добавит мешок (потому что оператор |= использован -- сбросит флаги имеющиеся или вернет назад уже сброшенные, смотря как прерывания попадут):
Цитата(hwdev @ Jun 19 2009, 12:50) *
EIFR |= 1<<PCIF0;
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 22:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01364 секунд с 7
ELECTRONIX ©2004-2016