Ja,ich bin mal so gemein und frage dich was das Kürzel "ADCH" bedeutet (Ich weiß es) und ob da nicht doch noch etwas fehlt ?
Hallo,
habe folgendes Programm getippt (Tiny45,Auszug):
Der ADC ist 10 Bit breit also 1024 Dig.Code:$regfile = "ATtiny45.dat" 'Tiny45 Regfile $crystal = 8000000 '8MHz On Adc Onadc 'Interrupt für Adc Wert Admux = &B00100010 ' ^^-----------------Voltage Reference:00=Vcc ' ^----------------Left Adjust ' ^---------------Not Used ' ^^^^-----------Analog Channel:0010=ADC2 PB4 Adcsra = &B11111101 ' ^-----------------Adc Enable ' ^----------------Adc Start Conversion ' ^---------------Adc Auto Trigger Enable ' ^--------------Adc Interrupt Flag ' ^-------------Adc Interrupt Enable ' ^^^----------Adc Prescaler Select Bits;Prescaler128 Enable Interrupts 'Interrupts globaleinschalten Dim Analog As Word Dim Akku_low As Bit do loop Onadc: ' Interrupt ADC Analog = Adch 'ADC Wert an Variable übergeben If Analog =< 485 Then Akku_low = 1 'Akku_low Bit bilden End If If Analog >= 533 Then Akku_low = 0 End If Return
Also müsste bei der 5V Referenz das Akku_Low Bit bei <=2,368V gesetzt und bei 2,604V zurückgesetzt werden.
Tut es leider nicht, das Bit ist die ganze Zeit gesetzt. Ich muss die beiden Werte (485 sowie 533) schon auf ca. 100 runttersetzen mit sich etwas im 2V Bereich am ADC tut.
Langsam verzweifel ich. Das Datenblatt habe ich schon zig mal gelesen.
Vielleicht findet ja hier jemand den Fehler.
Danke
Daniel
Ja,ich bin mal so gemein und frage dich was das Kürzel "ADCH" bedeutet (Ich weiß es) und ob da nicht doch noch etwas fehlt ?
Gruß
Ratber
Bist du gemein![]()
Aber so lernt man ja am besten.
"ADCH" finde ich in der Bascom Hilfe nicht. Nach suchen im Netz habe ich herausgefunden das es das ADC Hibyte ist, also 8Bit breit.Code:Onadc: ' Interrupt ADC Analog = Adch 'ADC Wert an Variable
Doch was ist ein Hi- bzw. Lowbyte?
Wenn ich jetzt mit einer Auflösung von 8Bit=256 messe, dann komme ich bei Spannungen um 2,3V auf 121Dig, was ja hinhauen würde.
Doch wie bekomme ich so eine 10Bit auflösung hin?
Vielleicht so:
???Code:Onadc: ' Interrupt ADC Analog = Adch + Adcl
Der Compiler schimpft schon mal nicht...
Hab die Schaltung gerade nicht hier, so dass ich es ausprobieren kann.
Gruß
Daniel
wert=adch*256+adcl
@Meldano
Yep !Bist du gemein
Genau darum geht es.Aber so lernt man ja am besten.
Mich graust es immer wenn ich mitbekomme das die Leute zwar alles Mögliche basteln wollen aber sogut wie nichts an Grundlagen besitzen.
Selbst das Lesen und verstehen eines Datenblattes ist oft Fehlanzeige oder nur sehr Mangelhaft.
Da einfach nur Vorkauen zu oft dazu führt das der Jeweilige damit einfach verschwindet,nichts lernt um dann beim nächsten Problem wieder auf der Matte zu stehen händle ich es lieber nach Möglichkeit mit kleinen nicht zu komplizierten Anmerkungen und leichten Rätseln um die eigenständige Suche und Kombination des jeweiligen zu fordern.
Gerade letzteres ist in fast allen Gebieten menschlicher Tätigkeiten sehr wichtig.
Zur Rechnung und den Lösungsansätzen:
Du bist auf dem richtigen Weg und hast den Wesentlichen Teil schon entdekt.
Jetzt mußt du nur die Vorgehensweise in die richtige Reihenfolge bringen.
Es ist nur noch ein kleiner Schritt Mathematischer Natur.
Tipp:
Im Datenblatt des Controllers steht alles nötige dazu drinne.
Les einfach mal den Abschnitt zum ADC durch.
Du mußt nicht alles behalten aber ein grober Überblick bringt etwas Übersicht.
@Robbifan
Psssssssssst........Oller Spielverderber![]()
Gruß
Ratber
Hi Ratber,
ja zum lernen bin ich ja hier! Ich möchte keine Codeschnipsel ohne sie zu verstehen. Deswegen setze ich die Register weitestgehend ja auch händisch.
Nur so lernt man wie der Controller funktioniert.
Leider komme ich mit deinen Tips aber nicht so ganz weiter.
Folgende Info habe ich gefunden (Ein Gedankengang):
-Das ADC Messergebnis wird in die Register ADCH sowie ADCL geschrieben (da Ergebnis 10Bit also in zwei Register).
-Wichtig ist auch ADLAR im Steuerregister ADMUX. Hier wird "eingestellt" wie das Messergebnis ausgerichtet ist. Also Rechts- oder Linksbündig.
Rechtsbündigie 8 niederwertigsten Bits des Ergebnisses werden in ADCL abgelegt. Die verbleibenden 2 Bits des Ergebnisses werden im Register ADCH in den Bits 0 und 1 abgelegt.
Linksbündigie 8 höchstwertigen Bits des Ergebnisses werden in ADCH abgelegt. Die verbleibenden 2 niederwertigen Bits werden im Register ADCL in den Bits 6 und 7 abgelegt.
Ich hatte ja im eingangs genannten Beispiel linksbündig ausgerichtet. Also:
2 hoch 9 ; 2 hoch 8 ;.....2 hoch 2 > ADCH
2 hoch 1 ; 2 hoch 0 > ADCL
Wenn ich jetzt also rechtsbündig ausrichte, und adcl "voll" habe ergibt das ja 255. Wenn adch 2hoch0 sowie 2hoch1 "Eins" ist komme ich auf 3.
In die Formel von Robifan eingesetzt, (3*256)+255= 1023 also 10 Bit auflösung.
Wenn der ADC jetzt nur 8Bit breit wäre, dann würde ich einfach rechtsbündig ausrichten und ADCL auslesen.
__________________________________________________ ____________
Gedankengang ende
Liege ich mit meiner Logik jetzt richtig und kann sagen, ich habe es verstanden, oder liege ich voll daneben ?????
Danke für eure Hinweise!
Bis auf den letzten Satz kann man alles so stehen lassen.
Wenn der ADC wirklich nur 8 Bit hätte dann gäbe es kein ADCH und ADCL sondern nur ein einzelnes Ausgaberegister und im Forum viiiiielll weniger Fragen zu dem Thema "Wie lese ich meinen ADC aus" (Ne,kein Quatsch.Is wirklich so).Wenn der ADC jetzt nur 8Bit breit wäre, dann würde ich einfach rechtsbündig ausrichten und ADCL auslesen.
Spaß beiseite.
Oder meintest du das in Zusammenhang mit dem anderen Topic also der Auflösungsreduzieung ?
Wenn ja dann ist es etwas komplexer.
Wenn man diue auflösung reduzieren will dann nimmt man die Niederwertigsten Stellen weg (Willst du 0-100V Messen und das Multimeter bietet schon auf 0.01V Genau an dann schneidet man die Niederwertigsten Stellen also die beiden hinterm Komme weg).
Dh. beim ADC läst man die niederwertigsten Bits angefangen bei 0 weg.
Man kann den ganzen 10-Bit wert nehmen und per Shiftbefehl bzw. durch entsprechende Teilung die Auflösung herabsetzen.
Soweit ok ?
Gruß
Ratber
Hi Ratber,
vielen Dank!
Jetzt kann ich sagen, ich habe alles verstanden
Und habe nicht einfach nur nen Codeschnipsel eingefügt.
War halt gestern spät als ich den letzten Beitrag geschrieben habe.
Gruß
Daniel
Yo,is ja kein Problem.
Ich sehe gerade das ich Heut Morgen auch nicht gerade sehr gradeaus geschrieben habe![]()
Gruß
Ratber
...Wenn der ADC jetzt nur 8Bit breit wäre, dann würde ich einfach rechtsbündig ausrichten und ADCL auslesen. .....
jo...
Lesezeichen