PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : i2c Bus Timing mit dem MCP23017



modtronic
13.03.2018, 14:21
Hallo

Ich habe eine Frage zum i2c Bus und gleichzeitig zum MCP23017.
ich betreibe diesen als Ausgabetreiber. An den 16 Ports hängen ganz einfach ULN2804A Treiber für die Steuerung von Relais.

CPU ist ein ATMega 32 welcher mit externe Quarz auf 8Mhz läuft.
soweit so gut..das geht auch

Für den MCP habe ich mir eine kleine Routine geschrieben wo ich die einzelnen Ports ganz simpel einzeln als Bits ansprechen kann. das Funktioniert auch an anderen MC welche im 1Mhz internen Betrieb laufen.

Bei dem MC mit externen Quarz verhält sich der MCP23017 etwas eigenartig.
Ich hatte jetzt das Problem das ich am MCP23017 entweder nur den PORTA oder den PORTB schreiben konnte. Habe ich ub GPA0 und GPB0 als Ausgang "1" gesetzt wurde immer nur GPBA High..erst wenn ich GBPA Low schreibe kommt der Pin am Port B.

Ich selber Programmiere mit Codevision uns benutzte den Codewizard zum einstellen des Controllers. hier lässt sich für den i2c Bus nur der Port einstellen.

Ein interner Timer läuft als Overflow mit 1000,000 khz. Erst als ich diesen auf 125,000 khz änderte lief der MCP stabiler.
100% aber erst, als ich das CKSEL 0 Fusebits auch das Häckchen entfernt lief der MCP wie erwartet.
Jetzt sind alle Häckchen der Fusebits abgewählt. Ich nutze dazu meist immer die Seiten aus dem Internet zum einstellen.

Hier ist jetzt meine Frage ob es für den i2c Bus ein Unterschied ist ob interner oder externer Quarz und ob die 100% richtige Einstellung der Fusebits hier eine Auswirkung darauf haben.
oder muss ich im Programm dem MCP noch sagen wie schnell der Bus läuft und dies einstellen?? Frage wäre woher weiss ich das ? im Programm muss ich ja selber nichts mehr einstellen dazu

Vielen Dank schon im Voraus

Gruss
P. Kaiser

Bumbum
13.03.2018, 16:37
Hallo P.Kaiser,

selbstverständlich musst du die FUSE-Bits so setzen, dass auch der extrerne Quarzt benutzt wird. Ansonsten läuft der Controller auf einer anderen Frequenz und das Timing kann nicht stimmen. Wie genau die FUSE-Bits gehören erfährst du am im Datenblatt des Controllers. Das ist teilweise auch von der Quarz-Frequenz abhängig!

Viele Grüße,
Andreas

Klebwax
13.03.2018, 16:55
Hier ist jetzt meine Frage ob es für den i2c Bus ein Unterschied ist ob interner oder externer Quarz

Die I2C Bustakt spielt keine wirkliche Rolle. Der Master liefert ja auf SCLK den Takt mit, auf den sich die Slaves synchronisieren. Die Slaves werden da nur in Klassen eingeteilt: kann bis 100kHz, kann bis 400kHz und manche schnellere. Und wenn ein Slave mal ein wenig mehr Zeit braucht, kann er den Master verzögern, in dem er den Takt verlängert.

MfG Klebwax