|
Таймер, Непонятно, как можно так писать? |
|
|
|
Jan 31 2007, 14:27
|
Группа: Новичок
Сообщений: 8
Регистрация: 31-01-07
Пользователь №: 24 905

|
Вот фрагмент кода
TimeLoop: out TCNT0, temp ;Сохраняем содержимое регистра таймера счетчика в temp cp temp, 80 ; Сравниваем это содержимое с 80 brne TimeLoop ; Если не равно, то возвращаемся к началу цикла
Вот мне непонятна одна вещь: каждая команда выполняется за один такт (какие-то команды могут выполняться за 2 такта). Один такт и в регистре таймера счетчика оказывается 1 (предполагается, что делитель частоты не используется). Следоваетльно в цикле описанном выше можно проскочить момент, когда в регистре таймера счетчика будет 80. Может, я что-то неправильно здесь понимаю? Конечно, по мне гораздо удобнее воспользоваться прерываниями.
|
|
|
|
|
 |
Ответов
|
Feb 1 2007, 09:51
|

Местный
  
Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459

|
Цитата то можно переписать след. образом Уважаемый SasaVitebsk, читайте вчерашний пост №6 :-) Да еще...: Цитата brle TimeLoop ; Если меньше или равно, то возвращаемся к началу цикла Ну нету такой команды в авр-е, нету...:-) Цитата bodja74:Если цикл сравнения проходит быстрее клока таймера то можно и равно поставить ,хотя идеальной точности при таком подходе все равно не получить. При сравнении по равно есть вероятность "проскачить" значение, а это ни есть гут! Лучше делать однозначно: либо больше/равно, либо меньше.
--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
|
|
|
|
|
Feb 1 2007, 15:50
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Цитата(add @ Feb 1 2007, 09:51)  Цитата bodja74:Если цикл сравнения проходит быстрее клока таймера то можно и равно поставить ,хотя идеальной точности при таком подходе все равно не получить. При сравнении по равно есть вероятность "проскачить" значение, а это ни есть гут! Лучше делать однозначно: либо больше/равно, либо меньше. Обьясняю популярно, TCNT считает клоки таймера ,а клок таймера может быть и 64 и 1024 и т.д. тактов проца ,при том условии ,что я писал в предыдущем посте ,вероятность проскочить равна 0.
|
|
|
|
|
Feb 1 2007, 16:39
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(bodja74 @ Feb 1 2007, 14:50)  Обьясняю популярно, TCNT считает клоки таймера ,а клок таймера может быть и 64 и 1024 и т.д. тактов проца ,при том условии ,что я писал в предыдущем посте ,вероятность проскочить равна 0.  Кто-то говорил, что при исполнении этого цикла прерывания запрещены? Если нет, то вероятность проскочить далеко не нулевая.
|
|
|
|
|
Feb 1 2007, 20:52
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(bodja74 @ Feb 1 2007, 17:23)  2GM Здесь 0 и 1 ровно 32 такта ,за остальное пардон,пока считать не научился ,вечно блох ловлю    Как вы считаете такты? Надеюсь, вы согласны. что единица начнётся после строчки LABEL2: sbi portB,1 Длительность цикла 3+4+4+4+4+3=30 плюс 4 команды ldi R20,$05 nop nop LABEL3: cbi portB,1 Здесь начнётся нуль. Всего будет 34 такта. Также и с нулём можно посчитать. На самом деле, надо 16 тактов для 1 и 16 тактов для 0, поскольку период клока равен 7,8125 мкс (128 кГц клок), а период у сигнала с частотой 4000 Гц равен 250 мкс. Т.е. 250/7,8125=32 такта на период, по 16 тактов на 1 и 0 соответственно.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Feb 1 2007, 21:44
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Цитата(=GM= @ Feb 1 2007, 20:52)  Как вы считаете такты? Надеюсь, вы согласны. что единица начнётся после строчки LABEL2: sbi portB,1 Длительность цикла 3+4+4+4+4+3=30 плюс 4 команды ldi R20,$05 nop nop LABEL3: cbi portB,1 Здесь начнётся нуль. Всего будет 34 такта. Также и с нулём можно посчитать. Ну что тут скажеш ,это конечно сильно  особенно вот это. Цитата 3+4+4+4+4+3=30    Делаем расклад LABEL2: sbi portB,1 =2 subi R20,$01 =1 brne LABEL2 =2 (и =1 в конце) итого 5+5+5+5+5+4=29 ldi R20,$05 =1 nop =1 nop =1 итого 32 LABEL3: cbi portB,1 Далее немного сложнее ,так как нужно выполнить еще одно условие ,но в том же духе. Цитата На самом деле, надо 16 тактов для 1 и 16 тактов для 0, поскольку период клока равен 7,8125 мкс (128 кГц клок), а период у сигнала с частотой 4000 Гц равен 250 мкс. Т.е. 250/7,8125=32 такта на период, по 16 тактов на 1 и 0 соответственно. Я уже это понял.
|
|
|
|
|
Feb 1 2007, 23:38
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(bodja74 @ Feb 1 2007, 18:44)  Цитата(=GM= @ Feb 1 2007, 20:52)  Как вы считаете такты? Надеюсь, вы согласны. что единица начнётся после строчки LABEL2: sbi portB,1 Длительность цикла 3+4+4+4+4+3=22 плюс 4 команды ldi R20,$05 nop nop LABEL3: cbi portB,1 Здесь начнётся нуль. Всего будет 27 тактов. Также и с нулём можно посчитать.
Ну что тут скажешь, это конечно сильно  особенно вот это. Цитата 3+4+4+4+4+3=30    Делаем расклад LABEL2: sbi portB,1 =2 subi R20,$01 =1 brne LABEL2 =2 (и =1 в конце) итого 5+5+5+5+5+4=29 ldi R20,$05 =1 nop =1 nop =1 итого 32 LABEL3: cbi portB,1 Далее немного сложнее ,так как нужно выполнить еще одно условие ,но в том же духе. Черт, прошу пардону, у меня табличка старенькая по командам отпечатана, так там sbi и cbi по одному такту(:-(. Ну а тут, 3+4+4+4+4+3=30, оправдаться нечем, рука пронесла (:-)!
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
Сообщений в этой теме
T&D Таймер Jan 31 2007, 14:27 Wild007 ЦитатаНепонятно, как можно так писать?
А ... Jan 31 2007, 14:39 prottoss Цитата(T&D @ Jan 31 2007, 18:27) out ... Jan 31 2007, 14:40 T&D Цитата(prottoss @ Jan 31 2007, 14:40) Цит... Jan 31 2007, 14:52 Wild007 ЦитатаЕсть вероятность, что мы при таком написании... Jan 31 2007, 15:06 add Да...уф.. Задача собственно несовсем понятна, даже... Jan 31 2007, 15:10 T&D Цитата(add @ Jan 31 2007, 15:10) Да...уф.... Jan 31 2007, 15:23 add ЦитатаЭтот пример не мной придуман, он взят из кни... Jan 31 2007, 15:27 T&D Цитата(add @ Jan 31 2007, 15:27) ЦитатаЭт... Jan 31 2007, 15:36 Wild007 Может автор
ЦитатаМортона "Микроконтроллеры A... Jan 31 2007, 15:36 SpiritDance Ржал. Опуфуительная книжка должно быть. Навроде ка... Jan 31 2007, 15:41 defunct Цитата(SpiritDance @ Jan 31 2007, 14:41) ... Jan 31 2007, 15:55 add ЦитатаВсе остальные строчки полностью переписаны и... Jan 31 2007, 15:49 IgorKossak Цитата(add @ Jan 31 2007, 14:49) ЦитатаВс... Jan 31 2007, 16:45 Wild007 ЦитатаPS остерегайтесь вводных курсов, читайте сер... Jan 31 2007, 16:57 zltigo Цитата(Wild007 @ Jan 31 2007, 15:57) пото... Jan 31 2007, 18:59 smk Все философское хорошо, но выучить ассеблер нужно.... Jan 31 2007, 21:03 bodja74 Цитата(smk @ Jan 31 2007, 21:03) Все фило... Jan 31 2007, 23:49  =GM= Цитата(bodja74 @ Jan 31 2007, 20:49) Цита... Feb 1 2007, 18:55 singlskv Цитата(smk @ Jan 31 2007, 21:03) Все фило... Feb 1 2007, 01:39 SasaVitebsk Цитата(T&D @ Jan 31 2007, 15:27) Вот ... Feb 1 2007, 00:08 bodja74 Если цикл сравнения проходит быстрее клока таймера... Feb 1 2007, 00:41 SasaVitebsk Цитата(add @ Feb 1 2007, 10:51) Цитатато ... Feb 1 2007, 13:54  T&D Цитата(bodja74 @ Feb 1 2007, 15:50) Обьяс... Feb 1 2007, 16:12   defunct Цитата(T&D @ Feb 1 2007, 15:12) А есл... Feb 1 2007, 17:17 T&D Спасибо за ответы. Можно ещё один вопрос задать? В... Feb 1 2007, 12:53 Сергей Борщ Цитата(T&D @ Feb 1 2007, 11:53) Я пра... Feb 1 2007, 13:06  T&D Цитата(Сергей Борщ @ Feb 1 2007, 13:06) А... Feb 1 2007, 13:32   Сергей Борщ Цитата(T&D @ Feb 1 2007, 12:32) Миган... Feb 1 2007, 16:00 add Собственно фрагмент книги, из-за которого создана ... Feb 2 2007, 10:13 Wild007 Цитата(add @ Feb 2 2007, 09:13) Собственн... Feb 2 2007, 10:17
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|