#define F_CPU 3686400 // Taktfrequenz des myAVR-Boards #include // AVR Register und Konstantendefinitionen //---------------------------------------------------------------------- void initPorts(void) // Unterprogramm füpr die Initalisierung { // Set Bits 0, 1 und 3 von DDRB =1 "Ausgang" DDRC=0xFF; PORTB =0xFF; // PullUp, PD.2=ON so werden eingänge definiert int a=0; } //---------------------------------------------------------------------- main (void) { int a=0; initPorts(); // Unterprogrammaufruf für Initialisierung do { if ((PINB&0x20)) // Eingang 32 Hex =20 ist der Taster Klappe auf / zu { if ((PINB&0x02)) // Eingang 2 Freigabe Absaugung { PORTC=0; // Ausgang 16 Freigabe Absaugung wegnehmen waitMs(3000); } if ((PINB&0x04)) // Eingang 4 Endlage oben Klappe { if ((PINB&0x10)) // Eingang 16 Endlage Scharnier offen { PORTC=4; // Ausgang 4 Ventil Klappe zu Schnellgang waitMs(500); PORTC=0; waitMs(200); do { PORTC=4; // Ausgang 4 Ventil Klappe zu Feingang waitMs(20); PORTC=0; waitMs(100); } while (!(PINB&(0x08))); // Eingang 8 Endlage Klappe unten PORTC=4; // Endlage Klappe unten ist zwar erreicht waitMs(250); // aber nochmals den Zylinder drucklos machen PORTC=0; waitMs(100); PORTC=1; // Ausgang 1 Ventil Scharnier zu waitMs(2000); PORTC=0; waitMs(10); PORTC=16; // Ausgang 16 Freigabe Absaugung ein } // Ende 1 Klappe ist normal zugegangen else { do { PORTC=2; // Ausgang 2 Ventil Scharnier auf waitMs(100); } while (!(PINB&(0x10))); // Eingang 16 Endlage Scharnier auf PORTC=0; waitMs(200); PORTC=4; // Ausgang 4 Ventil Klappe zu Schnellgang waitMs(500); PORTC=0; waitMs(200); do { PORTC=4; // Ausgang 4 Ventil Klappe zu Feingang waitMs(20); PORTC=0; waitMs(100); } while (!(PINB&(0x08))); // Eingang 8 Endlage Klappe unten PORTC=4; // Endlage Klappe unten ist zwar erreicht waitMs(250); // aber nochmals den Zylinder drucklos machen PORTC=0; waitMs(100); PORTC=1; // Ausgang 1 Ventil Scharnier zu waitMs(2000); PORTC=0; waitMs(10); PORTC=16; // Ausgang 16 Freigabe Absaugung ein } // Ende 1 Klappe ist normal zugegangen // aber das Scharnier war nicht ganz offen } else { if ((PINB&0x08)) // Eingang 8 Endlage Klappe unten { do { PORTC=2; // Ausgang 2 Ventil Scharnier auf } while (!(PINB&(0x10))); // Eingang 16 Endlage Scharnier auf waitMs(200); PORTC=0; do { PORTC=8; // Ausgang 8 Ventil Klappe auf } while (!(PINB&(0x04))); // Eingang 4 Endlage Klappe oben waitMs(50); PORTC=0; // Ende 2 Klappe ist offen } else { if ((PINB&0x10)) // Eingang 16 Endlage Scharnier offen { do // Eingang 8 Endlage Klappe unten { PORTC=4; // Ausgang 4 Ventil Klappe zu waitMs(20); PORTC=0; waitMs(200); } while (!(PINB&(0x08))); PORTC=4; // Endlage Klappe unten ist zwar erreicht waitMs(250); // aber nochmals den Zylinder drucklos machen PORTC=0; waitMs(100); PORTC=1; // Ausgang 1 Ventil Scharnier zu waitMs(2000); PORTC=0; waitMs(10); PORTC=16; // Ausgang 16 Freigabe Absaugung ein } // Ende 3 Klappe ist im Notlauf zu gegangen else { do { PORTC=2; } while (!(PINB&(0x10))); // Eingang 16 Endlage Scharnier auf waitMs(100); PORTC =0; } do { PORTC=4; // Ausgang 4 Ventil Klappe zu waitMs(20); PORTC=0; waitMs(200); } while (!(PINB&(0x08))); // Eingang 8 Endlage Klappe unten PORTC=1; // Ausgang 1 Ventil Scharnier zu waitMs(2000); PORTC=0; waitMs(10); PORTC=16; // Ausgang 16 Freigabe Absaugung ein // Ende 3 Klappe ist im Notlauf zu gegangen // und das Scharnier Klappe war nicht offen } } } } while (true); // Schleifenende Mainloop }