Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: настройка АЦП Atmega16
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
romanF1
подскажите в чем проблема, включил внутреннее АЦП миктроконтролера Atmega16 с выводом данных на ком порт, не измеряю ничего а результат приходит 1023, что же АЦП регистрирует?
CODE

#include <mega16.h>

#include <delay.h>

// Standard Input/Output functions
#include <stdio.h>

#define ADC_VREF_TYPE 0x00

// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
unsigned int adc_data;
// Read the AD conversion result
adc_data=ADCW;
// Place your code here
printf("ADC=%u \n",adc_data);
ADCSRA|=0x40;
delay_ms(10000);
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: ADC Stopped
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x8B;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// Global enable interrupts
#asm("sei")
ADCSRA|=0x40;
while (1)
{
// Place your code here

delay_ms(100);
}
}
GDI
Опору подайте внешнюю, как Вы в коде включили, или на внутреннюю переключите. Вывод AVCC должен быть подключен к какому-нибудь питанию.
dimka76
У вас выбран для опорного напряжения AREF pin, а на него нпряжение подано?
Включите лучше внутренний опорник.
И частота какая-то странная (уж больно большая ) 1000 кГц.

Оставьте визарды в покое и настраивайте сами по документации на контроллер. Ничего там сложного нет пару регистров настроить.
Если с английским совсем никак, то Евстифеева почитайте.
romanF1
выбирал внутренний источник питания АЦП, AVCC всегда должен быть подключен к питанию?
Maik-vs
Цитата(romanF1 @ Jun 3 2011, 14:45) *
выбирал внутренний источник питания АЦП, AVCC всегда должен быть подключен к питанию?

"Вы играете на скрипке? -- Не пробовал, но думаю, что смогу."
Простите, навеяло.

Документацию всё ж таки надо читать.
Там написано: "AVCC is the supply voltage pin for Port A and the A/D Converter. It should be externally connected
to VCC, even if the ADC is not used. If the ADC is used, it should be connected to VCC
through a low-pass filter.".
И ещё: "AVCC must not differ more than ±0.3 V from VCC"
По слухам, от avcc питается весь порт А.
GDI
Цитата(Maik-vs @ Jun 3 2011, 16:53) *
По слухам, от avcc питается весь порт А.

Вы сами и распространаете такие "слухи" sm.gif, т.к. выше цитировали:
Цитата(Maik-vs @ Jun 3 2011, 16:53) *
Там написано: "AVCC is the supply voltage pin for Port A and the A/D Converter.
haker_fox
Кстати, когда Вы правильно запитаете АЦП, то входы в воздухе не оставляйте. Иначе снова странные цифры приходить будут)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.