Forum: Compiler & IDEs Einlesen über SPI


von loki81 (Gast)


Angehängte Dateien:

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von loki81 (Gast)


Lesenswert?

Super Danke für die Antwort.....

Hab jetzt das SPDR beschrieben und man glaubt es kaum aber er macht 
was!!

Muss das Ding beschreiben bevor oder nach dem ich den /ss auf 0 setzte?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Nachdem du den slave selektiert hast, sonst weiß er ja nicht, dass er
gemeint ist.  (SPI kann mehrere slaves parallel treiben.)

von loki81 (Gast)


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

von Matthias (Gast)


Lesenswert?

Wieder einer etwas gelernt ;-)

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
Noch kein Account? Hier anmelden.