1 | /*
|
2 | * messen.h
|
3 | *
|
4 | * Created: 16.04.2021 20:12:36
|
5 | * Author: User
|
6 | */
|
7 |
|
8 | #ifndef MESSEN_H_
|
9 | #define MESSEN_H_
|
10 |
|
11 | uint16_t ADC_Routine (uint8_t kanal)
|
12 | {
|
13 | uint8_t a=4; // Anzahl der Messungen
|
14 | uint8_t b=a;
|
15 | uint16_t analogwert = 0;
|
16 |
|
17 | ADCSRA = ADCSRA |(1<<ADEN); // ADC eingeschalten
|
18 |
|
19 | //Auswahl des gewählten ADC-Eingangs ergibt: 0001 --> ADC1
|
20 | ADMUX = kanal; // ADMUX=1;
|
21 |
|
22 | // Einstellung der Referenzspannung --> 01 --> AVcc
|
23 | ADMUX = ADMUX|(1<<REFS0);
|
24 | ADMUX = ADMUX&~(1<<REFS1);
|
25 |
|
26 |
|
27 | //ADCSRA - Registerkonfiguration
|
28 | //Vorteiler - Prescaler, hier: 111 -> Vorteiler von: 8 --> CPU-Takt / 128
|
29 | ADCSRA = ADCSRA |(1<<ADPS0);
|
30 | ADCSRA = ADCSRA |(1<<ADPS1);
|
31 | ADCSRA = ADCSRA |(1<<ADPS2);
|
32 |
|
33 | //Interrupts einstellen
|
34 | ADCSRA = ADCSRA&~(1<<ADIE); //erstmal keine Interrupts eingestellt bzw. erwünscht
|
35 |
|
36 | // ADC-Mode konfigurieren
|
37 | ADCSRA = ADCSRA&~(1<<ADFR); //Free-Running-Modus ausgeschalten
|
38 |
|
39 | while(a>0)
|
40 | {
|
41 |
|
42 | ADCSRA = ADCSRA |(1<<ADSC); //Starten des ADC hier: Single-Conversion_Mode gestartet
|
43 |
|
44 | while((ADCSRA & (1<<ADIF)==0)) // Solange der ADC mit der Abtastung noch nicht fertig ist "warten"
|
45 | {;}
|
46 |
|
47 | analogwert = analogwert+ADCW;
|
48 | a=a-1;
|
49 | }
|
50 |
|
51 | return (analogwert / b);
|
52 | }
|
53 |
|
54 | #endif
|