Forum: Compiler & IDEs Ein oder mehr Bytes BITWEISE ausgeben ?


von hannes (Gast)


Lesenswert?

Hi,

also es geht um die Ansteuerung von einem (eigentlich mehreren
kaskadierten) Schieberegister(n).

Ich müsste ja irgendwie immer das BIT 0 eines zb. 32bit langen Wertes
(bei 4 Schieberegistern) abfragen, je nach Value den Data-Ausgang High
oder Low schalten (... einen Clock Impuls generieren ... ) und danach
den Wert eins nach rechts schieben und dann wieder von vorne.

Aber wie geht das in C ?

Wäre echt super wenn mir das jemand erklären könnte! Hab echt alles
abgesucht aber nichts gefunden :/

cu

von Harry Dyck (Gast)


Lesenswert?

for (i=0; i<datenlänge; i++)
{
  if (daten&(8000>>(datenlänge-i)))  //0x80 bei 8bit, 0x8000 bei 16
bit, etc
  { PINxy=1 }
  else
  { PINxy=0 }
}

So oder so ähnlich müsste es funktionieren, habs aber nicht
nachgeprüft.

von tubbu (Gast)


Lesenswert?

#define BYTE_LENGHT 8
char i, byte_var;
byte_var= 149; //daten

for(i=0;i<BYTE_LENGHT)
{
     Pin_xy = ((byte_var >> i)&1);
}

glaub so geht es auch (auch nciht nachgeprüft)
muss zugeben, dass ich das Beispiel von Harry Dyck nicht so ganz
verstehe. jetzt 0x8000, oder 8000?

von Jörg Wunsch (Gast)


Lesenswert?

Hardware-SPI wäre das Stichwort für mich hier.

von Harry (Gast)


Lesenswert?

0x8000 natürlich, war ein Vertipper.
Das Prinzip ist eigentlich ganz einfach, man vergleicht den
auszugebenden Wert mit einer binären 1000000...,(zB 0x80 = 10000000B)
wobei man die eins jedes mal eins weiter nach rechts schiebt. Wenn der
Wert (binär gelesen) an der Stelle, wo die Eins steht auch eine 1 hat,
wird der entsprechende PIN auf 1 gesetzt, ansonsten auf 0.
Im Prinzip das Gleiche, wie bei dir tubbu, nur etwas asuführlicher.

von tubbu (Gast)


Lesenswert?

aso, verstehe, ich schiebe den wert selbst, du den vergleichswert
Alles klar ;-)

von hannes (Gast)


Lesenswert?

Hallo,

danke euch - dachte mir schon dass ich das so in der art machen muss
;)

hardware spi - naja ich muss ja mehrere "geräte" (später noch eine
mmc und vl ein display) so ansteuern und da bietet es sich ja an
einfach verschiedene ports zu nehmen und das ganze "software"
technisch zu realisieren. außer einem geschwindigkeitzuwachs würde mir
hw spi doch auch nichts bringen oder liege ich da falsch ?

von Jörg Wunsch (Gast)


Lesenswert?

> außer einem geschwindigkeitzuwachs würde mir hw spi doch auch nichts
> bringen oder liege ich da falsch ?

Ist eben alles bereits vorgegossen.  Mehrere Geräte per SPI steuert
man in der Regel damit an, daß jeder SPI-Slave sein eigenens `chip
select' hat, das dann von einem anderen Portpin aus angesteuert wird.
Nur der angesprochene Slave reagiert dann auf die Impulse.  Sowas
müßtest Du eigentlich auch mit Deinem Schieberegister hinbekommen.

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.