Halo zusammen, ich habe einige Probleme mit meinem ADC-Wandler am ATTiny26. Im Simulator läuft meine Software, aber es ist halt "nur" ein Simulator. Auf dem Chip funktioniert es nicht wie gewollt. Prinzipiell möchte ich zwei Spannungen wandeln, die am MUX0 und MUX1 des ADC anliegen. Anhand dieser Werte sollen dann zwei LED's anzeigen, welcher Wert größer ist. Also jeweils eine LED für einen ADC-Kanal. Vermutlich ist es ein Abtastraten-Problem, aber ich hab schon experimentiert und die Specs von Atmel eingehalten, aber es klappt einfach nicht. Vielleicht schut ihr mal drüber und könnt mir etwas helfen...! Viele Grüße und schonmal "DANKE"!!! Dennis Goetz
Aehm. AUf die Schnelle wuerde ich mal sagen: Die Initialisierung der ADC: ab ins main() damit. Es ist relativ sinnfrei die ADC bei jedem Leseversuch neu zu initialisieren.
Vergiss das wieder. Ich hab da was in Deinem Code gelesen, was gar nicht da steht.
> while(!(ADCSR&(1<<ADIF)));
Das Bit ist gesetzt, solange die Umwandlung laueft.
Du musst warten, bis das Bit wieder auf 0 zurueckfaellt,
also solange in der Schleife bleiben wie das Bit auf 1
steht.
while( ADCSR & ( 1 << ADIF ) )
;
Ich hab da einiges gesehen, was ich nicht so ganz verstehe... Im Anhang ist meine ADC Routine, welche auch beim Tiny26 verwendet wird zu finden. Gruß, Michael
OK, danke mal an alle, aber ich hab den Fehler gefunden. Fehler lag im Detail, und zwar an der Stelle, an der ich die jeweiligen ADC-Eingänge ausgewählt habe. Durch meine Übergabe (MUX0 bzw. MUX1) habe ich einmal den falschen ADC-Port ausgewählt, welchen ich als Ausgang definiert!!! Leichtsinnsfehler! Vermutlich hätte ich das Datenblatt noch genauer lesen sollen!!! Trotzdem Danke an alle Helfer!!!! Greets, Dennis
Mir ist beim simulieren aufgefallen, dass du mit ADCSR=(1<<ADIF); deinen Vorteiler auf 000 setzt. Ist das so gewollt? Am Anfang hast du ja einen anderen Vorteiler eingestellt... Ich setz meine Bits immer so: /*----- BIT ACCESSES -----*/ #define SetBit(ADDRESS,BIT) (ADDRESS |= (1<<BIT)) #define ClrBit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT)) #define CheckBit(ADDRESS,BIT) (ADDRESS&(1<<BIT)) //Testing a single Bit Gruß, Michael
Ja, das war ein Fehler. Muss natürlich "ADCSR|=(1<<ADIF)" heißen. Aber das war im Endeffekt nicht ausschlaggebend für den Fehler! Trotzdem Danke!
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.