Forum: Mikrocontroller und Digitale Elektronik ATTiny24 SPI empfängt verschobene Daten


von Leo B. (luigi)


Angehängte Dateien:

Lesenswert?

Servus zusammen,

ich habe momentan ein hartnäckiges Problem.
Ich muss 6 Bytes mittels SPI zwischen einem ATmega88 und einem ATtiny24A 
austauschen. Nun prinzipiell funktioniert das wohl auch, leider sind 
allerdings die Daten, welche der ATtiny liest nicht ganz die gleichen, 
die der ATmega sendet.

Ich habe 2 kleine Testprogramme geschrieben, welche 6 testbytes vom 
ATmega an den ATtiny übertragen und mit einem byte Verzug wieder 
zurück... Der ATtiny tut also nichts anderes als daten empfangen und 
sofort wieder zurück zu schicken.
Dabei stelle ich nun fest, dass der ATiny die Daten offenbar um genau 
ein bit zu viel schiftet und als LSB eine 1 schreibt. Das MSB geht 
verloren.

Wenn ich also mit dem ATmega die Bitfolge
10101010 (0xAA)
sende (mit dem Oszi geprüft, senden klappt), dann antwortet der ATtiny 
anstelle dessen mit
01010101 (0x55)
(ebenfalls mit dem Oszi geprüft)

Sendet der ATmega
00111100 (0x3C)
dann empfängt und antwortet der ATtiny
01111001 (0x79)

Das ganze lässt sich mit allen Testbytes reproduzieren.
Was der ATtiny sendet ist offenbar auch fehlerfrei das, was er glaubt zu 
empfangen, da ich mir die empfangenen Daten auch schon über andere 
Port-Pins ausgegeben habe und dort ebenfalls schon die verschobenen 
Daten auftauchten.

Jetzt lese ich mir schon die Augen in Datenblättern und auch in google 
wund, nur eine Lösung oder auch nur die Ursache ist mir noch nicht 
untergekommen.
Jetzt frage ich einfach mal euch, ob ihr nicht vielleicht eine Idee oder 
einen Tipp für mich habt. Ich bin mittlerweile völlig ratlos.

Meine verwendeten Testcodes hab ich mal in Anhang eingefügt, falls ihr 
euch dafür interessiert.

Ich danke euch schonmal für Hilfe und Hinweise
1000 Dank
lg Leo

von Ralph (Gast)


Lesenswert?

Es gibt 4 verschiedene Übertragungsmodi bei SPI.
die Unterscheidung ist
1. der Idle Pegel, und
2. Die Flanke bei der die Daten eingelesen werden.

Prüf das mal, ich denke da dürfte die Ursache liegen.

von roland j. (roland_j)


Lesenswert?

Hallo Leo,

ich habe auch seit ein paar Tagen mit diesem Problem zu kämpfen und bis 
dato noch keine plausible Erklärung finden können.

#Mein Aufbau:
PC -> RS232 via USB -> XMega32 -> SPI-Pegelwandler -> Kabel -> 
SPI-Pegelwandler -> Attiny24

Verwendet wird bei beiden µC der SPI-mode 0 -> shift bei positiver 
Flanke.

#Ich habe auch das seltsame Problem, dass trotz sauber Signalverläufe 
der Slave(Attiny) immer ein Bit zu viel in das Schieberegister shiftet.

Ich habe auch einen ähnlichen Test durchgeführt und die Oszimessung 
bestätigt das ich für ein 0x01 ein 0x03 bekomme.

#Mich würde interessieren ob du diesen Fehler nun ausfindig machen 
konntest.

#Ich werde versuchen den 4-Bit edge counter zu modifizieren, um 
vorzeitig eine Interrupt auszulösen um das gewünschte Datum rechtzeitig 
zu lesen.

Wenn dieses "Pfusch" funktioniert gebe ich natürlich bescheid.

mfg Roland

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.