messen.h


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