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.
Gast
#5831756
Ich verstehe dein Problem nicht... Denn 2 Byte nacheinander sind auch 16 Bit.
Gast
#5831758
> 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.
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.
Gast
#5831767
Weder noch.
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.
Gast
#5831773
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.
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 :-)
Gast
#5831790
> 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'.
Gast
#5831800
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
Gast
#5831914
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++.
Gast
#5831943
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.
Gast
#5831958
lichtgrau schrieb: > Aus dem Datenblatt: Da iss man einfach machtlos wenn man kein Datenblatt hatt.
Gast
#5831975
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".
Gast
#5831978
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.
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 :)
Gast
#5831995
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.
Gast
#5832000
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.