Hallo zusammen! Ich hab schon ein paar Beiträge gestartet, doch dort passt mein aktuelles Problem nicht mehr so richtig hin :) Infos zur Anwendung findet ihr hier, falls relevant: Beitrag "ATMEGA8 in C: 1 Tastendruck --> 2 verschiedene Funktionen -->Hilfe!" Ich will laut Schaltplan die Akkuspannung mittels ADC am Analog-PIN PD0 messen. Das Programm hab ich nun auf eine Zustandsmaschine aufgebaut und es funktioniert einwandfrei. Nur die Messung der Spannung funktioniert noch nicht bzw. wenn ich die Versorgunsspannung auf 6V verringere (6V wäre meine Schwellspannung, bei dem meine Anwendung nicht mehr starten dürfte), wird das Programm aber trotzdem ganz normal fortgeführt! Hab ich am Schaltplan was vergessen oder passt das Programm nicht....oder beides?? Hab ich was übersehen? Anbei befindet sich auch der Code...vielleicht kann mir jemand auf die Sprünge helfen?! MFG
Was für eine Spannung liefert der MCP1703? Falls die unter 3.7V liegt liefert dir der Spannungsteiler am ADC nämlich momentan eine unzulässig hohe Spannung bei vollem Akku. Diese sollte idealerweise <= VCC sein.
Nonsense schrieb: > Was für eine Spannung liefert der MCP1703? Dieser liefert 5V und die habe ich als Referenz für den ADC genommen. Die maximale Spannung am Spannungsteiler von 3,7V passt ja dann nicht schlecht, oder?
1 | ADMUX = (0<<REFS1) | (1<<REFS0); // AVcc als Referenz benutzen |
2 | ADMUX = (1<<MUX0); // Pin PC0 (23) als Analogeingang |
Gratuliere: Mit der 2.ten Zuweisung an ADMUX hast du dir soeben wieder die Referenzspannung abgeschaltet.
Und gleich noch einmal
1 | uint16_t ADC_Read( uint8_t channel ) |
2 | {
|
3 | // Kanal waehlen, ohne andere Bits zu beeinflußen
|
4 | ADMUX = (1<<MUX0); |
:-) Besonders pikant: der Kommentar dazu! Warum hast du die Tutorial Routinen verändert? Das hatte schon seinen Sinn, warum da im Tut etwas Aufwand getrieben wird. Weiter hab ich dann nicht mehr geschaut.
Chillxx schrieb: > Dieser liefert 5V und die habe ich als Referenz für den ADC genommen. > Die maximale Spannung am Spannungsteiler von 3,7V passt ja dann nicht > schlecht, oder? Nee, das passt dann. Die Spannung am ADC darf ja VCC nicht überschreiten. Dein Spannungsteiler liefert bei 7,4V aber 3,7V am ADC, was deutlich unter deiner VCC von 5V liegt, somit ist also alles in Ordnung :)
Hab gedacht, ich müsste hier was ändern Ich verwende aber nur den PD0 zum messen, muss ich dann diese Zeile trotzdem gleich lassen? ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F); wahrscheinlich schau ich, unter anderem, schon so lange dieses Tutorial an, dass ich bald garnichts mehr verstehe :) steh momentan einfach an, hinterher werde ich sicher einen AHA-Effekt erleben :)
Chillxx schrieb: > Ich verwende aber nur den PD0 zum messen, muss ich dann diese Zeile > trotzdem gleich lassen? Müssen nicht. Aber du kannst. Aber wenn du sie änderst, dann must du die auch richtig ändern. In ADMUX sind die Bits für die Referenzspannung! die darfst du nicht verändern, wenn du die Kanalbits setzt. Die Originalroutinen berücksichtigen das. Deine Änderung aber nicht! > > ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F); | | +---------------+ Nur die tatsächlichn Kanalbits auf 0 setzen | | +-----------------------------------+ Und die Bits für den gewählten Kanal auf 1 setzen In Summe: Die Bits für die Referenzspannung werden nicht geändert. Die sind immer noch so wie sie im ADC_Init eingestellt wurden (sofern in ADC_Init die zweite Zuweisung an ADMUX rausgenommen wird. Denn die löscht die zuvor eingestellten Bits für die Referenzspannung ebenfalls)
Alles klar :) ich habs wieder in den ursprünglichen Zustand versetzt (lt.Tutorial), und siehe da --> es funktioniert!! und danke für die Erklärung Herr Buchegger ;) Noch eine Frage zum Schaltplan: Sollte ich beim R14 den uC irgendwie vor Spannungsspitzen schützen zb. mit einer Z-Diode? Oder kann man das vernachlässigen?
Da rinnt über die 10k so wenig Strom, dass das die internen Clipping-Dioden schon schaffen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.