Hallo in die Runde, ich hoffe hier an der richtigen Stelle für meinen Beitrag zu sein. Nachdem ich trotz ähnlicher Beiträge aus dem Forum noch nicht schlauer bin, wende ich mich mit einem neuen Thread an euch. Ich möchte über SPI 2 Slaves und einen Master verbinden. Hierzu verwende ich folgendes: Master: Arduino Uno Slaves: 1) SD-Daten Logger 2) GPS Modul (integriertes GPS Modul Origin GPS org-1318 auf einem antrax GPS/GSM Shield (Datenblätter im Anhang) Die GPS Daten sollen ausgelesen und dann auf dem Logger abgelegt werden. Ich habe die Komponenten bereits über eine Sternschaltung mit Hilfe eines SN74AHC125 IC (Levelshifter) verbunden, und habe aber jetzt das Problem der Datenübertragung. Da ich auf dem Gebiet nicht sehr bewandert bin, habe ich nach Internetrecherche nur eine grobe Vorstellung: Die einzelnen Slaves werden über "Low" Setzten des CS-Pins angesprochen und können somit Daten übertragen. Wie dies allerdings aufgezogen wird, weiß ich nicht... Nur dass eine "Buffer-Variable" verwendet wird, die mit Bits gefüllt wird und so vom Slave an den Master gesendet wird. Aber in welchem Takt und wie das funktioniert weiß ich nicht. Könnt Ihr mir hier Hilfestellung geben? Gerne kann ich bei Interesse weitere Infos zu meinem Stand des Projekts nachreichen. Vielen Dank im Voraus! Roonpower
Chris Kahn schrieb: > Aber in welchem Takt und wie das funktioniert weiß ich nicht. Dem kann abgeholfen werden https://de.wikipedia.org/wiki/Serial_Peripheral_Interface > Aber in welchem Takt ... Das ist genau der Unterschied zwischen Master uns Slave - der eine erzeugt ihn und der andere wird damit getaktet.
Hallo Wolfgang, danke für deine schnelle Antwort. Die Seite von Wiki habe ich allerdings schon angesehen, da ich aber nicht vom Fach bin, verstehe ich die Infos nicht so ganz. Klar gibt sie mir Input in Form von Fachwissen, aber es interpretieren in Form von Code fällt mir schwer. Woher weiß ich beispielsweise wie groß meine Variable sein muss, um die GPS Daten abzuholen und in welcher Form sie überhaupt vorliegen? Wie das ganze theoretisch funktionieren soll ist mir klar (dass der Master einen Takt vorgibt und eine Variable losschickt, die vom Slave mit Daten zurück kommt, wenn man ihn über die SC Leitung aktiviert) wie das ganze umzusetzen ist, ist mein Problem. Ich bin schon länger auf der Suche nach einem kommentierten Beispiel-Skript, um mir ein Bild machen zu können und damit zu verstehen wie eine Code-Umsetzung aussieht. Aber auch das ist nicht das Gelbe vom Ei und ich hoffe durch Support vom Forum zu einer Lösung zu kommen. Beste Grüße
Chris Kahn schrieb: > Woher weiß ich beispielsweise wie groß meine Variable sein muss, um die > GPS Daten abzuholen und in welcher Form sie überhaupt vorliegen? Die SPI Hardware im µC ist aus Sicht des Programms einfach nur ein (8-Bit) Register und durch eine Übertragung wird genau dieser Registerinhalt zwischen Master und Slave (per Schiebeoperation) ausgetauscht. Das ist alles - ein Byte, nicht mehr und nicht weniger. Wie der GPS-Empfänger die Daten bereithält und wie man die über SPI abholt, sollte im GPS Manuel/Datenblatt beschrieben sein. Für den µC musst du dir selber eine Datenstruktur überlegen, in der du die über SPI reinkommenden Bytes ablegst.
Ok, das hat mir schon mal geholfen an der richtigen Stelle im Datenblatt fündig zu werden, danke! Folgende Infos sind für mich klar: - Datentransfer bei CS low und SCK high - Maximale SCK Frequenz 7MHz - SPI Mode 0 - Da es dem Host möglich ist Daten an den Slave zu senden, bevor dieser operationsfähig ist, wird eine Startnachricht gesendet, sobald der Operationsstatus im richtigen Muster erreicht ist Das Buffer System (First In First Out) verstehe ich jedoch nicht. Und warum ist bei der Grafik einmal MSB und am Ende LSB eingetragen? Ich dachte es ist ENTWEDER das eine ODER das andere... Die Anzahl der Bytes der GPS Daten kenne ich auch noch nicht. Kann man einfach z.b. einen 1024 Byte Block transferieren und schauen was gefüllt wird? Die Quelle dazu habe ich angehängt (Auszug aus dem Datenblatt). Danke für die Hilfe!
Chris Kahn schrieb: > Und warum ist bei der Grafik einmal MSB und am Ende LSB eingetragen? Weil nach dem Start der Übertragung zuerst das Datenbit 7 (MSB) und als letztes vorm Ende das Datenbit 0 (LSB) übertragen wird. > - Da es dem Host möglich ist Daten an den Slave zu senden, bevor dieser > operationsfähig ist, wird eine Startnachricht gesendet, sobald der > Operationsstatus im richtigen Muster erreicht ist Beinahe. Das GPS-Modul legt die Power-On Message im TX-Fifo ab und der µC muss per Polling gucken, ob das Modul schon so weit ist. > Die Anzahl der Bytes der GPS Daten kenne ich auch noch nicht. Das sollte aber aus der Modul-Beschreibung hervorgehen. In welchem Format werden die Daten denn vom GPS bereit gestellt? > Kann man einfach z.b. einen 1024 Byte Block transferieren und schauen > was gefüllt wird? Laut der auch markierten Beschreibung im Anhang (rechts) kommt ein Idle-Pattern raus, wenn keine zu übertragenden Daten vorliegen. Dann weiss der Master, dass er bis zum nächsten Poll-Durchgang nicht weiter Daten austauschen muss.
Danke wieder für die schnellen Antworten Wolfgang! Das Format der Daten sind,so wie ich es verstanden habe- NMEA Datensätze. Die genaue Bezeichnung habe ich per Screenshots in den Anhang gepackt. Wie hilft mir das weiter?
Chris Kahn schrieb: > Danke wieder für die schnellen Antworten Wolfgang! > > Das Format der Daten sind,so wie ich es verstanden habe- NMEA > Datensätze. Die genaue Bezeichnung habe ich per Screenshots in den > Anhang gepackt. > Wie hilft mir das weiter? Das hilft dir insofern weiter, als du weisst, was du aus dem SPI (bytesweise) rauskriegen wirst: einen Text. Übertragen Zeichen für Zeichen. Danch gehts genau gleich weiter, wie wenn du den Text per UART empfangen hättest. Ganz normale String Verarbeitung und Auswertung, wie sie eigentlich zum Standardrepertoir jedes C Programmierers gehören (sollten), der sein Handwerk wenigstens ein bischen gelernt hat.
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.