Hallo zusammen Habe eine frage hoffentlich könnt ihr mir helfen Ich habe einen PIC18F27j13, der hat 2 MSSP Module. An den PinsRB4 SLC2und RB5 SDA2 ist ein DS1631 Temperatursensor angeschlossen. Programmieren tue ich mit MPLAB,C18 Compiler und PIC KIT 3. Ich möchte nun die I2C.h Libary verwenden, hier kommt mein Problem. Da ich ja am MSSP2 Modul meinen Sensor angeschlossen habe, muss ich statt der normalen I2C Libaryfuntionen die für den I2C2 verwenden. Schreibe ich nun Beispielsweise StartI2C2() // call of funktion without prototype StartI2C()…………………// so läuft das durch den Compiler Was ich nun versucht habe ist mit SWStartI2C()…………// Mit dieser Funktion wird zumindest die SDA Leitung runtergezogen Jedoch weiss ich nicht was genau der Unterschied zu StartI2C2()ist Hat wer eine idee warum StartI2C2() nicht geht? Gruss Ramon Code Bsp nur zum Testen: 2 Taster einer Start() anderer Stop mit SWStartI2C() geht zumindest was. // Configuration #pragma config OSC = INTOSC #pragma config WDTEN = OFF #pragma config SOSCSEL = LOW //Low Power T1OSC/SOSC circuit selected #pragma config XINST = OFF #define LED LATBbits.LATB2 #define SWITCH1 PORTAbits.RA0 #define SWITCH2 PORTAbits.RA1 /** I N C L U D E S **************************************************/ #include "p18f27J13.h" #include "delays.h" #include "sw_i2c.h" #include "i2c.h" /** D E C L A R A T I O N S *******************************************/ void main (void) {unsigned char Var; Var=0; OSCCONbits.IRCF2= 1; OSCCONbits.IRCF1= 1; OSCCONbits.IRCF0= 0; SSP2ADD=9; SSP2CON1=0b00001000; SSP2CON1=0b00101000; ANCON0bits.PCFG0=1; ANCON0bits.PCFG1=1; while(1) {if(SWITCH1!=1) SWStartI2C(); if(SWITCH2!=1) SWStopI2C(); } }
Ramon S. schrieb: > SWStartI2C()…………// Mit dieser Funktion wird zumindest die SDA Leitung > > runtergezogen Damit benutzt du nicht das MSSP-Modul, sondern ein Software-I2C Interface. Hast du das richtige Headerfile für deinen Controller eingebunden?
Danke für die Hilfe Also die files habe ich eingebunden p18f27J13 #include "p18f27J13.h" #include "delays.h" #include "sw_i2c.h" #include "i2c.h" Auch im Projekt alle unter Header abgelegt Wenn ich mir das Headerfile "i2c.h" anschaue steht da unter anderem. #if defined (I2C_V3) || defined (I2C_V6) || defined (I2C_V6_1) /*This version has MSSP2*/ /* ***** I2C2 ***** */ #if defined (I2C_V3) || defined (I2C_V6) Dass muss ich nicht selbst definieren oder? LG Ramon
So was ich nun rausgefunden habe ist folgendes. Die Funktionen für I2C2() werden über eine Versions nummer freigeschalten. Diese Versions nummern sind im p.config definiert mein PIC hat die Version I2C_V5 Darum gibt er mir hier die Funktionen nicht frei. #if defined (I2C_V3) || defined (I2C_V6) || defined (I2C_V6_1) /*This version has MSSP2*/ /* ***** I2C2 ***** */ #if defined (I2C_V3) || defined (I2C_V6) Ich verstehe nicht warum mein PIC nicht für IC2C2 definiert ist. Macht doch keinen sinn 2 MSSP2 Module zu haben, wenn ich die doch mit via Software-I2C Interface ansprechen muss. Für Inputs wäre ich dankbar.
Dann setz das #define doch mal von Hand und schau, ob es geht.
Ja habe ich gemacht. Compiler läuft es durch, muss nun noch Testen ob auch was geht am PIN Melde mich dann.. Gruss Ramon
Also habe es getestet. Wenn ich nun StartI2C2(), sind SCL und SDA auf Low ist also falsch. Da müsste ich wohl noch mehr modifikationen machen.... Denke ich Programmiere dass mit den SWI2C() funktionen durch, dass müsste ja auch gehen oder? Da habe ich mit dem KO schon, das Write kommendo gemessen. Da bin ich zumindest auf den richtigen Pins...
Also mache dass nun mit SWIC2() funktionen. Einen ersten Erfolg gibt es auch schon zu verzeichnen bekomme ACK . Hier mal das init des 1631. LG Ramon
hallo ramon! habe ein ähnliches problem. benutze einen pic18f26k22 mit C18 mplab icd3 etc. nun scl und sda sind bei mir immer auf high, ich bekomm sie nicht runter und vermute es liegt an der initialisierung. die pins sind nämlich getestet funktioniert. pull ups hab ich auch. kannst du mir sagen wie du i2c initialisiert hast? habe es schon mit den i2c.h funktionen versucht, habe die register auch schon manuell beschrieben aber noch keinen erfolg gehabt. ich sehe bei dir im ersten post, dass du die TRIS register gar nicht beschreibts? nur SSP2CON1 und SSP2ADD.. wahrscheinlich fehlt bei mir ein bit das gesetzt werden muss oder ich habe die falsche reihenfolge keine Ahnung, jedenfalls bin ich bald am verzweifeln. wäre nett wenn du mir helfen kannst. lg Patrick
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.