Probleme Ausgänge eines Ports setzen Atmega8

OP #2270266
Lesenswert?

Hallo zusammen,

ich komme mir so langsam echt blöd vor. ich möchte eine 
Drehrichtungsumschaltung mittels H-Bridge realisieren eher gesagt will 
ich nur die vorhandene H-Bridge meines RN DualMotor mit meinem Atmega8 
ansteuern. Immer wenn ich 4 Ausgänge des selben Ports verwende 
funktioniert das ganze nicht, wenn ich 2 von Port B und z.B. 2 von Port 
D benutze funktioniert es. Ich blicke da echt nicht durch. Anbei mal der 
code der nicht funktioniert aber die Pins benutzt die ich später gerne 
hätte.
1
     DDRD =(1 <<PD0)|(1 <<PD1)|(1 <<PD2)|(1 <<PD3);      
2
  PORTD = (1 << PD0)|(1 << PD1)|(1 << PD2)|(1 << PD3);    
3
while(1)
4
    {  
5
    switch (rxbuffer[2])
6
    {
7
      case 1 :
8
        PORTD = (1 << PD0);
9
         PORTD &=~ (1 << PD1);
10
      break;
11
  
12
      case 2 :
13
        PORTD = (1 << PD1);
14
         PORTD &=~ (1 << PD0);
15
      break;
16
      default:
17
        PORTD = (1 << PD0)|(1 << PD1);
18
    }
19

20
    switch (rxbuffer[3])
21
    {
22
      case 1 :
23
        PORTD = (1 << PD2);
24
        PORTD &=~ (1 << PD3);
25
      break;
26
  
27
            case 2 :
28
        PORTD = (1 << PD3);
29
        PORTB &=~ (1 << PD2);
30
      break;
31
      default:
32
        PORTD = (1 << PD2)|(1 << PD3);
33
    }
34
    }
Die variablen rxbuffer2 & 3 lese ich per I²C ein das funktioniert auch. 
Wenn ich jetzt einen der beiden motoren von Port D an z.b. Port B hänge 
funktioniert das ganze. Nur so wie es hier ist und ich es auch gerne 
hätte bekomme ich einfach nie einen High Pegel auf den Ausgängen. habe 
die Schaltung momentan auf einem Pollin Evaluationsboard das mit einem 
breadboard verbunden ist.
Bin für jede Hilfe dankbar.
MfG
Striker1985
#2270272
Lesenswert?

PORTD = (1 << PD0);


damit überschreibst du auch die Einstellung für PD2 bzw. PD3
Bzw. umgekehrt, damit ...
        PORTD = (1 << PD2);
ist deine Einstellung von PD0 bzw PD1 von weiter oben zur Makulatur 
geworden.

Bit setzten

   Port |= ( 1 << Bitnummer );

Bit löschen

   POrt &= ~( 1 << Bitnummer );


Alles andere ist: ask for trouble.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren