Ассемблер (ASM) для AVR в вопросах и ответах
директива ORG означает что в этом месте адресация начинается с указанного адреса. первый ORG 0 не играет роли поскольку там код и так начинается с нуля. а следующий ORG устанавливает адрес вектора прерывания, если ты убираешь его то компилятор тулит код в следующую ячейку, а не туда куда нужно. В результате вектор прерывания от таймера указывает куда-то в середину подпрограммы обработки прерывания, поскольку та начала располагаться сразу по первому вектору, сразу за вектором сброса. Если бы ты определил(зарезервировал) место для каждого прерывания, хотябы заглушкой из команд IRET или NOP то и вторая ORG не понадобилась бы.
- Реклама
необходимо сделать регулируемый генератор прямоугольных сигналов в диапазоне частот от 1 кГЦ до 100 кГц.
1 - 30 кГц с шагом 0.05 кГц
30 - 100 кГц с шагом 5 кГц
сделать программо не проблема, но хотелось бы аппаратно. желательно на TINY13.
1 - 30 кГц с шагом 0.05 кГц
30 - 100 кГц с шагом 5 кГц
сделать программо не проблема, но хотелось бы аппаратно. желательно на TINY13.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Таймер/счётчик в режиме генератора. На счёт шага сетки частот сходу не скажу.xkp писал(а):хотелось бы аппаратно. желательно на TINY13.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Для реализации первого диапазона потребуется системная частота МК не менее 18 МГц, а лучше порядка 50 МГц, иначе шаги будут с большой погрешностью.xkp писал(а):необходимо сделать регулируемый генератор прямоугольных сигналов в диапазоне частот от 1 кГЦ до 100 кГц.
1 - 30 кГц с шагом 0.05 кГц
30 - 100 кГц с шагом 5 кГц
сделать программо не проблема, но хотелось бы аппаратно. желательно на TINY13.
а конкректнее? какой режим таймер-счетчика выбирать? какие регистры и для чего включать? что касаемо частоты МК, можно взять TINY85 - 20мГЦ
Последний раз редактировалось xkp Вт сен 04, 2012 12:46:06, всего редактировалось 1 раз.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- Реклама
Даташит и Студия вам в помощьxkp писал(а):какой режим таймер-счетчика выбирать? какие регистры и для чего включать?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
даташит и студия... было бы все так просто я бы к вам не обратился за помощью. не получается у меня ибо слабые познания английского
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Микроконтроллеры AVR семейства Mega А.В.Евстифеев, 2007xkp писал(а):...было бы все так просто я бы к вам не обратился ...
Микроконтроллеры AVR семейства Tiny А.В.Евстифеев, , а ещё есть и тини и мега вместе. И целая тема на форуме по работе в AVR-STUDIO на русском
ясно. помощи не ждать...
спасибо и на этом
PS. я даже в школе не умел учиться по книгам! хотя и был отличником по точным предметам.
PS. я даже в школе не умел учиться по книгам! хотя и был отличником по точным предметам.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Ну почему же... Просто вы немного ошиблись темой — ваш вопрос построения генератора имеет к ассемблеру весьма отдалённое отношение, тут скорее требуется понимание работы таймера/счётчика МК.xkp писал(а):ясно. помощи не ждать...
Заведите отдельную тему, там и можно будет спокойно пообсуждать кому не лень. Например, я могу присоединиться к обсуждению.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
тема уже быллапрограмирование AVR на АСЕМБЛЕРЕ для чайников. её закрыли, сказали обсуждать тут.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Дело-то не в АСМе, а в непонимании периферии.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
возможно. но все же как замяукать аппаратный генератор?
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Переделал в такой код:
Теперь все работает без дополнительных адресов 
Можно ли написать код в ТАКОМ виде? Или существует более правильный/рациональный вид?
Спойлер
Код: Выделить всё
.def Temp=R16
.def Temp2=R17
.def Temp3=R18
.def Temp4=R19
.def Temp5=R20
.def ResCnt=R21
.cseg
.org 0
rjmp RESET ; Reset Handler
reti ; IRQ0 Handler
reti ; IRQ1 Handler
reti ; Timer2 Compare Handler
reti ; Timer2 Overflow Handler
reti ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 CompareA Handler
reti ; Timer1 CompareB Handler
reti ; Timer1 Overflow Handler
reti ; Timer0 Overflow Handler
reti ; SPI Transfer Complete Handler
reti ; USART RX Complete Handler
reti ; UDR Empty Handler
reti ; USART TX Complete Handler
reti ; ADC Conversion Complete Handler
reti ; EEPROM Ready Handler
reti ; Analog Comparator Handler
reti ; Two-wire Serial Interface
reti ; Store Program Memory Ready
Reset:
ldi Temp2,0
ldi Temp3,0
l_res:
dec Temp2
brne l_res
dec Temp3
brne l_res
inc ResCnt
ldi Temp, 0b11111111
out DDRB, Temp
ldi Temp, 0b00010001
out TIMSK, Temp
ldi Temp, 0b00000011
out TCCR1B, Temp
ldi Temp, 0x23
out OCR1AH, Temp
ldi Temp, 0x28
out OCR1AL, Temp
ldi Temp,low(RamEnd) ;[1]Спросить про неполную таюлицу прерываний. Разобраться со СТЕКом до конца.
out SPL,Temp ;
ldi Temp,high(RamEnd) ;СТЕК - разобраться - пошерстить даташит
out SPH,Temp ;Такая структура работает (в связи с особенностями Меги 8-ой), но прога не пашет. Разобраться! (Разобрался [1])
ldi Temp2, 0b00000001
ldi Temp, 0
out TCNT1H, Temp
out TCNT1L, Temp
sei
Inf: rjmp Inf
TIM1_CompA:
ldi Temp,0
out TCNT1H, Temp
out TCNT1L, Temp
SelectArray: ;выбор массива
andi ResCnt,0b00000011 ;отсечка лишних разрядов сч. сбросов
cpi ResCnt,0 ;сравнение счетчика сбросов с конст.
brne Tst1 ;если не равно - след. проверка
ldi ZH,High(Array0*2) ;загрузка начального адреса массива
ldi ZL,Low(Array0*2)
rjmp ReadArray
Tst1: cpi ResCnt,1
brne Tst2
ldi ZH,High(Array1*2)
ldi ZL,Low(Array1*2)
rjmp ReadArray
Tst2: cpi ResCnt,2
brne Tst3
ldi ZH,High(Array2*2)
ldi ZL,Low(Array2*2)
rjmp ReadArray
Tst3: ldi ZH,High(Array3*2)
ldi ZL,Low(Array3*2)
rjmp ReadArray
ReadArray:
ldi Temp,0 ;прибавление относит. адреса
add ZL,Temp2
adc ZH,Temp
lpm ;загрузка из ПЗУ
mov Temp,R0 ;копирование в РОН
cpi Temp,0 ;пороверка на нулевой элемент
breq Init ;если нулевой - в начало
inc Temp2 ;увеличение относит адреса на 1
rjmp Output ;перейти на вывод в порт
Init: ldi Temp2,0 ;загрузить нач. значение
rjmp SelectArray
Output: out PortB,Temp ;вывод в порт
reti ;выход из обработчика
Array0:
.db 0b10000000,0b01000000
.db 0b00100000,0b00010000
.db 0b00001000,0b00000100
.db 0b00000010,0b00000001
.db 0,0
Array1:
.db 0b00000001,0b00000010
.db 0b00000100,0b00001000
.db 0b00010000,0b00100000
.db 0b01000000,0b10000000
.db 0,0
Array2:
.db 0b10000001,0b01000010
.db 0b00100100,0b00011000
.db 0b00100100,0b01000010
.db 0,0
Array3:
.db 0b10000000,0b01000000,0b00100000,0b00010000
.db 0b00001000,0b00000100,0b00000010,0b00000001
.db 0b00000010,0b00000100,0b00001000,0b00010000
.db 0b00100000,0b01000000
.db 0,0Можно ли написать код в ТАКОМ виде? Или существует более правильный/рациональный вид?
Подскажите плиз начинающему как выйти из прерывания
в нужное место кода по условию , т.е. условие выполнено
выходим на определенное место, не выполнено возвращаемся
из прерывания как обычно...
возможно ли такое вообще?
в нужное место кода по условию , т.е. условие выполнено
выходим на определенное место, не выполнено возвращаемся
из прерывания как обычно...
возможно ли такое вообще?
Использовать таймер с компаратором. Меняя значение компаратора, будете менять период следования прерываний от таймера, соответственно - частоту. В обработчике тупо дёргаем ногой и получаем меандр.xkp писал(а):возможно. но все же как замяукать аппаратный генератор?
Всё очень просто )
Возможно, если есть доступ к стеку возврата. Только я бы не советовал делать подобные манипуляции, т.к. глюк обеспечен на 99.9%.возможно ли такое вообще?
Код: Выделить всё
brne MET1
ldi temp,RAMEND возвращаем вершину стека ( это для 2313)
out SPL,temp
push ZL Сохраняем адрес подпрограммы (обычно ее метку) в которую хотим попасть
push ZH
reti Попадаем , да и обратите внимание на SREG , возможно его надо будет почисть если Ваша программа начинается с команд проверяющие флаги
MET1:
retiалекс, я пока не совсем коректно понял, а это обеспечит достаточно точные показания частоты? нужно от 1 кГц до 30 кГц с шагом 50 Гц
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Точность, как Вам уже сказали выше, будет зависеть от частоты тактирования таймера, которым реализуете частоту. Чем выше частота - тем выше точность.


