اطلاعیه

Collapse
No announcement yet.

مشکل در راه اندازی ds1307

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

    مشکل در راه اندازی ds1307

    با سلام. نمازوروزه هاتون قبول.مداری که مشاهده میکنید یک ساعت با ds1307 هست که به جای ثانیه هاش 60 تا ledدر نظر گرفته شده .در پروتیوس مدار به درستی کار می کنه.اما در عمل کار نمیکنه .هر 4تا 7segفقط عدد صفر رو نشون میدن .حتی 1hz ds هم کار نمی کنه .اگه بتونین کمکم کنید ازتون ممنون میشم.از یک پورت میکرو با استفاده از ایسی 74hc573برای روشن کردن ledها استفاده شده.
    کد:
    #include <mega32.h>
    #include <delay.h>
    // I2C Bus functions
    #asm
      .equ __i2c_port=0x15 ;PORTC
      .equ __sda_bit=4
      .equ __scl_bit=5
    #endasm
    #include <i2c.h>
    
    #include <ds1307.h>
     unsigned char H,M,S;
    //unsigned int S;
    unsigned char yekanM,dahganM,yekanH,dahganH;
    //,yekanS,dahganSint i,
    
    
    taghsim(){
    //dahganS=S/10;
    //yekanS=S%10;
    dahganM=M/10;
    yekanM=M%10;
    dahganH=H/10;
    yekanH=H%10;
    }
    unsigned char coding(unsigned int data){
    switch(data)
    {
    case 0:
    return 0x3f;
    break;
    case 1:
    return 0x06;
    break;
    case 2:
    return 0x5b;
    break;
    case 3:
    return 0x4f;
    break;
    case 4:
    return 0x66;
    break;
    case 5:
    return 0x6d;
    break;
    case 6:
    return 0x7d;
    break;
    case 7:
    return 0x07;
    break;
    case 8:
    return 0xff;
    break;
    case 9:
    return 0x6f;
    break;
    }
    }
    //**************************************************
    //**************************************************
    
    Display(){
    
    PORTC=0b00001110;
    PORTA=coding(yekanM); 
    delay_ms(2);
    PORTC=0b00001101;
    PORTA=coding(dahganM); 
    delay_ms(2);
    PORTC=0b00001011;
    PORTA=coding(yekanH); 
    delay_ms(2);
    PORTC=0b00000111;
    PORTA=coding(dahganH); 
    delay_ms(2);
    }
    //*************************************
    minute(){
          if(PINC.6==0) { //minute switch
          M++;
          if(M==60)
          M=0; 
          rtc_set_time(H, M, S); 
          while(PINC.6==0) {
          }
          taghsim();
          Display();
          }
          }
    //********************************************
    hour(){
          if(PINC.7==0) { //hour switch
          H++; 
          if(H==24)
          H=0; 
          rtc_set_time(H, M, S);
          while(PINC.7==0) {
          }
          taghsim();
          Display();
          } 
         //rtc_get_time(&H,&M,0);
         
         //taghsim();
         //Display();
     } 
     //*************************************
    data(unsigned int S){
    switch(S)
    {
    case 0:
    PORTD= 0b00000001;
    break;
    case 1:
    PORTD= 0b00000011;
    break;
    case 2:
    PORTD= 0b00000111;
    break;
    case 3:
    PORTD= 0b00001111;
    break;
    case 4:
    PORTD= 0b00011111;
    break;
    case 5:
    PORTD= 0b00111111;
    break;
    case 6:
    PORTD= 0b01111111;
    break;
    case 7:
    PORTD= 0b11111111;
    break;
    }
    }
    
    
    
    
    
    
    
    
    
    
    void main(void)
    {
    PORTA=0x00;
    DDRA=0xFF;
    
    PORTB=0x00;
    DDRB=0xFF;
    
    PORTC=0x00;
    DDRC=0x0F;
    
    PORTD=0x00;
    DDRD=0xFF;
    
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;
    
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    MCUCR=0x00;
    MCUCSR=0x00;
    
    TIMSK=0x00;
    ACSR=0x80;
    SFIOR=0x00;
    
    i2c_init();
    
    rtc_init(0,1,0);
    
    while (1)
       {
       // Place your code here
         minute();
         hour();
         rtc_get_time(&H,&M,&S);
         taghsim();
         Display();
         //if(S==60){
         //S==0;
         //}
         // search();
         if(S<8){
           PORTB=0b00000001;
           data(S);
           delay_ms(1);
           }
         else if(S>7 && S<16){
           PORTB=0b00000010;
           data(S-8);
           delay_ms(1);
           }
         else if(S>15 && S<24){
           PORTB=0b00000100;
           data(S-16);
           delay_ms(1);
           }
         else if(S>23 && S<32){
           PORTB=0b00001000;
           data(S-24);
           delay_ms(1);
           }  
     
          else if(S>31 && S<40){
           PORTB=0b00010000;
           data(S-32);
           delay_ms(1);
           }  
          else if(S>39 && S<48){
           PORTB=0b00100000;
           data(S-40);
           delay_ms(1);
           }  
          else if(S>47 && S<56){
           PORTB=0b01000000;
           data(S-48);
           delay_ms(1);
           }  
          else if(S>55 && S<60){
           PORTB=0b10000000;
           data(S-56);
           delay_ms(1);
           }
           else{
           //delay_us(1);
           }
           if(S==0){ 
           PORTB=0b00000001;
           PORTD=0b00000001;
           delay_ms(25);
           PORTB=0b00000000;
           delay_ms(1);
           PORTB=0b11111111;
           PORTD=0b00000000;
           delay_ms(1);
           //PORTB=0b00000001;
           }

    #2
    پاسخ : مشکل در راه اندازی ds1307

    آقا برای اینکه اطمینان حاصل کنی که ds1307 درست کار میکنه بهتره جای اون دم و دستگاه یه lcd بزاری و نتیجه رو تست کنی

    اگه درست بود که باید بری سراغ بقیه قسمتها

    اگه نبود برو سراغ پایین

    - آیا از باتری Back Up استفاده میکنی

    - اگه استفاده نمیکنی اون پایه رو زمین کن

    - آیا پایه های I2C رو pull up کردی

    - پایه ی خروجی فرکانس رو چطور؟؟؟

    دیدگاه


      #3
      پاسخ : مشکل در راه اندازی ds1307

      سلام .........................

      واسه تست یه راه خیلی عادی اینه که از I2C debugger استفاده کنید .. خوب جواب میده .. موفق باشید ..
      دوستان! مدتی کمتر به سایت میام ..

      دیدگاه


        #4
        پاسخ : مشکل در راه اندازی ds1307

        I2C DIBUGER چیه ؟ چه طور کار میکنه ؟ یه توضیح بده :eek:

        دیدگاه


          #5
          پاسخ : مشکل در راه اندازی ds1307

          یه ابزاری هست که تو پروتئوس هست

          اما اگه مدارتو تو پروتئوس بستی و جواب گرفتی و در عمل بستی و جواب نگرفتی بهتره به جای LED ها یه LCD بزاری و برنامه و طوری تغییر بدی که رو LCD چاپ کنه و ببینی جواب میده یا نه

          بعد ببینی ایراد از کجاست

          اگه عملی نبستی میتونی از I2C dibuger در پروتئوس استفاده کنی

          دیدگاه


            #6
            پاسخ : مشکل در راه اندازی ds1307

            نوشته اصلی توسط ehsan_akbari
            آقا برای اینکه اطمینان حاصل کنی که ds1307 درست کار میکنه بهتره جای اون دم و دستگاه یه lcd بزاری و نتیجه رو تست کنی

            اگه درست بود که باید بری سراغ بقیه قسمتها

            اگه نبود برو سراغ پایین

            - آیا از باتری Back Up استفاده میکنی

            - اگه استفاده نمیکنی اون پایه رو زمین کن

            - آیا پایه های I2C رو pull up کردی

            - پایه ی خروجی فرکانس رو چطور؟؟؟
            سلام
            ببخشید جسارت می کنم اما در کار با این آیسی اتصال باتری ضروریه. ما بدون باتری موفق به راه اندازیش نشدیم.
            این که شما فرمودید اگه باتری استفاده نمی کنی پایه شو زمین کن فک نکنم جواب بده.
            بازم معذرت دخالت کردم

            دیدگاه


              #7
              پاسخ : مشکل در راه اندازی ds1307

              در صورتی که تغذیه 5 ولت مدار(Vcc) وصل باشه نیازی به باطری نیست

              در حقیقت باطری برای ادامه یافتن محاسبه زمان و حفظ آن در زمان قطع تغذیه است

              بدون تغذیه و با باطری تنها محاسبه زمان داخل آیسی ادامه میآ‌یابد و همانند حالت Sleep است و آیسی بدون تغذیه 5 ولت قادر به ارتباط از طریق I2C نیست

              یعنی اگر از باتری استفاده نشود در صورتی که Vcc قطع شود مقدار زمان و تاریخ صفر میشود

              در صورت عدم استفاده باید این پایه زمین شود

              دیدگاه


                #8
                پاسخ : مشکل در راه اندازی ds1307

                سلام .....................

                درسته ... اون باتری صرفا برای Back up هست و به کارایی خاصی مربوط نمیشه .. مثل PCF8583 که باتری بک پ نداره؛ اگه اینجام از بک پ استفاده نکنیم؛ مشکل به اون معنا در راه اندازی پیش نمیاد و فقط توی ذخیره سازی و ریست شدن زمانی مساله پیش میاد .. موفق باشید ..
                دوستان! مدتی کمتر به سایت میام ..

                دیدگاه


                  #9
                  پاسخ : مشکل در راه اندازی ds1307

                  باطری پشتیبان داره ، مشکل از باطری نیست
                  :angry:

                  دیدگاه


                    #10
                    پاسخ : مشکل در راه اندازی ds1307

                    نوشته اصلی توسط حسام الدین
                    سلام .....................

                    درسته ... اون باتری صرفا برای Back up هست و به کارایی خاصی مربوط نمیشه .. مثل PCF8583 که باتری بک پ نداره؛ اگه اینجام از بک پ استفاده نکنیم؛ مشکل به اون معنا در راه اندازی پیش نمیاد و فقط توی ذخیره سازی و ریست شدن زمانی مساله پیش میاد .. موفق باشید ..
                    نه دوست عزیز اینجوری ها هم نیست
                    میتونی باطری نذاری ولی در این صورت حتما باید پایه باطری رو به زمین وصل کنید در غیر این صورت ds 1307 ممکنه درست کار نکنه
                    درضمن یه چیز دیگه که خودم به صورت تجربی فهمیدم
                    در مگا 128 اگر ds1307 رو به پورت G وصل کنید میکرو راه اندازی نمیشه!!!!!!!!!(وقتی به ds میرسه هنگ میکنه)
                    هم تو پروتئوس اینجوریه هم تو عمل
                    یه چیز دیگه
                    برای اینکه ds1307 شروع به شمارش بکنه حتما باید ثانیه رو درست (یعنی زیر 59) تنظیم کنید
                    درضمن نوع باطری بک پ مهمه برای تست باطری رو بردار و پایه باطری رو به زمین وصل کن
                    راستی jtag رو غیر فعال کردی؟
                    پروردگارا: به من زيستني عطا کن که در لحظه مرگ بر بي ثمري لحظه اي که براي زيستن گذشته است حسرت نخورم، و مردني عطا کن که بر بيهودگيش سوگوار نباشم. بگذار تا آن را خود انتخاب کنم، اما آنچنان که تو دوست ميداري

                    دیدگاه


                      #11
                      پاسخ : مشکل در راه اندازی ds1307

                      نوشته اصلی توسط ehsan_akbari

                      - آیا پایه های I2C رو pull up کردی

                      - پایه ی خروجی فرکانس رو چطور؟؟؟
                      منم همچین مشکلی را دارم.
                      مگه باید پایه خروجی فرکانس را هم pull up کنم؟
                      محمد حسین سعادت فر

                      ---------------------------------------------
                      آنچه خود داشت زبيگانه تمنا مي كرد....

                      دیدگاه


                        #12
                        پاسخ : مشکل در راه اندازی ds1307

                        بله هردو پایه باید حتما پول پ خارجی بذاری
                        پروردگارا: به من زيستني عطا کن که در لحظه مرگ بر بي ثمري لحظه اي که براي زيستن گذشته است حسرت نخورم، و مردني عطا کن که بر بيهودگيش سوگوار نباشم. بگذار تا آن را خود انتخاب کنم، اما آنچنان که تو دوست ميداري

                        دیدگاه


                          #13
                          پاسخ : مشکل در راه اندازی ds1307

                          نوشته اصلی توسط امیر حسنی کاخکی
                          بله هردو پایه باید حتما پول پ خارجی بذاری
                          پایه SDA , SCL را نمی گما! پایه SQW را می گم.
                          محمد حسین سعادت فر

                          ---------------------------------------------
                          آنچه خود داشت زبيگانه تمنا مي كرد....

                          دیدگاه


                            #14
                            پاسخ : مشکل در راه اندازی ds1307

                            نه نمیخواد SQW رو پول پ کنید. فقط یادتون باشه موقعی کی میخواید زمان رو به آی سی بدی ، خروجی موج مربعی رو غیر فعال کنید.

                            دیدگاه


                              #15
                              پاسخ : مشکل در راه اندازی ds1307

                              نه نمیخواد SQW رو پول پ کنید. فقط یادتون باشه موقعی کی میخواید زمان رو به آی سی بدی ، خروجی موج مربعی رو غیر فعال کنید.

                              دیدگاه

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