Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: А симулятор то оказывается знает не все!
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
M_A
Расскажу про грабли, на которые сегодня наступил, чтоб другие не наступали.
Я пока начинающий, по этому профи это все может быть давно известно, а вот новичкам как я пригодится.
Значит так:
Девайс at90s2313, но думаю справедливо для любого с 16-битным счетчиком.
Завожу я 16-битный каунтер, он начинает тикать. Выгребаю постоянно его значения из TCNT1H, сравниваю, не натикало ли столько сколько мне нужно, если да, переключаю одну из ног в противоположное положение и записываю нули в TCNT1H и TCNT1L, чтоб заново считал....
В симуляторе в AVR Studio все пашет. Заливаю в МК - шиш!
Полдня парился, пока не залез в даташит и не прочитал, что при записи в TCNT1H и TCNT1L сначала нужно обязательно писать в TCNT1H, а при чтении наоборот, первым читать TCNT1L. Причем TCNT1L вообще не пишется, пока не запишешь че-нить в TCNT1H, то есть нельзя в него по отдельности писать. С чтением наверное то-же, не проверял.
Сделал, как написано - воркает!!! А симулятор молчал паразит!
Мораль: не пологаться на 100% на симулятор, и побольше читать даташиты...
eXeC001er
это делается не выгребанием значением натиканного а записью в регистр сравнения значения которое вам надо и установкой флага чтобы при сравнении генерировалось прерывание, в обработчике которого и передергивайте ноги.
Но это так не по делу но для информации.
M_A
Цитата(eXeC001er @ Sep 20 2005, 12:00)
это делается не выгребанием значением натиканного а записью в регистр сравнения значения которое вам надо и установкой флага чтобы при сравнении генерировалось прерывание, в обработчике которого и передергивайте ноги.
Но это так не по делу но для информации.
*

Я уже и сам так подумал, спасибо за потдверждение правильности моей мысли blush.gif
Я пока начинающий, до прерываний еще не добрался...
prottoss
Цитата(eXeC001er @ Sep 20 2005, 20:00)
это делается не выгребанием значением натиканного а записью в регистр сравнения значения которое вам надо и установкой флага чтобы при сравнении генерировалось прерывание, в обработчике которого и передергивайте ноги.
Но это так не по делу но для информации.
*


Это тоже не по делу, но можно прерывание вообще не писать, если оно нужно только для изменения уровня сигнала на выводе, а переключать уровень на выводе (ОС1А или ОС1В) аппаратно, если TCNT1 перевести в ШИМ режим fast PWM mode. Правда я не знаю точно, поддерживает ли at90s2313 такой режим. По совпадению с OCR1A(или OCR1B, надо смотреть даташит), TCNT1 будет обнулятся, при этом лог. уровень на соответствующем выводе (ОС1А или ОС1В) будет инвертироваться.
M_A
Цитата(prottoss @ Sep 20 2005, 20:24)
Это тоже не по делу, но можно прерывание вообще не писать, если оно нужно только для изменения уровня сигнала на выводе, а переключать уровень на выводе (ОС1А или ОС1В) аппаратно, если TCNT1 перевести в ШИМ режим fast PWM mode. Правда я не знаю точно, поддерживает ли at90s2313 такой режим. По совпадению с OCR1A(или OCR1B, надо смотреть даташит), TCNT1 будет обнулятся, при этом лог. уровень на соответствующем выводе (ОС1А или ОС1В) будет  инвертироваться.
*


Да, at90s2313 такое умеет, просто это я для начала вывел на дрыганье ногой, для наглядности, вообще то мне значения счетчика нужны в программе.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.