Forum: Mikrocontroller und Digitale Elektronik ATMega128 --> SPI Schnittstelle zurücksetzen.


von Detlev Neumann (Gast)


Lesenswert?

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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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.

von Detlev Neumann (Gast)


Lesenswert?

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

von bensch (Gast)


Lesenswert?

> 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.....

von Peter D. (peda)


Lesenswert?

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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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.

von Detlev Neumann (Gast)


Lesenswert?

@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

von bensch (Gast)


Lesenswert?

> 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.....

von Detlev Neumann (Gast)


Lesenswert?

@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

von Detlev Neumann (Gast)


Lesenswert?

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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Detlev Neumann schrieb:
> 1. erkenne das Slave nicht mehr Sychron

Wie?

von Detlev Neumann (Gast)


Lesenswert?

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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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?

von Detlev Neumann (Gast)


Lesenswert?

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