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