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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Все. все. Разобрался. СПасибо за поддержку. :beer:
Станислав
Аватара пользователя
*скрыто*
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн дек 31, 2012 13:16:59

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

Сообщение *скрыто* »

Вот тут недавно у человека Flash.#13 была проблема с ацп. Так вот у меня тоже такая проблема появилась.
При быстром переключении каналов adc0 и adc1, с интервалом 80 мкс считывалось что то среднее между напряжениями на 1и0 входе, а так же оба входных напряжения влияли не на своих измерениях . Кварц 16м, тактирование ацп fclk/2.
Вот такая дурацкая конструкция решила проблему.

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

      sbi adcsra,6            ;
         sbic adcsra,6            ;
         rjmp pc-1               ;
         sbi adcsra,6            ;
         sbic adcsra,6
         rjmp pc-1
         sbi adcsra,6            ;
         sbic adcsra,6
         rjmp pc-1                                  ; (все заняло 6мкс)


При убирании псоледних 3 строчек влияние каналов друг на друга остается, но становится чуть слабее.
В даташите сказано что после инструкци sbi adcsra,6 мультиплексор переключается и происходит измерение. Не успевает заряжаться емкость? у меня низкоомные цепи, с выхода операционников прям на вход контроллера через 680 ом.
Ладно в первый раз не дозарядилась, но на втором измерении почему опять пролезает помеха с соседнего канала. Что то скорее всего с мультиплексором.


adc_inp_sh.jpg
(9.62 КБ) 375 скачиваний


как то заработало и ладно. Но неприятно тратить время на такую ерунду.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

то есть вы запустили АЦП на частоте 8 МГц и удивляетесь, что получили не очень хороший результат?! это в то время, как даташит рекомендует не более 200 кГц для качества, ну и в крайнем случае до 1 МГц можно дотянуть...

говорите, жалко время тратить? не потратили его на чтение даташита - потратили на борьбу с тенью...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Коты! :) Небольшой вопрос по использованию директив условной компиляции...

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

.if R_Wport == 0

         rcall   DELAY_102

.endif

Вот, если такая конструкция, где условия не выполняется (R_Wport == 1), значит он не будет мне при компиляции вставлять вызов задержки?
Станислав
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

А если у меня

.equ R_Wport = PORTD
Разобрался... ТАк не работает. :)))
Станислав
Аватара пользователя
*скрыто*
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн дек 31, 2012 13:16:59

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

Сообщение *скрыто* »

Попробую на 1 мгц. Мне нужно разрешение 8 бит и невысокая точность будет достаточна. Главное чтобы быстро,и с других каналов не было влияния.
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

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

Сообщение afz »

Кстати, несколько раз скачивал из Сети разнообразные асмовые проекты и обратил внимание. Очень часто в асмовом тексте встречается строчка, допустим, для Меги-8:

.include "m8h.inc"

и в архивчике с проектом - сам файлик m8h.inc

А я, когда еще только осваивал АВР Студию и асм, в первой же програмке, не задумываясь, "пошел на поводу" у своего Сишного "автопилота" и написал .include <m8h.inc> и ни разу не удивился, когда Студия сама без вопросов нашла этот файлик в своиих библиотеках .inc- и .h-файлов. То есть, Студия работает с асмовскими .include точно так же, как и с Сишными #include - если аргумент в кавычках, файл ищется в папке проекта, если в угловых скобках - в библиотеках Студии.

Кто не знал - рекомендую, а такие, судя по скачанным проектам, встречаются...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Аватара пользователя
*скрыто*
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн дек 31, 2012 13:16:59

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

Сообщение *скрыто* »

сделал тактирование 1 мгц, выкинул дурацкую конструкцию с 3 стартами ацп, все работает но теперь ждать около 13-15 мкс завершния. Похоже ограничения в мультиплексоре, и быстрее 6 мкс не переключается .
Аватара пользователя
Flash.#13
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Сб апр 12, 2014 23:46:03
Откуда: Киев

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

Сообщение Flash.#13 »

*скрыто* писал(а):сделал тактирование 1 мгц, выкинул дурацкую конструкцию с 3 стартами ацп, все работает но теперь ждать около 13-15 мкс завершния. Похоже ограничения в мультиплексоре, и быстрее 6 мкс не переключается .

У меня была аналогичная проблема, и две страницы назад она описана)) Правда в моем случае минимальное время переключения составило около 160мкс. И задержка вводилась между вторым замером и реальным. Но товарищи говорили что может быть и конструкцией реальной партии камней завода изготовителя. Главное чтобы работало))
_____

Ребята, теперь новая проблема, на сей раз с ШИМ. А точнее с "ОС2" на timer2. Полез в мануалы, написал вот так:

Устанавливаем PortB-3 на выход, ножка ШИМ

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

ldi R16, 0b00001000
out ddrB, R16


Включаем второй таймер, и биты работы "прямого" ШИМ'а, с COM21=1, COM20=0, WGM21 и WGM20 "0"

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

...
ldi R16, 0b00100011   ;задержка 32,для 40кГц,+вкл прямой ШИМ
out TCCR2, R16       ;пуск таймера "ШИМ"


Затем задаю значение в регистр ШИМ'а OCR2:

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

...
ldi R16, 0x80   ;128h половина скважности
out OCR2, R16    ;запись в регистр ШИМ

Вроде все готово, но при этом ШИМ не генерирует колебания на ножке "17" PB3(OC2) с амплитудой 5в...(( Ребята, чего не так?
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Тоже вопрос...
А на АТМЕГА16 и выше работает команда rcall и rjmp?
Станислав
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

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

Сообщение Pink-Pank »

работают. только помимо них есть еще альтернативные команды с большим диапазоном охватываемых адресов.
Fucking static initialization order fiasco
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Pink-Pank писал(а):команды с большим диапазоном охватываемых адресов.

Да, про них знаю, которые не относительные, а просто call и jmp. Просто хотелось быть уверенным, что эти тоже будут работать (для будущего переноса и универсальности кода).
Да ! Спасибо за консультацию.
Станислав
Аватара пользователя
Flash.#13
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Сб апр 12, 2014 23:46:03
Откуда: Киев

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

Сообщение Flash.#13 »

Это уже не смешно! Запустить хардварный ШИМ не удается, зато нормально работает программный:

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

...
.org 3            ;вектор прер. сравнения timer2
rjmp compare                                    ;идти туда
.org 4             ;вектор прер. timer2
rjmp overflow
...
;========ШИМ=============
compare:                   ;счетчик равен заданному числу
cbi PortB,3                 ;пишем "0" на ножке 17 "OC2"
reti                            ;возврат с прерывания
overflow:                   ;счетчик сделал круг и стал на "0"
sbi PortB,3                 ;пишем "1" на ножке 17 "OC2"
reti

И на осциллографе сразу лезет прямоуголка. Но использовать прерывания для организации ШИМ'а не круто...((
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Flash.#13 писал(а):Запустить хардварный ШИМ не удается

А какой у вас МК?
Там вроде тоже надо прерывания по ШИМ разрешать, гляньте в даташите таблицу прерываний на ваш МК, может там есть что-то похожее на OCR2??
З.Ы могу гнать.. ))) У меня уже ночь, пора спать.
Станислав
Аватара пользователя
Flash.#13
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Сб апр 12, 2014 23:46:03
Откуда: Киев

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

Сообщение Flash.#13 »

Atmega8, в мануале все норм, а ШИМ не идет...

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

.equ   INT0addr=$001   ; External Interrupt0 Vector Address
.equ   INT1addr=$002   ; External Interrupt1 Vector Address
.equ   OC2addr =$003   ; Output Compare2 Interrupt Vector Address
.equ   OVF2addr=$004   ; Overflow2 Interrupt Vector Address
.equ   ICP1addr=$005   ; Input Capture1 Interrupt Vector Address
.equ   OC1Aaddr=$006   ; Output Compare1A Interrupt Vector Address
.equ   OC1Baddr=$007   ; Output Compare1B Interrupt Vector Address
.equ   OVF1addr=$008   ; Overflow1 Interrupt Vector Address
.equ   OVF0addr=$009   ; Overflow0 Interrupt Vector Address
.equ   SPIaddr =$00a   ; SPI Interrupt Vector Address
.equ   URXCaddr=$00b   ; USART Receive Complete Interrupt Vector Address
.equ   UDREaddr=$00c   ; USART Data Register Empty Interrupt Vector Address
.equ   UTXCaddr=$00d   ; USART Transmit Complete Interrupt Vector Address
.equ   ADCCaddr=$00e   ; ADC Interrupt Vector Address
.equ   ERDYaddr=$00f   ; EEPROM Interrupt Vector Address
.equ   ACIaddr =$010   ; Analog Comparator Interrupt Vector Address
.equ        TWIaddr =$011     ; Irq. vector address for Two-Wire Interface
.equ   SPMaddr =$012   ; SPM complete Interrupt Vector Address

Тупо конечно, но покнопаю софтово, куда тут денешься((
Последний раз редактировалось Flash.#13 Ср янв 21, 2015 21:00:07, всего редактировалось 1 раз.
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

СКАЗОЧНИК писал(а):
Flash.#13 писал(а):Запустить хардварный ШИМ не удается

А какой у вас МК?
Там вроде тоже надо прерывания по ШИМ разрешать, гляньте в даташите таблицу прерываний на ваш МК, может там есть что-то похожее на OCR2??
З.Ы могу гнать..

гнать не надо :) для аппаратного ШИМ разрешение прерываний не является необходимым условием. Нужно корректно установить биты в регистрах TCCRxA и TCCRxB, и потом задавать какое-нибудь значение в нужном регистре OCR
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

Flash.#13 писал(а):Atmega8, в мануале все норм, а ШИМ не идет...
Тупо конечно, но покнопаю софтово, куда тут денешься((

Установите режим FastPWM, а не NORMAL.
WGM21 WGM20 в единицу установите.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Еще вопрос мучает меня.
Спойлер

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

         USER:   .db   0b00011111,   0b00011111,   0b00000000,   0b00011111,   0b00000000,   0b00000000,   0b00000000,   0b00000000
               .db   0b00011111,   0b00011111,   0b00000000,   0b00011111,   0b00000000,   0b00000000,   0b00000000,   0b00000000
               .db   0b00000000,   0b00011111,   0b00000000,   0b00000000,   0b00000000,   0b00000000,   0b00000000,   0b00000000
               .db   0b00000000,   0b00000000,   0b00000000,   0b00000000,   0b00000000,   0b00000000,   0b00000000,   0b00000000
               .db   0b00000000,   0b00000000,   0b00000000,   0b00000000,   0b00000000,   0b00000000,   0b00000000,   0b00000000
               .db   0b00000000,   0b00000000,   0b00011111,   0b00000000,   0b00000011,   0b00011000,   0b00000000,   0b00000000
               .db   0b00000000,   0b00000000,   0b00011111,   0b00011111,   0b00000011,   0b00011000,   0b00011111,   0b00000000
               .db   0b00001111,   0b00000000,   0b00011111,   0b00011111,   0b00000011,   0b00011000,   0b00011111,   0b00000000

;                     0         1         2         3         4         5         6         7         ; Номер символа

Вот эта конструкция - массив. В какой очередности идут элементы? Слева направо, а дальше вторая строка с лева на право и т.д.? Является ли это все одним массивом? Смотрел в памяти, все элементы идут друг за другом. Т.е. их можно использовать с помощью команды загрузки из программной памяти с пост-инкрементом (LPM)?
И еще.
Команда эта (LPM) с пост-инкрементом загружает также очередное значение в R0, кроме того регистра, куда мне надо. Вот здесь можно увидеть:

Спойлер

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

ldi ZH, high (USER*2)       ; Переходим на нашу таблицу символов на самый первый элемент (точнее нулевой)
               ldi ZL, low (USER*2)

               lpm   R18, Z+               ; Загружаем этот элемент  в регистр Р18
               rcall   DATA_WR            ; Записываем значение из таблицы в память ЖКИ

В таком случае будет ли каждый элемент также загружатся в R0?, т.е. если я проверю этот R0, там должно быть тоже самое, что только что записалось в R18?
Станислав
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Нет, команда

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

 lpm   R18, Z+               ; Загружаем этот элемент  в регистр Р18
загружает в R18 содержимое памяти программ из евоного адреса. При чём тут R0?
Ответить

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