Hallo! Ich hab nen ATmega88, an dem per SPI drei Motortreiber für 3D-Drucker-Stepper hängen. Nun würde ich das ganze noch um 4 kaskadierte Schieberegister (CD4021) ergänzen und diese auch übers SPI-Interface auslesen. Nun stellt sich mir die Frage, ob das nicht zu Problemen mit den SPI-Motortreibern führt, da die Schieberegister kein ChipSelect haben. Sie hängen also immer an der CLK- und MISO-Leitung mit dran, selbst wenn gerade mit einem Motortreiber kommuniziert wird...
Johnny D. schrieb: > Nun stellt sich mir die Frage, ob das nicht zu Problemen mit den > SPI-Motortreibern führt, da die Schieberegister kein ChipSelect haben. > Sie hängen also immer an der CLK- und MISO-Leitung mit dran, selbst wenn > gerade mit einem Motortreiber kommuniziert wird... ja, wird es. "Einfach" die Taktleitung der Schieberegister vom Bus entkoppeln, wenn sie nicht angesprochen werden sollen. Also ein manuelles Chip-Select. Anders dürfte es nicht gehen.
STK500-Besitzer schrieb: > "Einfach" die Taktleitung der Schieberegister vom Bus entkoppeln, wenn > sie nicht angesprochen werden sollen. Also ein manuelles Chip-Select. > Anders dürfte es nicht gehen. Es geht auch anders: Den Atmega88 "einfach" durch einen Atmega328PB ersetzen. Der hat zwei SPI-Schnittstellen. LG, Sebastian
Sebastian schrieb: > Es geht auch anders: Den Atmega88 "einfach" durch einen Atmega328PB > ersetzen. Der hat zwei SPI-Schnittstellen. aber nicht den falschen 328pb, nur den v2 von Microchip, der Atmel hat nur 1 SPI..
Sebastian schrieb: > Es geht auch anders: Den Atmega88 "einfach" durch einen Atmega328PB > ersetzen. Der hat zwei SPI-Schnittstellen. OMG! Also ob es keine Tristate Treiber gibt. Ein 74HC125 ist das Mittel der Wahl, damit wird der Ausgang der Schieberegisterkette SPI-Kompatibel. CS dran, fertig. Wer Platz sparen muss, nimmt den als Einzelgatter im SOT-23 Gehäuse.
Ich mach dann immer einen Widerstand (2,2k) zwischen Ausgang des 4021 und MISO. Ist kein Chip selektiert, liefert der 4021 die Daten.
TriState Treiber klingt für mich nach der besten Variante. Sehe ich das richtig, dass man für die Leitungen CLK <-> SCK und Q7 <-> MISO je einen TriState-Treiber braucht? Dann könnte man die Signale CS und PL verbinden
Johnny D. schrieb: > TriState Treiber klingt für mich nach der besten Variante. Das ist die Lehrbuchvariante. Der Trick mit dem Widerstand geht auch und ist deutlich einfacher. > Sehe ich das > richtig, dass man für die Leitungen CLK <-> SCK und Q7 <-> MISO je einen > TriState-Treiber braucht? Nö. SCK wird direkt verbunden. > Dann könnte man die Signale CS und PL verbinden ja
Philipp K. schrieb: > aber nicht den falschen 328pb, nur den v2 von Microchip, der Atmel hat > nur 1 SPI.. Oha, das ist mir neu. Wie kann man die denn unterscheiden? LG, Sebastian
Sebastian W. schrieb: > Oha, das ist mir neu. Mir auch. Schon im Atmel Datenblatt hat der ATmega328PB 2 UARTs und 2 SPI gehabt, d.h. es sind bis zu 3 SPI-Master möglich. SPI0 und UART1 teilen sich die selben Pins. Atmel-42397C-8-bit AVR-ATmega328PB_Datasheet_Complete-10/2015 – Two Programmable Serial USART – Two Master/Slave SPI Serial Interface
Peter D. schrieb: > Mir auch. > Schon im Atmel Datenblatt hat der ATmega328PB 2 UARTs und 2 SPI gehabt, Mein Fehler, ich war gedanklich beim P :D gibts den pb schon wieder so lange.
:
Bearbeitet durch User
Eigentlich ist nur und immer der Ausgang ein Problem, den Du einliest. Den müsstest Du irgendwie mit Tristate versehen. Ein CS für Clock und Daten brauchst Du nicht, das macht der P/S-Control. Zudem musst Du schauen, ob die Logik des Chips (wann genau die Clock welche Flanke macht) mit der Deiner Treiber übereinstimmt. Bei so einem Baustein und z.B. nur eine Abfrage jede ms, lohnt sich der Aufwand meist nicht. Bitbanging kostet da keine Leitung mehr. (einfach anderen Input statt CS)
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.