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

Обсуждаем контроллеры компании Atmel.
Ответить
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Можем. Это какие-то значения :)

Точно сказать может только другой студент или глубокий анализ исходника.
Реклама
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

А ты запиши в двоичной форме, и смотри что в эти моменты происходит со схемой.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Еще можно указать на какой порт выводится, и что к нему подключено, а так это просто гадание получается. Может это инициализация дисплея, а может хитрая последовательность для управления двигателем, хотя, ИМХО, ни на то, ни на другое не похоже :dont_know:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1946
Зарегистрирован: Сб сен 11, 2010 13:45:01
Откуда: Екатеринбург

Сообщение sergeys »

Привет всем! Пишу программу для меги 88. Пытаюсь настроить прерывание Timer0 по переполнению, пишу:

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

ldi temp,0b00000001
out timsk0,temp
clr temp
Компилятор ругается на вторую строчку: operand 1 out of range: 0x6e :evil:
Для тини2313, например, (там timsk один) все работает.
Я еще с МК, в которых у каждого таймера есть свой регистр timsk, не работал, ничего понять не могу, подскажите пожалуйста!
А, забыл, пишу в AVRStudio
Ко мне можно на "ты", так даже лучше!
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Эх... Книгу "Микроконтроллеры AVR семейства Tiny Mega фирмы Atmel" А.В.Евстифеев знаете?

Если нет, то скачайте и
Если да, то смотрите до какого адреса "достреливает" команда OUT.

Далее курите команты ST(S).
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1946
Зарегистрирован: Сб сен 11, 2010 13:45:01
Откуда: Екатеринбург

Сообщение sergeys »

Понятно, написал полный бред я. Называется слез с тини.
Эту нет, знаю другую, Ю. Ревича, с нее списываю, только там пример с 2313.
Уже ищу..
Ко мне можно на "ты", так даже лучше!
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1946
Зарегистрирован: Сб сен 11, 2010 13:45:01
Откуда: Екатеринбург

Сообщение sergeys »

Cпасибо, все работает! :)
Ко мне можно на "ты", так даже лучше!
Встал на лапы
Аватара пользователя
Сообщения: 104
Зарегистрирован: Сб фев 24, 2007 15:49:35

Сообщение sinobi »

Нужно воспроизвести звук типа Бип-камень тини2313-подскажите где можно реализацию посмотреть?
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

Вот, кое что из моих поделок на этом камне:

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

...............
..........
ldi           dx3,              0x02   ;Устанавливаем длину сигнала
rcall         SNDGEN              ;Вызываем пищалку
.......
...........

;************************************************
;************************************************
;---------------------------------------------- Генератор звука
SNDGEN:
sbi				P1_OUT,			BZR_OUT ;Устанавливаем единицу в  Порт, пин
LOOP1:
dec				dx1
brne			LOOP1
;-------------------------------
cbi				P1_OUT,			BZR_OUT ;Устанавливаем ноль в  Порт, пин
LOOP0:
dec				dx1
brne			LOOP0
;------------------------------- Циклы для установки длинны звука
dec				dx2
brne			SNDGEN
dec				dx3
brne			SNDGEN
ret
Работает при тактовой в 8MHz. Пойдет на любой камень.
Может можно и проще. Писал давно, когда меньше опыта было.
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 104
Зарегистрирован: Сб фев 24, 2007 15:49:35

Сообщение sinobi »

Написал вот так -но вот с задержкой наверно не правильно

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

	 Delay:    out PortB,Temp

           ldi Temp1,0
           ldi Temp2,0
           ldi Temp3,10

 Loop:     dec Temp1
           brne Loop

           dec Temp2
           brne Loop

           dec Temp3
           brne Loop

           ret

       
	;****************************************************************************************************
	Beep:    ldi Temp,0b00000010   ;вывод 1
           rcall Delay           ;вызов подпрограммы задержки

           ldi Temp,0b00000000   ;вывод 0
           rcall Delay           ;вызов подпрограммы задержки

              ;вызов подпрограммы задержки

           rjmp Beep            ;
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

У меня тоже задержки стоят, только отличие в том, что у Вас в последствии МК будеn пищать и отключить можно будет только перезагрузкой МК. (сбросом)
А у меня можно регулировать длину звука. Задержки реализованы у меня внутри всей подпрограммы и не вызываются извне.
У Вас дергание ногой задевает весь порт, а у меня только одну ногу и не затрагивает другие (команда sbi PORTx, PxX и cbi PORTx, PxX) к примеру sbi PORTB, PB1 и cbi PORTB, PB1
Принцип прост

БИПЕР:
устанавливаем ногу PB1 в лог 1
крутимся в цикле (выжидаем время)
сбрасываем ногу PB1 в лог 0
крутимся в цикле
уменьшаем значение младшего байта счетчика
если младший байт счетчика не равен нулю, то к метке БИПЕР
иначе, уменьшаем старший байт счетчика
если старший байт счетчика не равен нулю, то к метке БИПЕР
иначе, выходим из п\программы.

Счетчик - это набор из двух РОН регистров и реализован, как в обычной программной задержке. В последний регистр (старший) мы можем заложить значение длины звука заранее. То есть, перед вызовом пищалки.
Последний раз редактировалось DX168B Ср май 02, 2012 17:36:44, всего редактировалось 1 раз.
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 104
Зарегистрирован: Сб фев 24, 2007 15:49:35

Сообщение sinobi »

Вот подправил

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

.include "tn2313def.inc"
;----------------------------------------------------------------------------------------------------



	.Def Temp = R16					; Временная переменная
	.Def Temp1 = R19					; Временная переменная
	.Def Temp2 = R20					; Временная переменная
	.Def Temp3 = R21					; Временная переменная
	.Equ SOUND = PB2					; бипер

////////////////////////////////////////////////////////////////////////////////////////////////////
	.CSeg .Org 0x00					; Сегмент кода
////////////////////////////////////////////////////////////////////////////////////////////////////
	;****************************************************************************************************
	; 
	;****************************************************************************************************
	 Delay:    out PortB,Temp

           ldi Temp1,0
           ldi Temp2,0
           ldi Temp3,10

 Loop:     dec Temp1
           brne Loop

           dec Temp2
           brne Loop

           dec Temp3
           brne Loop

           ret

       
	;****************************************************************************************************
	Beep:    ldi Temp,SOUND  ;вывод 1
           rcall Delay           ;вызов подпрограммы задержки

           ldi Temp,SOUND   ;вывод 0
           rcall Delay           ;вызов подпрограммы задержки

              ;вызов подпрограммы задержки

           rjmp Beep            ;
	;******************************************************************************************************
	
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

Какая тактовая частота в вашем камне?
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 104
Зарегистрирован: Сб фев 24, 2007 15:49:35

Сообщение sinobi »

8мгц,внутренний генератор
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

Так заюзайте мой пример.
Вот подправленый под вашу ногу:

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

...............
..........
ldi           temp2,              0x02   ;Устанавливаем длину сигнала
rcall         SNDGEN              ;Вызываем пищалку
.......
...........

;************************************************
;************************************************
;---------------------------------------------- Генератор звука
SNDGEN:
sbi            PORTB,         PB1 ;Устанавливаем единицу в  Порт, пин
LOOP1:
dec            temp0
brne         LOOP1
;-------------------------------
cbi            PORTB,         PB1 ;Устанавливаем ноль в  Порт, пин
LOOP0:
dec            temp0
brne         LOOP0
;------------------------------- Циклы для установки длинны звука
dec            temp1
brne         SNDGEN
dec            temp2
brne         SNDGEN
ret
Прогоните отладкой в AVR Studio и поймете его работу.
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 104
Зарегистрирован: Сб фев 24, 2007 15:49:35

Сообщение sinobi »

Благодарю Вас!пока не особо не силен в кодинге :oops: -поразбираюсь..
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 104
Зарегистрирован: Сб фев 24, 2007 15:49:35

Сообщение sinobi »

Вообщем нашел в инете код и под себя переделал

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

 BEEP:

ldi r16,0x4
out ddrb,r16
START:
ldi r17,5
loop2:
ldi r16,255
loop: 
dec r16 
brne loop
 dec r17
 brne loop2
com r15
out portb,r15
rjmp START
Подскажите-как ограничить по времени звучания ?
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6323
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

sinobi писал(а):Вообщем нашел в инете код и под себя переделал

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

 BEEP:

ldi r16,0x4
out ddrb,r16

ldi  r18,N  ; N = константа = число повторений цикла
START:
ldi r17,5
loop2:
ldi r16,255
loop: 
dec r16 
brne loop
 dec r17
 brne loop2
com r15
out portb,r15

dec    r18
breq   na_fig

rjmp START
na_fig: ......

Подскажите-как ограничить по времени звучания ?
Приблизительно так. Если надо, чтоб длительнось побольше была, можно задействовать регистровую пару, например, R24,R25 и с ними : subi R24,1
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

команда sbi/cbi затрагивают весь порт, но изменяет только один бит. Эти команды работают по принципу чтение-модификация-запись над содержимым всего порта, только читают значение они не с выходной защелки а актуальные логические уровни на выводах порта, даже если порт установлен в "1" а внешняя схема пересилила его и подтянула к "0" после команды SBI в выходной защелке будет "0".

Это надо всегда помнить когда применяешь команду SBI/CBI к внешним портам контроллера.

А насчет звука... в тини2313 есть таймер способный работать в режиме генерации меандра. Достаточно выставить этот режим, в регистр сравнения занести число определяющее период меандра и генератор работает. Вторым таймером можно отсчитать период и по его окончанию остановить таймер. Во время генерации сигнала может выполнятся какая-либо программа, т.е. контроллер на время "биип" полностью свободен.
Контактная информация:
Родился
Сообщения: 2
Зарегистрирован: Чт апр 19, 2012 23:54:05

Сообщение Alex Yustas »

Engineer_Keen писал(а):Если в коде, то отключаем прерывания, пишем в CLKPR 0x80, потом не позднее 4 тактов пишем туда же 0x03, возвращаем прерывания. Это что касается делителя. А вот источник тактирования можно изменить только программатором, потому что CKSEL это не регистр, а биты во фьюзе.
Спасибо за помощь. Попробуем.
Ответить

Вернуться в «AVR»