اطلاعیه

Collapse
No announcement yet.

مشکل در رفرش سگمنت ساعت

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

    مشکل در رفرش سگمنت ساعت

    با سلام دوستان
    این یه برنامس که قراره بدونه تابع delay نوشته بشه از دوستان خاهش میکنم ببینن مشکل این برنامه چیه که سگمنتاش پرش داره
    کریستال 1 مگ داخلی هست و تایمر هر یک میلی ثانیه سر ریز میشه


    کد:
    #include <mega16.h>
    
    flash unsigned char seg []={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
    volatile unsigned char dig[4],sec=5,min=18,hor=9;
    
    
     interrupt [TIM0_COMP] void timer0_comp_isr(void)
     {
     static unsigned char sel=0;
     static int x1000;
     PORTB&=~(15);//3 pin aval halate avalie hastan hastan 
     PORTD=seg[dig[sel]];
     if(x1000<=500 & sel==2)PORTD&=0x7f;
     PORTB=1<<sel;
     
       if(++sel==4)sel=0;
       if(++x1000==1000){
        x1000=0;
        
        if(++sec==60){
        sec=0;
        min++;
        }    
                
        if(min==60){
        min=0;
        hor++;
        } 
       
        if(hor==24){
        hor=0;
        } 
     
     
       }
     
     
     }
    
    
    
    // Declare your global variables here
    
    void main(void)
    {
    PORTD=0xFF;
    DDRD=0xFF;
    DDRB=0xff;
    TCCR0=0x0A;
    TCNT0=0x00;
    OCR0=0x7C;
    
    TIMSK=0x02;
    
    #asm("sei")
    
    while (1)
       {
       dig[0]=min%10;
       dig[1]=min/10;
       dig[2]=hor%10; 
       dig[3]=hor/10;
       
        
        
       }
    }
    .The best question deserves a better answer
    =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
    «پناه»می برم «به خدا»
    از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
    محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

    #2
    پاسخ : مشکل در رفرش سگمنت ساعت

    مگه اند واسه مقایسه نباید دوتا باشه؟ اینو ببین: (توی روتین وقفه)

    کد:
    if(x1000<=500 & sel==2)PORTD&=0x7f;

    اینجوری باشه چطوره:


    کد:
    if((x1000<=500) && (sel==2))PORTD&=0x7f;

    دیدگاه


      #3
      پاسخ : مشکل در رفرش سگمنت ساعت

      مرسی از توجهت
      اون جواب میده اما یکی از دوستان میگه ساعتش خیلی تند تند جلو میره درعمل!!! به نظر شما مشکل داره تویه رفرش سگمنت یا سر ریزیه تایمر؟
      اینم از شبیه ساز پروتئوس و سورس

      http://upload.tehran98.com/upme/uploads/aafc28685165a2041.rar
      .The best question deserves a better answer
      =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
      «پناه»می برم «به خدا»
      از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
      محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

      دیدگاه


        #4
        پاسخ : مشکل در رفرش سگمنت ساعت

        اگه اعداد درست میفته خب پس باید مشکل از تایمر باشه. شما فکر کنم سعی کردید با تایمر 0 ساعت بسازید. چرا؟ وقتی تایمر 2 مال اینکار ولی شما رفتین از 0 استفاده کردین؟
        بعد من فکر میکنم برنامه ساعت شما درست نیست. مگه نباید اینجوری باشه:


        کد:
        if(second==59)
          {
           second=0;
           if(minute==59)
           {
             minute=0;
             if(hour==23)
             {
              hour=0;
             }
             else
              hour++;
        		 
           }
           else
             minute++;
          }
          else
           second++;

        دیدگاه


          #5
          پاسخ : مشکل در رفرش سگمنت ساعت

          جناب rohoalamin
          شرط صورت مسئله این بوده که از تایم صفر استفاده بشه
          در زیر روال برنامه به این شرط میرسیم
          کد:
           if(++x1000==1000){
          که یعنی اگه به x1000 یکی اضافه شد و در اخر به 1000 که یعنی در سرریزی تایمر تکرار این موضوع یعنی گذر زمان یک ثانیه وبرابری با مقدار 1000 به این خط میرسیم

          کد:
           if(++x1000==1000){
              x1000=0;
              
              if(++sec==60){
              sec=0;
              min++;
              }    
                      
              if(min==60){
              min=0;
              hor++;
              } 
             
              if(hor==24){
              hor=0;
              }

          که اگه وارد شرط اول شه وارد اضافه شدن به مقدار زمان میشه والی اخر
          به نظر شما میشه این اتفاق ناشی از درست پروگرم نکردن و انتخاب نا صیحیح کلاک صورت بگیره؟
          .The best question deserves a better answer
          =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
          «پناه»می برم «به خدا»
          از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
          محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

          دیدگاه


            #6
            پاسخ : مشکل در رفرش سگمنت ساعت

            نوشته اصلی توسط •.´™ مَسِِــــح`.•
            جناب rohoalamin
            شرط صورت مسئله این بوده که از تایم صفر استفاده بشه
            در زیر روال برنامه به این شرط میرسیم
            کد:
             if(++x1000==1000){
            که یعنی اگه به x1000 یکی اضافه شد و در اخر به 1000 که یعنی در سرریزی تایمر تکرار این موضوع یعنی گذر زمان یک ثانیه وبرابری با مقدار 1000 به این خط میرسیم

            کد:
             if(++x1000==1000){
                x1000=0;
                
                if(++sec==60){
                sec=0;
                min++;
                }    
                        
                if(min==60){
                min=0;
                hor++;
                } 
               
                if(hor==24){
                hor=0;
                }

            که اگه وارد شرط اول شه وارد اضافه شدن به مقدار زمان میشه والی اخر
            به نظر شما میشه این اتفاق ناشی از درست پروگرم نکردن و انتخاب نا صیحیح کلاک صورت بگیره؟
            برنامه شما خیلی اشکال داره.
            1- کجا به x1000 اضافه میشه؟ مگه شما نباید با هر وقفه اینو اضافه کنی؟
            2- این قسمت از کد ساعت که بهتون گفتم خرابه، خرابه! پس باید عوضش کنید! بهش نگاه کنید تا متوجه بشید کجاش خرابه!

            این ساعت بعد از مدتی بخاطر استفاده از رزوناتور داخلی خطاش بزرگتر میشه.


            نوسانساز داخلی میکرو دقیق نیست و بعد از مدتی ساعت احتمالا خطای بزرگی خواهد گرفت. به همین خ

            دیدگاه


              #7
              پاسخ : مشکل در رفرش سگمنت ساعت

              تشکر سه باره از شما

              برنامه تست شد و مشکلی نداشت و ظاهرا مشکل از پروگرم کردنه دوستمه
              بله حق با شماست دقت ملاک نبود فقط عملکرد مهم بود
              و یک چیزیو بگم که در این مدل if
              کد:
              if(++x1000==1000)
              اگه ببینین گفته شده x1000++ یعنی به x1000 یکی اضافه کن و 1000== در جلوی اون میبینیم که به این معنیه که اگه مساوی 1000 شد شرط if اجرا شه.یک نمونه کد بنویسین با این مدل if که صحت حرفام ثابت شه.
              بازم تشکر جناب مهندس
              .The best question deserves a better answer
              =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
              «پناه»می برم «به خدا»
              از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
              محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

              دیدگاه


                #8
                پاسخ : مشکل در رفرش سگمنت ساعت

                بله. درسته. به این روش هم میشه افزایش داد.

                دیدگاه


                  #9
                  پاسخ : مشکل در رفرش سگمنت ساعت

                  وقت بخیر

                  interrupt [TIM0_COMP] void timer0_comp_isr(void)
                  {
                  static unsigned char sel=0;
                  static int x1000;

                  دوست عزیز در برنامتون متغییر های x1000 و sel داخل خود فانکشن اینتراپت قرار دارن که با ورود به اینتراپت این متغییرها مقداردهی اولیه میشوند و شما نمیتوانید آنها را اضافه و مقایسه کنید !!!!!!!!!!!

                  آیا این برنامه رو جواب گرفتید ...؟؟؟

                  دیدگاه


                    #10
                    پاسخ : مشکل در رفرش سگمنت ساعت

                    دادشم پیشوند static اول هر متقیری بیاد یکبار مقدار دهی اولیه میشه
                    .The best question deserves a better answer
                    =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
                    «پناه»می برم «به خدا»
                    از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
                    محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

                    دیدگاه


                      #11
                      پاسخ : مشکل در رفرش سگمنت ساعت

                      وقت بخیر

                      استاد از این پشوند استفاده نکرده بودم !! خاصیت دیگری هم داره ؟ یا فقط همینه ؟
                      مشکل این پروژتون حل شده یا هنوز خطاش مشخص نشده ؟؟؟!!!

                      دیدگاه


                        #12
                        پاسخ : مشکل در رفرش سگمنت ساعت

                        سلام خیر خاصیت دیگری نداره
                        بله بنده خودم تست کردم مشکلی نداشت اما دوستم که ازم دوره متاسفانه همچنان باهاش درگیره
                        .The best question deserves a better answer
                        =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
                        «پناه»می برم «به خدا»
                        از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
                        محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

                        دیدگاه


                          #13
                          پاسخ : مشکل در رفرش سگمنت ساعت

                          سلام مجدد
                          دوستان اینارو یکی از دوستای گلم تست کرد و فرستاد(دقتشم تست کرده)









                          در اینچا صحت برنامرو اعلام میدارم!!! :mrgreen: :mrgreen: :mrgreen: :mrgreen:
                          .The best question deserves a better answer
                          =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
                          «پناه»می برم «به خدا»
                          از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
                          محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

                          دیدگاه

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