Du kannst anstatt Getadc() ja auch hier weiter mit den Registern arbeiten.
Ich denke mal Getadc() setzt alle Register entsprechend der Konfiguration neu...
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:
Warum passiert das - und was kann ich dagegen tun? Vcc als Referenz ist nämlich in diesem Fall keine besonders gute Lösung...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
Du kannst anstatt Getadc() ja auch hier weiter mit den Registern arbeiten.
Ich denke mal Getadc() setzt alle Register entsprechend der Konfiguration neu...
o.k. - aber wie sag ich´s ihm in Registern, dass er JETZT eine AD-Konversion vornehmen soll?
Wenn er auf dauer-Messung steht, dann reichts glaubich, das Register auszulesen.
Wenn er One-Shot ist, dann musst du ihn anmachen und dann das Messergebnis aus dem Register holen.
Danke für Eure Tipps - jetzt klappt´s: ADSC setzen, auf ADIF warten, Register auslesen, ADSC löschen, fertig. Schade, dass Bascom sich mit den unterschiedlichen Referenzen so schwer tut
Schönen Sonntag noch!!
Hallo,
Wenn man kein Config ADC hat, wurde ADMUX immer gelöscht, bei einem Getadc !
Man kann aber bei Getadc das ganze Byte für ADMUX mitgeben.
Bei der 1.11.9.2 werden die Ref-Bits aber ausmaskiert bevor der Kanal gesetzt wird.
Welche Bascom-Version hast Du, ich kann Reference Internal verwenden bei der 1.11.9.2. Und es wird auch richtig im Register gesetzt.
Das hier wird bei mir richtig compiliert:
Code:$regfile = "attiny84.dat" $crystal = 1000000 Config Adc = Single , Prescaler = Auto , Reference = Internal Dim W As Word , Channel As Byte Channel = 2 Do W = Getadc(channel) Loop End
Dann scheint das inzwischen verbessert worden zu sein, ich habe 1.11.8.2. als Vollversion, und da geht Reference = Internal definitiv nicht. Vielleicht sollte ich meine Aversion gegen Updates mal langsam ablegen Aber die direkte Arbeit mit den Registern ist dem Gesamtverständnis ja sehr zuträglich, daher bastele ich eigentlich ganz gerne auf diser Ebene herum.
Vielleicht date ich ja demnächst doch mal up..
Gruß,
Daniel
Hast du schonmal in C reingeschaut?
Wenn dir diese Ebene eher liegt, wirst du dich da wohl schnell zurecht finden und hast meiner Meinung nach viel mehr Möglichkeiten...
Gruß,
Thomas
Lesezeichen