реклама на сайте
подробности

 
 
> atmega32A - ADC
chu
сообщение Apr 23 2013, 17:47
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 13-12-07
Пользователь №: 33 246



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
>

чета лыжи не едут...

Сообщение отредактировал IgorKossak - Apr 23 2013, 19:59
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 9)
Палыч
сообщение Apr 24 2013, 05:07
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(chu @ Apr 23 2013, 21:47) *
где порыться?


Подано ли напряжение питания на AVCC ?
Go to the top of the page
 
+Quote Post
chu
сообщение Apr 24 2013, 05:57
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 13-12-07
Пользователь №: 33 246



да, есть.
подключил ацп к земле:
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 - Apr 24 2013, 05:58
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 24 2013, 06:18
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Не понял: старт преобразования выполняется ? Похоже - нет...
Go to the top of the page
 
+Quote Post
chu
сообщение Apr 24 2013, 07:26
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 13-12-07
Пользователь №: 33 246



выполняется.
не хотел приводить код, потому что для очень многих людей слово 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А) чип...
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 24 2013, 07:30
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(chu @ Apr 24 2013, 11:02) *
не хотел приводить код... видимо, придется.

Да-а-а-а... Forth... Тут - я "не взуб ногой"...
Надеюсь, что при запуске преобразования Вы устанавливаете единицу в ADSC не затрагивая другие биты регистра ADCSRA.
При проверке окончания преобразования (готовности АЦП) достаточно контролировать ADSC: единица, записаная при старте, будет "держаться" до окончания преобразования, потом сбросится в ноль - тут-то и можно читать ADC.
На флаг ADIF можно "наплевать". Если будете использовать прерывания - он сам "автоматом" сбросится, а не будете - пусть "телепается", это ничему не повредит.
Go to the top of the page
 
+Quote Post
chu
сообщение Apr 24 2013, 08:02
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 13-12-07
Пользователь №: 33 246



Цитата(Палыч @ 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 - Apr 24 2013, 08:29
Go to the top of the page
 
+Quote Post
chu
сообщение Apr 24 2013, 13:23
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 13-12-07
Пользователь №: 33 246



еще одна проверка на работоспосбность.
по даташиту - значение регистров данных ацп = 0, после сброса
абсолютно верно - проверил:
Код
> amforth 5.1 ATmega32A 16000 kHz
reset source= 2

> adc-read .x
0  ok
>

где и чего я недогоняю с этим ацп? питание(через LC-фильтр),земля - проверено на стопицот раз.
adc-read - тот же самый, как уже и показывал прежде...
Go to the top of the page
 
+Quote Post
chu
сообщение Apr 25 2013, 06:51
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 13-12-07
Пользователь №: 33 246



Ха, камарады! лыжы - поехали!
заменил таракана - и все получилось! восторгу - как в первый раз! 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 - Apr 25 2013, 07:00
Go to the top of the page
 
+Quote Post
chu
сообщение Apr 25 2013, 10:24
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 13-12-07
Пользователь №: 33 246



хреновый сенсор звука мне достался.
есть там потенциометр -
Цитата
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 уверенно фиксировал разговор нормальным голосом. погуглил - схем нет, а своими кривыми руками его колупать я опасаюсь,да (извините) - жалко приборчик.
зы фиксировал - показывал наличие, хотя и запись бы не плохо...

Сообщение отредактировал chu - Apr 26 2013, 04:10
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 04:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01452 секунд с 7
ELECTRONIX ©2004-2016