I2C-Bus Ack + Interrupt unterbrechung

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 29 11 2024  16:27:07      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte

Gehe zu Seite ( Vorherige Seite 1 | 2 | 3 )      


Autor
I2C-Bus Ack + Interrupt unterbrechung
Suche nach: i2c (581)

    







BID = 739568

QuirinO

Schreibmaschine



Beiträge: 2205
Wohnort: Behringersdorf
Zur Homepage von QuirinO ICQ Status  
 

  


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
ICQ Status  

 

  

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
Zur Homepage von QuirinO ICQ Status  

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
Zur Homepage von QuirinO ICQ Status  

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


Vorherige Seite      
Gehe zu Seite ( Vorherige Seite 1 | 2 | 3 )
Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


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