Hallo, ich habe ein Programm, in dem ich eine Spannung am AD-Wandeler des Atmega168 messen möchte. Bis jetzt funktioniert das Programm auch sehr gut. Ich möchte aber einen anderen Pin nutzen, um die Messung durchzuführen, dabei gibs aber Probleme. Momentan nutze ich ADC0 (PC0), würde aber gerne an ADC6 oder 7 messen. Das Programm funktioniert nur an ADC0, an keinem anderen ADC-Pin. Initialisierung: //externe Vref nutzen ADMUX = 0; //kann eigentlich entfallen, da Initial 0x00 //externe Vref -> REFS1=0, REFS0=0 //A/D-Wandler: Enable, Vorteiler auf 128 ADCSRA |= ( (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0) ); //Dummy-Wandlung ADCSRA |= (1<<ADSC); while (ADCSRA & (1<<ADSC) ); adc_val_1 = ADC; Unterprogramm aus Tutorial: //Wert von A/D-Wandler lesen //AD-Pin wird übergeben, AD-Wert zurück uint16_t ReadADCChannel(uint8_t channel){ uint16_t result; //Kanal wählen ADMUX = channel; //Messung ADCSRA |= (1<<ADSC); while (ADCSRA & (1<<ADSC) ); result = ADC; return result; } Aufruf im Hauptprogramm: adc_val_1 = ReadADCChannel(0); Der Aufruf mit 0 funktioniert, schließe ich meine Messleitung an einen anderen Pin an und lasse an diesem messen, funktioniert mein Programm nicht. Kann mir jemand helfen? Gruß Paul
Was funktioniert denn an dem Programm nicht, wenn es mit einem anderen Kanal als 0 aufgerufen wird?
DAS MUSS VOR DER DUMMY WANDLUNG STEHEN. //Kanal wählen ADMUX = channel;
Ich will halt auf einen bestimmte Spannungsschwelle reagieren. Ich messe an einen bestimmten Zeitpunkt die Spannung und wenn sie unter einem bestimmten Wert liegt, reagiere ich darauf.
gast schrieb: > DAS MUSS VOR DER DUMMY WANDLUNG STEHEN. > > //Kanal wählen > ADMUX = channel; Das stimmt nicht. Die Dummy-Wandlung taucht im Datenblatt lediglich in Zusammenhang mit der Referenzquelle auf. Den Kanal kann man eigentlich problemlos ändern, ohne eine Dummy-Wandlung vorzunehmen. @paul Ist der entsprechende Port denn richtig konfiguriert (also als Eingang ohne Pull-up)?
Ja PortC ist als Eingang konfiguriert. Mit der Messung an PC0/ADC0 funktionierts auch, aber an allen anderen Pins nicht (ADC6 und 7 sind nicht am PortC). @ Richard W: Mir ist grade aufgefallen, dass ich den Dummy-Read-Out immer nur für ADC0 mache. Bist du sicher, dass es egal ist an welchem Pin der Dummy-Read-Out gemacht wird?
Schau mal ins Datenblatt. Der Dummy-Readout ist nur dafür da, fehlerhafte Messungen zu verhindern, wenn die Referenzquelle geändert wurde und die Spannung sich noch nicht stabilisiert hat. Ansonsten fällt mir so nichts weiteres ein...
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.