Hallo
Das dachte ich bisher auch, inzwischen bin ich aber nicht mehr sicher, ob es wirklich nur mit handshake funktioniert. Ich habe eher den Verdacht, der ADC wartet bis man die Daten gelesen hat. Für das Low-Byte steht es auch so im Datenblatt:Nein, so eine Wandlung dauert schon ein paar Takte und man muß solange warten bis sie auch fertig ist, erst dann darf man sich das Ergebnis abholen !!!
WOHER weißt man aber, daß eine Wandlung fertig ist ?
(Aus der Beschreibung des Datenregisters S. 217)When ADCL is read, the ADC Data Register is not updated until ADCH is read. Consequently,
if the result is left adjusted and no more than 8-bit precision is required, it is
sufficient to read ADCH. Otherwise, ADCL must be read first, then ADCH.
Bei meinen Versuchen lese ich ohne Handshake im free-running-Modus vom linksbüdigen Ergebniss nur das High-Byte aus, nach meiner Schätzung schneller als der ADC wandeln kann (Schneller geht's wohl kaum: while (ADCH > 20); ). Wenn ich den prescaler ändere (ich takte mit /2!), ändert sich auch die Datenleserate. Ich bin aber nicht wirklich sicher, weil ich das erst einmal gesehen habe und nicht näher untersucht habe.
In iom32.h wird PA0 so definiert:
Also kann man auch PAx direkt in ADMUX.MUX0-4 schreiben./* PA7-PA0 = ADC7-ADC0 */
/* PORTA */
#define PA7 7
#define PA6 6
#define PA5 5
#define PA4 4
#define PA3 3
#define PA2 2
#define PA1 1
#define PA0 0
Gruß
mic
Lesezeichen