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

|
Цитата(Палыч @ Jun 19 2009, 13:03)  Что такое BIT1, BIT2? #define BIT1 (1<<1) #define BIT2 (1<<2)
|
|
|
|
|
Jun 19 2009, 09:46
|

Местный
  
Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719

|
Цитата(hwdev @ Jun 19 2009, 12:50)  Кто-нибудь может объяснить где я накосячил?
P.S. Завел тот же сигнал на INT0 - считает всё четко и как надо! "Обнаружение фронтов сигналов на выводах INT3...INT0 осуществляется асинхронно, при этом минимальная длительность импульса, гарантирующая генерацию прерывания, составляет 50 нс. А на выводах INT7...INT4 обнаружение фронтов сигналов происходит синхронно, поэтому минимальная длительность импульса, гаран- тирующая генерацию прерывания составляет 1 период тактового сигнала МК. Если генерация прерывания должна происходить по НИЗКОМУ уровню, то он должен удерживаться на выводе до окончания выполнения текущей команды, в противном случае генерации прерывания не произойдет..." "Вкурили" уважаемый ?
--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
|
|
|
|
|
Jun 19 2009, 09:52
|
Местный
  
Группа: Свой
Сообщений: 334
Регистрация: 1-09-06
Из: Москва
Пользователь №: 20 008

|
Цитата(manul78 @ Jun 19 2009, 13:46)  "Обнаружение фронтов сигналов на выводах INT3...INT0 осуществляется асинхронно, при этом минимальная длительность импульса, гарантирующая генерацию прерывания, составляет 50 нс. А на выводах INT7...INT4 обнаружение фронтов сигналов происходит синхронно, поэтому минимальная длительность импульса, гаран- тирующая генерацию прерывания составляет 1 период тактового сигнала МК. Если генерация прерывания должна происходить по НИЗКОМУ уровню, то он должен удерживаться на выводе до окончания выполнения текущей команды, в противном случае генерации прерывания не произойдет..." "Вкурили" уважаемый ?  Я должен вкурить, что у меня импульсы короткие? или что? И при чем тут INT, если у меня PCINT, которые совсем по-другому обрабатываются
|
|
|
|
|
Jun 19 2009, 10:33
|

Местный
  
Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719

|
Цитата(hwdev @ Jun 19 2009, 13:52)  Я должен вкурить, что у меня импульсы короткие? или что? И при чем тут INT, если у меня PCINT, которые совсем по-другому обрабатываются "Обнаружение фронтов сигналов на выводах PCINT3...PCINT0 осуществляется асинхронно, при этом минимальная длительность импульса, гарантирующая генерацию прерывания, составляет 50 нс. А на выводах PCINT7...PCINT4 обнаружение фронтов сигналов происходит синхронно, поэтому минимальная длительность импульса, гаран- тирующая генерацию прерывания составляет 1 период тактового сигнала МК. Если генерация прерывания должна происходить по НИЗКОМУ уровню, то он должен удерживаться на выводе до окончания выполнения текущей команды, в противном случае генерации прерывания не произойдет..." Читайте еще раз ! С "колосальными" исправлениями в тексте специально для Вас... 50 нс - это 20 кГц ! " Меньше можно, больше нельзя..." (С) Госпожа Беладонна. Для PCINT0...PCINT3 Для PCINT4...PCINT7 - максимальная частота это частота работы МК... Короче, переключитесь уважаемый на любой из PCINT4...PCINT7 и программу отредактируйте под них... Авось заработает...
Сообщение отредактировал manul78 - Jun 19 2009, 10:34
--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
|
|
|
|
|
Jun 19 2009, 10:37
|

Чайник, 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;
|
|
|
|
|
Jun 19 2009, 10:54
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
Цитата(hwdev @ Jun 19 2009, 12:50)  PCMSK0 = PCINT2; // RPM interrupt;
Кто-нибудь может объяснить где я накосячил? Как у вас определено PCINT2 ? может все таки надо так ? Код PCMSK0 = 1<<PCINT2; // RPM interrupt;
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
Jun 19 2009, 11:09
|

Местный
  
Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719

|
Цитата(mdmitry @ Jun 19 2009, 14:52)  1/20e3=0,05*1e-3=5e-5=50 мкс, однако  Извиняюсь, ошибся...  не кГц а МГц... Да с INT тоже... с 128-ой Мегой перепутал... Не мой день... пойду напьюсь...
--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
|
|
|
|
|
Jun 19 2009, 13:07
|
Местный
  
Группа: Свой
Сообщений: 334
Регистрация: 1-09-06
Из: Москва
Пользователь №: 20 008

|
Цитата(dimka76 @ Jun 19 2009, 14:54)  Как у вас определено PCINT2 ? может все таки надо так ? Код PCMSK0 = 1<<PCINT2; // RPM interrupt; Да, правильно вы говорите! Накосячил.. Надо проверить.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|