Hallo zusammen :) nachdem ich nun bereits seit mehrere Stunde daran zu verzweifeln scheine, habe ich mich kurzerhand hier angemeldet und hoffe auf eure Hilfe. Ich möchte mithilfe eines NTC Thermistors und einem Arduino die Temperatur messen. Der Aufbau ist einfach ein Spannungsteiler, bestehend aus dem NTC und einem Widerstand, der bei Referenztemperatur des NTC den gleichen Widerstand hat. In der Mitte greife ich die Spannung ab und führe sie auf einen analogen Input. Gemessen habe ich die Spannung nicht, aber es ist auf jeden Fall eine Vorhanden (<5V), da ich zum Test eine LED dazwischen gesteckt habe. Leider ist der ADC Wert immer 0, was übersehe ich hier? ^^ Vielen Dank der Code: #include <avr/io.h> #include <avr/interrupt.h> //unsigned int counter = 5; unsigned int testVariable = 0; void setupADC() { ADMUX = (1 << REFS0) | (1 << MUX0) | (1 << MUX2); ADCSRA = (1 << ADEN) | (1 << ADIE) | (1 << ADPS0) | (1 << ADPS1) | (1 << ADPS2); //ADC 5 aktivieren DIDR0 = (0 << ADC5D); startConversion(); } void startConversion() { ADCSRA |= (1 << ADSC); } int main(void) { setupADC(); sei(); while(1) { } } ISR(ADC_vect) { testVariable = ADC; startConversion(); }
Der ADC muss im zunächst Power Reduction Register (PRR) aktiviert werden.
Blinky schrieb: > Der ADC muss im zunächst Power Reduction Register (PRR) aktiviert > werden. Steht das so im Datenblatt ? - Nöö
Danke für den Hinweis, aber ich erhalte weiterhin keinen Wert :/
Da dein "Programm" nichts mit den Daten/ Vatriablen macht, kann der Compiler sie auch entfernen.
Super, es tut endlich - Vielen Dank! Ich musste lediglich "volatile" vor meine testVariable schreiben.
:
Bearbeitet durch User
Ok, es funktioniert wohl doch nicht. Das ADC Register wird gar nicht beschrieben.. Im Anhang habe ich ein Bild von der Situation
Wenn du ein Breakpoint in der ISR platzierst, springt er da hin? Compileroptimierung mal ausgeschaltet?
ja, er springt in die Interrup Routine. Habe auch mal alle Optimierungen des Compilers deaktiviert. ADC bleibt aber unverändert
Allenfalls den ADC erst Mal ohne Interrupt laufen lassen. Was fuer Debug Anstrengungen wurden denn bisher unternommen ? Ich wuerde mal sehen wollen wie oft der ADC sich selbst wieder startet. Stimmt die Wandlungsrate mit den erwarteten Zeiten ueberein ?
ich habe den ADC jetzt nicht in einem Interrupt abgefragt, sondern gleich nach dem Start die Wandlung machen lassen. Das ADIF (ADC Interrupt Flag) ist auch gesetzt. Laut Doku wird dieses Bit gesetzt, wenn die Konversion durchgeführt wurde. Im ADC Register ist aber weiterhin kein Bit gesetzt. Mit den Wandlungsraten kenne ich mich nicht aus. Ich habe den Division factor auf 128 gesetzt. Was muss ich hier beachten?
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.