/* * Dieses Script soll für einen Programmierbaren Fußschalter sein. * * Created: 28.03.2012 17:33:05 * Author: Sven */ #define F_CPU 3686400 // CPU Takt, externer Quarz #include // Einbinden der Bib io.h #define BAUD 9600 // Baudrate = 9600 #include // Einbinden der Bib delay.h // Variablendeklaration--------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------------------------------------ int zaehlwert; // Zählwert für for-Schleifen int prog; // Programmiermodusstatus // Unterprogramm Delay---------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------------------------------------ void warten_ms(unsigned int ms) { while(ms--) _delay_ms(1); } // Unterprogramm "Bestätigungsblinken"------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ void blinken (int anzahl, unsigned int ms) // hier muss die adresse der angesteuerten LED auch auf outports gelegt werden -> TWI port expander 1 adresse: B0 { int a; // lokale Variable a for ( a=0; a 4)) // ist i > 4 dann in die 1 Bank schalten { i = i - 4; warten_ms(200); } // Unterscheidung der einzelnen Schalterstellungen bezogen auf die Bank--------------------------------------------- if (( bit_is_clear ( PIND,3)) && ( i <= 4)) { i = 1; } // Kanalschalter S1 && Bank A => Kanal 1 if (( bit_is_clear ( PIND,4)) && ( i <= 4)) { i = 2; } // Kanalschalter S2 && Bank A => Kanal 2 if (( bit_is_clear ( PIND,5)) && ( i <= 4)) { i = 3; } // Kanalschalter S3 && Bank A => Kanal 3 if (( bit_is_clear ( PIND,6)) && ( i <= 4)) { i = 4; } // Kanalschalter S4 && Bank A => Kanal 4 if (( bit_is_clear ( PIND,3)) && ( i > 4)) { i = 5; } // Kanalschalter S1 && Bank B => Kanal 5 if (( bit_is_clear ( PIND,4)) && ( i > 4)) { i = 6; } // Kanalschalter S2 && Bank B => Kanal 6 if (( bit_is_clear ( PIND,5)) && ( i > 4)) { i = 7; } // Kanalschalter S3 && Bank B => Kanal 7 if (( bit_is_clear ( PIND,6)) && ( i > 4)) { i = 8; } // Kanalschalter S4 && Bank B => Kanal 8 // Unterscheidung der einzelnen Schalterstellungen bezogen auf die Schaltfolge-------------------------------------- // Fallunterscheidung: Je nach Schalterstellung "i" if ( i == 1 ) { outPorts(1,0b00000001); } // Kanal A1 Ausgänge an TWI Port if ( i == 2 ) { outPorts(1,0b00000100); } // Kanal A2 Expander 0 if ( i == 3 ) { outPorts(1,0b00010000); } // Kanal A3 Port B 0...7 if ( i == 4 ) { outPorts(1,0b01000000); } // Kanal A4 if ( i == 5 ) { outPorts(1,0b00000010); } // Kanal B1 if ( i == 6 ) { outPorts(1,0b00001000); } // Kanal B2 if ( i == 7 ) { outPorts(1,0b00100000); } // Kanal B3 if ( i == 8 ) { outPorts(1,0b10000000); } // Kanal B4 // 7 Segmentanzeige------------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------------------------------------ if ( i == 1 ) { PORTB &= ~(1<<4); PORTB |= (1<<5); PORTC |= (1<<0); PORTC &= ~(1<<1); PORTC &= ~(1<<2); PORTC &= ~(1<<3); PORTC &= ~(1<<4);} // 1 if ( i == 2 ) { PORTB |= (1<<4); PORTB |= (1<<5); PORTC &= ~(1<<0); PORTC |= (1<<1); PORTC |= (1<<2); PORTC &= ~(1<<3); PORTC |= (1<<4);} // 2 if ( i == 3 ) { PORTB |= (1<<4); PORTB |= (1<<5); PORTC |= (1<<0); PORTC |= (1<<1); PORTC &= ~(1<<2); PORTC &= ~(1<<3); PORTC |= (1<<4);} // 3 if ( i == 4 ) { PORTB &= ~(1<<4); PORTB |= (1<<5); PORTC |= (1<<0); PORTC &= ~(1<<1); PORTC &= ~(1<<2); PORTC |= (1<<3); PORTC |= (1<<4);} // 4 if ( i == 5 ) { PORTB |= (1<<4); PORTB &= ~(1<<5); PORTC |= (1<<0); PORTC |= (1<<1); PORTC &= ~(1<<2); PORTC |= (1<<3); PORTC |= (1<<4);} // 5 if ( i == 6 ) { PORTB |= (1<<4); PORTB &= ~(1<<5); PORTC |= (1<<0); PORTC |= (1<<1); PORTC |= (1<<2); PORTC |= (1<<3); PORTC |= (1<<4);} // 6 if ( i == 7 ) { PORTB |= (1<<4); PORTB |= (1<<5); PORTC |= (1<<0); PORTC &= ~(1<<1); PORTC &= ~(1<<2); PORTC &= ~(1<<3); PORTC &= ~(1<<4);} // 7 if ( i == 8 ) { PORTB |= (1<<4); PORTB |= (1<<5); PORTC |= (1<<0); PORTC |= (1<<1); PORTC |= (1<<2); PORTC |= (1<<3); PORTC |= (1<<4);} // 8 // Die ansteuerung der 7 Segmentanzeige soll über TWI Port Expander 1 erfolgen, also über den zweiten über Port A 0...7 // muss also auch komplett umgeschrieben werden. ggf. ist es hier ratsam das komplette Bit in dieser form -> outPorts(1,0b10000000); zu beschreiben, // da das bitshifting doch recht unübersichtlich werden kann. } } // Ich habe nun die kompletten TWI Sachen rausgenommen, damit ich zunächst mal erklären kann, was eigentlich wie passieren soll. // bzw. was wo angeschlossen sein soll. // Umschreiben der Ports von: Unterprogramm Lauflicht, 7 Segmentanzeige, Schaltfolge, bezogen auf TWI adresse