Изучаю сейчас АЦП в avr.
Вот такой код:
Код
/*****************************************************
Chip type : ATmega128
Program type : Application
Clock frequency : 8,000000 MHz
*****************************************************/
#include <mega128.h>
#include <stdio.h>
#include <delay.h>
#define ADC_VREF_TYPE 0xC0// 11000000
unsigned int adc_data;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
ADCSRA.6 = 1; //запуск преобразования
TCNT0=0x83;// начальное значение таймера0 131
}
interrupt [ADC_INT] void adc_isr(void)
{
// Read the AD conversion result
adc_data=ADCW;
}
void init_avr(void)
{
TCCR0=0x04; // 00000100 - частота синхронизации /64
TCNT0=0x83; //начальное значение таймера0 131
TIMSK=0x01; //прерываение по переполнению
UCSR0B=0x08;// 00001000 - разрегение работы передатчика
UCSR0C=0x06;//00000110 - 8 Data, 1 Stop, No Parity
UBRR0H=0x00;
UBRR0L=0x0C;//регистры скорости 00000001100 - Baud Rate:38400 погрешность 0.2%
ACSR=0x80; // 00001000 - разрешение прерывания аналогового компаратора
ADMUX=ADC_VREF_TYPE & 0xff; //1100000 - внтуренний ИОН 2.56В , правосторонее выравниевание, однополярный вход ADC0
ADCSRA=0x8E;// 10001110 - разрешаем работу ацп,разрешаем прерывание ацп, делитель на 64 = 125 000 Гц
}
void main(void)
{
init_avr();
#asm("sei")
while (1)
{
};
}
Вот такая схема в proteus:
Вопрос: если я правильно понимаю то результат в переменной adc_data должен быть не такой!Я думаю что должно быть так:0000001111111111.Или нет?Подскажите пожалуйста!