Forum: Mikrocontroller und Digitale Elektronik AVR SCK-Toggeln wenn SPI enabled ist


von Spiffman G. (spiffman)


Lesenswert?

Hallo zusammen,

ich versuche mich gerade am TLC5940 + Mega328P. Zur Steuerung des Chips 
sende ich zuerst 12 Byte an Daten, dann soll ein Puls auf SCK folgen und 
dann noch einmal 24Byte an Daten.
Das ganze funktioniert mit dem HW-SPI, jedoch macht das Toggeln der 
SCK-Leitung Probleme. Es scheint nach dem SPI-Setup kein Toggeln des 
SCK-Pins mehr möglich sein.
Im Datenblatte finde ich leider nichts diesbezüglich (nur die 
DDR-Register werden verändert).
Könnt ihr die SCK-Leitung nach dem Senden toggeln ohne, dass ihr das 
SPCR manipuliert?

von spess53 (Gast)


Lesenswert?

Hi

>Im Datenblatte finde ich leider nichts diesbezüglich

Dann suche mal nach 'I/O-Ports -> Alternate Port Functions'.

MfG Spess

von Spiffman G. (spiffman)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Im Datenblatte finde ich leider nichts diesbezüglich
>
> Dann suche mal nach 'I/O-Ports -> Alternate Port Functions'.
>
> MfG Spess

Danke, aber sas hatte ich ja gefunde: Hier steht nur dass der DDR 
geändert wird. Zugriff auf den PIN sollte folglich doch trotzdem möglich 
sein (SPI ist Master, PIN ist Output)
> SCK/PCINT5 – Port B, Bit 5
> SCK: Master Clock output, Slave Clock input pin for SPI channel.
> When the SPI is enabled as a
> Slave, this pin is configured as an input regardless of the setting
> of DDB5. When the SPI is enabled as a Master, the data direction of
> this pin is controlled by DDB5. When the pin is forced
> by the SPI to be an input, the pull-up can still be controlled by
> the PORTB5 bit.

von Uwe (de0508)


Lesenswert?

Hallo Spiffman

Spess hat ja schon auf das Datenblatt des m328p verwiesen.

Siehe Seite 83

Danach würde ich die serielle Ausgabe komplett per Software machen.

Dazu schreibt man sich ein paar Funktion oder Macros, wie:
toggle_spi_clk(), reset_spi_bit() und set_spi_bit().

Auf der nächsten Abstraktionsebene dann eine Funktion zum senden eines 
Bytes
send_byte_to_spi(uint8) und eine zum senden eines Arrays of Byte 
send_array_to_spi(uint8 *, size_t).

Damit sollte das Protokoll des TLC5940 in einer weiteren Funktion 
sed_data_to_tlc5940(..) abzubilden sein.

: Bearbeitet durch User
von Spiffman G. (spiffman)


Lesenswert?

Uwe S. schrieb:
> Hallo Spiffman
>
> Spess hat ja schon auf das Datenblatt des m328p verwiesen.
> Siehe Seite 83
>
> Danach würde ich die serielle Ausgabe komplett per Software machen.
>
> Dazu schreibt man sich ein paar Funktion oder Macros, wie:
> toggle_spi_clk(), reset_spi_bit() und set_spi_bit().
>
> Auf der nächsten Abstraktionsebene dann eine Funktion zum senden eines
> Bytes
> send_byte_to_spi(uint8) und eine zum senden eines Arrays of Byte
> send_array_to_spi(uint8 *, size_t).
>
> Damit sollte das Protokoll des TLC5940 in einer weiteren Funktion
> sed_data_to_tlc5940(..) abzubilden sein.

Hallo Uwe,

danke für deine Antwort und Vorschläge. Ich wollte eigentlich ohne 
Bit-Banging auskommen. Damit sind die 193Bit natürlich problemlos 
möglich.

Eigentlich wollte ich nur wissen ob und wie ich SCK toggeln kann.
Geht dies auch ohne das SPI vorher zu deaktivieren?

von Uwe (de0508)


Lesenswert?

Hallo Spiffman,

zum einen sehe ich im Datenblatt die 193 Bit nicht, aber benutzen keinen 
TLC5940 und könnte dieses Bit auch überlesen haben.

Aber ich gehe, davon aus, dass die Ports exklusiv von der SPI 
Hardwareeinheit belegt sind.

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>Eigentlich wollte ich nur wissen ob und wie ich SCK toggeln kann.
>Geht dies auch ohne das SPI vorher zu deaktivieren?

Lt. Table 14-4. Overriding Signals for Alternate Functions in PB7...PB4

ist bei SPE • MSTR der Pin mit dem SPI-Clock belegt.

MfG Spess

von Falk B. (falk)


Lesenswert?

@ Spiffman G. (spiffman)

>ich versuche mich gerade am TLC5940 + Mega328P. Zur Steuerung des Chips
>sende ich zuerst 12 Byte an Daten, dann soll ein Puls auf SCK folgen und
>dann noch einmal 24Byte an Daten.

Nein. Man braucht nur die 12x8 Takte, welche das SPI selber generiert. 
Der Zusatztakt ist nicht nötig bzw. falsch. Ich hab ein Board mit dem IC 
in Betrieb, und es läuft genau so wie es soll.

>Könnt ihr die SCK-Leitung nach dem Senden toggeln ohne, dass ihr das
>SPCR manipuliert?

Nein.

von Karl H. (kbuchegg)


Lesenswert?

Uwe S. schrieb:
> Hallo Spiffman,
>
> zum einen sehe ich im Datenblatt die 193 Bit nicht, aber benutzen keinen
> TLC5940 und könnte dieses Bit auch überlesen haben.

Mir gehts wie dir.
Ich sehe im Datenblatt nicht, wieso man nach den ersten 12 Bytes (die 
wohl die Grayscale Daten darstellen sollen) einen Puls auf SCK benötigen 
würde.

Das wäre auch schön dumm von TI, einen Chip zu bauen, bei dem man 
derartige Klimmzüge machen müsste und Taktanzahlen benötigen würde, die 
kein Vielfaches von 8 sind.

Es ist zwar schon einen Weile her und er war kein 5940 sondern ein 5955, 
aber das Prinzip der Dateneintaktung ist da wie dort ja dasselbe.

Ich denke auch, dass Spiffman da irgendwas im Datenblatt 
fehlinterpretiert hat. Das 'Problem' das er gerade zu lösen versucht, 
existiert in Wirklichkeit gar nicht. Womit die Beantwortung der eingangs 
gestellten Frage zwar einen gewissen interessanten Wert hat, aber im 
Grunde uninteressant ist, weil sich dieses Problem in dieser 
Aufgabenstellung überhaupt nicht stellt.

: Bearbeitet durch User
von Spiffman G. (spiffman)


Lesenswert?

Danke für eure Antworten!

Uwe S. schrieb:
> Hallo Spiffman,
>
> zum einen sehe ich im Datenblatt die 193 Bit nicht, aber benutzen keinen
> TLC5940 und könnte dieses Bit auch überlesen haben.
>
> Aber ich gehe, davon aus, dass die Ports exklusiv von der SPI
> Hardwareeinheit belegt sind.
Ja, das Bit ist sehr versteckt und wir nur kurz erwähnt. Es wird zur 
Übernahme der Daten beim ersten GS-Zyklus benötigt und um die LOD ins 
SOUT-Register zu übernehmen.


spess53 schrieb:
> Hi
>
>>Eigentlich wollte ich nur wissen ob und wie ich SCK toggeln kann.
>>Geht dies auch ohne das SPI vorher zu deaktivieren?
>
> Lt. Table 14-4. Overriding Signals for Alternate Functions in PB7...PB4
>
> ist bei SPE • MSTR der Pin mit dem SPI-Clock belegt.
>
> MfG Spess

Hi Spess, danke für den Hinweis! Ich kannte PVOE und PVOV noch nicht! 
Wieder was gelernt! Super!

von Karl H. (kbuchegg)


Lesenswert?

Spiffman G. schrieb:

> Ja, das Bit ist sehr versteckt und wir nur kurz erwähnt. Es wird zur
> Übernahme der Daten beim ersten GS-Zyklus benötigt und um die LOD ins
> SOUT-Register zu übernehmen.


Meinst du das hier?
1
LOD: LED OPEN DETECTION
2
3
The TLC5940 has an LED-open detector that detects broken or disconnected
4
LEDs. The LED open detector pulls the XERR pin to GND when an open LED is
5
detected. XERR and the corresponding error bit in the Status Information
6
Data is only active under the following open-LED conditions.
7
1. OUTn is on and the time tpd2 (1 ms typical) has passed.
8
2. The voltage of OUTn is < 0.3V (typical)
9
The LOD status of each output can be also read out from the SOUT pin.
10
See STATUS INFORMATION OUTPUT section for details. The LOD error bits
11
are latched into the Status Information Data when XLAT returns to a
12
low after a high. Therefore, the XLAT pin must be pulsed high then
13
low while XERR is active in order to latch the LOD error into the
14
Status Information Data for subsequent reading via the serial shift
15
register.

Ich seh immer noch nicht, wozu man da jetzt einen Puls auf SCK benötigen 
würde.

von Spiffman G. (spiffman)


Lesenswert?

Karl Heinz schrieb:
> Spiffman G. schrieb:
>
>> Ja, das Bit ist sehr versteckt und wir nur kurz erwähnt. Es wird zur
>> Übernahme der Daten beim ersten GS-Zyklus benötigt und um die LOD ins
>> SOUT-Register zu übernehmen.
>
> Meinst du das hier?LOD: LED OPEN DETECTION
>
>
> Ich seh immer noch nicht, wozu man da jetzt einen Puls auf SCK benötigen
> würde.

Es gibt zwei Stellen:
1
The first GS data input cycle after dot correction requires an 
2
additional SCLK pulse after the XLAT signal to complete the grayscale
3
update cycle. All GS data in the input shift register is replaced with
4
status information data (SID) after updated the grayscale register.
Das ist Unproblematisch, man sendet einfach nach dem XLAT noch ein Byte 
Dummy-Daten.

1
SOUT outputs the MSB of the SID at the same time the 
2
SID are stored in the SID register, as shown Figure 20 . 
3
The next SCLK pulse, which will be the clock for receiving 
4
the SMB of the next grayscale data, transmits MSB-1 of SID
Hier ist es doof, da wir einen SCK-Puls benötigen um die SID-Daten zu 
schieben, so dass sie im MISO richtig angekommen. Man sieht es in Figure 
20 bei SCK.
Hat man diesen Puls nicht, kommen die Daten alle um ein Bit verschoben 
an.

Wäre auch kein Problem, man kann ja den Buffer ein Byte größer machen. 
Aber mir ist noch kein effizienter Weg zum Bit-Shiften von so großen 
Daten eingefallen.

von San L. (zwillingsfreunde)


Lesenswert?

Falk Brunner schrieb:
> Nein. Man braucht nur die 12x8 Takte, welche das SPI selber generiert.
> Der Zusatztakt ist nicht nötig bzw. falsch. Ich hab ein Board mit dem IC
> in Betrieb, und es läuft genau so wie es soll.

Hat das überhaupt einer von euch gelesen?

von Karl H. (kbuchegg)


Lesenswert?

Spiffman G. schrieb:


> Hier ist es doof, da wir einen SCK-Puls benötigen um die SID-Daten zu
> schieben, so dass sie im MISO richtig angekommen. Man sieht es in Figure
> 20 bei SCK.

Tatsächlich.

Dann muss ich wohl eingestehen falsch gelegen zu haben.
Ich muss allerdings auch sagen, dass ich noch nie Status-Information vom 
Treiber zurück gelesen habe.

von Karl H. (kbuchegg)


Lesenswert?

San Lue schrieb:
> Falk Brunner schrieb:
>> Nein. Man braucht nur die 12x8 Takte, welche das SPI selber generiert.
>> Der Zusatztakt ist nicht nötig bzw. falsch. Ich hab ein Board mit dem IC
>> in Betrieb, und es läuft genau so wie es soll.
>
> Hat das überhaupt einer von euch gelesen?

Ich denke das ist hinfällig.
Der entscheidende Punkt ist eine fehlende Information im 
Eröffnungsposting. Nämlich das es um das Zurücklesen der 
Status-Information geht. Benötigt man das nicht, dann ist der 
zusätzliche Takt uninteressant.

von Spiffman G. (spiffman)


Lesenswert?

Ja genau. Mir ging es nur darum, mein Verständnis des SPI zu erweitern.
Eigentlich ist die Frage ja Slave-Unabhängig.

-> Wieder was gelernt.

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.