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

 
 
> А симулятор то оказывается знает не все!, AVRStudio, 16-bit Timer/Counter1
M_A
сообщение Sep 20 2005, 07:33
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 153
Регистрация: 27-12-04
Из: г. Иркутск
Пользователь №: 1 689



Расскажу про грабли, на которые сегодня наступил, чтоб другие не наступали.
Я пока начинающий, по этому профи это все может быть давно известно, а вот новичкам как я пригодится.
Значит так:
Девайс at90s2313, но думаю справедливо для любого с 16-битным счетчиком.
Завожу я 16-битный каунтер, он начинает тикать. Выгребаю постоянно его значения из TCNT1H, сравниваю, не натикало ли столько сколько мне нужно, если да, переключаю одну из ног в противоположное положение и записываю нули в TCNT1H и TCNT1L, чтоб заново считал....
В симуляторе в AVR Studio все пашет. Заливаю в МК - шиш!
Полдня парился, пока не залез в даташит и не прочитал, что при записи в TCNT1H и TCNT1L сначала нужно обязательно писать в TCNT1H, а при чтении наоборот, первым читать TCNT1L. Причем TCNT1L вообще не пишется, пока не запишешь че-нить в TCNT1H, то есть нельзя в него по отдельности писать. С чтением наверное то-же, не проверял.
Сделал, как написано - воркает!!! А симулятор молчал паразит!
Мораль: не пологаться на 100% на симулятор, и побольше читать даташиты...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
eXeC001er
сообщение Sep 20 2005, 12:00
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 23-02-05
Из: Краснодар
Пользователь №: 2 848



это делается не выгребанием значением натиканного а записью в регистр сравнения значения которое вам надо и установкой флага чтобы при сравнении генерировалось прерывание, в обработчике которого и передергивайте ноги.
Но это так не по делу но для информации.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Sep 20 2005, 20:24
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



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


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


--------------------
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:41
Рейтинг@Mail.ru


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