www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI Fehlererkennung/-korrektur


Autor: Maxim S. (maxim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe einen Master und drei Slaves, alle sind AVRs. Der Master überträg 
jeweils 3 Byte an jeden Slave und erledigt dann andere Aufgaben, bis er 
wieder senden muss. In den Bytes sind Helligkeitswerte für LEDs kodiert. 
Die letzten zwei Bit jedes Bytes geben an, ob es sich um einen R-, G- 
oder B-Wert handelt. Die restlichen 6 Bit enthalten die Helligkeit (64 
Stufen).

Nun schleichen sich aber Fehler in die Übertragung ein, wenn ich am 
Drehencoder rumdrehe oder die Taster betätige. Das ist komisch, da auf 
der selben Platine noch viel stärkere Ströme fließen, nämlich die neun 
PWM-Tranistoren. Naja, jedenfalls brauche ich eine Fehlererkennung, 
sodass ein falsch angekommenes Byte erkannt und nicht übernommen wird. 
Eine Fehlerkorrektur wäre auch toll, wenn es nicht zu kompliziert und 
ressourcenlastig ist.

Ich habe schon versucht, das Byte immer doppelt zu senden, sodass der 
Slave das ankommende Byte mit dem letzten vergleicht und bei 
Übereinstimmung als richtig erkennt. Nur habe ich das wahrscheinlich 
schlecht umgesetzt, die LEDs haben nur noch geflackert. Jetzt suche ich 
nach einem guten Ansatz.

Was ist mir AVRs sinnvoll? Habe noch nicht viel Erfahrung mit SPI und 
serieller Datenübertragung allgemein. CRC wäre hier wohl zu viel des 
Guten, oder?

Es besteht die Möglichkeit, dass die Slaves dem Master antworten.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

sieht eher nach eine Fehler in der Software oder im Konzept aus.
Du solltest vielelicht besser die Ursache suchen und korrigieren, nicht 
das Symptom.

Gruß aus Berlin
Michael

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei SPI brauchst du eigentlich keine Fehlererkennung.
Der Master sendet und empfängt die Daten synchron.

Entweder du hast einen ganz schlechten Hardwareaufbau,
oder du überrennst die Slaves mit einer zu hohen
SPI Taktrate.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Maxim S. wrote:

> Nun schleichen sich aber Fehler in die Übertragung ein, wenn ich am
> Drehencoder rumdrehe oder die Taster betätige.

Sieht eher nach SW-Fehler aus.


> Ich habe schon versucht, das Byte immer doppelt zu senden, sodass der
> Slave das ankommende Byte mit dem letzten vergleicht und bei
> Übereinstimmung als richtig erkennt. Nur habe ich das wahrscheinlich
> schlecht umgesetzt, die LEDs haben nur noch geflackert.

Ja, dann isses wohl ein SW-Fehler.


Peter

Autor: Maxim S. (maxim) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hm, danke für den Hinweis, dann mach ich mich auf die suche.

Das ganze Programm ist in Assemlber hgeschrieben und befindet sich im 
Anhang.

Kann es daran liegen, dass die Übertragung durch INT0 und INT1 (das sind 
die Eingänge des Encoders, der vorher allerdings durch einen ATiny12 
ausgewertet wird) unterbrochen wird und dadurch irgendwelche Fehler 
entstehen?

Das erklärt aber noch nicht, warum die LEDs auch bei normalen Tastern ab 
und zu flackern. Na wie gesagt, ich schau mal, wo es hacken könnte.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Maxim S. wrote:
> Kann es daran liegen, dass die Übertragung durch INT0 und INT1 (das sind
> die Eingänge des Encoders, der vorher allerdings durch einen ATiny12
> ausgewertet wird) unterbrochen wird und dadurch irgendwelche Fehler
> entstehen?

Ja, Du zerstörst in den Interrupts fleißig die Register.

Du mußt das SREG und alle auch im Main benutzten Register sichern, bevor 
Du sie verwendest.

Und vor der Benutzung des IJMP sollte man immer prüfern, ob man nicht 
nach außerhalb der Sprungtabelle springt, d.h. ob der Sprungindex zu 
hoch ist.


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.