Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » как реализовать задержку по времени на ассемблере на ATtiny2313?

Страниц (2): [1] 2 »
 

1. applecutter - 10 Марта, 2011 - 10:50:57 - перейти к сообщению
Hi all!

Не подскажете как можно реализовать задержку по времени на ассемблере на микросхеме ATtiny2313? Ну или хотя бы в каком направлении копать? Спек курил, много букав, времени на полное просветление уйдет очень уж много...


Задача вообще такая - собираю VGA-генератор для вывода разного цвета заливок на монитор для проверки на битые пикселы. С кнопки уже все выводится, но хотелось бы добавить режим автоматической смены заливки, для этого и нужна задержка. Нужен именно ассемблер, потому что боюсь что перевести код на С может занять довольно много времени.
2. Белый Волк - 10 Марта, 2011 - 13:09:51 - перейти к сообщению
applecutter
В простейшем случае задержку можно выполнить, организовав пустой цикл.
Задержка на один такт осуществляется командой nop.
3. mihail - 10 Марта, 2011 - 13:36:05 - перейти к сообщению
Терзают меня смутные сомнения. Не может ATtiny2313 притворяться полноценной видиокартой. Даже с ассемблерной программой.

PS Для проверки мониторов есть специальные программы (для ПК). Проверяют работу монитора во всевозможных режимах. ATtiny2313 на такое точно не способна.
4. applecutter - 10 Марта, 2011 - 14:00:11 - перейти к сообщению
Белый Волк пишет:
applecutter
В простейшем случае задержку можно выполнить, организовав пустой цикл.
Задержка на один такт осуществляется командой nop.

Это правда, но если нужна задержка в одну-две секунды, то счет идет на десятки мегагерц этих нопов, а предел значений 8-битного регистра очень даже предельный. Я тут уже соорудил сгороду, но даже смотреть на это страшно, не то что пользоваться. Хотелось бы более кошерным способом, если такой есть.
(Добавление)
mihail пишет:
Терзают меня смутные сомнения. Не может ATtiny2313 притворяться полноценной видиокартой. Даже с ассемблерной программой.

Ну у меня работает, сам толком правда не знаю как - брал чужой исходник и правил под себя. Если вам интересно, то обсуждение этого вопроса, вместе с исходником deogen.asm на http://monitor.net.ru/forum/topic193446-0.html

Цитата:
PS Для проверки мониторов есть специальные программы (для ПК). Проверяют работу монитора во всевозможных режимах. ATtiny2313 на такое точно не способна.

Ну я хочу себе сделать такую коробочку, которой можно будет проверять мониторы на битые пиксели без помощи компьютера. Понятно что это не самый простой способ добиться желаемого. Зачем? Да для самообучения, фана, пользы в хозяйстве.
5. killgur - 10 Марта, 2011 - 14:15:31 - перейти к сообщению
applecutter пишет:
Hi all!

Не подскажете как можно реализовать задержку по времени на ассемблере на микросхеме ATtiny2313? Ну или хотя бы в каком направлении копать? Спек курил, много букав, времени на полное просветление уйдет очень уж много...


Задача вообще такая - собираю VGA-генератор для вывода разного цвета заливок на монитор для проверки на битые пикселы. С кнопки уже все выводится, но хотелось бы добавить режим автоматической смены заливки, для этого и нужна задержка. Нужен именно ассемблер, потому что боюсь что перевести код на С может занять довольно много времени.


а если вот так

ldi r16,10 ;счетчик задержки
wait1:
dec r16 ;уменьшить счетчик
brne wait1 ;если не ноль, повторить
6. applecutter - 10 Марта, 2011 - 14:31:06 - перейти к сообщению
killgur пишет:

а если вот так

ldi r16,10 ;счетчик задержки
wait1:
dec r16 ;уменьшить счетчик
brne wait1 ;если не ноль, повторить

Ну да, но предел значений для 8-битного регистра - 256. А один мегагерц - это 1.000.000, причем если мы хотим выставить задержку в одну секунду, то это 8.000.000. Соответственно, либо городить ужасную рекурсивную конструкцию, либо воспользоваться каким-нибудь более элегантным способом, если он есть.
7. killgur - 10 Марта, 2011 - 14:50:42 - перейти к сообщению
Да есть конечно

обработка прерывания таймера называется

Только по примерам кода это вопрос к тем кто с МК AVR обчается. т.е. ко всем кроме меня наверно на этом форуме.
8. applecutter - 10 Марта, 2011 - 14:57:00 - перейти к сообщению
killgur пишет:
Да есть конечно

обработка прерывания таймера называется

Только по примерам кода это вопрос к тем кто с МК AVR обчается. т.е. ко всем кроме меня наверно на этом форуме.

Ну жду пока объявятся)
9. mihail - 10 Марта, 2011 - 16:12:32 - перейти к сообщению
applecutter пишет:
предел значений 8-битного регистра очень даже предельный
Можно использовать вложенные циклы.

У ATtiny2313 есть шестнадцатиразрядный таймер/счетчик. Считает от 0 до 65535. И максимальный предделитель у него на 1024 (если память не изменяет).

Насколько это все совместимо с генератором сигналов для VGA монитора незнаю Замешательство
10. applecutter - 10 Марта, 2011 - 16:23:25 - перейти к сообщению
mihail пишет:
applecutter пишет:
предел значений 8-битного регистра очень даже предельный
Можно использовать вложенные циклы.:

Ну я это и называю ужасными конструкциями, на которые страшно смотреть, а не то что пользоваться. В примерном виде я себе такую уже составил, не думайте - http://paste.org.ru/?v84rgf

Цитата:

У ATtiny2313 есть шестнадцатиразрядный таймер/счетчик. Считает от 0 до 65535. И максимальный предделитель у него на 1024 (если память не изменяет).

Ну мне бы хотя бы заведомо рабочий пример как им пользоваться.

Цитата:
Насколько это все совместимо с генератором сигналов для VGA монитора незнаю Замешательство

Должно быть совместимо. А вот все базовые регистры почему-то заняты. По этой причине наверное до сих пор и моя сгорода не работает - после прохождения через нее монитор пишет что нет сигнала. Пробовал пушить и попать этот регистр в разных вариантах - хз, может нужно чтобы сигнал непрерывно шел.
11. killgur - 10 Марта, 2011 - 16:32:11 - перейти к сообщению
посмотрел код

одно прерывание по переполнению таймера уже точно используется в генераторе сигнала.

и все регистры действительно заняты


applecutter сделали бы внешнюю схемку "нажимающую кнопку" раз в минуту и не мучались.
12. applecutter - 10 Марта, 2011 - 16:49:39 - перейти к сообщению
killgur пишет:
посмотрел код

одно прерывание по переполнению таймера уже точно используется в генераторе сигнала.

и все регистры действительно заняты


applecutter сделали бы внешнюю схемку "нажимающую кнопку" раз в минуту и не мучались.

Возможно в конце концов так и придется поступить... Но мне бы хотелось хотя бы посмотреть как вообще работают с этим таймером - может че и удастся подгородить. Кстати, пробовал использовать незанятый регистр GPIOR0, а компилятор на него почему-то матерится "error: Invalid register". До этого пробовал использовать r2, но решил что матюки на него связаны с тем, что он чем-то отличается от того же r16(ну я не особо пока разбираюсь в этой теме). Интересно, с чем это может быть связано? И где можно надыбать сорцы с использованеим таймера на ATtiny2313? Гугл не предлагать, я и так гуглю в свободное время.
13. killgur - 10 Марта, 2011 - 17:03:16 - перейти к сообщению
только в документации на ATTINY можно это найти
14. applecutter - 10 Марта, 2011 - 17:05:09 - перейти к сообщению
killgur пишет:
только в документации на ATTINY можно это найти

Ну вот ищу... говорю же - много букав...
15. mihail - 10 Марта, 2011 - 18:06:02 - перейти к сообщению
Коротко врядли получится.
http://easyelectronics.ru/catego...vr-uchebnyj-kurs
Тут много ассемблера для AVR.