Sauerbruch
02.11.2008, 14:45
Moin zusammen!
Ich versuche gerade, den ADC eines ATTiny84 so zu konfigurieren, dass als Referenz die internen 1,1 Volt gewählt werden. In Bascom ging das (erwartungsgemäß) nicht, sowohl Reference = INT als auch Reference = Internal wurden vom Compiler nicht akzeptiert.
Ist ja nicht schlimm - man kennt solche Eigenwilligkeiten des Compilers ja. Ich habe das ADMUX dann selbst gesetzt, und zwar auf 130 bzw. &B10000010 (Eingang 2 und 1,1V als Referenz).
Per LCD lasse ich mir das Register am Programmanfang anzeigen - der Wert wird zunächst tadellos übernommen. Nach dem ersten mal Getadc(2) wird ADMUX aber auf &B00000010 verändert, d.h. ADC2 als Eingang und Vcc als Referenz.
Hier mal der kurze Code:
$regfile = "attiny84.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Porta.7 , E = Porta.0 , Rs = Porta.1
Initlcd
Cursor = Off
Admux = &B10000010
Adcsra = &B11000000
Adcsrb = &B00000000
Locate 1,1
LCD ADMUX
wait 1
Dim Wert As Word
Do
Wert = Getadc(2)
Locate 1 , 1
Lcd "ADMUX: " ; ADMUX
Locate 2 , 1
Lcd Wert
Waitms 250
Cls
Loop
Warum passiert das - und was kann ich dagegen tun? Vcc als Referenz ist nämlich in diesem Fall keine besonders gute Lösung...
Ich versuche gerade, den ADC eines ATTiny84 so zu konfigurieren, dass als Referenz die internen 1,1 Volt gewählt werden. In Bascom ging das (erwartungsgemäß) nicht, sowohl Reference = INT als auch Reference = Internal wurden vom Compiler nicht akzeptiert.
Ist ja nicht schlimm - man kennt solche Eigenwilligkeiten des Compilers ja. Ich habe das ADMUX dann selbst gesetzt, und zwar auf 130 bzw. &B10000010 (Eingang 2 und 1,1V als Referenz).
Per LCD lasse ich mir das Register am Programmanfang anzeigen - der Wert wird zunächst tadellos übernommen. Nach dem ersten mal Getadc(2) wird ADMUX aber auf &B00000010 verändert, d.h. ADC2 als Eingang und Vcc als Referenz.
Hier mal der kurze Code:
$regfile = "attiny84.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Porta.7 , E = Porta.0 , Rs = Porta.1
Initlcd
Cursor = Off
Admux = &B10000010
Adcsra = &B11000000
Adcsrb = &B00000000
Locate 1,1
LCD ADMUX
wait 1
Dim Wert As Word
Do
Wert = Getadc(2)
Locate 1 , 1
Lcd "ADMUX: " ; ADMUX
Locate 2 , 1
Lcd Wert
Waitms 250
Cls
Loop
Warum passiert das - und was kann ich dagegen tun? Vcc als Referenz ist nämlich in diesem Fall keine besonders gute Lösung...