Кварц 8мГц. Пробывал разные источники опорного напряжения, менял частоту генератора АЦП, направление ножек портов АЦП. Уже 3й день бьрюсь. Разные вариации в симуляции работают, в елезе ничего не пашит.
Спойлер
Код: Выделить всё
#include <stdio.h>
#include <mega64a.h>
#include <delay.h>
#include <io.h>
#include <ds18b20.h>
#include <math.h>
#include "n3310lcd.c"
#define china 1
unsigned long int i;
float VCC;
// Voltage Reference: AVCC pin
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
SREG|=(0<<7); // Глобальное прерываний запрещаем.
// Start the AD conversion
ADCSRA|=(1<<ADSC);
// Wait for the AD conversion to complete
while ((ADCSRA & (1<<ADIF))==0);
SREG|=(1<<7); // Глобальное прерываний разрешаем.
ADCSRA|=(1<<ADIF);
return ADCW;
}
void main(void)
{
PORTA.2=1;
DDRA.2=1;
// Port F 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
PORTF=0x00;
DDRF=0x00;
// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
SFIOR=(0<<ACME);
VCC=5.00/1023;
Lcd_on ();
LcdInit();
LcdClear ();
LcdMode (2);
Lcd_on ();
PORTA.2=1;
while(1)
{
sprintf( lcd_buf,"V=%.1f",VCC*read_adc(0) );
LcdString(1,1);
sprintf( lcd_buf,"V=%.1f",VCC*read_adc(1) );
LcdString(1,2);
i=1238;
sprintf( lcd_buf,"V=%.1i",i );
LcdString(1,3);
LcdUpdate ();
}
}
- Вложения
-
- mega64adc.rar
- Исходник и файл протеуса
- (201.68 КБ) 172 скачивания




