I2C-Bus Ack + Interrupt unterbrechung Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
Autor |
I2C-Bus Ack + Interrupt unterbrechung Suche nach: i2c (581) |
|
|
|
|
BID = 739568
QuirinO Schreibmaschine
Beiträge: 2205 Wohnort: Behringersdorf
|
|
HEUREKA!
Das Programm läuft stabil.
Es waren 2 Probleme auf einmal:
Problem 1: Zu geringe Taktfrequenz des PIC - Verursachte bei mehreren Aufgaben gleichzeitig einen undefinierten Zustand.
Problem 2: Anzeige von Zuständen mit einem XOR auf den Port mit angeschlossenen LED. Ich bin mir noch nicht genau sicher was das war - aber ich gehe davon aus, dass ein XOR ein Read mit direkt anschliessendem Write auf den Port bewirkt hat. Das kann unter gewissen Umständen einen Fehler auslösen.
Evtl liegt der eigentliche Fehler hierin begründet. Bitte um Kommentare...
[ Diese Nachricht wurde geändert von: QuirinO am 9 Jan 2011 17:40 ] |
|
BID = 739582
Racingsascha Schreibmaschine
Beiträge: 2247 Wohnort: Gundelsheim
|
|
Das XOR in deinem Interruphandler hab ich beim verfassen von Beitrag ID=738756 auch gesehen, hab ihm aber nicht viel Beachtung geschenkt, da ich nicht wusste was da noch so an deinem PORTD hängt. Die I2C-Hardware hängt normalerweise an PORTC. Ich hab grade mal deinen Quellcode überflogen, da scheinen nur deine 5 Statusleds dranzuhängen, TRISD ist komplett auf Out geschaltet. Macht normalerweise keine Probleme
_________________
Fnord ist die Quelle aller Nullbits in deinem Computer.
Fnord ist die Angst, die Erleichterung, und ist die Angst.
Fnord schläft nie. |
|
BID = 739599
Bartholomew Inventar
Beiträge: 4681
|
Zitat :
DonComi hat am 9 Jan 2011 16:46 geschrieben :
|
Was passiert denn nu, wenn ein IRQ auftritt, während der Prozessor eine ISR abarbeitet? Konntest du das in Erfahrung bringen (interessiert mich einfach ). |
Generell bei den 14-bittigen PICs?
Die Dinger haben ja bloß einen Interruptvektor.
Wenn ein Interrupt-Ereignis stattfindet, wird ein entsprechendes Flag gesetzt. Gleichzeitig springt der PIC in die ISR. Dort muss man dann selbst nachgucken lassen, welches Flag denn nun gesetzt, also für den Interrupt verantwortlich ist. Dann lässt man die ISR den entsprechenden Stuff abarbeiten, setzt das Flag zurück und beendet die Routine.
Wurde während der ISR ein weiteres Flag gesetzt (und nicht wieder gelöscht, weil der dazugehörige Code nicht abgearbeitet wurde), springt der PIC sofort wieder zum Anfang der ISR.
Gruß, Bartho
|
BID = 739992
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Hallo Bartho,
Danke für die Erläuterung - dann ist es also in etwa so, wie ich es mir schon gedacht habe.
Daraus folgte für mich auch, dass der µC zu langsam getaktet ist, was ja auch offenbar zumindest ein Teil des Fehlers war .
_________________
|
BID = 740136
Bartholomew Inventar
Beiträge: 4681
|
Bitteschön
@Lanzenschwinger:
Zitat :
QuirinO hat am 9 Jan 2011 17:39 geschrieben :
|
Problem 2: Anzeige von Zuständen mit einem XOR auf den Port mit angeschlossenen LED. Ich bin mir noch nicht genau sicher was das war - aber ich gehe davon aus, dass ein XOR ein Read mit direkt anschliessendem Write auf den Port bewirkt hat. Das kann unter gewissen Umständen einen Fehler auslösen.
Evtl liegt der eigentliche Fehler hierin begründet. Bitte um Kommentare... |
Es gibt da noch mehr mögliche rmf-Fallen (Read-Modify-Write). Beispielsweise, wenn die Ausgänge mit relativ viel Strom belastet werden (wie beim Treiben von LEDs ).
Die Eingangsschaltkreise an PortD des 16F887 arbeiten mit TTL-Pegel (siehe auch "DC Characteristics" im Datenblatt, wo so die Grenzen liegen). Annahme: Eine LED hänge zwischen VCC und RD0, ist also eingeschaltet, wenn RB0=low ist. Dann kann bei Strömen um 20mA das Potential an RB0 durchaus über 0,8V liegen. Die LED leuchtet trotzdem munter vor sich hin, ist ja kein Problem.
Wenn man jetzt aber ein XOR auf RB0 ausführt, kann es sein, dass nicht low-Pegel, sondern high-Pegel erkannt wird. Warum? TTL garantiert eine sichere low-Erkennung nur bei weniger als 0,8V (und eine sichere high-Erkennung ab 2V), und wenn der Port auf 0,82V liegt und dann noch eine Spannungsspitze reinkommt, kann es sein, dass die TTL-Erkennung nicht "low", sondern "high" ergibt. Das erkannte "high" wird dann mit XOR auf "low" umgeschaltet und der Wert in das Output-Latch geschrieben.
Womit effektiv dann keine Umschaltung stattgefunden hat
Deswegen ist es guter Stil, Output-Pins über ein Schattenregister zu puffern.
Bei den PIC18Fs wurde dem Problem Rechnung getragen; dort ist es möglich, das Output-Latch direkt auszulesen (per Lesezugriff auf LatX statt PortX).
Das muss nicht unbedingt das Problem bei Dir gewesen sein, ist aber trotzdem gut zu wissen.
Meine Quelle (sehr lesenswert!):
http://www.microchip.com/forums/tm......78014
Auch die dort oben verlinkten Artikel durchlesen!
Auch lesenswert:
http://www.microchip.com/forums/m538764.aspx
Gruß, Bartho
(der selbst auch noch PIC lernt)
|
BID = 740137
QuirinO Schreibmaschine
Beiträge: 2205 Wohnort: Behringersdorf
|
Perfekt. Ich hatte auch noch sowas im Hinterkopf, genau diesen Fehler hatte ich gemeint.
Durch direktes Beschreiben hat sich dieser Fehler ja auch verflüchtigt, deshalb scheint es mir wirklich daran gelegen zu haben.
Danke für die Infos! *fängt interessiert zu lesen an*
[ Diese Nachricht wurde geändert von: QuirinO am 11 Jan 2011 20:20 ]
|
BID = 740163
Bartholomew Inventar
Beiträge: 4681
|
Du könntest das bei hinreichender Lust und Laune überprüfen, indem Du testweise bei einer LED den Vorwiderstand so veränderst, dass max. 3mA durch sie fließen, und dann ebendiese LED noch mal per XOR versuchst umzuschalten. Wenn's dann geht, ist der Fehler eindeutig
Gruß, Bartho
|
BID = 740196
QuirinO Schreibmaschine
Beiträge: 2205 Wohnort: Behringersdorf
|
Momentan geht meine Laune gegen 0 - ich muss innerhalb der nächsten 4 wochen Umziehen, hat sich kurzfristig so ergeben. Wenn mein Labor in der neuen Wohnung steht, dann werd ich weiter gucken. Könnte leicht ende März werden, bis ich wieder ernsthaft Projekte weiterverfolgen kann. Ansonsten hald mal zwischendurch
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag heute wurden bisher 24 Beiträge verfasst © x sparkkelsputz Besucher : 182424095 Heute : 3137 Gestern : 5459 Online : 192 29.11.2024 16:27 3 Besucher in den letzten 60 Sekunden alle 20.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0461142063141
|