Kette.c


1
#include <avr/io.h>
2
#include <stdint.h>
3
#include <stdlib.h>
4
#include <util/delay.h>
5
#include <avr/interrupt.h>
6
#define F_CPU 4000000UL
7
8
9
unsigned int pump=0;
10
11
ISR(TIMER1_COMP1_vect)
12
{
13
  pump=1;
14
}
15
16
int main(void)
17
{
18
  DDRD=0x01;  //Ausgang
19
  DDRB=0x00;  //Eingang
20
  TIMSK|=(1<<OCIE1A);  //Timer compare Interrupt enable
21
  TCCR1B=(1<<CTC1)|(1<<CS12)|(1<<CS11)|(1<<CS10);  //Timer1 automatisch rücksetzten, CLK extern steigende Flanke
22
  
23
  unsigned int vorwahl;
24
  
25
  vorwahl=PINB;  //Vorgewählte Stufe
26
  
27
  if(vorwahl==0)
28
  {
29
    OCR1AH=208;
30
    OCR1AL=7;  //2000 Umdrehungen = ca.4000m
31
    
32
  }
33
  else if(vorwahl==1)
34
  {
35
    OCR1AH=202;
36
    OCR1AL=8;  //2250 Umdrehungen = ca.4500m
37
    
38
  }
39
  else if(vorwahl==2)
40
  {
41
    OCR1AH=196;
42
    OCR1AL=9;  //2500 Umdrehungen = ca.5000m
43
    
44
  }
45
  else if(vorwahl==3)
46
  {
47
    OCR1AH=190;
48
    OCR1AL=10;  //2750 Umdrehungen = ca.5500m
49
    
50
  }
51
  else if(vorwahl==4)
52
  {
53
    OCR1AH=11;
54
    OCR1AL=184;  //3000 Umdrehungen = ca.6000m
55
    
56
  }
57
  else if(vorwahl==5)
58
  {
59
    OCR1AH=12;
60
    OCR1AL=178;  //3250 Umdrehungen = ca.6500m
61
    
62
  }
63
  else if(vorwahl==6)
64
  {
65
    OCR1AH=13;
66
    OCR1AL=172;  //3500 Umdrehungen = ca.7000m
67
    
68
  }
69
  else if(vorwahl==7)
70
  {
71
    OCR1AH=29;
72
    OCR1AL=166;  //3750 Umdrehungen = ca.7500m
73
    
74
  }
75
  else if(vorwahl==8)
76
  {
77
    PORTD|=(1<<PB0);  //diehnt als überprüfung ob die else If Anweisungen durchlaufen werden
78
    OCR1AH=15;
79
    OCR1AL=160;  //4000 Umdrehungen = ca.8000m
80
    
81
  }
82
  else if(vorwahl==9)
83
  {
84
    OCR1AH=0;
85
    OCR1AL=20;  //Test
86
    
87
  }
88
  SREG|=(1<<7);
89
  //sei();
90
91
  while(1)
92
  {
93
    if(pump==1)
94
    {
95
      PORTD|=(1<<PB0);
96
      //_delay_ms(250);
97
      //PORTD|=(0<<PB0);
98
      pump=0;
99
    }
100
  }
101
102
}