hei, PIC18F26K22 Habe eine Interrupt gesteuerte SPI Slave Routine. Das Paket enthält 30 Byte. 1.Byte Anzahl dann 28 Daten Byte und zum Schluß 1 Prüfbyte. Nach jedem empfangenem Byte speichere ich das Byte in einem Ringbuffer und erhöhe dann die Adresse des Ringbuffers. Nach komplettem Empfang des Paket wird es noch überprüft auf Fehler, danach Adresse wieder auf 0 und alles von vorne. Wenn sich die Übertragung verschluckt hat, wie bekomme ich eine Synchronisation der Adresse und dem SS Signal? Müsste ich hier auch noch für das SS Signal einen Interrupt anlegen, der mir bei aktiven SS die Adresse auf 0 setzt? schönen Tag
Genau. Dazu kann man das SS Signal nutzen. Oder einen Timer: Wenn für eine gewisse Zeit nichts übertragen wird, setzt du die Adresse zurück.
Zu beachten ist dabei das Timing, denn wenn man alle Bytes einzeln lesen muss, dann darf der SS-Interrupt nicht zu lange sein, damit man nicht das erste Byte verpasst. Also kurz fassen. 2. Möglichkeit: Im Main-loop prüfen, ob SS aktiv ist, wenn nein, dann Startbyte = 0. Setzt allerdings voraus, dass die Schleife mindestens einmal zwischen 2 Übertragungen durchlaufen wird. Bei beiden Lösungen muss SS während der gesamten Kommunikation aktiv sein (ohne Unterbrechung), aber anders wäre es auch nicht sinnvoll.
hei, Habe es jetzt am laufen. Taktfrequenz 2500Hz; Alle 100ms senden/empfangen; je Paket 240 Bit Derzeitig ein kleiner Langzeittest. Über 20.000 Pakete mit 0 Übertragungsfehler. In der main while Schleife frage ich das SS Signal ab. Hier wird das Paket überprüft und verarbeitet. In der SPI ISR habe ich nur das notwendige. Vielen Dank für die Mithilfe. schönen Tag
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.