Обсуждаем контроллеры компании Atmel.
Ответить

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

Вт янв 29, 2019 16:51:45

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

По коду. Херь какая-то.

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

Ср янв 30, 2019 18:26:55

Подскажите, как правильно организовать спящий режим во время работы АЦП в 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

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

Чт янв 31, 2019 05:31:05

Как вариант
Спойлер
Код:
;
.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

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

Чт янв 31, 2019 07:59:38

интересно, а что может мешать работе АЦП?

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

Чт янв 31, 2019 18:12:14

У меня в двух младших битах числа нестабильно фиксируются. Прочитал, что это может быть результат помехи от АЛУ и др. периферии

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

Чт янв 31, 2019 22:08:08

Сначала проверьте качество разводки AGND, фильтрацию AVCC потом уже АЛУ...

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

Пт фев 01, 2019 05:39:52

Согласен. Я проверяю программу на самодельном отладочном устройстве, где на выводы AVcc и AREF соединены вместе и подключены к +5V через дроссель 10 мкГн. К обоим концам дросселя подпаяны конденсаторы по 0,1 мкФ на общий вывод. А вот печатная плата отладчика односторонняя и дорожки с подводом питания к АЦП относительно длинные. Сейчас делаю печатную плату из двухстороннего фольгированного стеклотекстолита с другой разводкой дорожек (более короткой длиной) Верхний слой фольги печатной платы оставлю в качестве экрана.

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

Пт фев 01, 2019 07:36:31

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

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

Пт фев 01, 2019 07:50:27

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

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

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

Пт фев 01, 2019 09:29:22

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

Недавно тоже испытал такое. Помогла установка после некоторых команд небольших (10мсек) задержек или просто nop-ов.

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

Пт фев 01, 2019 09:54:27

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

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

Пт фев 01, 2019 10:13:37

Для повышения стабильности значений АЦП сделан специальный режим сна
ADC Noise Reduction
, когда тактирование ядра, портов ввода-вывода останавливается и обслуживаются только разрешенные прерывания.
СпойлерИзображение
Вложения
ADC_NOISE.PNG
(66.23 KiB) Скачиваний: 420

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

Пт фев 01, 2019 10:40:34

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

Определиться бы для начала - насколько точные значения нужны? Для чего?

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

Пт фев 01, 2019 11:11:13

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

Извините, 10мксек (код в сети готовый Delay10us).
Экспериментирую с большими tft диплеями, вот если чтото не допишет, а бывает и проглотит, то на дисплее сразу отражается.

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

Пт фев 01, 2019 18:23:54

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

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

Добавлено after 1 minute 20 seconds:
...нестабильно фиксируются...

Определиться бы для начала - насколько точные значения нужны? Для чего?

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

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

Пт фев 01, 2019 19:08:52

Переменником ловить треть градуса... Однако... Может проще взять многооборотный? Опять же всё зависит от преследуемой цели.

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

Пт фев 01, 2019 19:36:30

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


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

Да, если вы в процессе работы с АЦП переключаете каналы или источник опорного напряжения то после переключения и перед измерением надо выдержать паузу, иначе будет мусор - например зависимость от напряжения на предыдущем канале!

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

Пт фев 01, 2019 19:53:33

Что и есть 2 младших разряда. В любом случае рекомендуется два младших разряда отсекать.
И, судя по задаче, они и не нужны. Вполне достаточно 8-ми разрядов.
Короче - "опыт, сын ошибок трудных"(с) или по-русски - нам главное не сделать, нам главное - зае...аться.

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

Пт фев 01, 2019 20:53:33

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

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

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

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

Сб фев 02, 2019 06:40:26

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