Страница 75 из 399

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вт мар 01, 2011 17:29:12
chezetmobile
Здравствуйте, Ув. Коты и Кошечки.
Новоиспеченный пользователь АVR (то есть я) пытается настроить на вывод два порта D и В, на одновременную работу, на тини2313. но ни че не получается, поиск результатом не увенчался(((
цель: "дергание" лапками тини на двух портах.

Если кому не жалко кода кусочек, или подправте мой))) поделитесь опытом, плз.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вт мар 01, 2011 18:33:52
Engineer_Keen
Ну порт B настроили на выход, ну посылаете на него какие-то данные, ничего что индусский код, вроде должен работать. Но что мешает точно так-же настроить порт D (один раз при инициализации, а не в цикле) и выводить на него тот же самый temp в той-же процедуре delay?

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вт мар 01, 2011 18:46:08
chezetmobile
пробовал, чаво-то не получается... ручонки кривые похоже... направьте струю, пожалуйста, в нужное русло...

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вт мар 01, 2011 18:49:28
nibiluk
chezetmobile писал(а):Здравствуйте, Ув. Коты и Кошечки.
Новоиспеченный пользователь АVR (то есть я) пытается настроить на вывод два порта D и В, на одновременную работу, на тини2313. но ни че не получается, поиск результатом не увенчался(((
цель: "дергание" лапками тини на двух портах.

Если кому не жалко кода кусочек, или подправте мой))) поделитесь опытом, плз.
Я конечно тоже новичек, но мне кажется что содержимое temp нужно переносить в PORTB вроде типа того
ldi Temp,0b00010010 ; запись константы
out PORTB,temp ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки

а вобще тут почитайте

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вт мар 01, 2011 19:05:27
chezetmobile
спасибо, руки выровнял, все получилось.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Вт мар 01, 2011 21:44:07
Skyer
Здравствуйте. Переписал пример с таймерами с обучалки на свою мегу32, не работает. Компилируется, но не работает, код который идет в начале загрузке трассируется нормально, а вот в протеусе модель ничего не выводит. Поделитесь опытом, где я мог ошибиться?

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Ср мар 02, 2011 09:49:16
Engineer_Keen
Skyer писал(а):Поделитесь опытом, где я мог ошибиться?
Ну в TIMSK ошибка, там установлен бит TOIE2, а должен быть по идее OCIE1A.
Светодиоды в протеусе побежали...

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Ср мар 02, 2011 15:55:01
chezetmobile
здравствуйте, попытки переписать код из обучалки на одновременную работу портов В и D не дали нужного результата. подскажите, пожалуйста, где накосячил.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Ср мар 02, 2011 16:07:51
Gudd-Head
chezetmobile писал(а):здравствуйте, попытки переписать код из обучалки на одновременную работу портов В и D не дали нужного результата. подскажите, пожалуйста, где накосячил.
Вместо

Код: Выделить всё

          ldi Temp,RamEnd       ;инициализация стека
          out SPL,Temp
Попробуйте

Код: Выделить всё

          ldi Temp,low(RamEnd)       ;инициализация стека
          out SPL,Temp
И ещё, приглядитесь внимательно:
;Задержка
Delay: out PortB,Temp
ldi Temp1,50
ldi Temp2,50
ldi Temp2,5
Loop: dec Temp1
brne Loop1
dec Temp2
brne Loop
dec Temp3
brne Loop
ret

Спрашивается, нахера дефайнить регистры чтобы потом давать им однотипные ничего не значащие имена???

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Ср мар 02, 2011 16:13:46
Engineer_Keen
chezetmobile писал(а):здравствуйте, попытки переписать код из обучалки на одновременную работу портов В и D не дали нужного результата. подскажите, пожалуйста, где накосячил.
Вы хотя бы пробовали вашу программу в уме прогнать? Как по-вашему в каком случае контроллер должен перейти к метке Label2?
Вот что получается:

Код: Выделить всё

1) инициализация стека, порты на выход
2) label
3) вывод в B ;зачем, если сразу за этим все равно вывод другого значения в процедуре задержки?
4) загрузка temp, задержка (повтор 3 раза)
5) переход к п.2
---подпрограмма задержки---
-вывод temp в B
-непосредственно задержка
-возврат
-----------------------------------
6) label2 ; как и откуда сюда попадет контроллер?
7) вывод в D ;опять же, зачем, если сразу новый вывод?
8) загрузка temp5, задержка2 (повтор 4 раза)
9) переход к п.6
---задержка 2----
...
...
возврат
Определитесь, в какой последовательности вам нужно выводить данные в порты и составьте хотя бы алгоритм...

Насчет дефайнов регистров - вопрос далеко не в этом, тут с алгоритмом беда...

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Ср мар 02, 2011 17:01:58
chezetmobile
Engineer_Keen писал(а):
Определитесь, в какой последовательности вам нужно выводить данные в порты и составьте хотя бы алгоритм...
вывод в В и D единовременно. что то вроде следующего

порты В D
10110101 10110010
01101101 11001110
00010100 01101101

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

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Ср мар 02, 2011 17:08:59
Engineer_Keen
Что мешает выводить в порты сразу в одной процедуре delay?

Код: Выделить всё

LOOP:
...
...
          ldi Temp,0b10110111   ;загрузка для B
          ldi Temp5,0b10110111   ;загрузка для D
          rcall Delay           ;вызов подпрограммы задержки
...
...
...
RJMP LOOP

Delay:
out PortB,Temp ;вывод B
out PortD,Temp5 ;вывод D
...
...
;задержка
...
RET

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Ср мар 02, 2011 20:22:09
Skyer
Engineer_Keen, спасибо, заработало

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт мар 03, 2011 00:22:44
DX168B
Недокументированная возможность большинства AVR контроллеров: :))) :)))
Отправим значение 0x12 в регистр PORTB

Код: Выделить всё

ldi				temp0,			0x12
ldi				ZL, 		 	 Low(PORTB)
ldi				ZH, 		 	 High(PORTB)
st			 	Z, 				temp0

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт мар 03, 2011 10:08:01
Gudd-Head
DX168B писал(а):Недокументированная возможность большинства AVR контроллеров
Обращение к РВВ как к ячейке памяти данных, коей она и является. Ну и что? :)
Изображение

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт мар 03, 2011 13:11:41
Jack_A
Кстати, у более продвинутых контроллеров, у которых регистров периферии >32, эти регистры попадают совсем в другую страницу памяти, и LDS/STS - единственный способ к ним достучаться, например, ADC в Атмега88. И этот способ очень даже документирован, а указатель Z здесь лишний, простой STS рулит.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт мар 03, 2011 14:27:38
DX168B
А почему лишний? В некоторых случаях совсем не лишний. Если вдруг надумается сделать какой-нибудь сложный алгоритм. Типа автонастройки таймера или UART. Или выбор порта для вывода данных. Или как метод защиты программы от декомпилирования и разбора программы. :)))
Так-же можно применить в полиморфных алгоритмах. Или, как вариант - в случае нехватки памяти флэша, при условии, что ЕЕPROM имеет много свободного места, можно организовать настройку периферии при старте одним-двумя циклами, вытащив данные из EEPROM и раскидав их по соответствующим регистрам.
На счёт того, что в более продвинуты МК, некоторые регистры числятся как Memory mapped, я в курсе.
Тут именно обычный регистр, к которому обращаются только через команды in и out, адресуется парой Z. :))) Этого-то точно нет в мануалах. :))) Приведённый выше код работает в простой тиньке 26L. :)))

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт мар 03, 2011 14:40:01
ARV
DX168B писал(а):Этого-то точно нет в мануалах. :))) Приведённый выше код работает в простой тиньке 26L. :)))
это есть в мануалах, это основы основ.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт мар 03, 2011 14:41:43
DX168B
Ну не знал, просто такого нигде не видел. :)

Re: Ассемблер (ASM) для AVR в вопросах и ответа

Добавлено: Чт мар 03, 2011 15:56:44
ChipKiller
DX168B писал(а):Так-же можно применить в полиморфных алгоритмах
... ну вообще-то полиморфные алгоритмы меняют "на лету" свой код, а для Flash такое ....