1 | //B2 Taster K?ltebad
|
2 | //B3 Taster W?rmebad
|
3 |
|
4 |
|
5 |
|
6 | #include <avr/io.h>
|
7 | #include <avr/interrupt.h>
|
8 | #define F_CPU 2000000
|
9 | #include <util/delay.h>
|
10 | #include <inttypes.h>
|
11 | #include <stdint.h>
|
12 |
|
13 | #define TRUE 1
|
14 | #define FALSE 0
|
15 |
|
16 | // Anchlussbelegung:
|
17 |
|
18 | #define KTEMP_DDR DDRD //Temperatur Input vom Kältebad
|
19 | #define WTEMP_DDR DDRC //Temperatur Input vom Wärmebad
|
20 | #define PTEMP_DDR DDRA //Temperatur Input von Probe
|
21 |
|
22 | #define MOTOR_DDR DDRB //Datenrichtung zum Motor-Steuer-Atmega festlegen
|
23 | #define MOTOR_OUT PORTB //Ausgänge zum Motor-Steuer-Atmega
|
24 | #define MOTOR_IN PINB
|
25 |
|
26 | #define WTEMP_IN PINC //Wärmebad abfragen
|
27 | #define KTEMP_IN PIND //Kältebad abfragen
|
28 | #define PTEMP_IN PINA //Probentemperatur abfragen
|
29 |
|
30 | #define CW PB0 //Motor cw richtung Kältebad
|
31 | #define CCW PB1 //Motor ccw richtung Wärmebad
|
32 | #define KB PB2 //Taster Kältebad abfragen
|
33 | #define WB PB3 //Taster Wärmebad abfragen
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 | int main(void)
|
43 | {
|
44 | uint8_t w_temp = 0; //Variable zum speichern der Zustände vom Wärmebad
|
45 | uint8_t k_temp = 0; //Variable zum speichern der Zustände vom Kältebad
|
46 | uint8_t p_temp = 0; //Variable zum speichern der Zustände von der Probe
|
47 |
|
48 | const uint16_t pause = 200;
|
49 | const uint16_t pause_2 =80;
|
50 |
|
51 |
|
52 | KTEMP_DDR = 0x00; //Eing?nge
|
53 | WTEMP_DDR = 0x00; //Eing?nge
|
54 | PTEMP_DDR = 0x00; //Eing?nge
|
55 | //B0 un B1 als Ausgänge, B2 und B3 als Eingänge:
|
56 | MOTOR_DDR = DDRB = (1 << DDB0) | (1 << DDB1) | (0 << DDB2) | (0 << DDB3);
|
57 |
|
58 |
|
59 |
|
60 | //Pause für 20 Sekunden damit alles andere initialisieren kann
|
61 | //for(int a=0; a<10; a++){_delay_ms( 1000 )};
|
62 |
|
63 |
|
64 | do
|
65 | {
|
66 | k_temp = KTEMP_IN; //Temp vom Kältebad abholen
|
67 | p_temp = PTEMP_IN; //Temp der Probe abholen
|
68 | w_temp = WTEMP_IN; //Temp vom Wärmebad abholen
|
69 |
|
70 | //Wenn Taster vom K?ltebad an (d.h. Probe ist im Kältebad)
|
71 | if((PINB & (1<<KB))
|
72 | {
|
73 | //Motor erst mal grundlegend ausschalten, um einen definierten Startwert zu haben
|
74 | PORTB &= ~ (1<<CCW); //Motor aus
|
75 | PORTB &= ~ (1<<CW); //Motor aus
|
76 |
|
77 |
|
78 | if((p_temp <= k_temp + 1)) //fals Probentemp gleich Kältebadtemp ist
|
79 | {
|
80 | //Pause um damit Probe die Temp vom Kältebad vollständig annehmen kann
|
81 | // for(int a=0; a<20; a++){_delay_ms( 1000 );}
|
82 |
|
83 | //ins Wärmebad fahren)
|
84 | PORTB &= ~ (1<<CCW);
|
85 | PORTB |= (1<<CW);
|
86 |
|
87 | //Pause für 20 Sekunden
|
88 | // for(int a=0; a<20; a++){_delay_ms( 1000 );}
|
89 | }
|
90 | }
|
91 |
|
92 | //Wenn Taster vom Wärmebad an (d.h. Probe ist im Wärmebad)
|
93 | if((PINB & (1<<WB))
|
94 | {
|
95 | if((p_temp >= w_temp - 1))// fals Probentemp gleich Wärmebadtemp ist
|
96 | {
|
97 | //Pause um damit Probe die Temp vom Wärmebad vollständig annehmen kann
|
98 | // for(int a=0; a<20; a++){_delay_ms( 1000 );}
|
99 |
|
100 |
|
101 | PORTB &= ~ (1<<CW);
|
102 | PORTB |= (1<<CCW);
|
103 |
|
104 | }
|
105 | }
|
106 |
|
107 |
|
108 |
|
109 |
|
110 |
|
111 |
|
112 | } //ENDE do
|
113 | while(1);
|
114 |
|
115 | } //ENDE main
|