Einlesen über SPI

Gast #509806
Lesenswert?
• ▲
▼
Hey,

Ich habe eine Hausarbeit bekommen und bin hier am verzweifeln! 
Warscheinlich ist es garnicht so kompliziert, aber wenn man einfach 
gesagt bekommt "mach mal" und das ohne Einführung in potentielle 
Programme dann GUDE NACHT!!

Also ich soll mit einem AT90S8583 über SPI die gewandelten Daten eines 
MAXIM 147 einlesen und über RS232 ausgeben. Dies soll in einem 
Zeitintervall von 100ms erfolgen.
Ich habe mich schon so weit vorgekämpft, dass ich einen String über 
RS232 in 100 ms ausgeben kann. (siehe Code)
Was ich jetzt nicht schaffe ist die Daten vom Maxim 147 in das SPI 
Datenregister zu lesen.
Ich habe versucht den /SS auf low zu ziehen aber da passiert nix! Bin 
mir nicht ganz sicher wie ich das Statusregister einstellen muss und 
welches Protokoll? ich verwenden soll.
Ich hab also einfach mal den SPI so eingestellt das der MCU der Master 
ist und den Interrupt feigeschaltet. Dann hab ich das ganze versucht in 
AVRStudio zu simulieren, aber es will net so sie es soll!!

Ich bitte um entschuldigung, denn ich bin ein absoluter Anfänger und hab 
mir das ganze Zeug irgendwo zusammengelesen!
Ich hoffe jedoch trotzdem, dass mir da einer (oder viel) helfen können.

Danke
Loki
Angehängte Dateien:
Moderator Persönliche Seite #509815
Lesenswert?
• ▲
▼
> Ich habe versucht den /SS auf low zu ziehen aber da passiert nix!

Logisch, das sagt ja dem SPI-Slave auch nur, dass jetzt mit einer
Datenübertragung zu rechnen ist.  Danach muss der Master aber seine
8 Taktimpulse aussenden.  Woher weiß der Master nun aber, ob du die
Daten lesen oder schreiben willst?

Er weiß es gar nicht: SPI muss immer zugleich lesen und schreiben.
Du musst also einen Wert aufs SPDR *aus*geben (der wahrscheinlich
vom Slave ignoriert wird, also gibt man in der Regel einfach eine 0
aus), dann die 8 SPI-Takte warten (bis SPIF gesetzt ist), danach
kannst du das auf der Rückleitung gelesene Byte aus SPDR abholen.
Gast #510256
Lesenswert?
• ▲
▼
@Jörg
Also erst mal vielen vielen Dank........

Ich war wirklich überrascht, dass man hier so schnell eine Antwort 
bekommt!! RESPEKT

@ALLE DIE ES INTERESSIER

Also ich hab jetzt rausgefunden, wie das Ding funst! Man muss wie Jörg 
das schon geschrieben hat ein Byte zum übertragenin das SPDR schreiben 
NACH dem man den /SS auf 0 gesetzt hat. Jetzt hat dieser ADW allerdings 
8 Kanäle und 12 Bit.
Das vom Master übertragene Bit ist demnach kein "Nonsense" Sondern damit 
wählt der Master Den Kanal, die Clock usw aus. danach kommen 2 Cycles 
(je 8Cl Impulse) in denen die Daten des ADWs übertragen werden.
Das macht alles Sinn finde ich und ist wenn man mal dahinter gestiegen 
ist so schön logisch!!

Danke noch mal für die Hilfe
loki

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.