-         
Ergebnis 1 bis 5 von 5

Thema: Anfänger erbittet Hilfe(3).....PIC16F877A und I2C will nicht

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    68
    Beiträge
    1.133
    Blog-Einträge
    1

    Anfänger erbittet Hilfe(3).....PIC16F877A und I2C will nicht

    Anzeige

    Hallo Freunde !

    Wieder einmal bin ich bestimmt in die Anfängerfallstricke gelangt. Ein Versuch, für den PIC16F877A eine I2C Anwendung zu schreiben, will nicht gelingen. Ein DS1307 RTC Modul soll per I2C abgefragt werden.
    Gerade als Anfänger bei den PICs und MPLABX & XC.8 Compiler bin, schreibe ich der Übersichtlichkeit gern Headerdateien bzw.separate Libraries.

    Nun meckert der Compiler bei einer als "unsigned long" Variable die als Taktfrequenz des I"C Bus dienen soll.
    Hier mal eine paar Codefetzen :

    Code:
    /**************************************************************************/
    ol_i2c.h :
    
    #ifndef _XTAL_FREQ
    #define _XTAL_FREQ 4000000UL  //EasyPIC-40 FQ= 4.0MHz
    #endif  //_XTAL_FREQ
    extern const unsigned long I2C_CLK = 100000;    // Takt 100KHz (UL)
    extern void   I2C_Init(const unsigned long c);  // c = Taktangabe in Hz
    extern void   I2C_Wait();    
    extern void   I2C_Start();
    extern void   I2C_RepeatedStart();    
    extern void   I2C_Stop();
    extern void   I2C_Write(unsigned char d);
    extern unsigned char I2C_Read(unsigned char a);
    
    /***************************************************************************/
    ol_i2c.c :
    
    void I2C_Init(const unsigned long c)
    {
      SSPCON = 0b00101000;           //SSP Module as Master
      SSPCON2 = 0;
      SSPADD = (_XTAL_FREQ/(4*c))-1;  //Setting Clock Speed
      SSPSTAT = 0;
      TRISC3 = 1;                   //Setting as input 
      TRISC4 = 1;                   //Setting as input 
    }
    
    /***************************************************************************/
    ol_rtc_1307.h :
    
    
    #define Ds1307Read          0xD1          // DS1307  in read mode
    #define Ds1307Write         0xD0          // DS1307  in write mode
    #define Ds1307ControlRegAddress 0x07      // DS1307 Controllregister
    #define Ds1307SecondRegAddress  0x00      // SekundenRegAdresse
    will ich jetzt davon Funktion/Routinen wie folgt benutzen :

    Code:
    /***************************************************************************/
    
    ol_rtc_1307.c :
    
    #include "ol_rtc_1307.h"
    #include "i2c.h"
    /* ========================================================================== */
    /*                                                                            */
    /*                        RTC-INIT                                            */
    /*                                                                            */
    /* ========================================================================== */
    const unsigned long I2C_CLK = 100000;
    int RTC_Init()
            {
                I2C_Init(I2C_CLK);                      // Initialize the I2C module.100000 = 100KHz
                I2C_Start();                            // Start I2C communication
                I2C_Write(Ds1307Write);                 // Connect to DS1307 
                I2C_Write(Ds1307ControlRegAddress);     // Select  the Ds1307 ControlRegister to configure Ds1307
                I2C_Write(0x00);                        // Write 0x00 to Control register to disable SQW-Out
                I2C_Stop();                             // Stop I2C communication after initializing DS1307
                return 0;
            }
    /* ========================================================================== */
    ergibt sich bei I2C_Init Zeile ein markierter Fehler, dessen Ursache ich einfach nicht herausfinden kann:

    ol_rtc_1307.c:29: error: (1098 ) conflicting declarations for variable "RTC_Init" (ol_rtc_1307.c:28 )

    Vielleicht kann mir wer bitte mal etwas weiter und auf die "Sprünge" helfen , was ich da falsch machen.

    Gruss & Dank
    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  2. #2
    RN-Premium User Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    47
    Beiträge
    511
    Blog-Einträge
    17
    Zitat Zitat von oderlachs Beitrag anzeigen
    Code:
    /***************************************************************************/
    
    ol_rtc_1307.c :
    
    #include "ol_rtc_1307.h"
    #include "i2c.h"
    ...
    Sollte hier nicht deine ol_i2c.h includiert werden? Oder verstehe ich deine Projektstruktur nicht?

    Gruß
    witkatz

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    68
    Beiträge
    1.133
    Blog-Einträge
    1
    Danke Witkatz !!!!!!

    Ja so ist es wenn die die Ehefrau , einem lfd beim Programmieren stört.....wegen "nichtigen Hilfsarbeiten"
    Eine Variablen Definition war noch falsch....udn schon geht es.
    Stehe schon vor dem nächsten I2C Problem beim EPROM Schreiben /Lesen...aber ich denke das wird auch solch ein Fehler sein, den ich in Ruhe vieleicht doch selber finden werde.

    Nun ist erst mal DVD Abend und Kopf abkühlen....

    Gruss und Danke Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  4. #4
    RN-Premium User Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    47
    Beiträge
    511
    Blog-Einträge
    17
    Zitat Zitat von oderlachs Beitrag anzeigen
    Ja so ist es wenn die die Ehefrau , einem lfd beim Programmieren stört.....wegen "nichtigen Hilfsarbeiten"
    Du musst es nicht auf deine Frau schieben. Jeder Programmierer kennt diese Fehler, die man beim 100x drüberschauen 100x übersieht. Dann kommt ein Ahnungsloser daher, wirft einen Blick drüber, stellt eine dumme Frage und es fällt einem wie Schuppen von den Augen...

    Gruß vom Rhein an die Oder
    witkatz

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    68
    Beiträge
    1.133
    Blog-Einträge
    1
    Ja Wittkatz, da hast Du sicher Recht !!
    Nur habe ich keinen in der Nähe, der das für mich mal machen könnte. Darum muss ich meine Dummheit leider hier im Forum offenbaren...

    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

Ähnliche Themen

  1. [ERLEDIGT] Anfänger erbittet Hilfe(2)
    Von oderlachs im Forum PIC Controller
    Antworten: 11
    Letzter Beitrag: 30.03.2017, 15:53
  2. [ERLEDIGT] PIC Neueinsteiger erbittet Hilfe
    Von oderlachs im Forum PIC Controller
    Antworten: 22
    Letzter Beitrag: 20.04.2016, 17:07
  3. hilfe Anfänger braucht hilfe beim start
    Von thomas3 im Forum Robby RP6
    Antworten: 26
    Letzter Beitrag: 20.09.2010, 21:07
  4. Hilfe bei PIC16F877A
    Von Scuido im Forum PIC Controller
    Antworten: 6
    Letzter Beitrag: 20.02.2008, 13:19
  5. PIC16F877A + LCD
    Von grower im Forum PIC Controller
    Antworten: 5
    Letzter Beitrag: 12.12.2006, 15:36

Berechtigungen

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