Hallo! Ich will Daten von einem Atmega8 zu einem 2. Atmega 8 via SPI übertragen. Soweit hab ich das hingekriegt, ich übergebe mit dem SPI mehrere 8Bit Integer. Jetzt passiert es aber manchmal wenn ich die Controller neu starte, dass sie sich irgenwie verhaspeln un nur noch schrott senden und nicht mehr die Integerwerte die ich haben will. Jetzt bin ich auf der Suche wie ich sicherstellen kann, dass die beidern Controller synchronistert sind und somit ein verhaspeln nicht mehr möglich ist, oder eine andere Übertragunsart (String, etc.) Kann mir da jemand weiterhelfen? MfG Benjamin
Benjamin wrote: > Hallo! > > Ich will Daten von einem Atmega8 zu einem 2. Atmega 8 via SPI > übertragen. > Soweit hab ich das hingekriegt, ich übergebe mit dem SPI mehrere 8Bit > Integer. > Jetzt passiert es aber manchmal wenn ich die Controller neu starte, dass > sie sich irgenwie verhaspeln un nur noch schrott senden und nicht mehr > die Integerwerte die ich haben will. > Jetzt bin ich auf der Suche wie ich sicherstellen kann, dass die beidern > Controller synchronistert sind und somit ein verhaspeln nicht mehr > möglich ist, oder eine andere Übertragunsart (String, etc.) > Kann mir da jemand weiterhelfen? > > MfG > > Benjamin Übertrage die Daten im ASCII Format. Daher statt 0FFh sendest Du auf 2 mal "F" "F" und nimmst die ASCII Steuercodes zur Synchronisation
Wie ich die 16 Bit in 2 8Bit aufteile ist mir nun klar, funktioniert auch. Nur das syncronisieren funktioniert nicht. Kannst du mir da etwas auf die Sprünge helfen? Geht das nicht auch mit dem SS-Pin? Ach ich verzweifel nioch! MfG Benjamin
Benjamin wrote: > Wie ich die 16 Bit in 2 8Bit aufteile ist mir nun klar, funktioniert > auch. > Nur das syncronisieren funktioniert nicht. > Kannst du mir da etwas auf die Sprünge helfen? > Geht das nicht auch mit dem SS-Pin? > Ach ich verzweifel nioch! > > MfG Benjamin Ist die Übertragung bidirektional ??? Also Datenaustausch in beide Richtungen? Den SS Pin brauchst Du ja, um dem 2.Controller mitzuteilen, das er nicht der Taktmaster ist. Eine Möglichkeit wäre, wenn Du noch einen PIN pro MCU frei hättest. Der Master würde dann beim Slave über diesen PIN eine Art FRAME also den Beginn eines Datenpaketes freigeben. Wenn Du diesen PIN am Slave auf einen externen Interrupt legen würdest, könntest Du dem µC so mitteilen, daß jetzt der Beginn einer neuen Übertragung stattfindet
herrje, is doch alles so schön im manual erklärt: "After each data packet, the Master will synchronize the Slave by pulling high the Slave Select, SS, line." "but the data will not be shifted out by incoming clock pulses on the SCK pin until the SS pin is driven low." "In SPI Slave mode, the control logic will sample the incoming signal of the SCK pin." "The SS pin is useful for packet/byte synchronization to keep the Slave bit counter synchronous with the master clock generator. When the SS pin is driven high, the SPI Slave will immediately reset the send and receive logic, and drop any partially received data in the Shift Register." sollte ausreichend sein...
dsche wrote: > herrje, is doch alles so schön im manual erklärt: > Er meint wohl nicht die Bit Synchronisation durch SS sondern die eines Datenstrings, in dem alle Datenbytes den selben Wert annehmen können. Verstehe das so: Der Master sendet fortlaufend, der Slave schaltet an irgendeiner Stelle zu und muß sich mit dem Datenstrom synchronisieren. Und das lässt sich nicht mit dem SS-Signal realisieren.
Genau! Das ist das exakt das Problem an dem ich hänge! Ich übertrage (Master) eben fortlaufend Zahlen und schalte irgendwann den Slave dazu, der diese empfangen soll. Es kommt aber nur Schrott an, es sei denn ich schalte ihn zufällig an der richtigen Stelle zu was aber sehr selten sein dürfte. Kannst du mir da weiterhelfen das mit den ASII-Steuerzeichen war mit nicht ganz klar?! Danke! MfG Benjamin
Der Master schaltet den SS. Slave gibt irgenwann den SPI interrupt frei, da er mit anderen Zeitkritischenroutinen beschäftigt ist. Im SPI Interrupt wird dann vom Slave ein Bestätigungssignal gesetzt, somit weiß der Master das der Slave Zeit für ihn hat und das er mit der Übertragung beginnen kann.
Frankl wrote: > Der Master schaltet den SS. > Slave gibt irgenwann den SPI interrupt frei, da er mit anderen > Zeitkritischenroutinen beschäftigt ist. Im SPI Interrupt wird dann vom > Slave ein Bestätigungssignal gesetzt, somit weiß der Master das der > Slave Zeit für ihn hat und das er mit der Übertragung beginnen kann. Uiiii, jetzt wirds kompliziert. Hört sich nach einem Hard/Software Handshake an. Also ich hab das sooo verstanden: Der Master sendet und sendet und sendet, ähnlich wie ein Radio oder Fernsehsender und es ist Ihm dabei egal ob ein Teilnehmer zuhört. (Das Problem mit der GEZ lassen wir hier mal außenvor ;-) ) Der Empfänger schaltet sich zu, also Der Zuschauer schaltet seinen Fernseher ein. Da läuft gerade ein Sendung. Ich will aber eine Sendung von Anfang an sehen. Also ist mir das was gerade läuft egal und ich warte bis zum Anfang der nächsten. Die Aufgabenstellung ist nun, dem Zuhörer klar zu machen, was der Anfang der nächsten Sendung ist. Für den µC als ASCII Format heisst das zum Beispiel: STX [02],...........ETX [03] Start ........... Stop Die Daten zwischen STX und ETX im ASCII Format umwandeln Es können noch Funktions/ ID Bytes eingefügt werden ByteCounter Checksummenberechnung Kommt auf den Anwendungsfall an. Dirk
Im Prinzip richtig. Aber das Sync-Signal vom Slave ist einfach eine Hardwareverbindung also ein Bit. Wenn man mehrer Slaves hat, kann man das Signal noch mit Dioden entkoppeln, da ja das aufschalten des Slave-Sync-Signal in der SPI Serviceroutine geschieht. So braucht man nur eine Leitung für mehrer Slaves.
äähhmmm, ich glaube der Sinn oder die Funtion des SS-Signal steht bereits fest. Das SlaveSelect Signal gibt ja dem Slave nur an, daß jetzt eine Übertragung beginnt und er sich synchronisieren soll, für das zu übertragende Byte. Er braucht aber ein Beispiel für ein Übertragungsprotokoll vieler Bytes vom Master zu EINEM Slave. Außerdem ist das SS Signal für Slave µCs oder Masterfähige Devices gedacht. Bei Standard Peripherie Logik wie Schieberegister etc. kann dieses Signal als Chipselect bzw. Latch für diese Bausteine genutzt werden. Eine Taktsynchronisation ist hier nicht notwendig, da sie ausschließlich vom Master erzeugt wird.
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.