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

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

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

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

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

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

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

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

Сейчас до 4к, но все равно этого мало. АБ уже года 2 абсолютно бесплатный, жаль Громов его забросил и так и не добавил поддержку Хмег
Реклама:
niXto вне форума  
Непрочитано 27.06.2013, 12:10   #12
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   #13
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Таймер на Atmega644

Проще в АБ написать типа
R10 -› OUT
И он сам посмотрит, в каком пространстве находится ячейка OUT (регистр, ОЗУ, ввод-вывод) и подставит правильную команду копирования из R10 в эту ячейку. Но мы же легких путей не ищем...
niXto вне форума  
Непрочитано 28.06.2013, 00:39   #14
svom
Частый гость
 
Регистрация: 24.04.2007
Сообщений: 11
Сказал спасибо: 5
Сказали Спасибо 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   #15
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 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   #16
alex_r61
Временная регистрация
 
Регистрация: 09.09.2007
Сообщений: 82
Сказал спасибо: 40
Сказали Спасибо 32 раз(а) в 19 сообщении(ях)
alex_r61 на пути к лучшему
По умолчанию Re: Таймер на Atmega644

Сообщение от svom Посмотреть сообщение
Подобная проблема убралась когда биты н-ки указывались как 16-ричные числа. Под руками нету вашого даташит, но для Attiny2313 было бы так (архитектура периферийных устройств AVR одинаковая):
Спасибо! Давно в цирке не был.
alex_r61 вне форума  
Непрочитано 28.06.2013, 19:54   #17
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   #18
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 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   #19
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
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   #20
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, время: 20:22.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot