Ja, alltså...förut fungerade det korrekt när jag hade valt Aref som referens och kopplat den till Vcc. Då hade jag rätt värden ut på LCD:n. Dum som man är vill man ju öka upplösningen och precisionen och därmed tänkte jag att jag skriver REFS1 och REFS1 i ADMUX till ettor för att använda Internal Vref på 2.56 V. Detta skulle funka fint eftersom min insignal aldrig överstiger 2 V.
När jag testat detta fick jag 0 volt ut på Vref. Jag hade inget inkopplat på Vref då. (tror jag

)Tydligen skulle man ju kunna mäta den spänningen med en "high impedance voltmeter", vad det nu är? Duger det inte med en vanlig hobby-multimeter?
Men nu är mina problem värre än så... Nu funkar fan ingenting.. (helt felaktiga värden) Måste nästan frågasätta om hårdvaran verkligen fungerar som den ska... Verkar nästan som om jag släppt ut lite rök ur min stackars mega32a.
Ska snygga upp koden lite och se om jag hittar nåt knas, annars postar jag kod här inom en snar framtid.
EDIT: Måste nog krypa till korset.
Så här ser koden ut
Kod: Markera allt
void ADC_INIT(void)
{
ADCSRA |= (1<<ADEN); //ADC enable
ADMUX |= (1<<ADLAR); //Left adjust result
ADMUX |= (1<<MUX0); //Use ADC1 as input
//ADMUX |= (1<<REFS1); //set Vref to internal 2.56V
//ADMUX |= (1<<REFS0);
ADCSRA |= (1<<ADSC); //Start conversion
ADCSRA |= (1<<ADPS2); //Prescaler set to 128
ADCSRA |= (1<<ADPS1); //
}
SIGNAL(SIG_ADC)
{
char*temp = "";
lcd_goto(0x8E);
uint8_t adc_inL = ADCL;
uint8_t adc_inH = ADCH;
float result = (adc_inH<<2)+(adc_inL>>6);
result = result*(5.18/1024);
dtostrf(result, 4, 3, temp);
lcd_puts(temp);
}
Man tycker inte att speciellt mycket ska kunna gå fel på den lilla biten?
