|
Помогите разобраться, мега 128 и внешние прервывания |
|
|
|
 |
Ответов
(1 - 5)
|
May 20 2006, 11:50
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Ну мне кажеться, что это хозяйство не успевает отрабатывать столь короткие импульсы. Это тот случай, когда прерывание стоит писать на ассемблере. Посмотрите листинг и попробуйте посчитать такты, имхо будет многовато, особенно в части цикла while, там может быть пролет. Еще добвлю что стоит подумать о том чтобы убрать обработку в основной контекст, а в прерывании только оставить флажок или хэндлер на соответствующую функцию.
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
May 20 2006, 19:44
|
Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 5-05-06
Из: Ekaterinburg, Russia
Пользователь №: 16 821

|
Если я правильно понимаю, в прерывании INT0 ожидаем либо 0 на PIND.1 - старт 12us, либо срабатывания компаратора OCR0 - старт 4us (Fclk=32/4us=8 MHz). Тогда реакции на PIND.1=0 никогда не будет. Потому как компаратор сработает раньше. Если наоборот, то тогда какая частота МК, вроде получается: Fclk=32/12us=2.66 MHz, как-то странно  . Если все таки Fclk=8 MHz, то поменяйте реакцию компаратора на длинный старт 12us, при этом OCR0=8MHz*12us=96. А вообще, лучше все-таки поменять логику программы и, как было сказано beer_warrior, вынести циклы while из обработчика прерывания.
--------------------
Чудес не бывает - бывает мало знаний и опыта!
|
|
|
|
|
May 22 2006, 03:48
|
Частый гость
 
Группа: Свой
Сообщений: 104
Регистрация: 5-12-05
Из: Екатеринбург
Пользователь №: 11 823

|
Цитата(Yura_K @ May 20 2006, 22:44)  Если я правильно понимаю, в прерывании INT0 ожидаем либо 0 на PIND.1 - старт 12us, либо срабатывания компаратора OCR0 - старт 4us (Fclk=32/4us=8 MHz). Тогда реакции на PIND.1=0 никогда не будет. Потому как компаратор сработает раньше. Если наоборот, то тогда какая частота МК, вроде получается: Fclk=32/12us=2.66 MHz, как-то странно  . Если все таки Fclk=8 MHz, то поменяйте реакцию компаратора на длинный старт 12us, при этом OCR0=8MHz*12us=96. А вообще, лучше все-таки поменять логику программы и, как было сказано beer_warrior, вынести циклы while из обработчика прерывания. Частота 8 МГц . Старты приходят на INT0 . Короткий 4, длинный 12 мкс. А на PIND.1 происходит переход и вывор режима работы "МАРШ" или "КАЛИБРОВКА"
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|