اطلاعیه

Collapse
No announcement yet.

مشکل در رابطه با DS1390

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در رابطه با DS1390

    با سلام
    من یک ساعت دیجیتال با RTC ساختم و از DS1390 استفاده کردم. در ظاهر به نظر می آد که درست کار می کنه اما پس از مدتی متوجه شدم که زمان رو سریعتر محاسبه می کنه .!!! به نظر شما مشکل از چیه ؟ چند با کریستال و خود RTC رو عوض کردم ولی فرقی نکرد

    کد:
    #define RTC_chip_select portc.f0
    char* text;
    char txt[6];
    unsigned char  Minute,Second,Hour;
    void lcd(){
    byteToStr(Bcd2Dec(Second), txt);
    Lcd_Out(3, 12, txt);
    byteToStr(Bcd2Dec(Minute), txt);
    Lcd_Out(3, 9, txt);
    text=":";
    Lcd_Out(3, 12, text);
    byteToStr(Bcd2Dec(Hour), txt);
    Lcd_Out(3, 6, txt);
    Lcd_Out(3, 9, text);
    }
    //////////////////////////////////////// Set Hour
    void Inc_Hour(){
    delay_ms(200);
    Hour = Bcd2Dec(Hour);
    Hour++;
    if( Hour> 24)Hour =0;
    Hour=Dec2Bcd(Hour);
    RTC_chip_select=0;
    spi_write(0x83);
    spi_write(Hour);
    RTC_chip_select=1;
    }
    //////////////////////////////////////////Set Hour
    ///////////////////////////////////////// Set Minute
    void Inc_Minute(){
    delay_ms(200);
    Minute = Bcd2Dec(Minute);
    Minute++;
    if( Minute> 59)Minute=0;
    Minute=Dec2Bcd(Minute);
    RTC_chip_select=0;
    spi_write(0x82);
    spi_write(Minute);
    RTC_chip_select=1;
    }
    ////////////////////////////////////////Set Minute
    ///////////////////////////////////////////Set Second
    void Inc_Second(){
    delay_ms(200);
    Second = Bcd2Dec(Second);
    Second++;
    if( Second> 59)Second=0;
    Second=Dec2Bcd(Second);
    RTC_chip_select=0;
    spi_write(0x81);
    spi_write(Second);
    RTC_chip_select=1;
    }
    /////////////////////////////////////////////Set Second
    ///////////////////////////////////////keypad Function
    void Keypad(){
    unsigned char kp;
    kp = Keypad_Read();
    if(kp=!0) {
    kp = Keypad_Read();
    if(kp==1)Inc_Hour();
    if(kp==2)Inc_Minute();
    if(kp==3)Inc_Second();
    }}
    /////////////////////////////////////// keypad Function
    //////////////////////////////////////RTC_Refresh Function
    void RTC_Refresh(){
    RTC_chip_select=0;         // enable RTC - CS low
    spi_write(0x01);          // seconds register read address
    Second = spi_read(255);    // read seconds register
    Minute =spi_read(255);    // read minutes
    Hour =spi_read(255);     // read hours
    RTC_chip_select=1;         // disable RTC - CS high
    }
    //////////////////////////////////////RTC_Refresh Function
    /////////////////////////////////////RTC_Register Function
    void RTC_Register(){
    ///////////////////////////////control register
    RTC_chip_select=0;
    spi_write(0x8d);        // control register write address
    spi_write(0xBD);        //10111101//
    RTC_chip_select=1;
    ///////////////////////////////control register
    ///////////////////////////////////trickle charger
    RTC_chip_select=0;
    spi_write(0x8f);
    spi_write(0xAB);    // one diode and one 4k resistor
    RTC_chip_select=1;
    //////////////////////////////////trickle charger
    }
    //////////////////////////////////////RTC_Register Function
    ////////////////////////////////////////////Pins Function
    void Pin(){
    trisc.f0=0;  // chip select
    portc.f0=1;  // chip select
    trisc.f1=1;  // int
    portc.f1=1;  // int
    trisc.f2=0;  // led
    portc.f2=0;  // led
    }
    /////////////////////////////////////////////// Pins Function
    //////////////////////////////////////////// main Function
    void main() {
    ADCON1=0b00000111;
    Lcd_Init(&PORTB);
    Lcd_Cmd(Lcd_CURSOR_OFF);
    Keypad_Init(&PORTA);
    Spi_Init_Advanced(MASTER_OSC_DIV64,DATA_SAMPLE_End,CLK_IDLE_HIGH , LOW_2_HIGH) ;
    Pin();
    delay_ms(2000);
    RTC_Register();
    while(1){
    Keypad();
    RTC_Refresh();
    lcd();
    }
    }
    //////////////////////////////////////////// main Function

    #2
    پاسخ : مشکل در رابطه با DS1390

    دیتا شیت این آی سی رو نخوندم
    اما اکثر RTC ها برای پایداری بهتر یه خازن با یکی از پایه ها ی کریستال زمین میشه که میشه با تغییر اون این مشکل رو جبران کرد
    هميشه به ياد خدا باش !

    دیدگاه


      #3
      پاسخ : مشکل در رابطه با DS1390

      نوشته اصلی توسط DDR3
      دیتا شیت این آی سی رو نخوندم
      اما اکثر RTC ها برای پایداری بهتر یه خازن با یکی از پایه ها ی کریستال زمین میشه که میشه با تغییر اون این مشکل رو جبران کرد
      نه فکر نکنم چون توی دیتا شیت چیزی در این مورد نگفته (در ضمن خازن داخلی داره). البته من این رو امتحان کردم یعنی پایه های کریستال رو با خازن زمین کردم بعد دیگه اصلا کار نکرد.

      دیدگاه


        #4
        پاسخ : مشکل در رابطه با DS1390

        اگر خازن داخلی داره که این مورد بدردش نمی خوره
        اگر کالیبره داخلی داره استفاده کن و یا اینکه بصورت نرم افزاری تصحیحش کن
        یعنی اگر در 24 ساعت 5 ثانیه جلو میره ، در بازه های زمانی 24 ساعت این 5 ثانیه رو ازش کم کن
        من خودم بعلت نداشتن اسیلوسکوپ ، از همین روش استفاده میکنم و خوب هم هست بنظرم
        هميشه به ياد خدا باش !

        دیدگاه

        لطفا صبر کنید...
        X