Hallo Zusammen, ich betreibe meinen 128'er als permaneten Slave also 3 wire SPI (MISO, MOSI, SCK) sind angeschlossen SS ist low. jetzt verliert mein Mega128 die Snychronisation. Jetzt meine Dumme Frage wir kann ich die SPI schnittstelle (Clock Source, Shift Register etc.) wieder so initialisieren das ich wieder bei Null Starte ohne den Controller mittels Watchdog in ein Reset zu schicken. Aus dem Datenblatt werde ich nicht ganz schlau. MFG Detlev
Detlev Neumann schrieb: > SS ist low. Das ist das Problem. /SS darf nur Low sein, wenn gerade ein Datenframe übertragen wird. Danach muß /SS wieder High werden. Zu Beginn des nächsten Datenframes wird /SS wieder Low gesetzt, danach wieder High. Bei jeder High/Low-Flanke von /SS wird die Synchronisation erneut sichergestellt.
Nett aber dies kann ich leider nicht da mein dummes Host System dieses Per Software und nicht per Hardware machen möchte ich habe mir diese Systemarchitektur nicht ausgedacht. Also doch ber WADO durch den Reset schicken :-( Oder gibt es eventuell doch noch eine kleine Hoffnung das es anderes geht Wenn nicht dann Danke für die schnelle Antwort Gruß Detlev
> SS ist low
An alle Anfänger:
Bitte auf KEINEN FALL vorher irgendwelche Datenblätter lesen, das könnte
ja dazu führen dass alles auf Anhieb läuft und man keine Fragen im Forum
loswerden kann.....
Detlev Neumann schrieb: > jetzt verliert mein Mega128 > die Snychronisation. Ja, das haben die AVRs so an sich. Sie sind sehr ungehorsame Slaves, da sie nix puffern können. Du kannst das SPE-Bit kurzzeitig abschalten, um das SPI zu resetten. Aber das ändert nichts am prinzipiellen Mangel des AVR-SPI. Wenn der Master zu schnell ist, verliert der Slave. Peter
Detlev Neumann schrieb: > Also doch ber WADO durch den Reset > schicken :-( Das ist Murks und läßt keinen zuverlässigen Datentransfer zu. Detlev Neumann schrieb: > Oder gibt es eventuell doch noch eine kleine Hoffnung das es anderes > geht Die Softwarelösung mittels externer Logik abfangen und per Hardware an den /SS-Pin anbinden.
@bench Dumm ist nicht, wer etwas Dummes begeht, sondern wer seine Dummheit nachher nicht zu bedecken versteht. Baltasar Gracián y Morales (1601-58), span. Philosoph u. Schriftsteller
> Baltasar Gracián y Morales (1601-58), span. Philosoph u. Schriftsteller
Ja, ich hab auch den Eindruck, dass bei vielen Elektronik mehr mit
Philosophie und Esotherik zu tun hat.
Ich sags einfacher: Ohne Murks keinen Schweiss.....
@Bench auch ein schönes Zitat @Alle Danke für eure Hilfe mal schaun was ich damit anstelle Re-Design -- Software änderung JA JA JA Nochmals Danke Detlev
Ja hab ne Lösung clock ist dabei ein Signal das im millisekunden Rhytmus hochgezählt wird. 1. erkenne das Slave nicht mehr Sychron 2. Löschen des SPI Control Register SPCR = 0; 3. Warte ein Paar ms while(clock<10); 4. Setzen des SPI Control Registers SPCR = (1<<SPIE) | (1<<SPE) |(0<<MSTR)| (0<<CPOL) | (1<<CPHA) Dieses Funktioniert nur weil meine Aktive Zeit meines Kontrollers klein genug gegenüber der inaktiven Zeit ist. Danke normals Gruß Detlev
Mein Master ist Zeit Sychron das heißt alle so und so viele ms Kommuniziert er immer mit dem Slave. Nun habe ich einen Timer der wird gesetzt wenn eine gültiger Datentransfer erkannt wurde. Startet nun der nächste Datentransfer nicht zum festen Zeitpunkt so setzt ich das SPI Interface zurück. Ist zwar nicht elegant und eher schon die Holzhammer Methode --> Hoffe aber das die Variante klappt --> bis jetzt tut sie es auf jedenfall :-). Die höchste Form der Hoffnung ist die überwundene Verzweiflung Albert Camus (1913-1960), frz. Erzähler u. Dramatiker Gruß Detlev
Detlev Neumann schrieb: > Nun habe ich einen Timer der wird > gesetzt wenn eine gültiger Datentransfer erkannt wurde. Startet nun der > nächste Datentransfer nicht zum festen Zeitpunkt so setzt ich das SPI > Interface zurück. Das heißt, daß Du mit Datenverlust leben mußt?
Ja Daten können bei diesem Vorgehen verloren gehn !!! Aber das kann ich bei meiner Applikation verschmerzen!
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.