Prozeßsynchronisierung bei dem Funktionsmodell einer geregelten Laufkatze
Bild 0-1: Funktionsmodell einer Laufkatze
|
Bild 0-2: Layout mit zwei Mikrocontrollern zur Erfassung je eines Abstandssignals (oben links und rechts) und eines weiteren zur Verarbeitung der Abstandssignale und zur Generierung eines PWM-Stellsignals für den Laufkatzenmotor.
|
|
|
|
Übertragung des 10-Bit Sensorsignals von A nach C: A nach C Bit0: PC0 PA0 Bit1: PC1 PA1 Bit2: PC2 PA2 Bit3: PC3 PA3 Bit4: PC4 PA4 Bit5: PC5 PA5 Bit6: PC6 PA6 Bit7: PC7 PA7 Bit8: PD2 PB2 Bit9: PD3 PB3 Signalleitung von A nach C: PD0 nach PB0 Signalleitung von C nach A: PB1 nach PD1 B nach C Bit0: PC0 PC0 Bit1: PC1 PC1 Bit2: PC2 PC2 Bit3: PC3 PC3 Bit4: PC4 PC4 Bit5: PC5 PC5 Bit6: PC6 PC6 Bit7: PC7 PC7 Bit8: PD0 PD2 Bit9: PD1 PD3 Signalleitung von B nach C: PD2 nach PD4 Signalleitung von C nach B: PD7 nach PD3
Code 0-1: Verwendung der digitalen Leitungen.
|
Regeln auf A und B: while(true) { Messe und skaliere A/D-Werte Prüfe, ob C gerade liest wenn nein { Zeige C an, dass nun C nicht mehr anfangen darf zu lesen Schreibe Werte auf die digitalen Leitungen. Zeige C an, dass nun C wieder lesen darf } } Regeln auf C: while(true) { Prüfe, ob A gerade schreibt wenn nein { Zeige A an, dass nun A nicht mehr anfangen darf zu schreiben Lese Sensorwert von A Zeige A an, dass nun A wieder schreiben darf } Prüfe, ob B gerade schreibt wenn nein { Zeige B an, dass nun B nicht mehr anfangen darf zu schreiben Lese Sensorwert von B Zeige B an, dass nun B wieder schreiben darf } }
Code 0-2: Regeln auf A, B un C.
|
while(true) { if( (PIND & (1<<PD1)) == 0 ) //wenn C nicht bei A liest { PORTD |= (1<<PD0); //C anzeigen, dass nun A schreibt Werte schreiben PORTD &= ~(1<<PD0); //C anzeigen, dass nun A nicht mehr schreibt. } }
Code 0-3: Synchronisierungsmechanismus im Mikrocontroller-Programm für A
while(true) { if( (PIND & (1<<PD3)) == 0 ) //wenn C nicht bei B liest { PORTD |= (1<<PD2); //C anzeigen, dass nun B schreibt Werte schreiben PORTD &= ~(1<<PD2); //C anzeigen, dass nun B nicht mehr schreibt. } }
Code 0-4: Synchronisierungsmechanismus im Mikrocontroller-Programm für B
while(true) { if( (PINB & (1<<PB0)) == 0 ) //wenn A nicht schreibt { PORTB |= (1<<PB1); //A anzeigen, dass nun C liest Sensorwert von A lesen PORTB &= ~(1<<PB1); //A anzeigen, dass nun C nicht mehr liest. } if( (PIND & (1<<PD4)) == 0 ) //wenn B nicht schreibt { PORTD |= (1<<PD7); //B anzeigen, dass nun C liest Sensorwert von B lesen PORTD &= ~(1<<PD7); //B anzeigen, dass nun C nicht mehr liest. } PWM-Stellsignal berechnen und setzen }
Code 0-5: Synchronisierungsmechanismus im Mikrocontroller-Programm für C