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


von Benjamin (Gast)


Angehängte Dateien:

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

von johnny.m (Gast)


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.

von Benjamin (Gast)


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.

von ja wo isser denn? (Gast)


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.

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
Noch kein Account? Hier anmelden.