1 | #define F_CPU 20000000UL //Prozessortakt in Hertz, hier 20 MHz
|
2 | #include <avr/io.h>
|
3 | #include <util/delay.h>
|
4 |
|
5 |
|
6 | uint16_t ADC_WertC0;//..........................................................// Diese 16 Bit große Variable dient zur Speicherung der 2x 8 Bit großen ADC-Werte von Kanal 0
|
7 | uint16_t ADC_WertC1;//..........................................................// Diese 16 Bit große Variable dient zur Speicherung der 2x 8 Bit großen ADC-Werte von Kanal 1
|
8 | uint8_t ADC_LWert;//............................................................// Diese 8 Bit große Variable dient zur kurzfristigen Übernahme des ADC-Wertes ADCL
|
9 | uint8_t ADC_HWert;//............................................................// Diese 8 Bit große Variable dient zur kurzfristigen Übernahme des ADC-Wertes ADCH
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | void ADC_Init (void){//________________________________________________________________________________________________// Dies ist eine Methode, in der die AD-Wandlung initialisiert wird bzw. die Einstellungs-Bits gesetz werden
|
15 |
|
16 | ADMUX = 0xff;//.............................................................// Alle Bits von ADMUX auf 0 setzen
|
17 | ADMUX |= (1<<REFS0);
|
18 | //..............................................................// Referenzspannung = AVCC
|
19 |
|
20 |
|
21 | ADCSRA = 0xff;//............................................................// Alle Bits von ADCSRA auf 0 setzen
|
22 | ADCSRA |= (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);//...........................// ADC-Takt Prescaler wird auf 128 gesetzt
|
23 | ADCSRB |= (0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);//...........................// ADC-Modus wird auf Free Running gesetzt
|
24 | ADCSRA |= (1<<ADEN) | (1<<ADSC);
|
25 | //..............................................................// ADC wird aktiviert
|
26 | //........................................................// ADC-Wandlung starten
|
27 |
|
28 | while (ADCSRA & (1<<ADSC)); {}//............................................// Hier wird gewartet bis eine Messung vorgenommen wurde
|
29 |
|
30 | ADC_LWert = ADCL0;
|
31 | ADC_HWert = ADCH0;//........................................................// Die Werte von ADCL und ADCH werden ausgelesen und somit eine neue Messung durchgeführt
|
32 |
|
33 | }//____________________________________________________________________________________________________________________// Ende der ADC_Init Methode
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 | void AD_Read (void){//_________________________________________________________________________________________________// Dies ist die Methode in der die AD-Wandlung durchgeführt wird
|
40 |
|
41 | ADMUX &= (0<<MUX0);//.......................................................// Der AD-Kanal wird auf Kanal 0 gesetzt
|
42 | while(ADCSRA & (1<<ADSC)){}//...........................................// Es wird gewartet bis die AD-Wandlung abgeschlossen ist
|
43 | ADC_LWert = ADCL0;//................................................// Die 8 ersten Bits des 10 Bit AD-Wertes werden in die Variable ADC_LWert gelesen
|
44 | ADC_HWert = ADCH0;//................................................// Die 2 höchstwertigen Bits des 10 Bit AD-Wertes werden in die Variable ADC_HWert gelesen
|
45 | ADC_WertC0 = ADC_LWert + (ADC_HWert * 256);//.......................// Die Werte werden in eine 16 Bit große Variable zusammengerechnet
|
46 |
|
47 | ADMUX |= (1<<MUX0);//.......................................................// Der AD-Kanal wird auf Kanal 0 gesetzt
|
48 | while(ADCSRA & (1<<ADSC)){}//...........................................// Es wird gewartet bis die AD-Wandlung abgeschlossen ist
|
49 | ADC_LWert = ADCL0;//................................................// Die 8 ersten Bits des 10 Bit AD-Wertes werden in die Variable ADC_LWert gelesen
|
50 | ADC_HWert = ADCH0;//................................................// Die 2 höchstwertigen Bits des 10 Bit AD-Wertes werden in die Variable ADC_HWert gelesen
|
51 | ADC_WertC1 = ADC_LWert + (ADC_HWert * 256);//.......................// Die Werte werden in eine 16 Bit große Variable zusammengerechnet
|
52 |
|
53 | }//____________________________________________________________________________________________________________________// Ende der AD_Read Methode
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 | int main(void)
|
61 | {
|
62 |
|
63 | ADC_Init();
|
64 |
|
65 |
|
66 |
|
67 |
|
68 | while(1)
|
69 | {
|
70 | AD_Read();
|
71 | }
|
72 | }
|