mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI Übertragung bei mehreren Zeichen fehlerhaft


Autor: Benjamin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich möchte in einem zyklisch wiederauftretenden Zeitraum mehrere Zeichen 
von einem Mega8 zu einem anderen übersenden.
Probiere schon ewig herum, es funktioniert auch soweit ich nicht zu 
viele Zeichen übersende.
Wenn es mehr als 3 sind werden die ersten 3 Zeichen beim ersten zyklus 
übersendet und die anderen, dann wenn der nächste zyklus anfängt.
Desweiteren werden einige davon verschluckt.
Somit fehlen mir von dem 2. Zyklus die Zeichen und die von ersten sind 
nicht komplett.
Es müsste doch möglich sein mehr als 3 Zeichen aufs mal zu übertragen, 
hab mal den Quellcode angehängt, vielleicht kann mir ja Jemand helfen!

Im Code werden die 3 Zeichen 3 mal gesendet solagne der PinD 7 aktiv ist 
empfangen wird aber  "a b b c a b b b c" auch nur wenn der PIND7 mal 
aktiv war.
Besten Dank!

Benjamin

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun, ich vermute mal, es liegt daran, dass der Master ja nicht weiß, ob 
der Slave das empfangene Zeichen überhaupt schon verarbeiten konnte und 
einfach drauflos sendet. Wenn Du jedes Mal ein empfangenes Zeichen 
sofort ausgibst, und während der Ausgabe ein neues Zeichen eintrifft, 
dann geht das verloren. Du solltest das Empfangen im Slave am besten 
Interrupt-gesteuert machen und einen Empfangspuffer anlegen.

Autor: Benjamin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, probier ich mal aus.
Leutet ein und erklärt auch warum die Zeichen verloren gehen, nur nicht 
warum er 2 Zyklen braucht um alle (9) Zeichen zu senden.

Autor: ja wo isser denn? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Im Code werden die 3 Zeichen 3 mal gesendet solagne der PinD 7 aktiv ist
>empfangen wird aber  "a b b c a b b b c" auch nur wenn der PIND7 mal
>aktiv war.

neee eben nicht.

hier "while(!(PIND & (1<<PIND7)));" wartest du ja nur solange PIND7 = 0 
ist und verlässt beim wechsel auf 1 deine while. danach ist es egal was 
PIND7 macht.

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.