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.
Ich verstehe dein Problem nicht... Denn 2 Byte nacheinander sind auch 16 Bit.
> 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.
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.
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 :-)
> 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'.
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
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++.
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.
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".
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 :)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.