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