با سلام
من یک ساعت دیجیتال با RTC ساختم و از DS1390 استفاده کردم. در ظاهر به نظر می آد که درست کار می کنه اما پس از مدتی متوجه شدم که زمان رو سریعتر محاسبه می کنه .!!! به نظر شما مشکل از چیه ؟ چند با کریستال و خود RTC رو عوض کردم ولی فرقی نکرد
من یک ساعت دیجیتال با 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
دیدگاه