mikrocontroller.net

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


Autor: Ramon S. (ramon2)
Datum:

Bewertung
0 lesenswert
nicht 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();
}
}

Autor: heinzhorst (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Ramon S. (ramon2)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ramon S. (ramon2)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: heinzhorst (Gast)
Datum:

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

Autor: Ramon S. (ramon2)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ramon S. (ramon2)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Ramon S. (ramon2)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.