Sven W. schrieb:
> Also habe ich die Wahl, einfach die "Verzögerung" der ersten Messung zu
> akzeptieren oder nach der Initialisierung
>
> while (ADCSRA & (1 << ADSC));
>
> abzuwarten.
>
Man kann die Dinge aber auch umdrehen.
Sagt ja kein Mensch, dass man in der Zeit, in der der ADC arbeitet nicht
etwas anderes tun darf.
Man kanns ja auch so machen
1 | ....
|
2 | while(1)
|
3 | {
|
4 | ...
|
5 | if( ADC ist fertig )
|
6 | {
|
7 | Messwert vom ADC holen
|
8 | Neue Messung am ADC anstossen
|
9 |
|
10 | Messwert verarbeiten
|
11 | ....
|
12 | }
|
13 |
|
14 | ...
|
15 | }
|
je nachdem, wieviel in den ... Phasen zu tun ist, kann man auch auf die
if Abfrage komplett verzichten, weil man ja weiß, wieviele Takte der ADC
für eine Wandlung benötigt. Benötigen alle Prgrammteile vom Starten des
ADC bis zum Holen des Ergbnisses mehr Takte, dann ist sichergestellt,
dass der ADC tatsächlich zu diesem Zeitpunkt fertig ist. Allerdings
schadet der if wahrscheinlich auch nicht wirklich der Laufzeit.