Georg schrieb:
> 3 Interrupts wären verfügbar. Viel zu wenig. Ich habe in Summe 16
> Eingänge.
Was hängt an den Eingängen?
Nur weil du einen Eingang hast, bedeutet das ja nicht, dass du dazu
einen externen Interrupt benötigst. Den brauchst du nur dann, wenn die
Änderung am Eingangspin so schnell und so kurz erfolgt, dass du Gefahr
läufst, sie in der Hauptschleife zu verpassen. Da dein µC aber ein paar
Hunderttausend Befehle pro Sekunde abarbeitet, müssen die Änderungen an
den Eingaängen dann schon sehr kurz und sehr schell sein, damit das
passiert.
dein µC arbeitet
1 | int main()
|
2 | {
|
3 | ...
|
4 |
|
5 | while( 1 ) {
|
6 |
|
7 | if( PINB & ( 1 << PB0 ) )
|
8 | PORTD ^= ( 1 << PD0 );
|
9 |
|
10 | if( PINB & ( 1 << PB1 ) )
|
11 | PORTD ^= ( 1 << PD1 );
|
12 |
|
13 | }
|
14 | }
|
so schnell ab, dass du als Mensch praktisch keine Verzögerung wahrnehmen
kannst, egal wie schnell du auf einen von 2 Tastern drückst. Ganz im
Gegenteil musst du hier sogar den µC künstlich bremsen
1 | int main()
|
2 | {
|
3 | ...
|
4 |
|
5 | while( 1 ) {
|
6 |
|
7 | if( PINB & ( 1 << PB0 ) )
|
8 | PORTD ^= ( 1 << PD0 );
|
9 |
|
10 | if( PINB & ( 1 << PB1 ) )
|
11 | PORTD ^= ( 1 << PD1 );
|
12 |
|
13 |
|
14 | _delay_ms( 100 );
|
15 | }
|
16 | }
|
damit du vom Blinken noch was siehst. Ob 1, 2 oder 16 Eingänge spielt
dabei nicht wirklich eine große Rolle. Das ist für deinen µC immer noch
Kinderspiel.