Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
01.11.2011, 13:25
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
|
Глюк АЦП ATmega128
Столкнулся с непонятным глюком.
АЦП считывает чепуху. Опора - внутреняя, AVCC = 5В.
Источник сигнала - повторитель.
Еще веселей стало, когда я настроил входной канал "0В(GND)", и получил тоже чепуху вместо 0. Значит - код. Но он-то должен работать
PHP код:
|
#define ADC_REF_AREF ((0‹‹REFS1)|(0‹‹REFS0))
#define ADC_REF_AVCC ((0‹‹REFS1)|(1‹‹REFS0))
#define ADC_REF_UNDEF ((1‹‹REFS1)|(0‹‹REFS0))
#define ADC_REF_INT ((1‹‹REFS1)|(1‹‹REFS0))
#define ADC_CH_MAIN (0)
#define ADC_CH_BGR (0x1E)
#define ADC_CH_GND (0x1F)
|
PHP код:
|
void tADC::Init (unsigned char cfg)
{
ADMUX = cfg;
}
signed int tADC::Read(unsigned char ch)
{
Word adc_val;
ADMUX &= ~0x1F;
ADMUX |= ch;
ADCSRA| =(1‹‹ADSC);
while (ADCSRA&(1‹‹ADSC));
adc_val.Bytes.Low.uchar = ADCL;
adc_val.Bytes.High.uchar = ADCH;
return adc_val.sint;
}
|
PHP код:
|
ADconverter.Init(ADC_REF_INT);
/*-------------------*/
adresult = ADconverter.Read (ADC_CH_GND);
|
__________________
Sex, Druggs, Rock&Roll
|
|
|
Сказали "Спасибо" alberio
|
|
|
01.11.2011, 14:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Глюк АЦП ATmega128
Скорее всего, проблема с переменной Word adc_val, это же структура, надо ее объявить как глобальную переменную и работать по ссылке или отметить как static, так как после выхода из функции временная переменная теряется.
Последний раз редактировалось nonamedov; 01.11.2011 в 14:27.
|
|
|
Сказали "Спасибо" nonamedov
|
|
|
01.11.2011, 14:32
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
|
Re: Глюк АЦП ATmega128
она не должна быть глобальной, используется чтоб "слепить вкучу" ADCL и ADCH.
После
PHP код:
|
return adc_val.sint;
|
она мне не нужна.
Да и в этом проблема - отладчиком смотрел - в регистрах ADCL/ADCH чепуха....
__________________
Sex, Druggs, Rock&Roll
|
|
|
Сказали "Спасибо" alberio
|
|
|
01.11.2011, 15:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Глюк АЦП ATmega128
А чему равны ADMUX и ADCSRA и как меняется ch?
|
|
|
Сказали "Спасибо" nonamedov
|
|
|
01.11.2011, 15:21
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
|
Re: Глюк АЦП ATmega128
ADMUX = 0xDF
ADCSRA = 0x80
ch не меняется - постоянно 0x1F
__________________
Sex, Druggs, Rock&Roll
|
|
|
Сказали "Спасибо" alberio
|
|
|
01.11.2011, 15:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Глюк АЦП ATmega128
Думаю, при каждом запуске стоит сбрасывать и бит ADIF.
|
|
|
Сказали "Спасибо" nonamedov
|
|
|
01.11.2011, 15:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Глюк АЦП ATmega128
Его надо сбрасывать при изменение канала (ADMUX), видимо, выборка происходит по каналу ADC0 (после ADMUX &= ~0x1F , который болтается.
|
|
|
Сказали "Спасибо" nonamedov
|
|
|
01.11.2011, 15:44
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
|
Re: Глюк АЦП ATmega128
Абсолютно никакой разницы. И еще в шпротеусе работает как надо, что наталкивает на мысль о железе. Но там нечему быть неправильным. +5 через катушку 1,2 мкГн на AVCC и AREF, емкость 0,1мкФ об землю, +5В есть. Опора - внутренняя. Сигнал - внутренний. Контроллер - новый...
__________________
Sex, Druggs, Rock&Roll
|
|
|
Сказали "Спасибо" alberio
|
|
|
01.11.2011, 15:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Глюк АЦП ATmega128
А по какому каналу происходит выборка?
|
|
|
Сказали "Спасибо" nonamedov
|
|
|
01.11.2011, 15:54
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
|
Re: Глюк АЦП ATmega128
канал ADC0
__________________
Sex, Druggs, Rock&Roll
|
|
|
Сказали "Спасибо" alberio
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
АЦП в ATMega128
|
CMP_SYS |
Микроконтроллеры, АЦП, память и т.д |
5 |
18.02.2011 23:01 |
АЦП на Atmega128
|
Fan79 |
Микроконтроллеры, АЦП, память и т.д |
15 |
16.09.2010 20:40 |
ATmega128 АЦП
|
alberio |
Микроконтроллеры, АЦП, память и т.д |
4 |
05.06.2010 08:07 |
АЦП atmega128 и DTMF
|
4ubaika |
Микроконтроллеры, АЦП, память и т.д |
7 |
23.07.2007 10:11 |
АЦП Atmega128
|
4ubaika |
Микроконтроллеры, АЦП, память и т.д |
0 |
18.03.2007 14:50 |
Часовой пояс GMT +4, время: 03:51.
|
|