Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы с АЦП на ATTiny45
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
J.Bond
Вобщем проблема в следующем. Пользуюсь CodeVisionAVR. В нем автоматически генерируется текст работы с АЦП. При использовании всех 10ти бит АЦП и переменной ADCW на чипе программа работает нормально, но как только ставлю бит ADLAR (левого выравнивания) - после заливки в чип программа сразу перестает работать. Но интересен тот факт, что при симуляции в AVR Studio все работает правильно....
Может поможете советом...
J.Bond
В такой конфигурации вроде работает:
Код
#define ADC_VREF_TYPE 0x00

// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Bipolar Input Mode: Off
// ADC Reverse Input Polarity: Off
// ADC Auto Trigger Source: None
// Digital input buffers on ADC0: On, ADC1: Off, ADC2: Off, ADC3: Off
DIDR0&=0x03;
DIDR0|=0x1C;
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x84;
ADCSRB&=0x5F;

// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}


А в такой ничего не считывает из АЦП:
Код
#define ADC_VREF_TYPE 0x20

// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Bipolar Input Mode: Off
// ADC Reverse Input Polarity: Off
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
// Digital input buffers on ADC0: On, ADC1: Off, ADC2: Off, ADC3: Off
DIDR0&=0x03;
DIDR0|=0x1C;
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x84;
ADCSRB&=0x5F;

// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}


В программе только считываю значение с АЦП в переменную.
Код
while (1)
      {
      // Place your code here
      B=read_adc(0);
      #asm("wdr")      
      }

Так вот такое ощущщение, что при левом выравнивании значение в регистрах АЦП просто не появляется... Может кто сталкивался с таким...
WHALE
пара вопросов:
1.а как вы смогли в avr studio cимулировать работу АЦП с ADKAR?Руками забивая значение ADCW?имхо,это не о чем нескажет.
2.В вашем работающем варианте в фукции read_adc тип возвращаемого значения указан как unsigned char,а возвращает фукция int.
3.Какая версия компилятора.

Я как раз работал с тини25,тоже использовал выравнивание влево и читал 8 разрядов,все работает.
У меня только используетсяся биполярный режим с включенным внутренним опером.
J.Bond
Цитата(WHALE @ Sep 5 2007, 21:03) *
пара вопросов:
1.а как вы смогли в avr studio cимулировать работу АЦП с ADKAR?Руками забивая значение ADCW?имхо,это не о чем нескажет.
2.В вашем работающем варианте в фукции read_adc тип возвращаемого значения указан как unsigned char,а возвращает фукция int.
3.Какая версия компилятора.

Я как раз работал с тини25,тоже использовал выравнивание влево и читал 8 разрядов,все работает.
У меня только используетсяся биполярный режим с включенным внутренним опером.

1.про симуляцию - да, вручную кликая на ADCH и ADCL? Это может сказать только о том, действительно ли программа использует то значение, что мне надо
2.компилятор пропускает несоответствие типов, и причем все работает.
3.CodeVision 1.25.1 AVR Studio V4 4.12

А что за такой биполярный режим?? Чем отличается от обычного??
WHALE
Цитата(J.Bond @ Sep 6 2007, 11:58) *
А что за такой биполярный режим?? Чем отличается от обычного??

ну дык почитайте даташит,там всего несколько абзацев об этом.коротко-ацп работает в дифференциальном режиме и напряжение на инверсном входе считается за 0,те данные идут со знаком
J.Bond
Бум тренировацца на кошках smile.gif
J.Bond
Проблема была в том, что я садил ацп на резет, не выключая его (резет) smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.