Forum: Compiler & IDEs Nur 6bits mit SPI übertragen


von Charles H. (scientificum)


Lesenswert?

Hallo,

ich habe diese Funktion, die mir auf einem Atmega128 8 Bits (also 1 
Byte) über die Hardware-SPI einwandfrei überträgt.
1
void SPI_MasterTransmit(uint8_t data) { 
2
  /* Start transmission */ 
3
  SPDR = data; 
4
  /* Wait for transmission complete */ 
5
  while (!(SPSR & (1<<SPIF))) {} 
6
}

Nun will ich aber nur 6 Bits übertragen und weiß nicht, wie ich es 
machen soll. Könnte mir bitte jemand helfen, stehe etwas auf dem 
Schlauch...

Danke

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Die Hardware-SPI kann nur 8 Bits (oder Vielfache davon) übertragen.
Du musst dein Bitbanging in Software machen.

von Charles H. (scientificum)


Lesenswert?

Ah, habe ich mir fast gedacht... Dann bringst's nichts, es in Hardware 
zu machen :(

Ok, vielen Dank für die rasche Antwort,

Hari

von Simon K. (simon) Benutzerseite


Lesenswert?

Warum müssen es denn genau 6 Bit sein? Ich wette, dein Vorhaben lässt 
sich auch mit 8 Bit hinkriegen.

von Matthias L. (Gast)


Lesenswert?

>Nun will ich aber nur 6 Bits übertragen und weiß nicht, wie ich es
>machen soll. Könnte mir bitte jemand helfen, stehe etwas auf dem
>Schlauch...


Warum? Sorge einfach dafür, dass deine 6Bits die letzten sechs sind, die 
rausgeschoben werden. Und fertig.

von Charles H. (scientificum)


Lesenswert?

Es geht um einen LED-Treiber TLC5940 von ti, es müssen für die Dot 
Correction 16 x 6 Bit und für die PWM nochmal 16 x 12 Bit in das 
Register geschoben werden. Natürlich könnte man die 96 Bits für DC in 12 
x 8 und 192 als 24 x 8 für GS aufteilen... Bringt aber die letzten 3 
Stunden Arbeit wieder auf 0. Man lernt ja auch was dabei :)

von Michael U. (amiga)


Lesenswert?

Hallo,

wenn ich solche SPI-Geschichten in Angriff nehme, ist mein erster Blick 
im Datenblatt immer, ob Vielfache von 8 irgendwie möglich sind.
Nur wenn da kein Weg geht (einige alte Radio-PLL-ICs z.B.) wird "zu Fuß" 
geschoben.

Allerdings kostet auch Software-SPI nur sehr wenig Programmieraufwand.

Gruß aus Berlin
Michael

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.