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

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

|
Расскажу про грабли, на которые сегодня наступил, чтоб другие не наступали. Я пока начинающий, по этому профи это все может быть давно известно, а вот новичкам как я пригодится. Значит так: Девайс at90s2313, но думаю справедливо для любого с 16-битным счетчиком. Завожу я 16-битный каунтер, он начинает тикать. Выгребаю постоянно его значения из TCNT1H, сравниваю, не натикало ли столько сколько мне нужно, если да, переключаю одну из ног в противоположное положение и записываю нули в TCNT1H и TCNT1L, чтоб заново считал.... В симуляторе в AVR Studio все пашет. Заливаю в МК - шиш! Полдня парился, пока не залез в даташит и не прочитал, что при записи в TCNT1H и TCNT1L сначала нужно обязательно писать в TCNT1H, а при чтении наоборот, первым читать TCNT1L. Причем TCNT1L вообще не пишется, пока не запишешь че-нить в TCNT1H, то есть нельзя в него по отдельности писать. С чтением наверное то-же, не проверял. Сделал, как написано - воркает!!! А симулятор молчал паразит! Мораль: не пологаться на 100% на симулятор, и побольше читать даташиты...
|
|
|
|
|
Sep 20 2005, 12:31
|

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

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

Гуру
     
Группа: Свой
Сообщений: 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В) будет инвертироваться.
--------------------
|
|
|
|
|
Sep 21 2005, 01:02
|

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

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