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(); }
Gast
#4861542
Der ADC muss im zunächst Power Reduction Register (PRR) aktiviert werden.
Gast
#4861562
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 :/
Gast
#4861566
Stichwort volatile von testVariable.
Gast
#4861567
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.
Ok, es funktioniert wohl doch nicht. Das ADC Register wird gar nicht beschrieben.. Im Anhang habe ich ein Bild von der Situation
Gast
#4867860
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
Gast
#4867902
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?
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.

