mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI Abfrage korrekt ?


Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Johannes Raschke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ATMega32 - die Konfiguration müsste an sich richtig sein, beim Senden
funktionierts ja auch ...

Autor: Johannes Raschke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oszi leider nicht vorhanden ...

SPDR = leds;
data = SPDR;

Wird das überhaupt gleichzeitig abgearbeitet oder hintereinander ?

Autor: Rev (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Johannes Raschke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rev (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.