main.c


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
}