Forum: Mikrocontroller und Digitale Elektronik ATMega328P SPI 16 Bit senden


von Bolot J. (bolot)


Lesenswert?

Hallo zusammen,

ich suche für einen ATMega328P einen Code um über Hardware SPI oder Soft 
SPI 16 Bit Daten an den Motortreiber A4963 zu senden. Dieser erwartet 
nämlich 16 Bit Daten in einem Wort. Damit lassen sich die Register im 
Treiber beschreiben.

Innerhalb von 16 Takten müssen alle Daten übertragen sein. Der Treiber 
hört ab dem 17 Takt nicht mehr zu. Somit dürfen nach 8 Bit Übertragenen 
Daten kein Flag oder ähnliches verschickt werden. Da mir sonst nach 16 
Bit ein Bit von meinem Wort fehlen.

Hat hier jemand zufällig den passenden Code dazu? Meine Versuche bisher 
sind leider erfolglos. Hatte es mit einem gebastelten Code per SOFT SPI 
versucht, leider ohne Erfolg. Der Treiber hat einfach nicht zugehört.

Danke schonmal im voraus.

von Einer K. (Gast)


Lesenswert?

Ich verstehe dein Problem nicht...
Denn 2 Byte nacheinander sind auch 16 Bit.

von S. Landolt (Gast)


Lesenswert?

> mit einem gebastelten Code per SOFT SPI
Daran wird wohl das Scheitern liegen. Mit einem ATmega328 2 Bytes 
nacheinander per SPI herausschicken, ist Standard - mich deucht, das ist 
leucht.

von Bolot J. (bolot)


Lesenswert?

Wird bei der implementierten SPI nicht nach einem Byte ein Flag 
übertragen? Bzw die CS Leitung wieder auf Low gezogen? Das darf nämlich 
nicht sein.

von S. Landolt (Gast)


Lesenswert?

Weder noch.

von Jens M. (schuchkleisser)


Lesenswert?

Das Flag wird nicht übertragen sondern intern gesetzt, damit die 
Übertragungsroutine weiß: "gib misch nächste, bin leer"
Und das CS wird "manuell" bedient, wenn du es nicht im Code selber 
steuerst, passiert da nichts.

von Einer K. (Gast)


Lesenswert?

Bolot J. schrieb:
> Wird bei der implementierten SPI nicht nach einem Byte ein Flag
> übertragen?
Nur, wenn der Programmierer, also hier du, es so erzwingt.

Bolot J. schrieb:
> Bzw die CS Leitung wieder auf Low gezogen?
Nur, wenn der Programmierer, also hier du, es so erzwingt.

von H.Joachim S. (crazyhorse)


Lesenswert?

Welches flag sollte das denn sein? Huhu, ich bin fertig? Oder eher ein 
parity?
CS wird eh per Software/Portpin bedient.
Du hast kein Problem und weisst dass nicht :-)

von S. Landolt (Gast)


Lesenswert?

> nach einem Byte ... die CS Leitung wieder auf Low gezogen?

Wieso low, liegt vielleicht hier das Problem mit dem 'gebastelten Code'? 
CS ist normalerweise 'activ low'.

von leo (Gast)


Lesenswert?

Bolot J. schrieb:
> ich suche für einen ATMega328P einen Code um über Hardware SPI oder Soft
> SPI 16 Bit Daten an den Motortreiber A4963 zu senden.

Was hindert dich daran bereits bestehenden Code zu verwenden bzw. zu 
untersuchen?
e.g. https://github.com/descampsa/A4963

leo

von Manfred (Gast)


Lesenswert?

Bolot J. schrieb:
> ATMega328P einen Code um über Hardware SPI oder Soft
> SPI 16 Bit Daten an den Motortreiber A4963 zu senden.

Goggel: A4963 Arduino

Deren Libraries werden sich auch ohne Arduino-Unterbau verwenden lassen, 
schließlich ist ja C++.

von lichtgrau (Gast)


Lesenswert?

Aus dem Datenblatt:
"lWhen 16 data bits have been clocked into the shift register, STRn must 
be taken high to latch the data into the selected register."
Du brauchst also zwingend noch eine Slave Select Leitung, obwohl es nur 
einen Empfänger gibt.

von Dumpfbacke (Gast)


Lesenswert?

lichtgrau schrieb:
> Aus dem Datenblatt:

Da iss man einfach machtlos wenn man kein Datenblatt hatt.

von lichtgrau (Gast)


Lesenswert?

Naja, im Datenblatt steht "SPI compatible interface", da könnte man als 
Laie natürlich meinen, es sollte auch mit SPI funktionieren und schaut 
dann nicht in die Details der Implementierung. Eine extra-Leitung zum 
Latchen ist nicht unbedingt "SPI compatible".

von Einer K. (Gast)


Lesenswert?

lichtgrau schrieb:
> Eine extra-Leitung zum
> Latchen ist nicht unbedingt "SPI compatible".
Naja...

"Echte" SPI Bausteine haben einen /CS Anschluss!
Das wird hier nicht anders sein.
Ohne ist es kein SPI.

von Bolot J. (bolot)


Lesenswert?

Vielen Dank für die zahlreichen Beiträge. Eine Slave Select Leitung habe 
ich. Ich versuche morgen eure Ideen und Ratschläge umzusetzen.
Dachte ich kann die implantierte SPI Funktion nicht nutzen aber dem ist 
nicht so :)

von Dumpfbacke (Gast)


Lesenswert?

Bolot J. schrieb:
> implantierte

---> vermutlich "implementierte"

Bolot J. schrieb:
> Ich versuche morgen eure Ideen und Ratschläge umzusetzen.

Das sind keine Ideen sondern knallharte Tatsachen.

von lichtgrau (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ohne ist es kein SPI.

Stimmt. Hatte bisher nur mit SPI ohne slave select zu tun, aber es 
gehört natürlich zur Spezifkation.

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.