Der AD-Wandler am At90S8535 funktioniert nicht. Laut Datenblatt müsste die C-Funktion siehe Dateianhang funktionieren. Ich kann da keinen Fehler finden? Für jede Unterstützung bin ich sehr danbar!
Was funktioniert denn nicht? Diese Zeile > result += (ADCL + (ADCH<<8)); // mit uint16_t x ist schon mal sehr fehlerverdächtig. Praktisch jeder C-Compiler für AVRs (auch CodeVision, falls es sich um den handelt) bietet die Möglichkeit, 16-Bit-I/O-Register auch als solche anzusprechen. Und das sollte man auch tunlichst nutzen, da z.B. dieser Einzeiler in keinster Weise garantiert, dass die beiden Teilregister in der richtigen Reihenfolge ausgelesen werden, was aber für die Funktion der ganzen Geschichte unbedingt erforderlich ist. Außerdem ist es sinnvoll, wenn man den Verdacht hegt, dass eine Komponente nicht funktioniert, entweder ein Testprogramm speziell für diese Komponente zu schreiben, ohne den ganzen anderen Rotz, der damit eigentlich nichts zu tun hat, oder wenigstens die Sachen aus dem bestehenden komplett-Programm rauswerfen, die mit der Sache nichts zu tun haben.
Also die Uhr und das Display (Controller T6963) funktioniert problemlos. Dieses Projekt habe ich vor ein paar Monaten begonnen. Aufgrund des Studiums musste ich meine privaten Interessen zurückstellen. Auf meinem Display sehe ich nur den Wert 1023. Normalerweise schwankt dieser Wert heftig.
Ich habe die Funktion so umgeschrieben: #define ADC_VREF_TYPE 0x00 // Read the ADC conversion result unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input|ADC_VREF_TYPE; ADCSR.6=1; while (ADCSR.4==0); ADCSR.4=1; return ADCW; } Hauptprogramm setzte ich dann noch das Register ADCSR auf den Wert:0x86
Da tut sich auch nichts. Verhält sich genauso wie vorher. Ich komme da nicht drauf wo der Fehler liegen könnte.
Hallo, 1023 ist Maximal-Wert, was hast Du eigentlich als ARef und wo kommt Deine zu messende Spannung her? Ich habe jetzt auch nicht im Source nachgeschaut, aber ADC-Pin ist auch Eingang, PullUp ist ausgeschaltet? Gruß aus Berlin Michael
Das ADC_VREF_TYPE im ADMUX kannste Dir sparen. Der 90S8535 hat keine interne Referenzauswahl. Ich hoffe, Du weißt, dass der ADC bei der Frequenz, mit der Du ihn betreibst, nur noch maximal 8 Bit Auflösung hat. Ansonsten schließe ich mich Michael an: Ist AREF korrekt angeschlossen? Der Analog-Eingangsport sollte explizit als Eingang ohne Pull-Up konfiguriert werden, auch wenn der Reset-Wert der betreffenden Register eigentlich die korrekte Einstellung liefern sollte. Sicher ist sicher.
Vielen Dank Michael und Johnny. Der AD-Wandler funktioniert jetzt. Kann mir jemand sagen wo ich genauere Infos zu dem temperatursensor KTY16-6 (Siemens) herbekommen kann? Ich habe zwar das Datenblatt, das bringt mir leider nichts.
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.