- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 7 von 7

Thema: I2C Communication

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    03.06.2011
    Beiträge
    12

    I2C Communication

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo allerseits!

    Ich bastle gerade an der Kommunikation von Prozessor und einem I2C fähigen Temperatursensor und bin jetzt über ein paar Problemchen gestolpert...
    (Ich arbeite mit MPLabX, Xc8 und einem PIC18f87j11 prozessor)

    Zu meinen Problem:

    Wenn ich versuche meinen Code zu debuggen bekomme ich folgend Fehlermeldungen:


    Code:
    make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
    make[1]: Entering directory `C:/XXX/I2C/Anewone.X'
    make  -f nbproject/Makefile-default.mk dist/default/production/Anewone.X.production.hex
    make[2]: Entering directory `C:/XXX/Anewone.X'
    "C:\Program Files (x86)\Microchip\xc8\v1.12\bin\xc8.exe"  --chip=18F87J11 -G --asmlist -mdist/default/production/Anewone.X.production.map  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,-asmfile,+speed,-space,-debug,9 --addrqual=ignore -P -N255 --warn=0 --summary=default,-psect,-class,+mem,-hex,-file --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,+plib "--errformat=%%f:%%l: error: %%s" "--warnformat=%%f:%%l: warning: %%s" "--msgformat=%%f:%%l: advisory: %%s"   -odist/default/production/Anewone.X.production.cof  build/default/production/_ext/1472/main.p1     
    Microchip MPLAB XC8 C Compiler V1.12
    Copyright (C) 2012 Microchip Technology Inc.
    License type: Node Configuration
    
    :: warning: Omniscient Code Generation not available in Free mode
    ../main.c:44: warning: variable "_SEN" is deprecated (declared at C:\Program Files (x86)\Microchip\xc8\v1.12\include\pic18f87j11.h:17104)
    ../main.c:51: warning: variable "_RSEN" is deprecated (declared at C:\Program Files (x86)\Microchip\xc8\v1.12\include\pic18f87j11.h:17024)
    ../main.c:58: warning: variable "_PEN" is deprecated (declared at C:\Program Files (x86)\Microchip\xc8\v1.12\include\pic18f87j11.h:16668)
    ../main.c:89: warning: variable "_RCEN" is deprecated (declared at C:\Program Files (x86)\Microchip\xc8\v1.12\include\pic18f87j11.h:16872)
    ../main.c:93: warning: variable "_ACKDT" is deprecated (declared at C:\Program Files (x86)\Microchip\xc8\v1.12\include\pic18f87j11.h:15438)
    ../main.c:94: warning: variable "_ACKDT" is deprecated (declared at C:\Program Files (x86)\Microchip\xc8\v1.12\include\pic18f87j11.h:15438)
    ../main.c:95: warning: variable "_ACKEN" is deprecated (declared at C:\Program Files (x86)\Microchip\xc8\v1.12\include\pic18f87j11.h:15444)
    ../common/aslmul.c:7: error: main function "_main" not defined
    make[2]: Leaving directory `C:/XXX/Anewone.X'
    make[1]: Leaving directory `C:/XXX/Anewone.X'
    (908) exit status = 1
    make[2]: *** [dist/default/production/Anewone.X.production.hex] Error 1
    make[1]: *** [.build-conf] Error 2
    make: *** [.build-impl] Error 2
    
    BUILD FAILED (exit value 2, total time: 1s)

    Hier mein Code:
    Code:
    #include <p18f87j11.h>
    #include<pic18.h>
    #define I2C_WRITE 0
    #define I2C_READ 1
    
    // Initialise MSSP port.
    void i2c_Init(void){
    
    	SSPSTAT = 0b11000000; 	// Slew rate disabled
    	TRISC=0b11111111;
    	OSCCON = 0b01111010;
    	SSP1CON1 = 0b00101000;
    	SSP1CON2 = 0x00;
        	SSPADD = 39;    	// 100Khz @ 16Mhz Fosc
    }
    
    void i2c_Wait(void)
    {
        while ( ( SSP1CON2 & 0x1F ) || ( SSP1STAT & 0x04 ) );
    }
    
    void i2c_Start(void)
    {
     	i2c_Wait();
    	SEN=1;
    }
    
    void i2c_Restart(void)
    {
     	i2c_Wait();
    	RSEN=1;
    }
    
    void i2c_Stop(void)
    {
     	i2c_Wait();
     	PEN=1;
    }
    
    void i2c_Write(unsigned char data)
    {
     	i2c_Wait();
     	SSPBUF = data;
    }
    
    void i2c_Address(unsigned char address, unsigned char mode)
    {
    	unsigned char l_address;
    	l_address=address<<1;
    	l_address+=mode;
     	i2c_Wait();
     	SSPBUF = l_address;
    }
    
    unsigned char i2c_Read(unsigned char ack)
    {
     	unsigned char i2cReadData;
     	i2c_Wait();
    	RCEN=1;
     	i2c_Wait();
     	i2cReadData = SSPBUF;
     	i2c_Wait();
     	if ( ack ) ACKDT=0;		// Ack
    	else       ACKDT=1;		// NAck
    	ACKEN=1;   		        // send acknowledge sequence
    	return( i2cReadData );
    }
    Ich bin für jede Hilfe dankbar.
    mfg Phyres

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.01.2009
    Alter
    33
    Beiträge
    104
    Wenn ich das so richtig sehe, sind das ja nur Warnungen, dass die Variablen veraltet sind. Der einzige Fehler ist, dass du keine main Funktion angelegt hast. Ohne die bringen dir deine I2C Funtionen ja auch nichts. Du musst sie noch aufrufen.
    Gruß
    Kevin

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    03.06.2011
    Beiträge
    12
    Danke für den Hinweis!

    Gibt es für die veralteten variable neue Bezeichnungen?

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.01.2009
    Alter
    33
    Beiträge
    104
    Sorry da kann ich dir so ohne weiteres auch nicht weiterhelfen. Ich arbeite noch mit dem C18 Compiler und da hatte ich noch nie Probleme mit veralteten Variablen (ich versteh denn Fehler auch nicht so wirklich!?). Aber funktioniert dein Programm jetzt?
    Gruß
    Kevin

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    03.06.2011
    Beiträge
    12
    Ja keine Fehlermeldungen neben den Warnungen. Ob die Kommunikation funktioniert kann ich erst nächste Woche austesten.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    03.06.2011
    Beiträge
    12
    Hab es Heute ausgetestet hat aber nicht funktioniert... Hat sich alles ausführen lassen aber auf dem Oszi hat sich nix getan.
    Es wäre toll wenn jemand mit etwas mehr Erfahrung mal kurz über den Code schauen könnte.

    Kurze Erklärung zum Testaufbau(Möglicherweise liegt dort der Fehler):
    Ich habe mit dem Oszilloskope mir Clock und Data-Leitung auf jeweils einen Kanal gelegt und den untenstehenden Code ausgeführt. Daher kommt auch die unschöne while-Schleife im main. Wollte nur sehen ob sich etwas an den Ausgängen tut.

    Zur Hardware:
    Ich verwende ein Demoboard von Microchip(PICDEM PIC18 EXPLORER BOARD PIC18f87j11). Als Pull-up Resistors habe ich 1k8 verwendet.

    Der obenstehende Code ist noch der selbe bis auf das hinzugefügte main und die Korrektur Von SSPSTAT auf SSP1STAT(Zeile 9)

    void main(void)
    {
    unsigned char i2cReadfinish;
    i2c_Init();
    i2c_Start();
    while(1)
    {
    i2c_Write(11110000);
    }
    i2cReadfinish = i2c_Read(0);
    i2c_Stop();
    }

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Ich vermute mal deine Software hängt in der i2c_Wait Schleife fest und sendet vermutlich garnichts.
    Sehr gute Informationen, falls noch nicht bekannt, findest Du auch hier:
    http://www.sprut.de/electronic/pic/grund/i2c.htm#pic
    schau mal dort unter der Rubrik:
    Daten auf den I2C-Bus schreiben
    Hier wird das SSPIF-Bit im PIR1-Register mit einbezogen.
    Hoffentlich hilft Dir der Link weiter.
    Viel Erfolg, Siro

Ähnliche Themen

  1. I²C COMMUNICATION ERROR!
    Von Draman im Forum Robby RP6
    Antworten: 2
    Letzter Beitrag: 27.11.2010, 16:10
  2. I2C Communication Error
    Von Pipo im Forum Robby RP6
    Antworten: 2
    Letzter Beitrag: 30.05.2010, 16:08
  3. Antworten: 8
    Letzter Beitrag: 29.11.2009, 20:28
  4. IP Ethernet Kamera Webserver Communication
    Von The KOR im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 0
    Letzter Beitrag: 12.08.2008, 10:56
  5. PIC Communication Interrupt #Int_RDA
    Von RoboLeo im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 14.12.2005, 17:31

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress