
Ассемблер (ASM) для AVR в вопросах и ответах
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Все. все. Разобрался. СПасибо за поддержку. 

Станислав
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вот тут недавно у человека Flash.#13 была проблема с ацп. Так вот у меня тоже такая проблема появилась.
При быстром переключении каналов adc0 и adc1, с интервалом 80 мкс считывалось что то среднее между напряжениями на 1и0 входе, а так же оба входных напряжения влияли не на своих измерениях . Кварц 16м, тактирование ацп fclk/2.
Вот такая дурацкая конструкция решила проблему.
При убирании псоледних 3 строчек влияние каналов друг на друга остается, но становится чуть слабее.
В даташите сказано что после инструкци sbi adcsra,6 мультиплексор переключается и происходит измерение. Не успевает заряжаться емкость? у меня низкоомные цепи, с выхода операционников прям на вход контроллера через 680 ом.
Ладно в первый раз не дозарядилась, но на втором измерении почему опять пролезает помеха с соседнего канала. Что то скорее всего с мультиплексором.
как то заработало и ладно. Но неприятно тратить время на такую ерунду.
При быстром переключении каналов 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 ом.
Ладно в первый раз не дозарядилась, но на втором измерении почему опять пролезает помеха с соседнего канала. Что то скорее всего с мультиплексором.
как то заработало и ладно. Но неприятно тратить время на такую ерунду.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
то есть вы запустили АЦП на частоте 8 МГц и удивляетесь, что получили не очень хороший результат?! это в то время, как даташит рекомендует не более 200 кГц для качества, ну и в крайнем случае до 1 МГц можно дотянуть...
говорите, жалко время тратить? не потратили его на чтение даташита - потратили на борьбу с тенью...
говорите, жалко время тратить? не потратили его на чтение даташита - потратили на борьбу с тенью...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Коты!
Небольшой вопрос по использованию директив условной компиляции...
Вот, если такая конструкция, где условия не выполняется (R_Wport == 1), значит он не будет мне при компиляции вставлять вызов задержки?
Код: Выделить всё
.if R_Wport == 0
rcall DELAY_102
.endifВот, если такая конструкция, где условия не выполняется (R_Wport == 1), значит он не будет мне при компиляции вставлять вызов задержки?
Станислав
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
не будет. только R_Wport должно быть константой
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А если у меня
.equ R_Wport = PORTD
Разобрался... ТАк не работает.
.equ R_Wport = PORTD
Разобрался... ТАк не работает.
Станислав
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Попробую на 1 мгц. Мне нужно разрешение 8 бит и невысокая точность будет достаточна. Главное чтобы быстро,и с других каналов не было влияния.
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Кстати, несколько раз скачивал из Сети разнообразные асмовые проекты и обратил внимание. Очень часто в асмовом тексте встречается строчка, допустим, для Меги-8:
.include "m8h.inc"
и в архивчике с проектом - сам файлик m8h.inc
А я, когда еще только осваивал АВР Студию и асм, в первой же програмке, не задумываясь, "пошел на поводу" у своего Сишного "автопилота" и написал .include <m8h.inc> и ни разу не удивился, когда Студия сама без вопросов нашла этот файлик в своиих библиотеках .inc- и .h-файлов. То есть, Студия работает с асмовскими .include точно так же, как и с Сишными #include - если аргумент в кавычках, файл ищется в папке проекта, если в угловых скобках - в библиотеках Студии.
Кто не знал - рекомендую, а такие, судя по скачанным проектам, встречаются...
.include "m8h.inc"
и в архивчике с проектом - сам файлик m8h.inc
А я, когда еще только осваивал АВР Студию и асм, в первой же програмке, не задумываясь, "пошел на поводу" у своего Сишного "автопилота" и написал .include <m8h.inc> и ни разу не удивился, когда Студия сама без вопросов нашла этот файлик в своиих библиотеках .inc- и .h-файлов. То есть, Студия работает с асмовскими .include точно так же, как и с Сишными #include - если аргумент в кавычках, файл ищется в папке проекта, если в угловых скобках - в библиотеках Студии.
Кто не знал - рекомендую, а такие, судя по скачанным проектам, встречаются...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
сделал тактирование 1 мгц, выкинул дурацкую конструкцию с 3 стартами ацп, все работает но теперь ждать около 13-15 мкс завершния. Похоже ограничения в мультиплексоре, и быстрее 6 мкс не переключается .
- Flash.#13
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Сб апр 12, 2014 23:46:03
- Откуда: Киев
Re: Ассемблер (ASM) для AVR в вопросах и ответах
*скрыто* писал(а):сделал тактирование 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?
А на АТМЕГА16 и выше работает команда rcall и rjmp?
Станислав
- Pink-Pank
- Опытный кот
- Сообщения: 721
- Зарегистрирован: Ср июн 11, 2014 09:43:13
- Откуда: США
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
работают. только помимо них есть еще альтернативные команды с большим диапазоном охватываемых адресов.
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 в вопросах и ответах
Это уже не смешно! Запустить хардварный ШИМ не удается, зато нормально работает программный:
И на осциллографе сразу лезет прямоуголка. Но использовать прерывания для организации ШИМ'а не круто...((
Код: Выделить всё
...
.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 в вопросах и ответах
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 в вопросах и ответах
СКАЗОЧНИК писал(а):Flash.#13 писал(а):Запустить хардварный ШИМ не удается
А какой у вас МК?
Там вроде тоже надо прерывания по ШИМ разрешать, гляньте в даташите таблицу прерываний на ваш МК, может там есть что-то похожее на OCR2??
З.Ы могу гнать..
гнать не надо
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Flash.#13 писал(а):Atmega8, в мануале все норм, а ШИМ не идет...
Тупо конечно, но покнопаю софтово, куда тут денешься((
Установите режим FastPWM, а не NORMAL.
WGM21 WGM20 в единицу установите.
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Еще вопрос мучает меня.
Вот эта конструкция - массив. В какой очередности идут элементы? Слева направо, а дальше вторая строка с лева на право и т.д.? Является ли это все одним массивом? Смотрел в памяти, все элементы идут друг за другом. Т.е. их можно использовать с помощью команды загрузки из программной памяти с пост-инкрементом (LPM)?
И еще.
Команда эта (LPM) с пост-инкрементом загружает также очередное значение в R0, кроме того регистра, куда мне надо. Вот здесь можно увидеть:
В таком случае будет ли каждый элемент также загружатся в R0?, т.е. если я проверю этот R0, там должно быть тоже самое, что только что записалось в R18?
Спойлер
Код: Выделить всё
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?
Станислав
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Нет, команда
загружает в R18 содержимое памяти программ из евоного адреса. При чём тут R0?
Код: Выделить всё
lpm R18, Z+ ; Загружаем этот элемент в регистр Р18