1 | #include <avr/io.h>
|
2 | #define F_CPU 8000000UL // 8 MHz
|
3 | #include <util/delay.h>
|
4 |
|
5 | int main(void)
|
6 | {
|
7 |
|
8 | DDRD = DDRD|(1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4); // Ausgänge
|
9 | DDRD = DDRD|(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7);
|
10 | DDRC = DDRC|(1<<PC3);
|
11 | DDRB = DDRB|(1<<PB0)|(1<<PB6)|(1<<PB7);
|
12 |
|
13 | DDRC = DDRC&~(1<<PC1); //PC1 Eingang
|
14 |
|
15 | // ADC konfigurieren
|
16 | ADMUX = ADMUX|(1<<MUX0); // ADC1-Eingang
|
17 | ADMUX = ADMUX&~(1<<MUX1);
|
18 | ADMUX = ADMUX&~(1<<MUX2);
|
19 | ADMUX = ADMUX&~(1<<MUX3);
|
20 |
|
21 | ADMUX = ADMUX|(1<<REFS0); //Referenzspannung
|
22 | ADMUX = ADMUX&~(1<<REFS1);
|
23 |
|
24 | ADCSRA = ADCSRA |(1<<ADPS0); //Prescaler von: 8
|
25 | ADCSRA = ADCSRA |(1<<ADPS1);
|
26 | ADCSRA = ADCSRA |(1<<ADPS2);
|
27 |
|
28 | ADCSRA = ADCSRA&~(1<<ADIE); //keine Interrupts erwünscht
|
29 |
|
30 | ADCSRA = ADCSRA&~(1<<ADFR); //Free-Running-Modus aus
|
31 | ADCSRA = ADCSRA |(1<<ADEN); // ADC eingeschalten
|
32 |
|
33 | while(1)
|
34 | {
|
35 | uint8_t a=8;
|
36 | uint8_t b=a;
|
37 | uint16_t Analogwert = 0;
|
38 | uint16_t Mittelwert = 0;
|
39 |
|
40 | while(a>0)
|
41 | {
|
42 | ADCSRA = ADCSRA |(1<<ADSC); // ADC Single-Conversion_Mode starten
|
43 |
|
44 | while((ADCSRA & (1<<ADIF)==0)) // auf ADC warten
|
45 | {;}
|
46 |
|
47 | Analogwert = Analogwert+ADCW; // ADC Wert einlesen
|
48 | a--;
|
49 | }
|
50 |
|
51 | Mittelwert= Analogwert / b; // oder shiften
|
52 |
|
53 | if (Mittelwert > 0) PORTC |= _BV(PC3); else PORTC &= ~_BV(PC3);
|
54 | if (Mittelwert > 26) PORTD |= _BV(PD0); else PORTD &= ~_BV(PD0);
|
55 | if (Mittelwert > 52) PORTD |= _BV(PD1); else PORTD &= ~_BV(PD1);
|
56 | if (Mittelwert > 77) PORTD |= _BV(PD2); else PORTD &= ~_BV(PD2);
|
57 | if (Mittelwert > 103) PORTD |= _BV(PD3); else PORTD &= ~_BV(PD3);
|
58 | if (Mittelwert > 128) PORTD |= _BV(PD4); else PORTD &= ~_BV(PD4);
|
59 | if (Mittelwert > 154) PORTD |= _BV(PD5); else PORTD &= ~_BV(PD5);
|
60 | if (Mittelwert > 800) PORTD |= _BV(PD6); else PORTD &= ~_BV(PD6);
|
61 | if (Mittelwert > 900) PORTD |= _BV(PD7); else PORTD &= ~_BV(PD7);
|
62 | if (Mittelwert > 1000) PORTB |= _BV(PB0); else PORTB &= ~_BV(PB0);
|
63 |
|
64 | }
|
65 | return(0);
|
66 |
|
67 | }
|