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

Обсуждаем контроллеры компании Atmel.
trevis
Родился
Сообщения: 2
Зарегистрирован: Вс мар 10, 2013 18:37:03

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

Сообщение trevis »

Благодарю за помощь, убрал директиву .cseg и все заработало.
Реклама
Аватара пользователя
Coldheart
Прорезались зубы
Сообщения: 244
Зарегистрирован: Пт сен 10, 2010 20:39:32
Откуда: Украина Луганская обл.

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

Сообщение Coldheart »

Контроллер Тини2313, хочу управлять ШИМом нажатием кнопок, скважность мешьше, больше на обеих каналах.
Значит моделирую в Шпротеусе, все работает отлично! Заливаю в реальный контроллер - не работает.
На ножках OC1A, OC1B, тишина и покой. Что может быть? :shock:
Спойлер

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

.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 в вопросах и ответах

Сообщение Alexeyslav »

Конфигурацию верно установил? тактовая частота есть?
Аватара пользователя
Coldheart
Прорезались зубы
Сообщения: 244
Зарегистрирован: Пт сен 10, 2010 20:39:32
Откуда: Украина Луганская обл.

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

Сообщение Coldheart »

Alexeyslav писал(а):Конфигурацию верно установил? тактовая частота есть?

На счет железа! Все верно 100%, добавляю в цикл => sbi portD,2 => повторно задержку => cbi portD,2
Ножка PD2 дергается как и положено! И в Протеусе, и в реальном контроллере!
Фьюзы пересмотрел, вроде отвечающие за запрет-разрешение ШИМ не бывает.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Coldheart
Прорезались зубы
Сообщения: 244
Зарегистрирован: Пт сен 10, 2010 20:39:32
Откуда: Украина Луганская обл.

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

Сообщение Coldheart »

хМ изменил COM1A и COM1B с 01 на 10,
Все заработало! СтранННоо!
В любом случае - маленькая победа! УРаа! 4 дня бился над ней гадиной!
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

У реальной кнопки имеется дребезг контактов как при нажатии, так и при отпускании + такая бяка как "повторное выполнение директивы" (если не организовано: прием/исполнение задания по нажатию с запретом слежующего задания до полного отпускания)
:beer:
Реклама
Chelovek
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Пт дек 02, 2011 16:31:40

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

Сообщение Chelovek »

Начал разбираться с таймерами по вашему сайту. Как код от сюда:
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 в вопросах и ответах

Сообщение zero648 »

А если ADC дать другое имя, например ADC_Comp или еще как нибудь, не пробовали?
Chelovek
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Пт дек 02, 2011 16:31:40

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

Сообщение Chelovek »

Ошибок нет, но программа не работает.
Все работает:) Появился другой вопрос: В чем отличие
TIMER1 COMPA
TIMER1 COMPB
При использовании TIMER1 COMPA
все работает
При использовании TIMER1 COMPB
нет
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Начнем с того, что вектор равен одному слову (два байта) а команда JMP adr... занимает... аж 4 байта! :shock:
Нормальные кошенята там ставят RJMP... :tea:
Да и пользоваться имеющимися в m16def.inc табличками тоже не помешало бы... но то на любителя... 8)
Chelovek
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Пт дек 02, 2011 16:31:40

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

Сообщение Chelovek »

Понятно, спасибо!
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

Уже не раз обсуждалось как правильно объявлять вектора прерываний.
Посмотри, например, вот тут viewtopic.php?f=20&t=72364
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

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

Сообщение afz »

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
Аналогично я поступил и с регистром ADMUX, там тоже, вместо не совсем понятных сдвигов стоят вполне понятные (мне) имена входов ADC и источников опорного напряжения. В общем, принцип такой: начинаешь работать с новым для себя камнем - проработай даташит - таблица векторов, регистры тех периферийных компонентов, которые собираешься использовать и т.п. Если что-то осталось неиспользованным, можно будет внести это позже, когда в этом возникнет потребность. Главное - помнить, что основной .inc-файл от Atmel - не догма, а руководство к действию. :-)

Я, кстати, обновил тот файлик, который приложен к вышеуказанной страничке. Напомитаю, это только для 8-й Меги, для других контроллеров, если нужно, берем даташит и сочиняем сами.
Последний раз редактировалось afz Вт мар 19, 2013 05:18:22, всего редактировалось 2 раза.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Chelovek
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Пт дек 02, 2011 16:31:40

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

Сообщение Chelovek »

Можете посоветовать что-нибудь про ШИМ? Лучше с примером, так разобраться легче. Что он собой представляет я в общих чертах понял, а как программно организовать что-то нет. Только в Google не отправляйте :))
Аватара пользователя
Coldheart
Прорезались зубы
Сообщения: 244
Зарегистрирован: Пт сен 10, 2010 20:39:32
Откуда: Украина Луганская обл.

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

Сообщение Coldheart »

Chelovek писал(а):Можете посоветовать что-нибудь про ШИМ? Лучше с примером, так разобраться легче. Что он собой представляет я в общих чертах понял, а как программно организовать что-то нет. Только в Google не отправляйте :))

Сообщение за Вт мар 12, 2013 10:10:28, просмотрите.
Регистры TCCR1A и TCCR1B здесь правят бал... Открываем даташит, настраиваем по вкусу и запускаем.
Для 8-битного ШИМ TCCR0A и TCCR0B соответственно.
http://easyelectronics.ru/avr-uchebnyj- ... -shim.html
Chelovek
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Пт дек 02, 2011 16:31:40

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

Сообщение Chelovek »

Был я там :) Только вот с кодом не разобрался.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Программный ШИМ моими когтями нашкрябаный.
nv8_avr.zip
(91.14 КБ) 151 скачивание
с примером и тестовой программкой мигалкина :write:
проект nv8_avr - стандартная версия ( 8 каналов 256 градаций + мультиплексирование выхода 2 из 8 );
проект nv8b_avr - на основе BAM ( 8 каналов 256 градаций + мультиплексирование выхода 2 из 8 ).
:beer:
FUZZY_
Потрогал лапой паяльник
Сообщения: 390
Зарегистрирован: Чт сен 24, 2009 17:22:51
Откуда: UK

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

Сообщение FUZZY_ »

Вопрос о реализации обмена данными по однопроводному интерфейсу RXD , TXD соеденены.

Идет запрос на комп . комп отвечает на запрос . контролер 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 в вопросах и ответах

Сообщение Alexeyslav »

Несоответствие скорости передачи? Биты ошибок приема случайно не светятся?
FUZZY_
Потрогал лапой паяльник
Сообщения: 390
Зарегистрирован: Чт сен 24, 2009 17:22:51
Откуда: UK

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

Сообщение FUZZY_ »

При несоответствии скорости терминальная программа на компе не ответила

Комп стабильно отвечает на запросы контроллера - что видно из логов терминальной программы на компе

Где-то ошибка в приеме на контролере 0X81 это эхо от предыдущей посылки

FE=0 & OR=0 биты - у меня скорость обмена 10400 бод частота кварца 10260 кНz

при такой частоте кварца контроллер должен успевать принимать
Ответить

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