1 | //C0 cw in vom Mainframe
|
2 | //C1 ccw in vom Mainframe
|
3 | //
|
4 | //C2 Taster K?ltebad
|
5 | //C3 Taster W?rmebad
|
6 | //
|
7 | //D6 cw out zum Motor -> Richtung K?ltebad
|
8 | //D7 ccw out zum Motor -> Richtung W?rmebad
|
9 | //D2 LED on als Anzeige das mit dem Beladen begonnen werden kann
|
10 |
|
11 | #define F_CPU 1000000UL
|
12 |
|
13 | //#include <inttypes.h>
|
14 | #include <stdint.h>
|
15 | #include <avr/io.h>
|
16 | #include <util/delay.h>
|
17 | //#include <avr/interrupt.h>
|
18 |
|
19 |
|
20 | #define MOTOR_DDR DDRD //MOTOR und LED
|
21 | #define TASTER_DDR DDRC //Anschlagtaster und Mainframe
|
22 | #define MOTOR_PORT PORTD //PORTD
|
23 | #define STROMVERSORGUNG PD5 //LED
|
24 | #define MOTORCW_PORTPIN PD6 //Richtung Kältebad
|
25 | #define MOTORCCW_PORTPIN PD7 //Richtung Wärmebad
|
26 |
|
27 | #define MAIN_CW PC0 //cw vom Mainframe -> Richtung Kältebad
|
28 | #define MAIN_CCW PC1 //ccw vom Mainframe -> Richtung Wärmebad
|
29 | #define TASTER_KALT PC2 //Anschlagtaster Kältebad
|
30 | #define TASTER_WARM PC3 //Anschlagtaster Wärmebad
|
31 |
|
32 |
|
33 |
|
34 |
|
35 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
36 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
37 |
|
38 | //****************************************
|
39 | //Einstiegspunkt
|
40 | int main(void)
|
41 | {
|
42 |
|
43 | TASTER_DDR = 0x00; //Eing?nge
|
44 | MOTOR_DDR = 0xFF; //Ausg?nge
|
45 | MOTOR_PORT = 0x00; //D-PINs alle auf low
|
46 |
|
47 | //Initialisierung : erst mal zum Kältebad fahren
|
48 | for(int a=0; a<20; a++){ _delay_ms( 1000 ); }
|
49 | //Wenn Taster vom K?ltebad aus,
|
50 | if(!(PINC & (1<<TASTER_KALT)))
|
51 | {
|
52 | //=> Motor Richtung K?ltebad fahren.
|
53 | MOTOR_PORT |= (1<<MOTORCW_PORTPIN);
|
54 | MOTOR_PORT |= (1<<STROMVERSORGUNG);
|
55 |
|
56 | //warten bis Taster vom K?ltebad durch Motor gedr?ckt wurde
|
57 | while(!(PINC & (1<<TASTER_KALT)))
|
58 | {}
|
59 |
|
60 | //=> Motor anhalten
|
61 | MOTOR_PORT &= ~(1<<MOTORCW_PORTPIN);
|
62 | MOTOR_PORT &= ~(1<<STROMVERSORGUNG);
|
63 | }
|
64 |
|
65 | // Hauptroutine
|
66 | while(1)
|
67 | {
|
68 | //Mainframe: Wenn Signal f?r Richtung W?rmebad anliegt
|
69 | if((PINC & (1<<MAIN_CCW)) && !(PINC & (1<<MAIN_CW)))
|
70 | {
|
71 | //=> Motor Richtung W?rmebad fahren.
|
72 | MOTOR_PORT |= (1<<MOTORCCW_PORTPIN);
|
73 | MOTOR_PORT |= (1<<STROMVERSORGUNG);
|
74 |
|
75 | //warten bis Taster vom K?ltebad durch Motor gedr?ckt wurde
|
76 | while(!(PINC & (1<<TASTER_WARM)))
|
77 | {}
|
78 |
|
79 | //=> Motor anhalten
|
80 | MOTOR_PORT &= ~(1<<MOTORCCW_PORTPIN);
|
81 | MOTOR_PORT &= ~(1<<STROMVERSORGUNG);
|
82 | }
|
83 | //Mainframe: Wenn Signal f?r Richtung K?ltebad anliegt
|
84 | else if((PINC & (1<<MAIN_CW)) && !(PINC & (1<<MAIN_CCW)))
|
85 | {
|
86 | //=> Motor Richtung K?ltebad fahren.
|
87 | MOTOR_PORT |= (1<<STROMVERSORGUNG);
|
88 | MOTOR_PORT |= (1<<MOTORCW_PORTPIN);
|
89 |
|
90 | //warten bis Taster vom K?ltebad durch Motor gedr?ckt wurde
|
91 | while(!(PINC & (1<<TASTER_KALT)))
|
92 | {}
|
93 |
|
94 | //=> Motor anhalten
|
95 | MOTOR_PORT &= ~(1<<MOTORCW_PORTPIN);
|
96 | MOTOR_PORT &= ~(1<<STROMVERSORGUNG);
|
97 | }
|
98 | //Taster: K?ltebad ODER W?rmebad gedr?ckt
|
99 | //else if( ( (PINC & (1<<TASTER_KALT)) || (PINC & (1<<TASTER_WARM)) )
|
100 | //und wenn Motor noch nicht angehalten wurde
|
101 | //&& ( PORTD & (1<<MOTORCW_PORTPIN) || PORTD & (1<<MOTORCCW_PORTPIN) ) )
|
102 | //{
|
103 | //Motor anhalten (cw und ccw Pin f?r Motor auf Low setzen)
|
104 | // MOTOR_PORT &= ~( (1<<MOTORCW_PORTPIN) | (1<<MOTORCCW_PORTPIN) | (1<<STROMVERSORGUNG) );
|
105 | //}
|
106 |
|
107 | }//Hauptroutine / while(1)
|
108 | }//main()
|