По коду. Херь какая-то.BOTTOM Signalize that TCNTn has reached minimum value (zero).
Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Там же в DS
- Реклама
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
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 в вопросах и ответах
Как вариант
Спойлер
Код: Выделить всё
;
.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
- Модератор
- Сообщения: 19053
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
интересно, а что может мешать работе АЦП?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
У меня в двух младших битах числа нестабильно фиксируются. Прочитал, что это может быть результат помехи от АЛУ и др. периферии
- Реклама
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Сначала проверьте качество разводки AGND, фильтрацию AVCC потом уже АЛУ...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Согласен. Я проверяю программу на самодельном отладочном устройстве, где на выводы AVcc и AREF соединены вместе и подключены к +5V через дроссель 10 мкГн. К обоим концам дросселя подпаяны конденсаторы по 0,1 мкФ на общий вывод. А вот печатная плата отладчика односторонняя и дорожки с подводом питания к АЦП относительно длинные. Сейчас делаю печатную плату из двухстороннего фольгированного стеклотекстолита с другой разводкой дорожек (более короткой длиной) Верхний слой фольги печатной платы оставлю в качестве экрана.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Просто соблюдения схемы ещё ндостаточно, нужно соблюсти ещё и топологию на плате. Так чтобы по AGND проводу не шли цифровые токи. На дорожке даже в 1мм шириной миливольты набираются только так!
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="МКС",url="/forum/viewtopic.php?p=3560981#p3560981"]У меня в двух младших битах числа нестабильно фиксируются...[/uquote]
Из даташита:
Из даташита:
±2 LSB Absolute Accuracy
Docendo discimus
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="МКС",url="/forum/viewtopic.php?p=3560981#p3560981"]У меня в двух младших битах числа нестабильно фиксируются.[/uquote]
Недавно тоже испытал такое. Помогла установка после некоторых команд небольших (10мсек) задержек или просто nop-ов.
Недавно тоже испытал такое. Помогла установка после некоторых команд небольших (10мсек) задержек или просто nop-ов.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
если "мсек" это МИЛЛИсекунды, то 10 - это очень много! это очень большая задержка по МК-шным меркам. и тут явно что-то не так в схемотехнике, раз нестабильность показаний лечится таким способом...shonty писал(а):Помогла установка после некоторых команд небольших (10мсек) задержек или просто nop-ов
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Для повышения стабильности значений АЦП сделан специальный режим сна 
, когда тактирование ядра, портов ввода-вывода останавливается и обслуживаются только разрешенные прерывания.ADC Noise Reduction
Спойлер
- Вложения
-
- ADC_NOISE.PNG
- (66.23 КБ) 456 скачиваний
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="МКС",url="/forum/viewtopic.php?p=3560981#p3560981"]...нестабильно фиксируются...[/uquote]
Определиться бы для начала - насколько точные значения нужны? Для чего?
Определиться бы для начала - насколько точные значения нужны? Для чего?
Docendo discimus
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="ARV",url="/forum/viewtopic.php?p=3561324#p3561324"]если "мсек" это МИЛЛИсекунды, то 10 - это очень много! это очень большая задержка по МК-шным меркам. .[/uquote]
Извините, 10мксек (код в сети готовый Delay10us).
Экспериментирую с большими tft диплеями, вот если чтото не допишет, а бывает и проглотит, то на дисплее сразу отражается.
Извините, 10мксек (код в сети готовый Delay10us).
Экспериментирую с большими tft диплеями, вот если чтото не допишет, а бывает и проглотит, то на дисплее сразу отражается.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="Alexeyslav",url="/forum/viewtopic.php?p=3561275#p3561275"]Просто соблюдения схемы ещё ндостаточно, нужно соблюсти ещё и топологию на плате. Так чтобы по AGND проводу не шли цифровые токи. На дорожке даже в 1мм шириной миливольты набираются только так![/uquote]
Наверное стремиться разводить их перпендикулярно друг другу?
Добавлено after 1 minute 20 seconds:
[uquote="pyzhman",url="/forum/viewtopic.php?p=3561347#p3561347"][uquote="МКС",url="/forum/viewtopic.php?p=3560981#p3560981"]...нестабильно фиксируются...[/uquote]
Определиться бы для начала - насколько точные значения нужны? Для чего?[/uquote]
Желательно все 10 бит. Хочу условно разбить угол поворота переменного резистора на 1024 шага (0-300 градусов на 1024 шага)
Наверное стремиться разводить их перпендикулярно друг другу?
Добавлено after 1 minute 20 seconds:
[uquote="pyzhman",url="/forum/viewtopic.php?p=3561347#p3561347"][uquote="МКС",url="/forum/viewtopic.php?p=3560981#p3560981"]...нестабильно фиксируются...[/uquote]
Определиться бы для начала - насколько точные значения нужны? Для чего?[/uquote]
Желательно все 10 бит. Хочу условно разбить угол поворота переменного резистора на 1024 шага (0-300 градусов на 1024 шага)
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Переменником ловить треть градуса... Однако... Может проще взять многооборотный? Опять же всё зависит от преследуемой цели.
Docendo discimus
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="pyzhman",url="/forum/viewtopic.php?p=3561282#p3561282"]Из даташита:
Нет, это совсем не то - это означает что абсолютная точность АЦП имеет велчину не более +-2 единиц младшего разряда. Это характеризует линейность шкалы. т.е. возми любое значение, сравни код выданный АЦП и реальное напряжение на входе оно отличаться будет не более чем на величину +-2м.р.
а 1м.р. = (опорное напряжение/1024)
----------------
Да, если вы в процессе работы с АЦП переключаете каналы или источник опорного напряжения то после переключения и перед измерением надо выдержать паузу, иначе будет мусор - например зависимость от напряжения на предыдущем канале!
[/uquote]±2 LSB Absolute Accuracy
Нет, это совсем не то - это означает что абсолютная точность АЦП имеет велчину не более +-2 единиц младшего разряда. Это характеризует линейность шкалы. т.е. возми любое значение, сравни код выданный АЦП и реальное напряжение на входе оно отличаться будет не более чем на величину +-2м.р.
а 1м.р. = (опорное напряжение/1024)
----------------
Да, если вы в процессе работы с АЦП переключаете каналы или источник опорного напряжения то после переключения и перед измерением надо выдержать паузу, иначе будет мусор - например зависимость от напряжения на предыдущем канале!
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Что и есть 2 младших разряда. В любом случае рекомендуется два младших разряда отсекать.
И, судя по задаче, они и не нужны. Вполне достаточно 8-ми разрядов.
Короче - "опыт, сын ошибок трудных"(с) или по-русски - нам главное не сделать, нам главное - зае...аться.
И, судя по задаче, они и не нужны. Вполне достаточно 8-ми разрядов.
Короче - "опыт, сын ошибок трудных"(с) или по-русски - нам главное не сделать, нам главное - зае...аться.
Docendo discimus
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
нет, +-2 м.р. это когда значение колеблется в диапазоне 500...504 при фактическом 502 а не ДВА БИТА. И вообще абсолютная погрешность не имеет никакого отношения к разрешающей способности.
Недавно делал на ардуине что-то подобное. АЦП работает в потенциометрическом режиме - т.е. потенциометр подключен к выходу опорного напряжения - это гарантирует что АЦП покажет не напряжение на своём входе, а именно положение потенциометра. Так он всеравно мигал младшим разрядом и на светодиодной ленте это было сильно заметно, особенно на малой яркости когда при значении АЦП 8 оно болтается +-1м.р. Так что я сделал ТУПО - если значение АЦП отклоняется от текущего более чем на 4 - перезаписываем текущее, и далее в программе использую эту переменную. Всё. встало как вкопаное. Но появился момент "страгивания" что для обычного потенциометра... боюсь что у него механический момент страгивания и точность позиционирования "с руки" гораздо хуже. Если надо столь точно определять поворот ручки, может стоит использовать инкрементальный энкодер? На базе сенсора от шариковой мышки.
Если вам надо гарантированные 10 бит, то вам нужен 12-битный АЦП, или вводить некоторую логику, например усреднение выборок по методу подвижного окна. Но в целом значение не будет стоять как вкопаное - будет болтаться туда-сюда.Желательно все 10 бит. Хочу условно разбить угол поворота переменного резистора на 1024 шага
Недавно делал на ардуине что-то подобное. АЦП работает в потенциометрическом режиме - т.е. потенциометр подключен к выходу опорного напряжения - это гарантирует что АЦП покажет не напряжение на своём входе, а именно положение потенциометра. Так он всеравно мигал младшим разрядом и на светодиодной ленте это было сильно заметно, особенно на малой яркости когда при значении АЦП 8 оно болтается +-1м.р. Так что я сделал ТУПО - если значение АЦП отклоняется от текущего более чем на 4 - перезаписываем текущее, и далее в программе использую эту переменную. Всё. встало как вкопаное. Но появился момент "страгивания" что для обычного потенциометра... боюсь что у него механический момент страгивания и точность позиционирования "с руки" гораздо хуже. Если надо столь точно определять поворот ручки, может стоит использовать инкрементальный энкодер? На базе сенсора от шариковой мышки.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Хорошая идея! Надо попробовать, тогда и АЦП больше не нужен.


