Ich hab die Lösung:
Den Wert mittels "Getadc(x)" abholen verbietet sich bei differential Channels. Der Wert muss direkt aus den beiden Registern Adcl unf Adch abgeholt werden.
Code:
Adcsra.adate = 1 'Bit5 = Auto Trigger en
' Adcsra.adif Bit4 Flag für fertige Konversation
' adcsra.adie = 1 ' Aktiviert ADC Interupt I-Bit in SREG muss gesetzt sein
Adcsra.adps2 = 1 ' prescaler 128
Adcsra.adps1 = 1 ' prescaler 128
Adcsra.adps0 = 1 ' prescaler 128
Adcsra.aden = 1 ' Bit7 1= en ADC
Adcsra.adsc = 1 ' |Bit6=1 Start Conversion(Singel o. Free )
Admux = &B01001001
Do
Loop Until Adcsr.adif = 1 ' Warten auf conversation
Adcsr.adif = 1 ' Reset flag
Lowbyte = Adcl ' Lowbyte Register
Highbyte = Adch 'High Byte Register
Print Hex(highbyte) ; Hex(lowbyte) ' Print High und Lowbyte in Hex
Print Highbyte ;
Print " ";
Print Lowbyte
Waitms 900 ' Auge zu langsam
Stop Adc
Verwendbar ist die ganze Sache für mich allerdings nicht. Da auch negative Werte ( nicht bezogen auf Masse, sondern auf die beiden verpolten Eingänge) gemessen werden, geht die Auflösung auf 9 Bit runter. Ausserdem wird +512 bei meinem M16 nie erreicht, max ist hier +488 bei Gain x10 und Uref = Vcc.
Hier scheint die Qualität des internen OpAmps nicht toll zu sein.
Update:Ein Versuch mit Uref=REFint allerdings schon, das die +512 (01FF) erreicht werden.
Thomas
Lesezeichen