اطلاعیه

Collapse
No announcement yet.

مشکل در برنامه ساعت با ds1307

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

    مشکل در برنامه ساعت با ds1307

    سلام
    من یه برنامه ساعت با اتمگا 8 و ds1307 و سون سگمنت نوشتم
    میخوام بدونم مشکل این برنامه چیه ؟
    تو پروتئوس عالی کار میکنه ولی در عمل نه.
    کد:
    #include <mega8.h>
    #include <delay.h>
    // I2C Bus functions
    #asm
      .equ __i2c_port=0x12 ;PORTD
      .equ __sda_bit=1
      .equ __scl_bit=0
    #endasm
    #include <i2c.h>
    
    // DS1307 Real Time Clock functions
    #include <ds1307.h>
    
    // Declare your global variables here
    unsigned char H=0,M=0,S=0;
    //char hd[4],md[4],sd[4];
    
    //unsigned int S,H,M;
    
    // Declare your global variables here
    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(){
    /*PORTB=0b11111110;
    PORTD=coding(yekanS); 
    delay_ms(10);
    PORTB=0b00111101;
    PORTD=coding(dahganS); 
    delay_ms(10);*/
    PORTC=0b11111110;
    PORTB=coding(yekanM); 
    delay_ms(10);
    PORTC=0b10111101;
    PORTB=coding(dahganM); 
    delay_ms(10);
    PORTC=0b11111011;
    PORTB=coding(yekanH); 
    delay_ms(10);
    PORTC=0b11110111;
    PORTB=coding(dahganH); 
    delay_ms(10);
    } 
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port B initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTB=0x00;
    DDRB=0xFF;
    
    // Port C initialization
    // Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTC=0x00;
    DDRC=0x7F;
    
    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTD=0x00;
    DDRD=0x00;
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    TCCR0=0x00;
    TCNT0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    MCUCR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    // Analog Comparator Output: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // I2C Bus initialization
    i2c_init();
    
    // DS1307 Real Time Clock initialization
    // Square wave output on pin SQW/OUT: On
    // Square wave frequency: 1Hz
    rtc_init(0,1,0);
    
    while (1)
       {
       // Place your code here
        if(PIND.6==0) { //minute switch
          M++;
          if(M==60)
          M=0; 
          rtc_set_time(H, M, S); 
          while(PIND.6==0) {
          }
          taghsim();
          Display();
          }
       
       
         if(PIND.7==0) { //hour switch
          H++; 
          if(H==24)
          H=0; 
          rtc_set_time(H, M, S);
          while(PIND.7==0) {
          }
          taghsim();
          Display();
          } 
         rtc_get_time(&H,&M,0);
         /*dahganM=M/10;
         yekanM=M%10;
         dahganH=H/10;
         yekanH=H%10;
         PORTB=0b01111100;
         PORTD=coding(yekanM); 
         delay_ms(10);
         //rtc_set_time(H,M, 0);
         
         PORTB=0b10111100;
         PORTD=coding(dahganM); 
         delay_ms(10);
         //rtc_set_time(H,M, 0);
         
         PORTB=0b11011100;
         PORTD=coding(yekanH); 
         delay_ms(10);
         //rtc_set_time(H,M, 0);
         
         PORTB=0b11101100;
         PORTD=coding(dahganH); 
         delay_ms(10);*/
         //rtc_set_time(H,M, 0);
         taghsim();
         Display();
         //rtc_set_time(H,M, 0);
       };
    }

    #2
    پاسخ : مشکل در برنامه ساعت با ds1307

    باید سخت افزار رو اول کاملا چک کنی.
    انا لله و انا اليه الراجعون

    دیدگاه


      #3
      پاسخ : مشکل در برنامه ساعت با ds1307

      مشکل رو نگفتی ...
      خب چطور کار میکنه؟
      Don't hesitate to ask any question ..

      دیدگاه


        #4
        پاسخ : مشکل در برنامه ساعت با ds1307

        اصلا در عمل روی سون سگمنت ها عدد خاصی نمیوفته
        بعش هم پایه هفتم ds خروجی نمیده .

        دیدگاه


          #5
          پاسخ : مشکل در برنامه ساعت با ds1307

          نوشته اصلی توسط hamed.zahedi
          تو پروتئوس عالی کار میکنه ولی در عمل نه.
          خب اینکه تو پروتئوس خوب کار می کنه و تو سخت افزار کار نمی کنه اصلاً عجیب نیست...
          اول از همه اگر از این آی سی بازم داری عوضش کن ببین مشکلت حل میشه یا نه...البته قبلش تغذیتو چک کن که 5 ولت بیشتر نباشه و ریپل نداشته باشه..
          مشکل بعدی که معمولاً با 1307 هست زمین کردن پایه باتری کمکی شه...اگر اون پایه به باتری وصل نیست به زمین وصل کنید..
          مقاومت های PULL UP رو گذاشتید؟
          معمولا با سخت افزار اشتباه یا داشتن کوچک ترین اشتباه عدد 165 از 1307 خونده میشه و چون شما از 7-SEGMENT استفاده می کنید...این عدد به عدد قابل نمایش تبدیل نمیشه(البته بستگی به کد داره و ممکن که یک سری عدد اشتباه نشون بده)
          اگر که می تونی اول تو LCD جواب بگیز از 1307 بعد روی سگمنت نشون بده...
          این طوری هم که معلومه ظاهراً سگمنتت مالتی پلکس هستش.درسته؟
          سعی کن که از قسمت های مختلفه پروژت دونه دونه جواب بگیری...
          موفق باشی...

          دیدگاه


            #6
            پاسخ : مشکل در برنامه ساعت با ds1307

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

            دیدگاه


              #7
              پاسخ : مشکل در برنامه ساعت با ds1307

              تمام مواردی که گفتین چک کردم فقط مقدار اولیه که گفتین تو ds ست کنم چهطوره ؟فکر کنم مشکل از همینجا باشه

              دیدگاه


                #8
                پاسخ : مشکل در برنامه ساعت با ds1307

                فقط یک بار اول برنامه ساعت رو تنظیم کن (حتما مقدار ثانیه رو درست یعنی زیر 59 تنظیم کن)و تغییرات رو روی ds ذخیره کن
                من C بلد نیستم وگرنه برنامه رو برات میزاشتم
                پروردگارا: به من زيستني عطا کن که در لحظه مرگ بر بي ثمري لحظه اي که براي زيستن گذشته است حسرت نخورم، و مردني عطا کن که بر بيهودگيش سوگوار نباشم. بگذار تا آن را خود انتخاب کنم، اما آنچنان که تو دوست ميداري

                دیدگاه


                  #9
                  پاسخ : مشکل در برنامه ساعت با ds1307

                  سلام
                  آقا یه چیزی در مورد مقدار دهی اولیه
                  من به این شکل انجامش دادم
                  rtc_set_time(1,1,1);
                  rtc_set_date(1,1,1,1);
                  مشکلی که هست اینه هر وقت برق قطع و وصل میشه این دو خط دوباره اجرا میشن و ای سی از اول میشماره موندم چیکار کنم

                  دیدگاه


                    #10
                    پاسخ : مشکل در برنامه ساعت با ds1307

                    نوشته اصلی توسط mustafaa
                    سلام
                    آقا یه چیزی در مورد مقدار دهی اولیه
                    من به این شکل انجامش دادم
                    rtc_set_time(1,1,1);
                    rtc_set_date(1,1,1,1);
                    مشکلی که هست اینه هر وقت برق قطع و وصل میشه این دو خط دوباره اجرا میشن و ای سی از اول میشماره موندم چیکار کنم
                    خب این دو خط تا زمانی که هستند اجرا می شن، چند تا کار می تونید بکنید:
                    1- این چند خط رو توی یک if بگذارین که اگر Push buttn ی که به میکرو وصل هست نگه داشته شد این خط ها را اجرا کنه.
                    2- یک منو بگذارید.
                    3- باتری بک پ بگذارید که یک بار مقدار دادن به ds کافی باشه، بعد از اون می تونید این دو خط رو پاک کنید و دیگه نیازی بهشون نیست.

                    دیدگاه


                      #11
                      پاسخ : مشکل در برنامه ساعت با ds1307

                      پایه Vbat در آی سی DS1307 میتونه به همون ولتاژ تغذیه وصل بشه یا باید حتما به یک باتری جداگانه وصل بشه؟
                      کسی تا حالا این مشکل 165 نشون دادن رو داشته که بعدا حل شده باشه؟به خاطر چی بوده؟
                      زیر پرچم سه رنگ/واسه پرچم سفید/مادرم دعا می کرد/پدرم می جنگید...

                      دیدگاه


                        #12
                        پاسخ : مشکل در برنامه ساعت با ds1307

                        نوشته اصلی توسط mustafaa
                        سلام
                        آقا یه چیزی در مورد مقدار دهی اولیه
                        من به این شکل انجامش دادم
                        rtc_set_time(1,1,1);
                        rtc_set_date(1,1,1,1);
                        مشکلی که هست اینه هر وقت برق قطع و وصل میشه این دو خط دوباره اجرا میشن و ای سی از اول میشماره موندم چیکار کنم
                        نیازی نیست همه رو مقدار دهی کنید فقط ثانیه لازمه تا مدارتون شروع به کار کنه تازه اونم گای اوقات لازمه نمیدونم چرا هنگ میکنه
                        [code=c] rtc_get_time(&hour,&minute,&second);
                        rtc_get_date(&wday,&day,&month,&ye ar);
                        sz=0;
                        hh=hour;
                        mm=minute;
                        ss=second;
                        rtc_set_time(hh,mm,sz);
                        rtc_set_date(wday,FD,FM,FY);[/code]


                        برای مشکل 165 نشون دادن VBAT رو اگه نمیخواین باتری وصل کنید به VCC وصل کنید.
                        "زمان خط است نه دايره" چه ايده بدي بوده گرد ساختن ساعت. احساس ميکني هميشه فرصت تکرار است.
                        ساعت دروغ ميگويد. دروغ. زمان بر گرد يک دايره نمي چرخد! زمان بر روي خطي مستقيم ميدود. و هيچگاه، هيچگاه، هيچگاه باز نميگردد.
                        ساعت خوب، ساعت شني است! هر لحظه به تو يادآوري ميکند که دانه اي که افتاد ديگر باز نميگردد.
                        پس بهتره يکم به ثانيه هايي که داريم فکر کنيم تا به راحتي از دستشون نديم....

                        دیدگاه


                          #13
                          پاسخ : مشکل در برنامه ساعت با ds1307

                          نوشته اصلی توسط mo2_star نمایش پست ها
                          نیازی نیست همه رو مقدار دهی کنید فقط ثانیه لازمه تا مدارتون شروع به کار کنه تازه اونم گای اوقات لازمه نمیدونم چرا هنگ میکنه
                          [code=c] rtc_get_time(&hour,&minute,&second);
                          rtc_get_date(&wday,&day,&month,&ye ar);
                          sz=0;
                          hh=hour;
                          mm=minute;
                          ss=second;
                          rtc_set_time(hh,mm,sz);
                          rtc_set_date(wday,FD,FM,FY);[/code]


                          برای مشکل 165 نشون دادن VBAT رو اگه نمیخواین باتری وصل کنید به VCC وصل کنید.
                          سلام ببخشید منم همین مشکلو دارم میشه دستورات را واضح بگین من یک هفته دارم با این مشکل دست وپنجه نرم می کنماینترنتم زیر رو رو کردم به نتیجه نرسیدم خواهشاااااا کمک کنید

                          دیدگاه

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