ds3231 ile ilgili, i2c1_start() çalıştıramadım bir türlü

Başlatan zamzam23, 14 Şubat 2015, 23:51:08

zamzam23

selamlar

programı adım adım takip ediyorum i2c1_start(); yaptığımda, bu adımı geçemiyor bir türlü? sorun ne olabilir? bağlantılarım doğru çünkü donanımsal hiçbir değişiklik yapmazken ccs ile çalışıyor devre ama mikroc ile çalıştıramadım.sorun ne olabilir. program çok sade. ds3231 rtc entegresine bir adrese veri yazmaya çalışıyorum.kullandıgım işlemci 18f46k22, 20M osc ile.

bakar mısınız neyi eksik yapıyorum?

#include "DS3231.h"

 #define yesil LATD.F2
 #define kirmizi LATC.F2
 #define flashy() {yesil = 1;delay_ms(1000); yesil = 0;delay_ms(1000);}
 #define flashk() {kirmizi = 1;delay_ms(1000); kirmizi = 0;delay_ms(1000);}


void main() {


        TRISD.RD2=0;TRISC.RC2=0;      //led
        PORTD.RD2=0;PORTC.RC2=0;      //led

         TRISC.F3=1;       //i2c pini
         TRISC.F4=1;       //i2c pini
          //ADCON1 = 0XFF;
           ADCON1=0;ADCON2=0;ADCON0=0;

    //debug başlıyor

           flashk();
           I2C1_Init(100000); delay_ms(100);
           
           flashy();
           I2C1_start();
             
           flashy();
           I2C1_Wr(DS3231_Write_addr);
           
           flashy();
           I2C1_Wr(controlREG);
           
           flashy();
           I2C1_Wr(0x00);
           flashy();
           
           I2C1_stop();
           
           flashy();


     while(1);



}


DS3231.H

#define DS3231_Address              0x68

#define DS3231_Read_addr            ((DS3231_Address << 1) | 0x01)
#define DS3231_Write_addr           ((DS3231_Address << 1) & 0xFE)

#define secondREG                   0x00
#define minuteREG                   0x01
#define hourREG                     0x02
#define dayREG                      0x03
#define dateREG                     0x04
#define monthREG                    0x05
#define yearREG                     0x06
#define alarm1secREG                0x07
#define alarm1minREG                0x08
#define alarm1hrREG                 0x09
#define alarm1dateREG               0x0A
#define alarm2minREG                0x0B
#define alarm2hrREG                 0x0C
#define alarm2dateREG               0x0D
#define controlREG                  0x0E
#define statusREG                   0x0F
#define ageoffsetREG                0x10
#define tempMSBREG                  0x11
#define tempLSBREG                  0x12

#define _24_hour_format             0
#define _12_hour_format             1
#define AM                          0
#define PM                          1

//enum days_of_week{SUN = 1, MON, TUE, WED, THU, FRI, SAT};


unsigned char bcd_to_decimal(unsigned char d);
unsigned char decimal_to_bcd(unsigned char d);
unsigned char DS3231_Read(unsigned char address);
void DS3231_Write(unsigned char address, unsigned char value);
void DS3231_init();
void getTime(unsigned char *hour, unsigned char *minute, unsigned char *second, short *am_pm, short hour_format);
void getDate(unsigned char *day_of_week, unsigned char *date, unsigned char *month, unsigned char *year);
void setTime(unsigned char hSet, unsigned char mSet, unsigned char sSet, short am_pm_state, short hour_format);
void setDate(unsigned char daySet, unsigned char dateSet, unsigned char monthSet, unsigned char yearSet);
float getTemp();

Kabil ATICI

i2c çalışma frekansı nedir? Çoğu alet için 400KHz'i aşmaması gerekir.
ambar7

zamzam23