Hallo Mikrocontrollerfreunde,
bin absoluter Neuling was Foren anbelangt!
Ich setze einen Atiny13 für eine Anfahr- & Bremssteuerung bei meiner
Modellbahn ein (was auch soweit super funktioniert).
Meine Schaltung ist wie folgt aufgebaut:
PB0 – PB2 als Eingang (Signale kommen von einem Atmega 16 – funktioniert
auch problemlos.
PB3 & PB4 als Ausgang
An PB3 habe ich ein Relais und PB4 geht über das Relais zum Bahngleis.
Programmiert habe ich das Ganze in „AVR C“
Hier mal ein Auszug...
1 | int main(void)
|
2 | {
|
3 |
|
4 | DDRB = ( 1<<PB3 )|( 1<<PB4 ); //als Ausgang
|
5 | DDRB &= ~( 1<<PB0 )|( 1<<PB1 )|( 1 << PB2 ); //als Eingang
|
6 | PORTB |= ( 1<<PB0 )|( 1<<PB1 )|( 1 << PB2 ); //PullUps aktivieren
|
7 | PORTB &= ~( 1<<PB3 )|( 1<<PB4 ); //alle Ausgänge auf AUS
|
8 |
|
9 |
|
10 | while(1)
|
11 | {
|
12 | if ( (( PINB & 0x01 ) == 0x01) && (fahrt == 0) ) //wenn am Eingang 001 anliegt...
|
13 | {
|
14 | PORTB |= ( 1<<PB3); //...setze PB3 (Relais zieht an)
|
15 | }
|
16 |
|
17 |
|
18 | if ( (( PINB & 0x02 ) == 0x02) && (fahrt == 0) ) //wenn am Eingang 010 anliegt
|
19 | {
|
20 | PORTB &= ~( 1<<PB3); //...lösche PB3 (Relais fällt ab)
|
21 | }
|
22 |
|
23 | if ( (( PINB & 0x03 ) == 0x03) && (fahrt == 1) ) //wenn am Eingang 011 anliegt und der Zug fährt (1) dann...
|
24 | {
|
25 | bremsen(); //...gehe zur function "bremsen"
|
26 | }
|
27 |
|
28 |
|
29 | if ( (( PINB & 0x04 ) == 0x04) && (fahrt == 0) ) //wenn am Eingang 100 anliegt und der zug nicht fährt (0) dann...
|
30 | {
|
31 | anfahren(); //... gehe zur function "anfahren"
|
32 | fahren(); //... dann weiter zur function "fahren"
|
33 | }
|
34 |
|
35 |
|
36 | if (( PINB & 0x05 ) == 0x05 ) //wenn am Eingang 101 anliegt dann...
|
37 | {
|
38 | _delay_us(25); //warte ganz kurz und tue nix
|
39 | }
|
40 | }
|
41 | return(0)
|
42 | }
|
So und hier mein eigentliches Problem:
Die erste, zweite und vierte if-Anweisung werden problemlos
durchlaufen.
Bei der letzten sollte er eigentlich (noch) nix machen dem ist aber
nicht so.
Er schaltet das Relais an PB3 und geht dann zur Funktion "anfahren()" -
Warum ist das so ? Wo liegt der Fehler ?
Ich hoffe ich konnte mich halbwegs verständlich ausdrücken.
MFG
goeran