Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: atmega32A - ADC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
chu
atmega32A 16MHz, прошивка amforth 5.1
АЦП показывает одно и тоже значение на входе А0, не реагирует на потенциометр. опыта работы с АЦП практически нет.
АЦП настроен - однократные измерения, частота 125 КГц
CODE
> ADMUX c@ .x
60 ok
> ADCSRA c@ .x
87 ok
> ?adc.
amforth 5.1 ATmega32A AD Converter
(ADMUX) ADC Multiplexer Selection Register = 60
Reference Selection Bits=40
AVCC with external capacitor at AREF pin
ADLAR = left adjust
Analog Channel and Gain Selection Bits
Single Ended Input - A0
(ADCSRA) ADC Control and Status Register A =87
ADC turned ON
AD Convertion is complete
single convertion

ADC Interrupt disabled
ADC Prescaler Select Bits= 7
ADC clocks = 125 KHz
ok
>

пин PORTA 0 настроен на вход
в чем я косячу и где порыться? от даташита уже тошнит.

проверил вход А1 - таже хрень
CODE
> ADMUX c@ 1 or ADMUX c!
ok
> ?adc.
amforth 5.1 ATmega32A AD Converter
(ADMUX) ADC Multiplexer Selection Register = 61
Reference Selection Bits=40
AVCC with external capacitor at AREF pin
ADLAR = left adjust
Analog Channel and Gain Selection Bits
Single Ended Input - A1
(ADCSRA) ADC Control and Status Register A =87
ADC turned ON
AD Convertion is complete
single convertion

ADC Interrupt disabled
ADC Prescaler Select Bits= 7
ADC clocks = 125 KHz
ok
> adc-tst
FFC0
FFC0
FFC0
FFC0
FFC0
FFC0
FFC0
FFC0
FFC0
FFC0
FFC0
ok
>

чета лыжи не едут...
Палыч
Цитата(chu @ Apr 23 2013, 21:47) *
где порыться?


Подано ли напряжение питания на AVCC ?
chu
да, есть.
подключил ацп к земле:
CODE
> ADMUX c@ $1f or ADMUX c!
ok
> ?adc.
amforth 5.1 ATmega32A AD Converter
(ADMUX) ADC Multiplexer Selection Register = 7F
Reference Selection Bits=40
AVCC with external capacitor at AREF pin
ADLAR = left adjust
Analog Channel and Gain Selection Bits
0V (GND)
(ADCSRA) ADC Control and Status Register A =87
ADC turned ON
AD Convertion is complete
single convertion

ADC Interrupt disabled
ADC Prescaler Select Bits= 7
ADC clocks = 125 KHz
ok
> adc-tst
FFC0
FFC0
ok
>

тот же перец...
вот чувствую, что-то до безобразия простое...



сбросил ADLAR :
CODE
ok
> ADMUX ADMUX_ADLAR invert over c@ and swap c! ?adc.
amforth 5.1 ATmega32A AD Converter
(ADMUX) ADC Multiplexer Selection Register = 5F
Reference Selection Bits=40
AVCC with external capacitor at AREF pin
ADLAR = right adjust
Analog Channel and Gain Selection Bits
0V (GND)
(ADCSRA) ADC Control and Status Register A =87
ADC turned ON
AD Convertion is complete
single convertion

ADC Interrupt disabled
ADC Prescaler Select Bits= 7
ADC clocks = 125 KHz
ok
> adc-tst
3FF
3FF
3FF
3FF
ok
>

перец теперь в профиль
Палыч
Не понял: старт преобразования выполняется ? Похоже - нет...
chu
выполняется.
не хотел приводить код, потому что для очень многих людей слово Forth является "красной тряпкой для быка"
не хотелось бы, чтобы тема зафлудилась и превратилсь в тролль-бас.
видимо, придется.
запуск преобразования:
Код
: adc-start     ADCSRA    ADCSRA_ADSC over c@ or swap c!;

проверка готовности данных:
Код
: adc-data?     ADCSRA c@ ADCSRA_ADIF and    ;

сброс флага готовности:
Код
: adc-end       ADCSRA    ADCSRA_ADIF over c@ or swap c!;

одно измерение:
Код
: adc?
      adc-start
          begin adc-data? until
      ADC dup c@ swap 1+ c@ 8 lshift +
      adc-end
;

тестирование:
Код
> : adc-tst begin adc? .x cr 500 ms pause key? until key drop ;
ok
> adc-tst
FFC0
FFC0
FFC0
FFC0
FFC0
ok
>



совсем уже "врукопашную"
запуск преодразования
Код
> ADCSRA ADCSRA_ADSC over c@ or swap c!
ok
>

смотрю регистр ADCSRA
Код
> ADCSRA c@ .x
97  ok
>

видно - флаг ADIF (0х10) установлен
читаю регистры данных ацп - младший. старший:
Код
> ADC c@ .x ADC 1+ c@ .x
C0 FF  ok
>

сбрасываю флаг и проверяю:
Код
> adc-end ADCSRA c@ .x
87  ok
>
флаг ADIF сброшен
я понимаю вашу мысль - сомнение в коде.
код работает корректно, я уже обнюхал каждый битик в ацп...
бредовая идея - но попозже "поменяю коня" - прошьюсь в другой (тоже мегу32А) чип...
Палыч
Цитата(chu @ Apr 24 2013, 11:02) *
не хотел приводить код... видимо, придется.

Да-а-а-а... Forth... Тут - я "не взуб ногой"...
Надеюсь, что при запуске преобразования Вы устанавливаете единицу в ADSC не затрагивая другие биты регистра ADCSRA.
При проверке окончания преобразования (готовности АЦП) достаточно контролировать ADSC: единица, записаная при старте, будет "держаться" до окончания преобразования, потом сбросится в ноль - тут-то и можно читать ADC.
На флаг ADIF можно "наплевать". Если будете использовать прерывания - он сам "автоматом" сбросится, а не будете - пусть "телепается", это ничему не повредит.
chu
Цитата(Палыч @ Apr 24 2013, 14:30) *
Да-а-а-а... Forth... Тут - я "не взуб ногой"...

форт тут абсолютно нипричем
Цитата(Палыч)
Надеюсь, что при запуске преобразования Вы устанавливаете единицу в ADSC не затрагивая другие биты регистра ADCSRA.

смотрим, содержимое ADCSRA
Код
> ADCSRA c@ dup .x
87  ok
>

бит ADSC
Код
> ADCSRA_ADSC dup .x
40  ok
>

устанавливаем
Код
> or dup .x
C7  ok
>

пишем "взад"
Код
> ADCSRA c!
ok
>

Цитата(Палыч)
При проверке окончания преобразования (готовности АЦП) достаточно контролировать ADSC: единица, записаная при старте, будет "держаться" до окончания преобразования, потом сбросится в ноль - тут-то и можно читать ADC.

щаз проверим
CODE
> : adc-read ADC c@ ADC 1+ c@ 8 lshift + ;
ok
> : adc-end? ADCSRA c@ ADCSRA_ADSC and 0= ;
ok
> : adc? adc-start begin adc-end? until adc-read ;
ok
> : adc-tst begin adc? .x cr pause 500 ms key? until key drop ;
ok
> adc-tst
FFC0
FFC0
FFC0
FFC0
FFC0
ok
>
chu
еще одна проверка на работоспосбность.
по даташиту - значение регистров данных ацп = 0, после сброса
абсолютно верно - проверил:
Код
> amforth 5.1 ATmega32A 16000 kHz
reset source= 2

> adc-read .x
0  ok
>

где и чего я недогоняю с этим ацп? питание(через LC-фильтр),земля - проверено на стопицот раз.
adc-read - тот же самый, как уже и показывал прежде...
chu
Ха, камарады! лыжы - поехали!
заменил таракана - и все получилось! восторгу - как в первый раз! 08.gif
сразу проверил на "землю" ( adc! - ad channel - установка канала)
CODE
> &31 adc!
ok
> ?adc.
amforth 5.1 ATmega32A AD Converter
*******
(ADMUX) ADC Multiplexer Selection Register = 7F
Reference Selection Bits = 40
AVCC with external capacitor at AREF pin
ADLAR = left adjust
Analog Channel and Gain Selection Bits
0V (GND)
********
(ADCSRA) ADC Control and Status Register A = 87
ADC is turned ON
AD Convertion is complete
single convertion

ADC Interrupt disabled
ADC Prescaler Select Bits = 7 , ADC clocks = 125 KHz
ok
> adc-tst
0
0
0
ok
>

подключил потенциометр, подал питание, включил ацп, покрутил потенциометр:
CODE

> amforth 5.1 ATmega32A 16000 kHz
reset source= 2

> adc+
ok
> ?adc.
amforth 5.1 ATmega32A AD Converter
*******
(ADMUX) ADC Multiplexer Selection Register = 60
Reference Selection Bits = 40
AVCC with external capacitor at AREF pin
ADLAR = left adjust
Analog Channel and Gain Selection Bits
Single Ended Input - A0
********
(ADCSRA) ADC Control and Status Register A = 87
ADC is turned ON
AD Convertion is complete
single convertion

ADC Interrupt disabled
ADC Prescaler Select Bits = 7 , ADC clocks = 125 KHz
ok
> adc-tst
FFC0
FFC0
FFC0
FFC0
F5C0
EDC0
EA80
DC80
89C0
0
0
600
1540
1D00
2580
2680
5540
7F00
A8C0
D600
ok
>

теперь можно и со звуковым сенсором поиграть
а таракана жалка crying.gif


хреновый какой-то сенсор, не впечатлил, возможно я просто не умею его готовить...
поиграюсь еще с потенциометром:
CODE
> cold
amforth 5.1 ATmega32A 16000 kHz
reset source= 0

> adc+
ok
> 1 adc!
ok
> adc-bar.
############################################
############################################
#####################################
##############################
#########################
#######
##
##############
######################
##############################
######################################
##################################################################
#####################################################################
######################################################################
####################################################################
###################################################################
################################################################
########################################################
###############################################
###################################
##########################
##########


##########
######



######
############
#######################
##########################################
#########################################################
########################################################################
ok
>
псевдо графика, аднака.
мда, надо покурить приготовление сенсора звука.
chu
хреновый сенсор звука мне достался.
есть там потенциометр -
Цитата
The potentiometer is used to regulate the gain of the output signal. The larger the potentiometer, the larger the output signal.
выкрутил на максимум - и все равно он плохо слышит, громко жужжу ему прямо в ухо - ацп показывает цифирь, не превышающую 0х300. на минимум - не слышит совсем ничего. кто-нибудь с таким сенсором имел дело? как ему слух наладить? чтобы он метров с 3-4 уверенно фиксировал разговор нормальным голосом. погуглил - схем нет, а своими кривыми руками его колупать я опасаюсь,да (извините) - жалко приборчик.
зы фиксировал - показывал наличие, хотя и запись бы не плохо...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.