Hallo Leute. Ich möchte gern mit einem ATMega64A (Versorgung 3,3V DC) diverse Gleichspannugen mit dem internen AD Wandler messen. Unter anderem auch die externe Referenzspannung von 3V (angeschlossen an AREF). Diese habe ich direkt an Kanal 4 (PF04) des AD Wandlers angeschlossen. Im Programmablauf wird der ADC immer nur aktiviert, wenn dieser benötigt wird. Danach wird er wieder abgeschaltet. Mein Code: unsigned int read_adc(unsigned char adc_input) { unsigned char i; unsigned int result; // Frequenzvorteiler auf 32 setzen und ADC aktivieren ADCSRA = (1<<ADEN) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0); // externe Referenz 3V, AD- Kanal wählen ADMUX |= adc_input; ADCSRA |= (1<<ADSC); // Dummy auslesen while ( ADCSRA & (1<<ADSC) ); // und warten // Messung --> Mittelwert aus 60 aufeinanderfolgenden Messungen for(i=0;i<60;i++) { ADCSRA |= (1<<ADSC); // Wandlung starten while ( ADCSRA & (1<<ADSC) ); // warten result += ADCW; // Wandlungsergebnisse aufaddieren } ADCSRA &= ~(1<<ADEN); // Messung beendet --> AD-Wandler deaktivieren ADMUX = 0x00; return result/60; } Jetzt habe ich fesgestellt, läuft der µC mit dem internen Oszillator bei einer Frequenz von 1MHz und wird die Wandlung in einer While (1) Schleife ständig wiederholt, kann ich am Referenzpin einen Spannungeinbruch von 3V (externe Referenz) auf 2,87V messen. Wie kann das sein? Wieso bricht meine externe Referenzspannung zusammen? Habe ich falsch initialisiert? Wie müssen die PORT PINS initialisiert werden für die Nutzung des AD Wandlers? Danke für jede Hilfe PS: als Referenz verwende ich einen LM4040A30 mit einem Vorwiderstand von 3k.
Hallo Michael, fallen mir im Moment folgende Möglichkeiten ein: a) Vcc vor dem LM4040 nicht stabil b) Laststrom zu groß (Port nicht sauber initialisiert) Grüße
Hi >Jetzt habe ich fesgestellt, läuft der µC mit dem internen Oszillator bei >einer Frequenz von 1MHz und wird die Wandlung in einer While (1) >Schleife ständig wiederholt, kann ich am Referenzpin einen >Spannungeinbruch von 3V (externe Referenz) auf 2,87V messen. Generell oder wenn du die Referenzspannung misst? Ist VREF mit einem Kondensator gepuffert? >PS: als Referenz verwende ich einen LM4040A30 mit einem Vorwiderstand >von 3k. An welcher Spannung hängt diese Kombination? MfG Spess
3k hängen auf der einen Seite an 3,3VDC und anderen anderen Seite an der Kathode des LM4040A30. Der Spannungseinbruch ist nur dann zu messen, wenn der ADC läuft. Im ausgeschaltetem Zustand messe ich auch 3V. Ich habe mittelweile den Widerstand auf 1k verkleinert. Dies hat zumindest die Einbrüche verschwinden lassen. Ist habe ich aber folgendes weiteres Problem. Wenn ich den Spannungen messe und den Messwert im Display anzeigen lasse, schwangt die gemessene Referenz stark hin und her. Statt 1024 (da ja 10 bit und 10 bit entsprechen der Spannung am AREF Pin) werden 1022 oder auch mal 1053 angezeigt. Aber auch kleinere Werte wie 350 oder so etwas. Was kann das sein?
Hi >Statt 1024 (da ja 10 bit und 10 bit >entsprechen der Spannung am AREF Pin) werden 1022 oder auch mal 1053 >angezeigt. Aber auch kleinere Werte wie 350 oder so etwas. Dann hast du noch andere Probleme. Der Maximalwert des ADC ist 1023 ($3FF). Also können definitiv keine 1053 ($41D) auftreten. MfG Spess
Ja da stimme ich dir zu. Aber was ist das für ein Problem?
Wie muss Port F konfiguert werden wenn der AD Wander benutzt wird? Eingänge im Tristate oder mit Pull up?
Hi >Wie muss Port F konfiguert werden wenn der AD Wander benutzt wird? >Eingänge im Tristate oder mit Pull up? Ganz normaler Eingang. Ohne Pull-Up. MfG Spess
Nach dem ich nun die Referenzspannung stabil bekommen habe, möchte ich die an Kanal 0 angeschlossene Spannung (mit 100nF gepuffert, ist auch sauber mit Oszi gemessen, d.h. schwankt nicht)messen und den AD Wert im Display anzeigen. Bei konstanter Spannung und an / und ausschaltet des Gerätes fürht ständig zu einem anderen AD Wert? Wie kann das sein?
Hi >Bei konstanter Spannung und an / und ausschaltet des Gerätes fürht >ständig zu einem anderen AD Wert? Wie kann das sein? Vielleicht passt deine LCD-Ausgabe nicht. Die Werte des ADCs zappeln zwar in den untern Bits. Aber solch Schwankungen, wie von dir beschrieben, gibt es nicht. Zumal du einen Mittelwert bildest. MfG Spess
Der Xmega kann keine Referenz >VCC-0,6V. Ingo
Ich habe keinen XMEGA sondern einen ATMEGA64A. Ich habe jetzt meinen Fehler gefunden. Ich habe beim Runden einen Überlauf des Datentypen verursacht. Dadurch werden die Werte extrem instabil und falsch. Ich habe also mein Result als unsined long int definiert und vor der Übergabe einen Typcast durchegfürht. Und siehe da, es funktioniert. Danke alle alle die sich einen Kopf um mein Problem gemacht haben. Ich wünsche ein schönes WE.
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.