اطلاعیه

Collapse
No announcement yet.

کمک برای DS1307 در micro C

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

    کمک برای DS1307 در micro C

    سلام دوستان عزیزم.دوستان من با i2c در کامپایلر microc مشکل دارم.مثلا برنامه زیر را که واسه ds1307 هست نوشتم اما در همه حالتی ساعت و دقیق و ثانیه را 255 نمایش میده. :angry: :angry: :eek: :question:
    ممنون میشم اگه دوستان میدونند مشکل کجاست کمکم کنند.

    char ww[16];
    char ho,mi,sec,day,mon,ye;


    void ds1307_read_time (unsigned char *hour , unsigned char *min , unsigned char *sec)
    {
    i2c_start();
    i2c_wr(0xd0);
    i2c_wr(0);
    i2c_start();
    i2c_wr(0xd1);
    *sec=i2c_rd(1);
    *min=i2c_rd(1);
    *hour=i2c_Rd(0);
    i2c_stop();
    }

    void ds1307_read_date (unsigned char *year , unsigned char *month , unsigned char *day)
    {
    i2c_start();
    i2c_wr(0xd0);
    i2c_wr(4);
    i2c_start();
    i2c_wr(0xd1);
    *day=i2c_rd(1);
    *month=i2c_rd(1);
    *year=i2c_rd(0);
    i2c_stop();
    }




    void ds1307_write_time (char hour , char min , char sec)
    {

    i2c_start();
    i2c_wr(0xd0);
    i2c_wr(0);
    i2c_wr(sec);
    i2c_wr(min);
    i2c_wr(hour);
    i2c_stop();

    }

    void ds1307_write_date (char year , char month , char day)
    {

    i2c_start();
    i2c_wr(0xd0);
    i2c_wr(0x04);
    i2c_wr(day);
    i2c_wr(month);
    i2c_wr(year);
    i2c_stop();

    }

    void main (void)
    {
    TRISD=0XFF;
    PORTD=0X00;
    lcd_config(&portb,0,2,1,6,5,4,3);
    i2c_init(400000);
    lcd_out(1,1,"mehdi"
    delay_ms(2000);
    lcd_cmd(lcd_clear);


    delay_ms(100);
    while(1)
    {
    ds1307_read_time(&ho,&mi,&sec);

    bytetostr(ho,ww);
    lcd_out(1,1,ww);

    lcd_out_cp(":"

    bytetostr(mi,ww);
    lcd_out_cp(ww);

    lcd_out_cp(":"

    bytetostr(sec,ww);
    lcd_out_cp(ww);



    if(button(&portd,0,100,1))
    {
    ho++;
    ds1307_write_time(ho,mi,sec);
    delay_ms(10);
    }

    if(button(&portd,1,100,1))
    {
    mi++;
    ds1307_write_time(ho,mi,sec);
    delay_ms(10);
    }


    if(button(&portd,2,100,1))
    {
    sec++;
    ds1307_write_time(ho,mi,sec);
    delay_ms(10);
    }

    delay_ms(1000);


    }
    }

    #2
    پاسخ : کمک برای DS1307 در micro C

    سلإم دوست عزیز.
    ds1307 برإی شروع به کإر نیإز دإره که بیت 7 إز خونه ی 0(یعنی همون ثإنیه رو 0 کنین تإ شروع به کإر کنه)شمإ بیإ إول یه بإر تإنیه رو بخون .بعد بإ عدد 0x7f إند کن( & ) و دوبإره توی ds 1307 بنویسش .شروع به کإر میکنه.إگه بإ ccs کإر میکنی بگو تإ لإیبری خودم رو وإست بزإرم

    دیدگاه


      #3
      پاسخ : کمک برای DS1307 در micro C

      با تشکر از دوست عزیز . چرا بنده خدا رو گیج میکنی !؟؟!! یه ضرب برنامه رو بهش بده !
      اینم تبدیل اعداد . بعد از اینکه h2c رو خوندی ، مقادیر رو تو این فرمول میذاری بعدش تموم .
      Rsec = ((Rsec and 0x70) >> 4)*10 + (Rsec and 0x0F)
      Rmin1 = ((Rmin1 and 0xF0) >> 4)*10 + (Rmin1 and 0x0F)
      Rhr = ((Rhr and 0x30) >> 4)*10 + (Rhr and 0x0F)
      Rweek_day =(Rweek_day and 0x07)
      Rday = ((Rday and 0xF0) >> 4)*10 + (Rday and 0x0F)
      Rmn = ((Rmn and 0x10) >> 4)*10 + (Rmn and 0x0F)
      Ryear = ((Ryear and 0xF0)>> 4)*10+(Ryear and 0x0F)

      فراموش نشود که تو پروتئوس حتما از مقاومت پولپ 10کیلو استفاده کنید .
      if all men are the same
      then
      why do women take so long to choose one ?

      دیدگاه


        #4
        پاسخ : کمک برای DS1307 در micro C

        دوستای عزیزم از همتون تشکر میکنم کمک بزرگی بهم کردید.الان میرم تستش میکنم.
        مرسی ی ی ی ی ی ی ی ی ی ی :wow: :read: :read: :read: :nice:

        دیدگاه

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