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

Обсуждаем контроллеры компании Atmel.
akl
Друг Кота
Сообщения: 4443
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Там же в DS
BOTTOM Signalize that TCNTn has reached minimum value (zero).

По коду. Херь какая-то.
МКС
Встал на лапы
Сообщения: 147
Зарегистрирован: Чт янв 10, 2013 21:03:18

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

Сообщение МКС »

Подскажите, как правильно организовать спящий режим во время работы АЦП в ATmega8 и самое главное как из него выйти сразу же после окончания однократного преобразования? Вот фрагмент программы:
main:
/
/ ; выполняется программа
/
/

sleep ; здесь надо заснуть, что-бы работе АЦП ничего не мешало

ldi R16, 0b00000000
out ADMUX, R16
ldi R16, 0b11001100
out ADCSRA, R16
; здесь надо проснуться
in XL, ADCL
in XH, ADCH
mov R17, XL
mov R18, XH

sleep ; здесь надо опять заснуть, что-бы работе АЦП ничего не мешало

m7: ldi R16, 0b00000000
out ADMUX, R16
ldi R16, 0b11001100
out ADCSRA, R16
; здесь надо опять проснуться
in XL, ADCL
in XH, ADCH

cp XL, R17
cpc XH, R18
brne main

cp XL, YL
cpc XH, YH

breq main
brlo m3

rcall vpravo
rjmp main

m3: rcall vlevo
rjmp main
akl
Друг Кота
Сообщения: 4443
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Как вариант
Спойлер

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

;
.include "m8def.inc"

.cseg
.org 0

;ВЕКТОР ПРЕРЫВАНИЙ
RESET:
   rjmp initial

.org 0x0E
ADC_COMPLETE:
   in XL, ADCL
   in XH, ADCH

   RET
;*************************************************
initial:
   CLI
   ldi R16,low(RAMEND)
   out SPL,R16
   ldi R16,high(RAMEND)
   out SPH,R16
GO:
   LDI   R16,1<<SE|1<<SM2   ; ADC NOISE
   OUT   MCUCR,R16

   ldi R16, 0b00000000
   out ADMUX, R16

main:
   LDI R16,1<<ADEN|1<<ADSC|1<<ADIE|1<<ADIF|1<<ADPS2 ;/16
   OUT ADCSRA, R16

   SEI
   sleep ; здесь надо заснуть, что-бы работе АЦП ничего не мешало
;   NOP

;ldi R16, 0b00000000
;out ADMUX, R16
;ldi R16, 0b11001100
;out ADCSRA, R16
; здесь надо проснуться
;   in XL, ADCL
;   in XH, ADCH
   mov R17, XL
   mov R18, XH

   SBI   ADCSRA,ADSC

   SEI
   sleep ; здесь надо опять заснуть, что-бы работе АЦП ничего не мешало
;   NOP

m7:
; ldi R16, 0b00000000
;out ADMUX, R16
;ldi R16, 0b11001100
;out ADCSRA, R16
; здесь надо опять проснуться
;in XL, ADCL
;in XH, ADCH

   cp XL, R17
   cpc XH, R18
   brne GO

   cp XL, YL
   cpc XH, YH

   breq GO
   brlo m3

   rcall vpravo
   rjmp GO

m3:
   rcall vlevo
   rjmp GO

VPRAVO:
   RET
VLEVO:
   RET
.EXIT
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

интересно, а что может мешать работе АЦП?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
МКС
Встал на лапы
Сообщения: 147
Зарегистрирован: Чт янв 10, 2013 21:03:18

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

Сообщение МКС »

У меня в двух младших битах числа нестабильно фиксируются. Прочитал, что это может быть результат помехи от АЛУ и др. периферии
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Сначала проверьте качество разводки AGND, фильтрацию AVCC потом уже АЛУ...
МКС
Встал на лапы
Сообщения: 147
Зарегистрирован: Чт янв 10, 2013 21:03:18

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

Сообщение МКС »

Согласен. Я проверяю программу на самодельном отладочном устройстве, где на выводы AVcc и AREF соединены вместе и подключены к +5V через дроссель 10 мкГн. К обоим концам дросселя подпаяны конденсаторы по 0,1 мкФ на общий вывод. А вот печатная плата отладчика односторонняя и дорожки с подводом питания к АЦП относительно длинные. Сейчас делаю печатную плату из двухстороннего фольгированного стеклотекстолита с другой разводкой дорожек (более короткой длиной) Верхний слой фольги печатной платы оставлю в качестве экрана.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Просто соблюдения схемы ещё ндостаточно, нужно соблюсти ещё и топологию на плате. Так чтобы по AGND проводу не шли цифровые токи. На дорожке даже в 1мм шириной миливольты набираются только так!
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

У меня в двух младших битах числа нестабильно фиксируются...

Из даташита:
±2 LSB Absolute Accuracy
Docendo discimus
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

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

Сообщение shonty »

У меня в двух младших битах числа нестабильно фиксируются.

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

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

Сообщение ARV »

shonty писал(а):Помогла установка после некоторых команд небольших (10мсек) задержек или просто nop-ов
если "мсек" это МИЛЛИсекунды, то 10 - это очень много! это очень большая задержка по МК-шным меркам. и тут явно что-то не так в схемотехнике, раз нестабильность показаний лечится таким способом...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
akl
Друг Кота
Сообщения: 4443
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Для повышения стабильности значений АЦП сделан специальный режим сна
ADC Noise Reduction
, когда тактирование ядра, портов ввода-вывода останавливается и обслуживаются только разрешенные прерывания.
СпойлерИзображение
Вложения
ADC_NOISE.PNG
(66.23 КБ) 452 скачивания
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

...нестабильно фиксируются...

Определиться бы для начала - насколько точные значения нужны? Для чего?
Docendo discimus
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

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

Сообщение shonty »

если "мсек" это МИЛЛИсекунды, то 10 - это очень много! это очень большая задержка по МК-шным меркам. .

Извините, 10мксек (код в сети готовый Delay10us).
Экспериментирую с большими tft диплеями, вот если чтото не допишет, а бывает и проглотит, то на дисплее сразу отражается.
МКС
Встал на лапы
Сообщения: 147
Зарегистрирован: Чт янв 10, 2013 21:03:18

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

Сообщение МКС »

Просто соблюдения схемы ещё ндостаточно, нужно соблюсти ещё и топологию на плате. Так чтобы по AGND проводу не шли цифровые токи. На дорожке даже в 1мм шириной миливольты набираются только так!

Наверное стремиться разводить их перпендикулярно друг другу?

Добавлено after 1 minute 20 seconds:
[uquote="МКС",url="/forum/viewtopic.php?p=3560981#p3560981"]...нестабильно фиксируются...

Определиться бы для начала - насколько точные значения нужны? Для чего?[/uquote]
Желательно все 10 бит. Хочу условно разбить угол поворота переменного резистора на 1024 шага (0-300 градусов на 1024 шага)
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Переменником ловить треть градуса... Однако... Может проще взять многооборотный? Опять же всё зависит от преследуемой цели.
Docendo discimus
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Из даташита:
±2 LSB Absolute Accuracy


Нет, это совсем не то - это означает что абсолютная точность АЦП имеет велчину не более +-2 единиц младшего разряда. Это характеризует линейность шкалы. т.е. возми любое значение, сравни код выданный АЦП и реальное напряжение на входе оно отличаться будет не более чем на величину +-2м.р.
а 1м.р. = (опорное напряжение/1024)
----------

Да, если вы в процессе работы с АЦП переключаете каналы или источник опорного напряжения то после переключения и перед измерением надо выдержать паузу, иначе будет мусор - например зависимость от напряжения на предыдущем канале!
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Что и есть 2 младших разряда. В любом случае рекомендуется два младших разряда отсекать.
И, судя по задаче, они и не нужны. Вполне достаточно 8-ми разрядов.
Короче - "опыт, сын ошибок трудных"(с) или по-русски - нам главное не сделать, нам главное - зае...аться.
Docendo discimus
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

нет, +-2 м.р. это когда значение колеблется в диапазоне 500...504 при фактическом 502 а не ДВА БИТА. И вообще абсолютная погрешность не имеет никакого отношения к разрешающей способности.

Желательно все 10 бит. Хочу условно разбить угол поворота переменного резистора на 1024 шага

Если вам надо гарантированные 10 бит, то вам нужен 12-битный АЦП, или вводить некоторую логику, например усреднение выборок по методу подвижного окна. Но в целом значение не будет стоять как вкопаное - будет болтаться туда-сюда.
Недавно делал на ардуине что-то подобное. АЦП работает в потенциометрическом режиме - т.е. потенциометр подключен к выходу опорного напряжения - это гарантирует что АЦП покажет не напряжение на своём входе, а именно положение потенциометра. Так он всеравно мигал младшим разрядом и на светодиодной ленте это было сильно заметно, особенно на малой яркости когда при значении АЦП 8 оно болтается +-1м.р. Так что я сделал ТУПО - если значение АЦП отклоняется от текущего более чем на 4 - перезаписываем текущее, и далее в программе использую эту переменную. Всё. встало как вкопаное. Но появился момент "страгивания" что для обычного потенциометра... боюсь что у него механический момент страгивания и точность позиционирования "с руки" гораздо хуже. Если надо столь точно определять поворот ручки, может стоит использовать инкрементальный энкодер? На базе сенсора от шариковой мышки.
МКС
Встал на лапы
Сообщения: 147
Зарегистрирован: Чт янв 10, 2013 21:03:18

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

Сообщение МКС »

Хорошая идея! Надо попробовать, тогда и АЦП больше не нужен.
Ответить

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