Forum: Mikrocontroller und Digitale Elektronik PIC 18F27J13 Problem I2C2 (MSSP2) modul


von Ramon S. (ramon2)


Lesenswert?

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();
}
}

von heinzhorst (Gast)


Lesenswert?

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?

von Ramon S. (ramon2)


Lesenswert?

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

von Ramon S. (ramon2)


Lesenswert?

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.

von heinzhorst (Gast)


Lesenswert?

Dann setz das #define doch mal von Hand und schau, ob es geht.

von Ramon S. (ramon2)


Lesenswert?

Ja habe ich gemacht.

Compiler läuft es durch, muss nun noch Testen ob auch was geht am PIN

Melde mich dann..

Gruss Ramon

von Ramon S. (ramon2)


Lesenswert?

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...

von Ramon S. (ramon2)


Angehängte Dateien:

Lesenswert?

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

von Patrick (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.