Gast
#2830917
Hallo,
ich steuere gerade eine Rundumleuchte per Mikrocontroller (Attiny2313)
an. Je nach dem ob Pin D2, Pin D3 oder Pin D4 auf LOW gesetzt ist,
befindet sich die Leuchte in einem anderen Modus und erzeugt ein anderes
Blink-Muster. Das funktioniert soweit auch ganz gut.
int main (void) {
DDRB = 0xFF;
DDRD = 0x00;
PORTD = (1<<PD2) | (1<<PD3) | (1<<PD4);
while(1) {
if (!(PIND & (1<<PD2))) {
blink();
}
if (!(PIND & (1<<PD3))) {
rotate();
}
if (!(PIND & (1<<PD4))) {
strobe();
}
}
return 0;
}
Wenn ich nun aber 2 Pins gleichzeitig auf LOW setze, dann verhällt sich
die Leuchte bzw. der Controller meines Erachtens ein wenig merkwürdig.
Bei dem gleichzeitigen LOW setzen von bspw. Pin D2 und D3 müsste doch
normalerweise erst blink() ausgeführt werden und danach dann rotate()
und danach ginge es von vorn los. Aber in meinem Fall wird nur blink()
aufgerufen und danach wieder blink() und wieder blink() usw. Wie als
würde der Controller den Zustand von PD3 ignorieren bzw. nach dem
aufrufen der ersten Funktion die Schleife neu beginnen. Bei anderen
Kombinationen hat man übrigens das gleiche Problem. Es wird immer die
Funktion aufgerufen, die im Quellcode als erstes genannt wird und danach
geht es (in der Schleife) irgendwie wieder von vorne los.
Woran liegt das?