Hallo, ich habe versucht über SPI einen Abfrage der Eingänge des 74HC165 zu machen, leider funktioniert es nicht wirklich. Ist data = SPDR; überhaupt richtig ? Wenn ja liegt es wohl an der angeschlossenen Hardware ... Danke
Ich weiß ja nicht, was für einen Controller Du verwendest... Beim MSP430 muß man zum Lesen erst ein Byte schreiben, damit der Takt vom MSP generiert wird. Sonst kommt immer 'ne Null rein.
ATMega32 - die Konfiguration müsste an sich richtig sein, beim Senden funktionierts ja auch ...
Wie gesagt, beim Empfangen mußt Du gleichzeitig was senden (0xFF). Halte doch beim Empfangen mal das Oszi an die Clock - Leitung und gucke, ob die auch so arbeitet wie sie soll...
Oszi leider nicht vorhanden ... SPDR = leds; data = SPDR; Wird das überhaupt gleichzeitig abgearbeitet oder hintereinander ?
Hi. Wie Johannes schon erwähnt hat musst du tatsächlich zum lesen eines bytes vorher (eigentlich währenddessen) ein Byte schreiben. Der 74HC165 kann nur als Slave arbeiten und somit ist der ATM32 der SPI-Master und ist dafür zuständig den Takt zu generieren. Dieser tut das allerdings nur wenn er Daten sendet. Beispiel (wie es ist den meisten fällen abläuft): // Kommando an den Slave senden damit dieser weiss das er dir mit der folgenden Taktung Daten schicken soll SPDR = 0x..; // Beliebige Daten senden damit der uC dem slave einen Takt zum Daten senden bereitstellt SPDR = 0xFF; // während 0xFF gesendet wird wird "zeitgleich" das Datenbyte vom 74HC165 empfangen data = SPDR; Es sei angemerkt das der SPDR Register für den Empfang ein anderer ist als der für das Senden. Somit wird im obigen beispiel nicht gleichzeitig lesend und schreibend auf ein und den selben SPDR register zugegriffen wie es den Anschein hat. Rev
Da es einen FIFO gibt würde ich sagen: Ja. Im Datenblatt steht ja auch "Full Duplex". Leider gibt's da kein Codebeispiel zum Empfangen über SPI als Master. Aber Du kannst das mit dem Senden einfach mal ausprobieren. Das Oszi kannst Du evtl. auch durch einen Kopfhörer mit Entkoppelungskondensator ersetzen. Pullup an Port B, Pin 3 ist aus?
Hmm, also ich denke, ohne Oszi mit uCs zu entwickeln, ist ziemlich schwierig... Wenn nicht gar unmöglich, wenn man das Echtzeitverhalten von Pins betrachten muss. Stephan.
Naja, bei SPI ist das wenig problematisch da der uC in diesem Fall ja für einen Sauberen Takt sorgt. Allerdings geb ich Stephan recht das ein Oszi extrem hilfreich sein kann....ein Digitales in erster Linie ist schon echt was nettes.
"Hmm, also ich denke, ohne Oszi mit uCs zu entwickeln, ist ziemlich schwierig" Ich würde eher sagen: "ohne Datenblatt mit uCs zu entwickeln, ist ziemlich schwierig" Erstmal muß man das SPI initialisieren. Dann muß man den 165 parallel einlesen und dann wieder auf seriell Schieben umschalten. Und dann erst kann man schieben (Dummy-Byte reinschreiben: SPDR = 0;). Dann wartet man, bis das Schieben vorbei ist (festes Delay oder Busy-Bit testen). Und jetzt kann man auch was sinnvolles auslesen. Nur "data = SPDR;" muß daher unbedingt gegen den Baum gehen. Peter
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.