Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

Таймер на Atmega644

Непрочитано 27.06.2013, 10:49  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Таймер на Atmega644

Сейчас до 4к, но все равно этого мало. АБ уже года 2 абсолютно бесплатный, жаль Громов его забросил и так и не добавил поддержку Хмег
Реклама:
niXto вне форума  
Непрочитано 27.06.2013, 12:10  
Jekane
Частый гость
 
Регистрация: 19.04.2007
Сообщений: 41
Сказал спасибо: 3
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Jekane на пути к лучшему
По умолчанию Re: Таймер на Atmega644

полезно использовать такого рода макросы
;***************************************
.macro inr
.if ( @1 ‹ 0x60 )
in @0,@1
.else
lds @0,@1
.endif
.endm
;***************************************
.macro outr
.if ( @0 ‹ 0x60 )
out @0,@1
.else
sts @0,@1
.endif
.endm

тогда не надо задумываться в какой области памяти находится регистр
Jekane вне форума  
Непрочитано 27.06.2013, 12:35  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Таймер на Atmega644

Проще в АБ написать типа
R10 -› OUT
И он сам посмотрит, в каком пространстве находится ячейка OUT (регистр, ОЗУ, ввод-вывод) и подставит правильную команду копирования из R10 в эту ячейку. Но мы же легких путей не ищем...
niXto вне форума  
Непрочитано 28.06.2013, 00:39  
svom
Частый гость
 
Регистрация: 24.04.2007
Сообщений: 10
Сказал спасибо: 3
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
svom на пути к лучшему
По умолчанию Re: Таймер на Atmega644

Подобная проблема убралась когда биты н-ки указывались как 16-ричные числа. Под руками нету вашого даташит, но для Attiny2313 было бы так (архитектура периферийных устройств AVR одинаковая):

TIM0_OVF: CLI
LDI temp, $02
OUT TIMSK0, temp
LDI temp, $05
OUT TCCR0B, temp
SEI
svom вне форума  
Непрочитано 28.06.2013, 00:46  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Таймер на Atmega644

Сообщение от svom Посмотреть сообщение
проблема убралась когда биты н-ки указывались как 16-ричные числа
Да, давно подмечено - когда компиляторы видят шестнадцатиричную запись, то понимают, что имеют дело с профессионалом и перестают егозить, филонить и гадить в бинарники.
Кроме того, шестнадцатиричные числа лучше входят в регистры - без зазора. Десятичные немного болтаются, люфтят.
__________________
There's always more than one way to skin a cat.

Последний раз редактировалось tempora; 28.06.2013 в 00:49.
tempora вне форума  
Непрочитано 28.06.2013, 01:33  
alex_r61
Временная регистрация
 
Регистрация: 09.09.2007
Сообщений: 82
Сказал спасибо: 40
Сказали Спасибо 32 раз(а) в 19 сообщении(ях)
alex_r61 на пути к лучшему
По умолчанию Re: Таймер на Atmega644

Сообщение от svom Посмотреть сообщение
Подобная проблема убралась когда биты н-ки указывались как 16-ричные числа. Под руками нету вашого даташит, но для Attiny2313 было бы так (архитектура периферийных устройств AVR одинаковая):
Спасибо! Давно в цирке не был.
alex_r61 вне форума  
Непрочитано 28.06.2013, 19:54  
bvn123
Частый гость
 
Регистрация: 16.11.2005
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
bvn123 на пути к лучшему
По умолчанию Re: Таймер на Atmega644

макрозаписи, предложенные Jekane, решают проблему;
наверное, стоило написать, как их вызывать:
outr TIMSK0,temp
здесь параметр @0 - это TIMSK0
параметр @1 - регистр, который вы назвали temp

inr temp,TIMSK0
здесь наоборот, параметр @0 temp, @1 - TIMSK0
ассемблер сам определит, в какой области находится адресуемый регистр и использует соответствующую команду - out или sts, in или lds

важно, что это не вызовет увеличения числа команд/времени исполнения
----
пояснения:
для записи в регистры с адресами выше $5F вместо
OUT TIMSK0, temp
используется
sts TIMSK0, temp

для считывания вместо
in temp,TIMSK0
пишите
lds temp,TIMSK0

при перетаскивании частей ассемблерного кода из программ для "более простых" или старых МК в МК с бОльшим числом регистров при возникновении таких ошибок можно заменять out на sts и in на lds,но только там, где при ассемблировании обнаружены ошибки (!)

если регистр имеет адрес менее $60, например, TCCR0B вашего ATmega644, ошибка в записанной команде
sts TCCR0B,r16 ;(правильно out TCCR0B,r16)
обнаружена не будет (по крайней мере в AVR Studio 4),

но в симуляторе запись в регистр TCCR0B при использовании sts не выполнится

----
писать 16-ричные числа вместо имен отдельных битов регистров непрактично, при этом ошибки, возникающие при наборе, более вероятны - можно неверно пересчитать установленные биты в число,
неудобно будет и интерпретировать команды при чтении программы;
просто надо знать операторы и корректно ими пользоваться

Последний раз редактировалось bvn123; 28.06.2013 в 20:33.
bvn123 вне форума  
Непрочитано 28.06.2013, 21:15  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Таймер на Atmega644

Сообщение от bvn123 Посмотреть сообщение
макрозаписи, предложенные Jekane, решают проблему;
Не совсем - там граница указана неверная.

Сообщение от bvn123 Посмотреть сообщение
наверное, стоило написать, как их вызывать:
А это уже сообщили - см. пост #6.
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 29.06.2013, 00:17  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Таймер на Atmega644

Сообщение от bvn123 Посмотреть сообщение
важно, что это не вызовет увеличения числа команд/времени исполнения
Так таки и не вызовет?

Сообщение от bvn123 Посмотреть сообщение
если регистр имеет адрес менее $60, например, TCCR0B вашего ATmega644, ошибка в записанной команде
sts TCCR0B,r16 ;(правильно out TCCR0B,r16)
обнаружена не будет (по крайней мере в AVR Studio 4),
Естественно - команда-то правильная.
Сообщение от bvn123 Посмотреть сообщение
но в симуляторе запись в регистр TCCR0B при использовании sts не выполнится
Выполнится.
Вопрос - куда?
omercury вне форума  
Непрочитано 29.06.2013, 10:52  
bvn123
Частый гость
 
Регистрация: 16.11.2005
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
bvn123 на пути к лучшему
По умолчанию Re: Таймер на Atmega644

›tempora Не совсем - там граница указана неверная.

по datasheet "64 I/O Registers $0020 - $005F",
в макрозаписи Jekane указано "@.. ‹ $60",
(хотя по факту адреса I/O регистров в пространстве памяти используются только до $3f);
к сожалению, в м644def.inc не видно параметра, связанного с границами памяти, со значением $3f или $40, или $5f, или $60, который можно было бы применить в качестве параметра условия

›tempora: скорее всего, пост 6 открыли и не стали разбираться, также как и с macro

›omercury: важно, что это не вызовет увеличения числа команд/времени исполнения/ Так таки и не вызовет?

не вызовет, см.дизассемблер: вместо строк 29: и 30: ассемблер подставляет соотв.строки +00000007: и +00000009: с командами sts и out:
29: outr TIMSK0,r16
+00000007: 9300006E STS 0x006E,R16 Store direct to data space
30: outr TCCR0B,r16
+00000009: BD05 OUT 0x25,R16 Out to I/O location

›omercury: но в симуляторе запись в регистр TCCR0B при использовании sts не выполнится/Выполнится.Вопрос - куда?

в регистр TCCR0B запись не выполнится,
куда выполнится:
в "Register summary" (datasheet)
0x25 (0x45) TCCR0B
0x05 (0x25) PORTB

out TCCR0B,r16 эквивалентно out $25,r16
sts $25,r16 выполнит запись в PORTB - симулятор подтверждает

если нет подвоха, почему в *def.inc не используются адреса в скобках? тогда всюду можно было бы использовать sts вместо out,
это упростило бы перенос программ на другой микроконтроллер

Последний раз редактировалось bvn123; 29.06.2013 в 11:02.
bvn123 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сторожевой таймер в ATtiny25/45/85 mike124 Proteus 11 30.10.2012 11:19
Реализовать самый точный таймер на S7-200 rihkov Производственное оборудование 6 07.08.2012 18:23
Как "врезать" таймер в ЗУ? VeroMax Источники питания и свет 8 17.09.2011 13:15
Сторожевой таймер. Проведите ЛИКБЕЗ. radarr Микроконтроллеры, АЦП, память и т.д 9 22.01.2008 21:50
таймер и симуляция в MPLAB Sim lisergin Микроконтроллеры, АЦП, память и т.д 0 16.01.2006 15:35


Часовой пояс GMT +4, время: 11:23.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.