You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -393,15 +392,105 @@ Grundsätzlich sind 3 Modi für die Wandlung möglich:
393
392
394
393
[^3]: Firma Microchip, megaAVR® Data Sheet, Seite 247, [Link](http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf)
[^4]: Firma Microchip, megaAVR® Data Sheet, Seite 250, [Link](http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf)
398
+
399
+
**Ergebnisregister**
400
+
401
+
Die Atmega Prozessoren bieten eine Auflösung von 10Bit oder 8Bit für die analogen Wandlungen. Entsprechend stehen zwei Register `ADCL` und `ADCH` für die Speicherung bereit. Standardmäßig (d.h. `ADLAR == 0`) werden die niederwertigsten 8 im Register `ADCL` bereitgehalten und die zwei höherwertigsten im Register `ADCH`.
Ist keine 10-bit Genauigkeit erforderlich, wird diese Zuordnung durch das Setzen des `ADLAR` Bits im `ADMUX` Register angepasst. Auf diese Weise kann das ADC Ergebnis direkt als 8 Bit Zahl aus `ADCH` ausgelesen werden.
> **Merke: ** Immer zuerst ADCL und erst dann ADCH auslesen.
435
+
436
+
Beim Zugriff auf ADCL wird das ADCH Register gegenüber Veränderungen vom ADC gesperrt. Erst beim nächsten Auslesen des ADCH-Registers wird diese Sperre wieder aufgehoben. Dadurch ist sichergestellt, dass die Inhalte von ADCL und ADCH immer aus demselben Wandlungsergebnis stammen, selbst wenn der ADC im Hintergrund im Free-Conversion-Mode arbeitet.
396
437
397
438
398
439
## Beispiele
399
440
400
-
**Beispiel 1 - Lesen eines Analogen Distanzsensors**
441
+
**Beispiel 1 - Heißleiter**
442
+
443
+
NTC-Widerstände (_Negative Temperature Coefficient_) werden zur Messung der Temperatur eingesetzt. Wichtigster Kennwert eines NTCs ist der Nennwiderstand R25 bei einer Nenntemperatur von 25 °C.
Wenn wir davon ausgehen, dass die Referenzspannung des AD-Wandlers gleich $U_{ges}$ ist, generieren wir eine digitale Repräsentation $U_{NTC_d}$ entsprechend
[^5]: Firma Atmel, Atmel ATmega640/V-1280/V-1281/V-2560/V-2561/V, Seite 281, [Link](https://ww1.microchip.com/downloads/en/devicedoc/atmel-2549-8-bit-avr-microcontroller-atmega640-1280-1281-2560-2561_datasheet.pdf)
492
+
493
+
Die Bedeutung ergibt sich beim Blick ins Datenblatt des Sensors GP2D, dessen Maximalwertausgabewert liegt bei etwa 2.55V
405
494
406
495
```c
407
496
#ifndef F_CPU
@@ -420,31 +509,32 @@ int readADC(int channel) {
420
509
// Den ADC initialisieren und einen sog. Dummyreadout machen
421
510
ADCSRA |= (1<<ADSC);
422
511
while(ADCSRA & (1<<ADSC));
423
-
//4 Leseoperationen
424
-
for(i=0; i<4; i++) {
425
-
ADCSRA |= (1<<ADSC);
426
-
while(ADCSRA & (1<<ADSC)); // Auf Ergebnis warten...
427
-
result += ADCW; }
512
+
ADCSRA |= (1<<ADSC);
513
+
while(ADCSRA & (1<<ADSC)); // Auf Ergebnis warten...
514
+
// Lesen des egisters "ADCW" takes care of how to read ADCL and ADCH.
515
+
result = ADCW;
428
516
// ADC wieder deaktivieren
429
-
ADCSRA &= ~(1<<ADEN);
430
-
return result>>2;
517
+
ADCSRA = 0;
518
+
return result;
431
519
}
432
520
433
521
int main(void)
434
522
{
435
523
Serial.begin(9600);
436
524
while (1) //infinite loop
437
525
{
438
-
int result = readADC(0);
439
-
Serial.println(result);
526
+
int result_individual = readADC(0);
527
+
Serial.println(result_individual);
440
528
Serial.flush();
441
529
_delay_ms(10); //1 second delay
442
530
}
443
531
return 0; // wird nie erreicht
444
532
}
445
533
```
446
534
447
-
**Beispiel 2 - Temperaturüberwachung des Controllers**
535
+
> _The first ADC conversion result after switching reference voltage source may be inaccurate, and the user is advised to discard this result._ Handbuch Seite 252
536
+
537
+
**Beispiel 3 - Temperaturüberwachung des Controllers**
448
538
449
539
> _The temperature measurement is based on an on-chip temperature sensor that is coupled to a single ended ADC8 channel. Selecting the ADC8 channel by writing the MUX3...0 bits in ADMUX register to "1000" enables the temperature sensor. The internal 1.1V voltage reference must also be selected for the ADC voltage reference source in the temperature sensor measurement. When the temperature sensor is enabled, the ADC converter can be used in single conversion mode to measure the voltage over the temperature sensor._ Handbuch Seite 256
450
540
@@ -473,8 +563,6 @@ double getTemp(void)
473
563
474
564
// Detect end-of-conversion
475
565
while (ADCSRA & (1<<ADSC));
476
-
477
-
// Reading register "ADCW" takes care of how to read ADCL and ADCH.
478
566
wADC = ADCW;
479
567
480
568
// The offset of 324.31 could be wrong. It is just an indication.
0 commit comments