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