Forum: Mikrocontroller und Digitale Elektronik Probleme Ausgänge eines Ports setzen Atmega8


von Sebastian K. (striker1985)


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

von Karl H. (kbuchegg)


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.

von Sebastian K. (striker1985)


Lesenswert?

Vielen Dank Karl Heinz für die schnelle Antwort.
Jetzt wo du's schreibst fällt es mir wie schuppen von den Augen.
Manchmal sind die einfachsten dinge die die am längsten aufhalten...
MfG
Striker1985

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.