Forum: Mikrocontroller und Digitale Elektronik Commands über SPI senden an Registeradresse


von Tho S. (thoso805)


Lesenswert?

Hallo ich möchte einen IC-TW28 mit einem XMEGA A3U betreiben.

http://www.ichaus.de/upload/pdf/TW28_datasheet_C1en.pdf

Ich betreibe bereits erfolgreich ein Display über SPI.

Unterschiede zum Display:

Display hat feste Commands und der TW28 hat Registeradressen wo Commands 
reingeschrieben werden müssen.

Außerdem sind die Commands für den TW28 nicht 8 Bit lang sondern 32 Bit 
lang.

Ich Zerpflücke die 32 Bit so:

/c void spid_Send32(uint32_t data)
{

  uint8_t data0 = data;
  uint8_t data1 = (data >> 8 );
  uint8_t data2 = (data >> 16 );
  uint8_t data3 = (data >> 24 );




  PORTD.OUTCLR = PIN4_bm;                //Fallende Flanke an XSS
  SPID_STATUS=data0;
  Spid_Busy();
  SPID_STATUS=data1;
  Spid_Busy();
  SPID_STATUS=data2;
  Spid_Busy();
  SPID_STATUS=data3;
  Spid_Busy();
  PORTD.OUTSET = PIN4_bm;                //XSS wieder High

}
/c



Ich weiß versteh leider nicht wie ich die Commands in die richtigen 
Register schiebe.

Andererseits merke ich grade die Adressen sind ja 32 Bit lang und die 
Commands eigentlich 8 Bit oder?

Seh den Wald vor lauter Bäumen nicht mehr


Ist es so, dass man zuerst das Commandbyte sendet und dann die 
Registeradresse hinterher schiebt?

also muss ich über SPI nicht 32BIT für ein Command senden sondern 40?

: Bearbeitet durch User
von Gelehrter (Gast)


Lesenswert?

Tho S. schrieb:
> Seh den Wald vor lauter Bäumen nicht mehr

Dabei bräuchtest du nur das Datenblatt lesen und verstehen.

Tip: ab Seite 29 ist alles beschrieben.

Wenn du das nicht verstehst dann frage wieder.

von Tho S. (thoso805)


Lesenswert?

Hallo,

ja an der Stelle klebe ich grade am Datenblatt.

Bin absoluter Neuling.

habe grade etwas editiert.

von Gelehrter (Gast)


Lesenswert?

Tho S. schrieb:
> Ich betreibe bereits erfolgreich ein Display über SPI.

Tho S. schrieb:
> Bin absoluter Neuling.

So so .....

Übrigens ist in deinem Code-Fragment festzustellen dass
die Reihenfolge der Bytes nicht stimmt. Wie so oft wird
auch bei diesem Chip das M(ost) S(ignificant) B(it/yte)
immer zuerst geschrieben.

von Tho S. (thoso805)


Lesenswert?

Vielen Dank für den Hinweis

Beim Punkt Register Write steht tatsächlich was ich suche.
Jedoch wird daraus deutlich dass, die Registeradresse 16 Bits lang ist 
wenn ich aber in der RegisterTabelle nachschaue sehe ich z.B MAIN_CFG 
unter 0x0000.

Wie ist das zu verstehen?

von Gelehrter (Gast)


Lesenswert?

Tho S. schrieb:
> Wie ist das zu verstehen?

Wie ist das nicht zu verstehen?

Die Register Map geht von 0x0000 bis 0x4028, und das
braucht nun mal einen Adressumfang von 16 (15) Bit.

von Tho S. (thoso805)


Lesenswert?

sorry meine Dummheit 0x00 ist ja nicht 32 BIT wie ich dachte.


da ich nur über SPI ins Register des TW28 schreiben möchte ist mein
CONTROL BYTE 110011000 richtig?


wie ich dann ins Register schreibe habe ich verstanden.
Meine Funktion noch die Reihenfolge ändern und ab durch SPI

von Gelehrter (Gast)


Lesenswert?

Tho S. schrieb:
> ist mein CONTROL BYTE 110011000 richtig?

Wie du die einzelnen Kommandos implementierst bete ich dir
jetzt nicht vor, nur soviel: 9 Bits wirst du schwerlich in
einem Byte unterbringen können.

von Tho S. (thoso805)


Lesenswert?

eine 1 zu viel getippt

10011000

vielen Dank

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.