Forum: Mikrocontroller und Digitale Elektronik ADC mit ATTiny26


von Dennis Goetz (Gast)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

Vergiss das wieder.
Ich hab da was in Deinem Code gelesen, was gar nicht da steht.

von Karl H. (kbuchegg)


Lesenswert?

> 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 ) )
  ;

von Michael L. (Gast)


Angehängte Dateien:

Lesenswert?

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

von Dennis Goetz (Gast)


Lesenswert?

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

von Michael L. (Gast)


Lesenswert?

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

von Dennis Goetz (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.