Forum: Projekte & Code SPI Assemblercode AT89S8253


von Chris B. (cbb)


Lesenswert?

Hallo zusammen,

erstmal die Datenblätter der beiden IC's die ich mit der SPI 
Schnittstelle verbinden möchte.
µC: http://www.atmel.com/dyn/resources/prod_documents/doc3286.pdf
Gsensor: 
http://www.st.com/stonline/products/literature/ds/11115/lis3lv02dq.pdf

Wie ich die Beiden miteinaner Verbinde (hardwaremäßig) ist mir klar, 
auch wegen des Pegels. Darüber habe ich mir schon gedanken gemacht und 
Lösungen die Funktionieren sollten. (mehrere Möglichkeiten :) )
Mir geht es jetzt um die Assembler programmierung.
Wie komme ich an die Daten des Gsensors.
Habe mir da mal grundsätzlich überlegt, wie ich vorgehen könnte.
Gemacht habe ich soetwas noch nicht. Bisher nur Zähler und andere 
einfache Dinge in Assembler programmiert.

Meine Überlegung, wie ich da vorgehen könnte war folgende:
Der Gsensor besitzt ein Dummyregister.
Mein 1. Gedanke war das ich dieses ja mal auslesen könnte um einfach zu 
überprüfen, ob ich eine SPI Verbindung hinbekomme.

Dazu habe ich noch 3 Register auf meinem µC die ich hierfür "einstellen" 
bzw. verwenden muss.

Grundsätzlich muss ich ja erstmal die Geschwindigkeit/Taktung usw. 
richtig einstellen. Also das  SPCR.
Für die Datenübertragung verwende ich das SPSR und SPDR.

Ich habe soetwas noch nicht gemacht, folglich weiß ich nicht genau wie 
ich da vorgehen kann/muss. Möchte es aber auf alle fälle lernen! :)
Es ist nur sehr schwer für mich festzustellen ob es "tut".
Es ist nicht einfach wie ein I/O Port, an dem ne LED tut, oder eben 
nicht.

Also für das Prog muss ich zuerstmal das SPCR "richtig" einstellen.
Danach kann ich dann an die Datenübertragung.
Hier wollte ich den µC als MAster und den Gsensor als Slave verwenden.
Zuerst muss ich ja mal den Gsensor mit CS (am µC ist es SSn) ansprechen.
Danach muss  ich eine "Anfrage" schreiben, wie ein read befehl für das 
entsprechnede Reg.?
Danach legt der Gsensor die Daten auf SPI und ich kann mit dem SPSR die 
ganze zeit die Übertragung überwachen und am Ende dann das SPDR 
auslesen?

Wenn ich etwas im SPCR verändern möchte, gibt es da andere befehle wie 
einfach nur mov spcr, #05Ch ? (war jetzt nur ein BSP)
Und wie kann ich danach überprüfen ob das richtige hineingeschrieben 
wurde?
Ich habe ein Entwicklungsboard mit dem AT Controller, auf dem habe ich 
einen Port mit LEDs herausgeführt, darauf könnte ich (um es sichtbar zu 
machen, ob es tut) einfach die Register legen  und ausgeben.

Würde mich um Unterstützung und Hilfe sehr freuen. :)

Viele Grüße Chris

von Alf (Gast)


Lesenswert?

Bei Atmel gibt es einige Applicationen zum SPI-Mode auf 8051ern.

http://www.atmel.com/dyn/resources/prod_documents/doc3655.pdf
http://www.atmel.com/dyn/resources/prod_documents/doc4348.pdf

SPI-Programmbeispiele
http://www.atmel.com/dyn/products/tools_card_v2.asp?tool_id=3419

Im Prinzip ist alles richtig was Du schreibst. Schließ das Teil an, und 
programmiere los. Wenn Du allerdings nur wenig Erfahrung hast, ist 
SPI-Kommunikation nich gerade ein Einstiegsthema.

Alternativ lässt sich das SPI-Timing auch ohne die Hardware-SPI zu 
verwenden, leicht über normale I/O-Pins realisieren. Ist zumindest eine 
gute Lernaufgabe.

Du musst eventuell noch beachten, dass der AT89S8253 per SPI geflasht 
wird. Damit ist das SPI-Interface dann doppelt belegt, ansich kein 
Problem, bei Atmel gibts dazu auch AppNotes.

von Alf (Gast)


Lesenswert?

Codesammlung passt übrigens für das Thema nicht, vielleicht kann ein 
Admin das ganze mal nach µc & Elektronik verschieben.

von Chris B. (cbb)


Lesenswert?

Hi zusammen,

dankeschön für die Links!
Bin jetzt dabei mich einzuarbeiten.
Habe da ein paar Fragen zum Assembler Code:

Diese command and bit definitions sind die Geräte abhängig, oder 
allgemein gleich?
Suche das nämlich in den application Notes des GSensors ohne erfolg.

Bin noch nicht ganz durchgestiegen wie alles funktioniert, das Schreiben 
interessiert mich vorerst mal nicht, da ich nur etwas auslesen möchte.
Bzw. dieser Sensor hat meine ich auch ein Register in dem man 
einstellungen vornehmen kann, mache ich das auch mit dem normalen 
schreiben wie in dieser Datei: 
http://www.atmel.com/dyn/resources/prod_documents/doc3655.pdf

Für die Adressierung der Daten brauche ich ja keine 2*8bit, da der 
Sensor nur 8bit adressen hat.
Also kann ich mir dieses Low/high adresse schonmal sparen. :)

Und für die Kommunikation, schreibe ich wirklich nur eine zahlenkombie 
in das SPDR und dann sendet der sensor automatisch etwas zurück, wenn er 
den befehl kennt?(vorausgesetzt es ist alles richtig eingestellt und 
initialisiert ;) )

Sorry für komische fragen, habe noch keine solche kommunikation 
aufgebaut.

viele grüße

Chris

von Chris B. (cbb)


Lesenswert?

Frage hat sich mittlerweile erledigt, habs selbst rausgefunden...
Werde jetzt mal schauen wie weit ich komme. Bei weiteren Fragen poste 
ich wieder.

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.