Forum: Mikrocontroller und Digitale Elektronik STM32 Hardware SPI, einzelner SCK Puls


von Rudii (Gast)


Lesenswert?

Guten Tag,
ich arbeite mit dem TLC5940 und dem Hardware SPI eines STM32F411RE und 
der HAL-Firmware.

Jetzt fordert mein Datenblatt das ich nach der Datenübertragung noch 
einen einzelnen Puls SCK sende(ohne Daten an MOSI).

Aber leider regelt die Firmware die Pulse an SCK ja selbstständig und 
mit GPIO_Write habe ich keinen Zugriff darauf.

Hätte jemand eine Idee wie ich diesen Puls erzeuge?
MfG.

von Max D. (max_d)


Lesenswert?

Also "ohne Daten" gibts ja nicht. Entweder Eins oder Null muss sein (ein 
floatender Eingang fängt sich einfach aus der Umgebung zufällig einen 
Wert).

von Rudii (Gast)


Lesenswert?

Das Problem ist: Ich habe den Hardware SPI in Betrieb mit der 
HAL-Firmware.

Sende ich nun Daten, werden diese über MOSI ausgegeben während auf SCK 
ein Takt erzeugt wird. -> Funktioniert.

Jetzt will ich nach dem senden von Daten, auf dem SCK Pin noch einen 
einzelnen Puls erzeugen(Takt). Allerdings ohne Daten auf dem MOSI Pin. 
Also unabhängig zum SPI.

Da dieser SCK Pin aber als Alternate Function usw. definiert ist, ist 
das gar nicht so leicht...

MfG.

von Max D. (max_d)


Lesenswert?

Ich hab jetzt das DBL nicht gelesen, aber kann es sein, dass du an der 
falschen Stelle Probleme löst ?
Es ist seh ungewöhnlich, dass man einem Slave noch Clocks "nachschieben" 
muss nach dem transfer. Wo steht das denn im Datenblatt ?
Kann es sein, dass du die flaschen Flanken-Einstellungen gewählt hast ?

von Rudii (Gast)


Lesenswert?

Also, im Flowchart schön zu sehen(grüner Kasten, unten Links bei Is 
FirstCycleFlag =
1):
http://www.ti.com/lit/sw/slvc106/slvc106.pdf

Im Datenblatt:
http://www.ti.com/lit/ds/symlink/tlc5940.pdf

Zitat(S. 18 oben):
The first GS data input cycle after dot correction requires an 
additional SCLK pulse after the XLAT signal to
complete the grayscale update cycle. All GS data in the input shift 
register is replaced with status information
data (SID) after updated the grayscale register.

MfG.

von Max D. (max_d)


Lesenswert?

Einfach ein dummy-Byte hinterher schieben.
Die zusätzlichen 7 Takte verschwenden nur ein bischen Zeit....

: Bearbeitet durch User
von ♪Geist (Gast)


Lesenswert?

Max D. schrieb:
> Einfach ein dummy-Byte hinterher schieben.
> Die zusätzlichen 7 Takte verschwenden nur ein bischen Zeit....

Entweder so, oder SCK am Ende als Output definieren und kurz toggeln 
geht auch.

von Max D. (max_d)


Lesenswert?

♪Geist schrieb:
> SCK am Ende als Output definieren und kurz toggeln

Dann darf er erstmal SPI abschalten und togglen und wieder anschalten 
(und am Ende lädt das HAL noch alle Konfigs dafür neu). Nicht optimal.

von Rudii (Gast)


Lesenswert?

Ok die Lösung mit dem Dummy-Byte habe ich jetzt implementiert. Hatte 
Angst das dann etwas "overflowt" etc. Konnte das zwar auch noch nicht 
prüfen aber scheint zu klappen.

MfG.

von Max D. (max_d)


Lesenswert?

Rudii schrieb:
> Hatte
> Angst das dann etwas "overflowt" etc.

Es "overflowed" auch was, und zwar purzeln die 7 überflüssigen Bits 
"ungenutzt" hinten aus der daisychain (bzw. dem einzelnen Chip) raus 
wenn der nächste Datensatz geladen wird. Ist in dieser Applikation aber 
kein Problem (solange die verschwendete Zeit für die unnützen Bits kein 
Problem ist).

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.