Forum: Mikrocontroller und Digitale Elektronik Unterbrüche in SPI Kommunikation


von Don Camillo (Gast)


Angehängte Dateien:

Lesenswert?

Geschätzte Forumgemeinde

Ich beschäftige mich mit einem Problem wo ich nicht mehr weiter weiss 
und einer von euch evtl. mir einen Hinweis liefern kann.
Folgendes: Ich kommuniziere über die SPI Schnittstelle eines PIC24 mit 
einem zweiten Baustein. Der Baustein initialisiert die Kommunikation 
über das CS Signal, woraufhin auf dem PIC ein Interrupt ausgelöst wird 
und dieser über die zweite SPI Schnittstelle die Werte eines AD Wandlers 
abfragt. Die empfangenen Werte werden auf dem PIC richtig 
zusammengestellt und dann über die erste SPI Schnittstelle wieder an den 
Baustein zurück geschickt. Dies funktioniert ca. 20mal so wie es soll. 
Und dann bricht der PIC die Kommunikation auf der SPI Schnittstelle 
plötzlich einfach ab. Respektive, der PIC löst keinen Interrupt mehr 
aus. Nach dem dritten CS Puls funktioniert die Kommunikation dann aber 
plötzlich wieder. Fürs einfachere Verständnis meiner Beschreibung habe 
ich einen Bildausschnitt des KO angehängt:
- Dunkelblau: Tx Leitung der SPI Schnittstelle vom PIC zum zweiten 
Baustein.
- Hellblau: Ich habe den Ausgang der LED zum debuggen missbraucht. Ist 
das Signal im High-State läuft die Interrupt Subroutine der SPI 
Schnittstelle auf dem PIC.
- Rot: CS Signal vom zweiten Baustein an den PIC, welches den Start der 
Kommunikation initialisiert.

Das CS Signal hat eine Taktrate von 20kHz. In der Zischenzeit sendet der 
PIC 6 Datenpakete a 16bit zurück an den zweiten Baustein.
Ich kann mir die Unterbrüche nicht erklären. Ist es möglich dass die SPI 
Schnittstelle "überfordert" sein kann und sich dann kurzzeitig aufhängt?

Über einen Hinweis wäre ich dankbar!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Don Camillo schrieb:
> Ich kann mir die Unterbrüche nicht erklären. Ist es möglich dass die SPI
> Schnittstelle "überfordert" sein kann und sich dann kurzzeitig aufhängt?
Ich würde sagen: die Software ist das Problem. Welche Interrupts sind 
sonst noch aktiv? Oder läuft da der Watchdog auf? Oder warum wird die 
LED so seltsam angesteuert?

von Don Camillo (Gast)


Lesenswert?

Insgesamt sind 4 Interrupts aktiv. Die zwei Interrupts der 
Schnittstellen SPI1 und SPI2, die auftreten wenn die kompletten 16bit 
empfangen wurden. Ein Interrupt wird beim Auftreten des CS Signals 
ausgelöst und dann gibt es noch einen der die Spannung am PIC überwacht 
und auslöst, falls diese unter ein gewisses Level fällt.

von Don Camillo (Gast)


Lesenswert?

Die LED steuere ich normal anders an, ich habe sie jetzt bloss zum 
debuggen missbraucht um zu sehen ob und wann ein Interrupt ausgelöst 
wurde.

von Mark R. (stevestrong)


Lesenswert?

Wird vielleicht die Konfiguration der Port-pins kurzzeitig umgestellt?

von Don Camillo (Gast)


Lesenswert?

Mark R. schrieb:
> Wird vielleicht die Konfiguration der Port-pins kurzzeitig umgestellt?

Nein, nicht dass ich wüsste. Zumindest ist im Code nach der 
Initialisierung der Schnittstellen nirgends etwas drin das die Pins neu 
konfiguriert.

von GB (Gast)


Lesenswert?

Also, wenn ich mir den hellblauen Kanal ansehe, dann sieht es für mich 
aus, als ob Dir dieses Signal auf irgendeinen Zwischenpegel floatet, 
eigentlich ein untrügliches Zeichen dafür, dass aus dem Ausgang 
plötzlich ein Eingang wird.

Da würde ich einmal vermuten, dass der PIC in den Reset geht.

von Don Camillo (Gast)


Lesenswert?

Genau den gleichen Gedanken hatte ich heute Nachmittag auch noch. Ich 
werde mir das mal noch etwas genauer anschauen...

von MaWin (Gast)


Lesenswert?

Don Camillo schrieb:
> Über einen Hinweis wäre ich dankbar!

Heisst das nicht Unterbrechungen ?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Nur nochmal zur Wiederholung:
Lothar Miller schrieb:
> Watchdog

von 132 (Gast)


Lesenswert?

Oder Brown out wenn die Spannung unter ein eingestelltes Limit geht. 
Wenn noch nicht eingestellt dann schalte den Power On Reset an (bzw. 
aus). Dann sollte die Zeit Low-Zeit nach dem indefinierten Zustand 
deutlich länger (bzw. kürzer) (300ms) werden. Zusätzlich kannst du den 
Reset Grund auslesen (PIC18F und aufwärts).

von Roland E. (roland0815)


Lesenswert?

Klingt etwas, als wenn irgend eine deiner anderen Routinen den IRQ für 
deine CS-Leitung bzw die globalen IRQs abschaltet. Oder dass der PIC 
einfach für etlich Millisekuden in einer IRQ-Routine festhängt.

von Don Camillo (Gast)


Lesenswert?

Der Hinweis mit dem Power on Reset war gut! Der PIC resetted sich 
tatsächlich ständig neu. Ich werde also meinen Fehler irgendwo im Schema 
suchen müssen. Erstmal besten Dank für eure Hinweise!

von spess53 (Gast)


Lesenswert?

Hi

>Der Hinweis mit dem Power on Reset war gut!

Beitrag "Re: Unterbrüche in SPI Kommunikation"

MfG Spess

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Don Camillo schrieb:
> Der PIC resetted sich tatsächlich ständig neu.
Man kanns nicht oft genug wiederholen...

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.