Hi,
Ich arbeite gerade an einer Weichensteuerung für meine
Modelleisenbahnanlage und hänge bei der Programmierung fest.
Im Grunde soll beim Betätigen eines Tasters die Weiche umgestellt, eine
LED eingeschaltet (zum Signalisieren des Schaltzustandes), und der
jeweilige Schaltzustand im EEPROM gespeichert werden.
Das Problem das ich jetzt habe ist, dass wenn der Taster betätigt wird
einfach nichts passiert.
Ich denke dass ich beim Definieren der Ein- bzw. Ausgänge und der
Interrupts einen Fehler gemacht habe. Darum hier der Code der
Initialisierung:
1 | /*
|
2 | Anschlüsse:
|
3 | _____
|
4 | Externer Taster RST 5-|* |-Vcc 5V
|
5 | Weiche abzweigen 3-| µC |-2 LED grün
|
6 | Weiche geradeaus 4-| |-1 Taster
|
7 | 0V GND-|_____|-0 LED rot
|
8 |
|
9 | */
|
10 |
|
11 | void init()
|
12 | {
|
13 | //Weichenstatus vom EEPROM lesen:
|
14 |
|
15 | State = eeprom_read_byte(&eepStateAdr);
|
16 |
|
17 |
|
18 | //Ein und Ausgänge definieren:
|
19 |
|
20 | DDRB &= ~(1 << DDB1); //Pin 1 als Eingang
|
21 | DDRB |= (1 << DDB0) | (1 << DDB2) | (1 << DDB3) | (1 << DDB4); //Pin 0,2,3,4 als Ausgang
|
22 | PORTB |= (1 << DDB1); //Pin 1 PullUp aktivieren
|
23 |
|
24 |
|
25 | //Interrupts einstellen:
|
26 |
|
27 | MCUCR |= ((1<<ISC00) | (1<<ISC01)); //Int0 Interrupt auf steigende Flanke
|
28 | GIMSK |= (1<<INT0); //Int0 Interrupt aktivieren
|
29 |
|
30 |
|
31 | //init anzeige:
|
32 |
|
33 | LED(EIN); //beide LEDs ein, nach 1 sekunde wieder aus
|
34 | _delay_ms(1000);
|
35 | LED(AUS);
|
36 | }
|
Was ich noch nicht ganz verstanden habe ist, wie sich der Spannungslevel
der Pins verhaltet je nachdem wie sie definiert sind. Korrigiert mich
bitte wenn ich falsch liege.
Wenn ein Pin als
-Ausgang gesetzt wird ist die Spannung abhängig vom Code, standardmäßig
auf 0V.
Wenn der Pin als Eingang gesetzt ist, liegt er auf GND.