ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 4 از 4

موضوع: ds1307

  1. #1
    2012/07/03
    89
    8

    ds1307

    با سلام
    سال نو بر تمام دوستان مبارک
    دوستان من با میکرو pic18 یه برنامه نوشتم که از ds1307 میخونه و روی lcd زمان رو نمایش میده. ولی متاسفانه همیشه زمان رو صفر نشون میده.
    با برنامه های دیگه هم که روی اینترنت بود چک کردم اما به نتیجه نرسیدم. ممنون میشم کمک کنید. فرکانس میکرو با PLL به 40MHz میرسه.
    کامپایلر microC

    کد:
    // Lcd pinout settings
    sbit LCD_RS at RB3_bit;
    sbit LCD_EN at RB1_bit;
    sbit LCD_D7 at RB7_bit;
    sbit LCD_D6 at RB6_bit;
    sbit LCD_D5 at RB5_bit;
    sbit LCD_D4 at RB4_bit;
    
    // Pin direction
    sbit LCD_RS_Direction at TRISB3_bit;
    sbit LCD_EN_Direction at TRISB1_bit;
    sbit LCD_D7_Direction at TRISB7_bit;
    sbit LCD_D6_Direction at TRISB6_bit;
    sbit LCD_D5_Direction at TRISB5_bit;
    sbit LCD_D4_Direction at TRISB4_bit;
    
    /////////
    char txt_1[4],txt_2[4],txt_3[4],txt_4[4];
    char i2c_txt[4];
    unsigned short tst[4];
    ////////
    unsigned char rtc_read(unsigned char address);
    void rtc_write(unsigned char address,unsigned char _data);
    void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out);
    void rtc_get_time(unsigned char *hur,unsigned char *min,unsigned char *sec);
    void rtc_set_time(unsigned char hur,unsigned char min,unsigned char sec);
    void rtc_get_date(unsigned char *date,unsigned char *month,unsigned char *year);
    void rtc_set_date(unsigned char date,unsigned char month,unsigned char year);
    
    
    ////
    void main() {
       PORTA=LATA=0x00;
       PORTB=LATB=0x00;
       PORTC=LATC=0x00;
       ADCON1=0x0f;
       TRISA=0xa7;
       TRISB=0x00;
       TRISC=0x87;
       Lcd_Init();
       Lcd_Cmd(_LCD_CLEAR);
       Lcd_Cmd(_LCD_CURSOR_OFF);
       ///
       I2C1_Init(100000);
    	 while (!I2C1_Is_Idle());
       rtc_init(0,0,0);
       hour=12;
       minute=1;
       seconde=1;
       rtc_set_time(hour,minute,seconde);
       while(1){
    		 Lcd_Chr(1, 1, (hour/10+48));
    		 Lcd_Chr(1, 2, (hour%10+48));
    		 Lcd_Out(1, 3, ":");
    		 Lcd_Chr(1, 4, (minute/10+48));
    		 Lcd_Chr(1, 5, (minute%10+48));
    		 Lcd_Out(1, 6, ":");
    		 Lcd_Chr(1, 7, (seconde/10+48));
    		 Lcd_Chr(1, 8, (seconde%10+48));
    
    		 rtc_get_time(&hour,&minute,&seconde);
    		 delay_ms(500);
       }
    }
    
    
    
    unsigned char rtc_read(unsigned char address)
    {
       unsigned char _data;
       i2c1_start();
       I2C1_Repeated_Start();
       i2c1_wr(0xd0);
       i2c1_wr(address);
       i2c1_start();
       i2c1_wr(0xd1);
       _data=I2C1_Rd(0);
       i2c1_stop();
       return _data;
    }
    //
    
    void rtc_write(unsigned char address,unsigned char _data)
    {
       i2c1_start();
       I2C1_Repeated_Start();
       i2c1_wr(0xd0);
       i2c1_wr(address);
       i2c1_wr(_data);
       i2c1_stop();
    }
    
    void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out)
    {
       rs&=3;
       if (sqwe) rs|=0x10;
       if (out) rs|=0x80;
       i2c1_start();
       i2c1_wr(0xd0);
       i2c1_wr(7);
       i2c1_wr(rs);
       i2c1_stop();
    }
    
    void rtc_get_time(unsigned char *hur,unsigned char *min,unsigned char *sec)
    {
       I2c1_start();
       I2c1_wr(0xd0);
       I2c1_wr(0);
       I2C1_Repeated_Start();
       I2c1_wr(0xd1);
       *sec=Bcd2Dec(I2C1_Rd(1));
       *min=Bcd2Dec(I2C1_Rd(1));
       *hur=Bcd2Dec(I2C1_Rd(0));
       while (!I2C1_Is_Idle());
       I2c1_stop();
    }
    
     void rtc_set_time(unsigned char hur,unsigned char min,unsigned char sec)
    {
       I2c1_start();
       I2C1_Repeated_Start();
       I2c1_wr(0xd0);
       I2c1_wr(0x00);
       I2c1_wr(sec);
       I2c1_wr(Dec2Bcd(min));
       I2c1_wr(Dec2Bcd(hur));
       while (!I2C1_Is_Idle());
       I2c1_stop();
    }
    
     void rtc_get_date(unsigned char *date,unsigned char *month,unsigned char *year)
    {
       i2c1_start();
       I2C1_Repeated_Start();
       i2c1_wr(0xd0);
       i2c1_wr(4);
       i2c1_start();
       i2c1_wr(0xd1);
       *date=Bcd2Dec(I2C1_Rd(1));
       *month=Bcd2Dec(I2C1_Rd(1));
       *year=Bcd2Dec(I2C1_Rd(0));
       i2c1_stop();
    }
    
    void rtc_set_date(unsigned char date,unsigned char month,unsigned char year)
    {
       i2c1_start();
       I2C1_Repeated_Start();
       i2c1_wr(0xd0);
       i2c1_wr(4);
       i2c1_wr(Bcd2Dec(date));
       i2c1_wr(Bcd2Dec(month));
       i2c1_wr(Bcd2Dec(year));
       i2c1_stop();
    }
    هر وقت خواستید کاری بکنید، چهل سال عقب و چهل سال جلو را در نظر بگیرید. "بابابزرگ"
  2. #2
    2013/04/09
    1,178
    250

    پاسخ : ds1307

    نقل قول نوشته اصلی توسط abolfazlk873
    دوستان من با میکرو pic18 یه برنامه نوشتم که از ds1307 میخونه و روی lcd زمان رو نمایش میده. ولی متاسفانه همیشه زمان رو صفر نشون میده.
    سلام دوست عزیز من این رو با بیسیک کار کردم مال من هم اولش 0 نشون می داد تا زمانی که ثانیه شمار را یک واحد افزایش ندی این آیسی شروع به شمارش نمی کند بنابراین شما با استفاده از spi و یه کلید اون رو افزایش بده ببین کار میکنه یا نه اگه اتصالت درصت باشه هنگام افزایش و کاهش باید روی آیسی رایت بشه و تو ال سی دی نمایش بده ولی اگه اینطور نباشه همون صفر باقی می مونه
    ضمنا به نویز حساسه نزدیک این آی سی بین تغذیه و زمین یه 100 نانو بزار
    نباید سیم های ارتباطی هم بیشتر از 7 الی 8 سانتیمتر باشه
    برد جوجه کشی:

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت



    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    توجه:
    این برد نیمه صنعتی و خانگی هست...
    برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

    آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@
  3. #3
    2013/02/25
    مشهد
    180
    33

    پاسخ : ds1307

    نقل قول نوشته اصلی توسط abolfazlk873
    با سلام
    سال نو بر تمام دوستان مبارک
    دوستان من با ميکرو pic18 يه برنامه نوشتم که از ds1307 ميخونه و روي lcd زمان رو نمايش ميده. ولي متاسفانه هميشه زمان رو صفر نشون ميده.
    با برنامه هاي ديگه هم که روي اينترنت بود چک کردم اما به نتيجه نرسيدم. ممنون ميشم کمک کنيد. فرکانس ميکرو با PLL به 40MHz ميرسه.
    کامپايلر microC
    دوست عزيزم جناب آقاي کامراني

    با تبريک سال نو به جناب عالي و با آرزوي اينکه سالي خوب و پربار و موفق را شروع کرده باشيد

    با احترام فراوان به خدمت تان عرض کنم که بنده PIC را با PICBASICPRO صرف مي کنم . اما به جهت اينکه قبلا از مراتب لطف و انسانيت و راهنمايي شما بهره برده ام ، يک سورس کد ناقابل که در دسترس دارم و کار مي کند ، را به حضورتان تقديم مي کنم. اين سورس کد بر روي سري 16 پي آي سي تست شده و کار مي کند.
    فقط اين آي سي هاي دالاس براي ساخت زمان واقعي ، قدري به نويز حساس هستند. با اين نکته حتما ملاحظات حذف نويز را مد نظر داشته باشيد
    کد:
    include "MODEDEFS.BAS"
    DEFINE LCD_DREG PORTB
    DEFINE LCD_DBIT 4
    DEFINE LCD_RSREG PORTB
    DEFINE LCD_RSBIT 0
    DEFINE LCD_EREG PORTB
    DEFINE LCD_EBIT 1
    DEFINE LCD_BITS 4 
    DEFINE LCD_LINES 2
    DEFINE LCD_COMMANDUS 1500
    DEFINE LCD_DATAUS 44 
    define OSC 4
    
    
     ' ** Declare the Variables ** 
    
    
     B0 VAR BYTE
     B1 VAR BYTE
     B2 VAR BYTE
    
    
     RST var PORTC.3
     dq var PORTC.2
     clk var PORTC.1
    
    '------------------------- Read Commands For DS1302 -------------------------
    
    readsec con $81 ' Read seconds from DS1302
    readmin con $83 ' Read minutes from DS1302
    readhour con $85 ' Read hours from DS1302
    readdate con $87 ' Read date from DS1302
    readyear con $8D ' Read year from DS1302
    readmonth con $89 ' Read month from DS1302
    
    '------------------------------ Time Variables ------------------------------
    
    mem var byte ' Temporary data holder
    outbyte var byte ' Second byte to ds1302
    reg_adr var byte ' First byte to DS1302
    date var byte ' Date variable
    ss var byte ' Seconds variable
    mm var byte ' Minutes varibale
    hh var byte ' Hours variable
    mo var byte ' Month variable
    yr var byte ' Year variable
    
    '------------------------ Initial Settings For Ports ------------------------
    
    low rst ' Set reset pin low
    low clk ' Set clock pin low
    
    trisb = 0
    trisa = 0
    
    '----------------------- Set Initial Time Variables -------------------------
    
    
    start:
    reg_adr = readsec ' Read seconds
    gosub w_in
    ss = mem
    reg_adr = readmin ' Read minutes
    gosub w_in
    mm = mem
    reg_adr = readhour ' Read Hours
    gosub w_in
    hh = mem
    reg_adr = readyear ' Read Year
    gosub w_in
    yr = mem
    reg_adr = readdate ' Read Date
    gosub w_in
    date = mem
    reg_adr = readmonth ' Read Month
    gosub w_in
    mo = mem
    lcdout $fe,1,"TIME:",HEX2 hh,":",HEX2 mm,":",HEX2 ss
    pause 500
    goto start
    
    '----------------------- Time Commands Subroutines --------------------------
    
    w_in:
    mem = reg_adr ' Set mem variable to reg_adr contents
    high rst ' Activate the DS1302
    shiftout dq,clk,0, [mem] ' Send control byte
    shiftin dq,clk,1, [mem] ' Retrieve data in from the DS1302
    low rst ' Deactivate DS1302
    return
    
    w_out:
    mem = reg_adr ' Set mem variable to reg_adr contents
    high rst ' Activate the DS1302
    shiftout dq,clk,0, [mem] ' Send control byte
    mem = outbyte ' Set mem variable to outbyte contents
    shiftout dq,clk,0, [mem] ' Send data stored in mem variable to DS1302
    low rst ' Deactivate DS1302
    return
    والسلام علي من اتبع الهدي .... و درود بر کساني که راه هدايت را دنبال مي کنند.

    هوشمندانه بپرسيد...
  4. #4
    2012/07/03
    89
    8

    پاسخ : ds1307

    با عرض سلام و تشکر از دوستان :nice:
    مشکل فقط از پروتئوس بود. برنامه درست کار میکرد.
    هر وقت خواستید کاری بکنید، چهل سال عقب و چهل سال جلو را در نظر بگیرید. "بابابزرگ"
نمایش نتایج: از 1 به 4 از 4

موضوعات مشابه

  1. ds1307
    توسط mmahdi302 در انجمن میکروکنترلرهای AVR
    پاسخ: 19
    آخرين نوشته: 2015/01/30, 20:45
  2. ds1307
    توسط saate777 در انجمن میکروکنترلرهای AVR
    پاسخ: 6
    آخرين نوشته: 2013/11/06, 17:20
  3. ds1307
    توسط yusef12 در انجمن میکروکنترلرهای PIC
    پاسخ: 1
    آخرين نوشته: 2013/06/05, 11:46
  4. ds1307
    توسط saeed_jj در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2010/07/10, 23:00
  5. کار با ds1307?????
    توسط eslamieh در انجمن میکروکنترلرهای AVR
    پاسخ: 3
    آخرين نوشته: 2010/07/10, 23:00

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •