Forum: Compiler & IDEs Pins lassen sich nicht einzeln steuern!!!????


von Thomas (Gast)


Lesenswert?

Halli hallo an Alle...

hab da ein Problem bei mir festgestellt. Ich benutze PORTB bei mir als
Ausgang. Dabei entspricht PB0->CLK, PB2->/CLK, PB3->/WE, PB4->/CAS,
PB5->/RAS, PB6->/CS, PB7->CKE und PB1 ist nicht belegt.

So jetzt habe ich folgende Funktionen:

void CLK_send(int cycle)
{
  int i=0;

  for(i=0;i<cycle;i++)
    {
      PORTB(0x04 & 0x05);
                        PORTB(0x01 & 0x05);
                }
}
void SetCommandPins (uint8_t cmd)
{
  PORTB = (cmd & 0xf8);

}

So rufe ich nun zuerst CLK_send auf und danach SetCommandPins, werden
PB0->CLK und PB2->/CLK mit auf "NULL" gesetzt. Und umgekehrt das
gleiche, wenn ich erst SetCommandPins aufrufe und dann CLK_send, dann
werden meine Daten "NULL" gesetzt. Das will ich natürlich nicht. Gibt
es da einen Ausweg?
Dennnoch möchte ich aber das Daten bzw. der Takt ohne Zeitversatz
gesetzt werden....

Wie kann man das machen??? Habe auch nicht die Möglichkeit einen
anderen Port zu benutzten. Es muss mit einem funktionieren! Bitte helft
mir...!

Danke Thomas

von Jörg Wunsch (Gast)


Lesenswert?

Hmm, einen (S)DRAM via Portpins ansteuern? ...

PORTB(0x04 & 0x05);

ist, zumindest mit der Standard-Definition von PORTB, sinnloser Code.
Was soll das bezwecken?

Ansonsten solltest Du Dir die Bitoperatoren von C nochmal ansehen.
Ist schon x-fach hier drüber diskutiert worden.  Nur kurz:

PORTB |= (1 << 4);

PORTB = (PORTB & ~0xf8) | (cmd & 0xf8);

usw. usf.

von Thomas (Gast)


Lesenswert?

Hi Jörg,

danke für den tip...jetzt hauts hin...

Ciao Thomas

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.