1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | void Init_ADC(void)
|
5 | {
|
6 | //*** Init ADC ***
|
7 | int x;
|
8 | PRR &= !(1<<PRADC); // ADC power reduction cleared
|
9 | ADCSRA |= (1<<ADEN); // ADC aktivieren
|
10 | ADCSRA |= (1<<ADPS1)|(1<<ADPS2); // Vorteiler auf 64
|
11 | ADMUX |= (1<<REFS0); // Uref = 5V
|
12 | ADMUX |= (1<<MUX1)|(1<<MUX0); // ADC-Kanal 3 einstellen
|
13 | ADMUX |= (1<<ADLAR); // Ausgabe linksbündig
|
14 |
|
15 | //*** Dummy Readout ***
|
16 | ADCSRA |= (1<<ADSC); // Start ADC-Wandlung
|
17 | while (ADCSRA &(1<<ADSC)); // Auf Abschluss der Konvertierung warten
|
18 | x = ADC; // Das Ergebnis der 1.Wandlung in x speichern
|
19 | }
|
20 |
|
21 | int main(void)
|
22 | {
|
23 | int messwert, messwert1=0, messwert2=0, messwert3=0;
|
24 |
|
25 | DDRA = 0x03; // PA0, PA1 = Ausgang
|
26 | DDRB = 0xFF;
|
27 |
|
28 | Init_ADC();
|
29 |
|
30 | while(1)
|
31 | {
|
32 | PORTB ^= (1<<PB0); // Toggle PB0 every 20ms
|
33 |
|
34 | while (!(PINA & (1<<PA4))) // Wenn Signal an PA4 = LOW (Startpunkt für die Messung)
|
35 | {
|
36 | _delay_us(600); // Warte bis zur 1. Messung
|
37 |
|
38 | PORTB |= (1<<PB1); // Oszi Messpunkt
|
39 | _delay_us(2);
|
40 | PORTB &= ~(1<<PB1);
|
41 |
|
42 | ADCSRA |= (1<<ADSC); // Start ADC-Wandlung
|
43 | while (ADCSRA &(1<<ADSC)); // Auf Abschluss der Konvertierung warten
|
44 | messwert1 = ADC; // Das Ergebnis der Wandlung in messwert speichern
|
45 | ADCSRA |= (1<<ADSC); // Start ADC-Wandlung
|
46 | while (ADCSRA &(1<<ADSC)); // Auf Abschluss der Konvertierung warten
|
47 | messwert2 = ADC; // Das Ergebnis der Wandlung in messwert speichern
|
48 | ADCSRA |= (1<<ADSC); // Start ADC-Wandlung
|
49 | while (ADCSRA &(1<<ADSC)); // Auf Abschluss der Konvertierung warten
|
50 | messwert3 = ADC; // Das Ergebnis der Wandlung in messwert speichern
|
51 |
|
52 | messwert = (messwert1 + messwert2 + messwert3)/3; // Mittelwert bilden
|
53 | }
|
54 | if (messwert <= 410) // Sender = OFF (Taste = gedrückt)
|
55 | PORTA |= (1<<PA1); // PA1 = HIGH (LED ON)
|
56 | else
|
57 | PORTA |= (1<<PA1); // PA1 = HIGH (LED ON)
|
58 |
|
59 | _delay_ms(20);
|
60 | }
|
61 | }
|