Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Благодарю за помощь, убрал директиву .cseg и все заработало.
- Реклама
- Coldheart
- Прорезались зубы
- Сообщения: 244
- Зарегистрирован: Пт сен 10, 2010 20:39:32
- Откуда: Украина Луганская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Контроллер Тини2313, хочу управлять ШИМом нажатием кнопок, скважность мешьше, больше на обеих каналах.
Значит моделирую в Шпротеусе, все работает отлично! Заливаю в реальный контроллер - не работает.
На ножках OC1A, OC1B, тишина и покой. Что может быть?
Значит моделирую в Шпротеусе, все работает отлично! Заливаю в реальный контроллер - не работает.
На ножках OC1A, OC1B, тишина и покой. Что может быть?
Спойлер
Код: Выделить всё
.include "tn2313def.inc"
.dseg
.cseg
ldi r16,low(ramend) ;Настрпойка стека
out SPL,r16
ldi R16,0b11111111 ; Все порты на выход, на PD0, PD1 кнопки
out DDRB,R16
ldi R16,0b11111100
out DDRD,R16
ldi R16,0b01010001 ; Выставляем для обоих каналов ШИМ режим
; вывода ОС** сброс при совпадении.
out TCCR1A,R16 ; COM1A = 10 и COM1B = 10
ldi R16,0b00000010 ; Также ставим режим FAST PWM 8bit WGM = 0001
out TCCR1B,R16 ; Предделитель clk/8 CS = 010
ldi r16,254 ; Присваиваем r16 ШИМ больше 99%
ldi r17,0
OUT OCR1AH,R17
OUT OCR1AL,R16 ; Отправляем на A-канал
OUT OCR1BH,R17
OUT OCR1BL,R16 ; Отправляем на Б-канал
P:
in r22,pinD
ldi r18, 3 ; задержка 500 мкс
ldi r19, 152
L1: dec r19
brne L1
dec r18
brne L1
nop
sbrs r22,0 ; проверяем кнопку PD0
rcall stt ; если нажата - уходим на STT
sbrs r22,1 ; проверяем кнопку PD1
rcall bdd ; если нажата - уходим на BDD
OUT OCR1AL,R16 ; отправляем на регистры сравнения
OUT OCR1BL,R16
rjmp P
stt:
inc r16 ; увелличим
ret
bdd:
dec r16 ; уменьшим
ret
.eseg- Вложения
-
- TN2313_PWM.rar
- (13.82 КБ) 143 скачивания
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Конфигурацию верно установил? тактовая частота есть?
- Coldheart
- Прорезались зубы
- Сообщения: 244
- Зарегистрирован: Пт сен 10, 2010 20:39:32
- Откуда: Украина Луганская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Alexeyslav писал(а):Конфигурацию верно установил? тактовая частота есть?
На счет железа! Все верно 100%, добавляю в цикл => sbi portD,2 => повторно задержку => cbi portD,2
Ножка PD2 дергается как и положено! И в Протеусе, и в реальном контроллере!
Фьюзы пересмотрел, вроде отвечающие за запрет-разрешение ШИМ не бывает.
- Coldheart
- Прорезались зубы
- Сообщения: 244
- Зарегистрирован: Пт сен 10, 2010 20:39:32
- Откуда: Украина Луганская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
хМ изменил COM1A и COM1B с 01 на 10,
Все заработало! СтранННоо!
В любом случае - маленькая победа! УРаа! 4 дня бился над ней гадиной!
Все заработало! СтранННоо!
В любом случае - маленькая победа! УРаа! 4 дня бился над ней гадиной!
- Реклама
Re: Ассемблер (ASM) для AVR в вопросах и ответах
У реальной кнопки имеется дребезг контактов как при нажатии, так и при отпускании + такая бяка как "повторное выполнение директивы" (если не организовано: прием/исполнение задания по нажатию с запретом слежующего задания до полного отпускания)


Re: Ассемблер (ASM) для AVR в вопросах и ответах
Начал разбираться с таймерами по вашему сайту. Как код от сюда:
http://radiokot.ru/start/mcu_fpga/avr/11/
Как его переписать для AtMega16? Сами таймеры.
Если в статье мы выбрали:
Timer1_comp1 - прерывание компаратора 1-го таймера
То в меге16 их два:
TIMER1 COMPA
TIMER1 COMPB
Так же там больше таймеров то есть начало будет другим:
Тут еще интересней Студия воспринимает ADC как команду вот здесь:
Еще вроде тут надо менять:
Вроде на это по даташиту:
Вот из этого ничего не получается из-за ADC, а если ADC вообще не писать то программа не работает. Что скажете?
http://radiokot.ru/start/mcu_fpga/avr/11/
Как его переписать для AtMega16? Сами таймеры.
Если в статье мы выбрали:
Timer1_comp1 - прерывание компаратора 1-го таймера
То в меге16 их два:
TIMER1 COMPA
TIMER1 COMPB
Так же там больше таймеров то есть начало будет другим:
Код: Выделить всё
jmp RESET ; Reset Handler
jmp EXT_INT0 ; IRQ0 Handler
jmp EXT_INT1 ; IRQ1 Handler
jmp TIM2_COMP ; Timer2 Compare Handler
jmp TIM2_OVF ; Timer2 Overflow Handler
jmp TIM1_CAPT ; Timer1 Capture Handler
jmp TIM1_COMPA ; Timer1 CompareA Handler
jmp TIM1_COMPB ; Timer1 CompareB Handler
jmp TIM1_OVF ; Timer1 Overflow Handler
jmp TIM0_OVF ; Timer0 Overflow Handler
jmp SPI_STC ; SPI Transfer Complete Handler
jmp USART_RXC ; USART RX Complete Handler
jmp USART_UDRE ; UDR Empty Handler
jmp USART_TXC ; USART TX Complete Handler
jmp ADC ; ADC Conversion Complete Handler
jmp EE_RDY ; EEPROM Ready Handler
jmp ANA_COMP ; Analog Comparator Handler
jmp TWSI ; Two-wire Serial Interface Handler
jmp EXT_INT2 ; IRQ2 Handler
jmp TIM0_COMP ; Timer0 Compare Handler
jmp SPM_RDY ; Store Program Memory Ready Handler
Тут еще интересней Студия воспринимает ADC как команду вот здесь:
Код: Выделить всё
;RESET: ; Reset Handler
EXT_INT0: ; IRQ0 Handler
EXT_INT1: ; IRQ1 Handler
TIM2_COMP: ; Timer2 Compare Handler
TIM2_OVF: ; Timer2 Overflow Handler
TIM1_CAPT:; Timer1 Capture Handler
;TIM1_COMPA: ; Timer1 CompareA Handler
TIM1_COMPB: ; Timer1 CompareB Handler
TIM1_OVF: ; Timer1 Overflow Handler
TIM0_OVF: ; Timer0 Overflow Handler
SPI_STC: ; SPI Transfer Complete Handler
USART_RXC: ; USART RX Complete Handler
USART_UDRE: ; UDR Empty Handler
USART_TXC: ; USART TX Complete Handler
ADC: ; ADC Conversion Complete Handler
EE_RDY: ; EEPROM Ready Handler
ANA_COMP: ; Analog Comparator Handler
TWSI: ; Two-wire Serial Interface Handler
EXT_INT2: ; IRQ2 Handler
TIM0_COMP: ; Timer0 Compare Handler
SPM_RDY: ; Store Program Memory Ready Handler
reti
Еще вроде тут надо менять:
Код: Выделить всё
ldi Temp,0b01000000 ;разрешить прерывание компаратора
out TIMSK,Temp
Вроде на это по даташиту:
Код: Выделить всё
ldi temp,0b00010000
out TIMSK,temp
Вот из этого ничего не получается из-за ADC, а если ADC вообще не писать то программа не работает. Что скажете?
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А если ADC дать другое имя, например ADC_Comp или еще как нибудь, не пробовали?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ошибок нет, но программа не работает.
Все работает:) Появился другой вопрос: В чем отличие
TIMER1 COMPA
TIMER1 COMPB
При использовании TIMER1 COMPA
все работает
При использовании TIMER1 COMPB
нет
Все работает:) Появился другой вопрос: В чем отличие
TIMER1 COMPA
TIMER1 COMPB
При использовании TIMER1 COMPA
все работает
При использовании TIMER1 COMPB
нет
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Начнем с того, что вектор равен одному слову (два байта) а команда JMP adr... занимает... аж 4 байта!
Нормальные кошенята там ставят RJMP...
Да и пользоваться имеющимися в m16def.inc табличками тоже не помешало бы... но то на любителя...
Нормальные кошенята там ставят RJMP...
Да и пользоваться имеющимися в m16def.inc табличками тоже не помешало бы... но то на любителя...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Понятно, спасибо!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Уже не раз обсуждалось как правильно объявлять вектора прерываний.
Посмотри, например, вот тут viewtopic.php?f=20&t=72364
Посмотри, например, вот тут viewtopic.php?f=20&t=72364
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Chelovek писал(а):Тут еще интересней Студия воспринимает ADC как команду
Угу, я эту метку заменяю на iADC. Ссылку на viewtopic.php?f=20&t=72364 тут уже привели, я там внес дополнение в конце, на мой взгляд так удобнее всего, один раз проработать раздел даташита о векторах и потом всегда этим пользоваться. Я, впрочем, еще прорабатываю и остальные таблицы из даташита, многие вещи в оригинале весьма неудобны, напимер, запись ADPDF128 гораздо понятнее, чем 1<<ADPS2|1<<ADPS1|1<<ADPS0.
Поэтому я дополнил свой заголовочный файл вот таким кодом:
Код: Выделить всё
.equ ADCEna =0x80
.equ ADCStart =0x40
.equ ADCAuto =0x20
.equ ADCIntFlg =0x10
.equ ADCIntEna =0x08
; Биты [2:0] - управление прескалером
.equ ADPDF2 =1 ; ADC Prescaler = CLK / 2
.equ ADPDF4 =2 ; ADC Prescaler = CLK / 4
.equ ADPDF8 =3 ; ADC Prescaler = CLK / 8
.equ ADPDF16 =4 ; ADC Prescaler = CLK / 16
.equ ADPDF32 =5 ; ADC Prescaler = CLK / 32
.equ ADPDF64 =6 ; ADC Prescaler = CLK / 64
.equ ADPDF128 =7 ; ADC Prescaler = CLK / 128
Я, кстати, обновил тот файлик, который приложен к вышеуказанной страничке. Напомитаю, это только для 8-й Меги, для других контроллеров, если нужно, берем даташит и сочиняем сами.
Последний раз редактировалось afz Вт мар 19, 2013 05:18:22, всего редактировалось 2 раза.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Можете посоветовать что-нибудь про ШИМ? Лучше с примером, так разобраться легче. Что он собой представляет я в общих чертах понял, а как программно организовать что-то нет. Только в Google не отправляйте 
- Coldheart
- Прорезались зубы
- Сообщения: 244
- Зарегистрирован: Пт сен 10, 2010 20:39:32
- Откуда: Украина Луганская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Chelovek писал(а):Можете посоветовать что-нибудь про ШИМ? Лучше с примером, так разобраться легче. Что он собой представляет я в общих чертах понял, а как программно организовать что-то нет. Только в Google не отправляйте
Сообщение за Вт мар 12, 2013 10:10:28, просмотрите.
Регистры TCCR1A и TCCR1B здесь правят бал... Открываем даташит, настраиваем по вкусу и запускаем.
Для 8-битного ШИМ TCCR0A и TCCR0B соответственно.
http://easyelectronics.ru/avr-uchebnyj- ... -shim.html
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Был я там
Только вот с кодом не разобрался.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Программный ШИМ моими когтями нашкрябаный.
с примером и тестовой программкой мигалкина
проект nv8_avr - стандартная версия ( 8 каналов 256 градаций + мультиплексирование выхода 2 из 8 );
проект nv8b_avr - на основе BAM ( 8 каналов 256 градаций + мультиплексирование выхода 2 из 8 ).

с примером и тестовой программкой мигалкина
проект nv8_avr - стандартная версия ( 8 каналов 256 градаций + мультиплексирование выхода 2 из 8 );
проект nv8b_avr - на основе BAM ( 8 каналов 256 градаций + мультиплексирование выхода 2 из 8 ).

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вопрос о реализации обмена данными по однопроводному интерфейсу RXD , TXD соеденены.
Идет запрос на комп . комп отвечает на запрос . контролер 2313 принимает ответ
;Start Comunicate:
;0x81 0x10 0xF1 0x81 0x03 - было передано контроллером
;Answ:
;0x83 0xF1 0x10 0xC1 0xEF 0x8F 0xC3 - было передано терминальной програмой
но контроллер принял 0x81
Идет запрос на комп . комп отвечает на запрос . контролер 2313 принимает ответ
;Start Comunicate:
;0x81 0x10 0xF1 0x81 0x03 - было передано контроллером
;Answ:
;0x83 0xF1 0x10 0xC1 0xEF 0x8F 0xC3 - было передано терминальной програмой
но контроллер принял 0x81
- Вложения
-
- listing.asm
- Листинг
- (5.09 КБ) 345 скачиваний
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Несоответствие скорости передачи? Биты ошибок приема случайно не светятся?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
При несоответствии скорости терминальная программа на компе не ответила
Комп стабильно отвечает на запросы контроллера - что видно из логов терминальной программы на компе
Где-то ошибка в приеме на контролере 0X81 это эхо от предыдущей посылки
FE=0 & OR=0 биты - у меня скорость обмена 10400 бод частота кварца 10260 кНz
при такой частоте кварца контроллер должен успевать принимать
Комп стабильно отвечает на запросы контроллера - что видно из логов терминальной программы на компе
Где-то ошибка в приеме на контролере 0X81 это эхо от предыдущей посылки
FE=0 & OR=0 биты - у меня скорость обмена 10400 бод частота кварца 10260 кНz
при такой частоте кварца контроллер должен успевать принимать


