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!
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?
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.
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.
Wird vielleicht die Konfiguration der Port-pins kurzzeitig umgestellt?
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.
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.
Genau den gleichen Gedanken hatte ich heute Nachmittag auch noch. Ich werde mir das mal noch etwas genauer anschauen...
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).
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.
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!
Hi >Der Hinweis mit dem Power on Reset war gut! Beitrag "Re: Unterbrüche in SPI Kommunikation" MfG Spess
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
