اطلاعیه

Collapse
No announcement yet.

یه مشکل خیلی فجیه در نمایش با سون سگمنت

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

    یه مشکل خیلی فجیه در نمایش با سون سگمنت

    دیگه کلافه شدم :angry:

    یه ساعت با مگا 16 و DS1307 ساختم که دماسنج هم داره. قبل از برنامه نویسی ساعت هیچ مشکلی نبود و دما و سگمنتها عالی کار میکردن اما از وقتی که برنامه ساعت اضافه شده نور سگمنتها خیلی خیلی کم شده.

    هر کاری که به ذهنم اومد کرد درس نشد :angry:

    دلایهارو کم و زیاد کردم نتیجه نداد .

    اما وقتی دلایهارو بیش از اندازه زیاد کردم مشکل رفع شد اما نمایش به هم ریخت. آخه دلایها خیلی بالا بود.

    اینم کد

    کد:
    PORTB = 0x00;
              delay_us(300);
              PORTD = 0;
              PORTB = ~(segment[Temp / 10 / 10]);
              PORTD.7 = ledDama;
              delay_us(500);
    
              PORTB = 0x00;
              delay_us(300);
              PORTD = 1;
              PORTB = ~(segmentp[Temp / 10 % 10]);
              PORTD.7 = ledDama;
              delay_us(500);
    
              PORTB = 0x00;
              delay_us(300);
              PORTD = 2;
              PORTB = ~(segment[Temp % 10]);
              PORTD.7 = ledDama;
              delay_us(500);
              //dama--------------------------------------
    
              rtc_get_time (&hor, &min, &sec);
    
              rtc_get_date(&wday, &day, &month, &year);
    
              //Tarikh------------------------------------
                 //sal
                 PORTB = 0x00;
                 delay_us(300);
                 PORTD = 3;
                 PORTB = ~(segment[year / 10]);
                 delay_us(500);
    
                 PORTB = 0x00;
                 delay_us(300);
                 PORTD = 4;
                 PORTB = ~(segment[year % 10]);
                 delay_us(500);
                 // mah
                 PORTB = 0x00;
                 delay_us(300);
                 PORTD = 5;
                 PORTB = ~(segment[month / 10]);
                 delay_us(500);
    
                 PORTB = 0x00;
                 delay_us(300);
                 PORTD = 6;
                 PORTB = ~(segment[month % 10]);
                 delay_us(500);
                 //rooz
                 PORTB = 0x00;
                 delay_us(300);
                 PORTD = 7;
                 PORTB = ~(segment[day / 10]);
                 delay_us(500);
    
                 PORTB = 0x00;
                 delay_us(200);
                 PORTD = 8;
                 delay_us(200);
                 PORTB = ~(segment[day % 10]);
                 delay_us(500);
                 //rooze hafte
                 PORTC = weekday[wday];
    
              //Saat--------------------------------------
                 //second.........................
                 PORTB = 0x00;
                 delay_us(200);
                 PORTD = 9;
                 delay_us(200);
                 PORTB = ~(segment[hor / 10]);
                 delay_us(500);
    
                 PORTB = 0x00;
                 delay_us(200);
                 PORTD = 10;
                 delay_us(200);
                 PORTB = ~(segment[hor % 10]);
                 delay_us(500);
                 //Minit.........................
                 PORTB = 0x00;
                 delay_us(200);
                 PORTD = 11;
                 delay_us(200);
                 PORTB = ~(segment[min / 10]);
                 delay_us(500);
    
                 PORTB = 0x00;
                 delay_us(200);
                 PORTD = 12;
                 delay_us(200);
                 PORTB = ~(segment[min % 10]);
                 delay_us(500);
                 //Hours..........................
                 PORTB = 0x00;
                 delay_us(200);
                 PORTD = 13;
                 delay_us(200);
                 PORTB = ~(segment[sec / 10]);
                 delay_us(500);
    
                 PORTB = 0x00;
                 delay_us(200);
                 PORTD = 14;
                 delay_us(200);
                 PORTB = ~(segment[sec % 10]);
                 delay_us(500);
    تو رو خدا به دادم برسین قبل اینکه دیوونه بشم :twisted:

    #2
    پاسخ : یه مشکل خیلی فجیه در نمایش با سون سگمنت

    با سلام

    اون تاخیری که بعد از صفر کردن پورت B میذارین اضافه هست. چون تعداد سگمنتهاتون هم بالاست باید تاخیر رو طوری محاسبه کنین که سرعت رفرش بیشتر از 30 هرتز باشه.

    یه مسئله دیگه محاسباتیه که برای مقدار دهی پورت B انجام میدین. سعی کنین محاسبات مربوط به هر سگمنت رو تو تاخیر سگمنت قبلی انجام بدین و بعد از مقدار دهی پورت D دیگه محاسبات نداشته باشین و فقط عدد رو بذارین تو پورت B.
    کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

    دیدگاه


      #3
      پاسخ : یه مشکل خیلی فجیه در نمایش با سون سگمنت

      با سلام با استفاده از delay نمیتونی نور خوبی برای سون سگمنت داشته با شی و با کمو زیاد شدن برنامه و استفاده از وقفه های مختلف نور سون سگمنت کم و زیاد میشه،بهتره برنامه رفرش سون سگمنت را توی وقفه تایمر بنویسی من برای دوتا سون سگمنت مثال میزنم
      کد:
      seg1=1;
      seg2=1;
      seg3=1;
      switch (seg_counter)
      	{
      	case 0:
      		{
      		display_data=number[data1];
      		seg1=0;
      		seg_counter++; 
      		}
      		break;
      	case 1:
      		{
      		display_data=number[data2];
      		seg2=0;
      		seg_counter=0;
      		}
      		break;
      این یک مثاله که شما میتونی برای نرم افزار خودت اصلاحش کنی

      دیدگاه


        #4
        پاسخ : یه مشکل خیلی فجیه در نمایش با سون سگمنت

        ممنون از دوستانی که پاسخ دادن. این یادم رفته بود بگم که سگمنتها از نوع بزرگ هستن. 12 ولتی.

        دلای هارو خیلی دست کاری کردم آخرش فعلا اینطوریه .

        کد:
                  // Dama-------------------------------------
                  PORTB = 0x00;
                  PORTD = 0x00;
                  PORTB = ~(segment[Temp / 10 / 10]);
                  PORTD.7 = ledDama;
                  delay_us(800);
        
                  PORTB = 0x00;
                  PORTD = 0x01;
                  PORTB = ~(segmentp[Temp / 10 % 10]);
                  PORTD.7 = ledDama;
                  delay_us(800);
        
                  PORTB = 0x00;
                  PORTD = 0x02;
                  PORTB = ~(segment[Temp % 10]);
                  PORTD.7 = ledDama;
                  delay_us(800);
                  //dama--------------------------------------
        
                  rtc_get_date(&wday, &day, &month, &year);
        
                  //Tarikh------------------------------------
                     //sal
                     PORTB = 0x00;
                     PORTD = 0X03;
                     PORTB = ~(segment[year / 10]);
                     delay_us(800);
        
                     PORTB = 0x00;
                     PORTD = 0X04;
                     PORTB = ~(segment[year % 10]);
                     delay_us(800);
                     // mah
                     PORTB = 0x00;
                     PORTD = 0X05;
                     PORTB = ~(segment[month / 10]);
                     delay_us(800);
        
                     PORTB = 0x00;
                     PORTD = 0X06;
                     PORTB = ~(segment[month % 10]);
                     delay_us(800);
                     //rooz
                     PORTB = 0x00;
                     PORTD = 0X07;
                     PORTB = ~(segment[day / 10]);
                     delay_us(800);
        
                     PORTB = 0x00;
                     PORTD = 0X08;
                     PORTB = ~(segment[day % 10]);
                     delay_us(800);
                     //rooze hafte
                     PORTC = weekday[wday];
                  //Tarikh------------------------------------
        
                  rtc_get_time (&hor, &min, &sec);
        
                  //Saat--------------------------------------
                     //second.........................
                     PORTB = 0x00;
                     PORTD = 0X09;
                     PORTB = ~(segment[hor / 10]);
                     delay_us(800);
        
                     PORTB = 0x00;
                     PORTD = 0X0A;
                     PORTB = ~(segment[hor % 10]);
                     delay_us(800);
                     //Minit.........................
                     PORTB = 0x00;
                     PORTD = 0X0B;
                     PORTB = ~(segment[min / 10]);
                     delay_us(800);
        
                     PORTB = 0x00;
                     PORTD = 0X0C;
                     PORTB = ~(segment[min % 10]);
                     delay_us(800);
                     //Hours..........................
                     PORTB = 0x00;
                     PORTD = 0X0D;
                     PORTB = ~(segment[sec / 10]);
                     delay_us(800);
        
                     PORTB = 0x00;
                     PORTD = 0X0E;
                     PORTB = ~(segment[sec % 10]);
                     delay_us(800);

        دیدگاه


          #5
          پاسخ : یه مشکل خیلی فجیه در نمایش با سون سگمنت

          []
          نوشته اصلی توسط نو رسیده

          یه مسئله دیگه محاسباتیه که برای مقدار دهی پورت B انجام میدین. سعی کنین محاسبات مربوط به هر سگمنت رو تو تاخیر سگمنت قبلی انجام بدین و بعد از مقدار دهی پورت D دیگه محاسبات نداشته باشین و فقط عدد رو بذارین تو پورت B.
          یعنی اینطوری :

          کد:
          PORTB = 0X00;
          PORTB = ~(SEGMENT[tEMP / 10];
          PORTD = 0X01;
          اگر درس نگفتم لطفا یه مثال بزنید :smile:

          دیدگاه


            #6
            پاسخ : یه مشکل خیلی فجیه در نمایش با سون سگمنت

            نگفتین حال بیمار :biggrin: بهتر شده یا نه؟

            برای حذف تاخیر های محاسباتی هم مقداری رو که باید تو پورت B بذارین، قبل از مقدار دهی پورت D ، محاسبه کنین و تو یه متغیر بایتی بذارین و بعد از مقدار دهی پورت D، فقط اون متغیر رو تو پورت B بذارین.
            کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

            دیدگاه


              #7
              پاسخ : یه مشکل خیلی فجیه در نمایش با سون سگمنت

              نوشته اصلی توسط نو رسیده
              نگفتین حال بیمار :biggrin: بهتر شده یا نه؟

              برای حذف تاخیر های محاسباتی هم مقداری رو که باید تو پورت B بذارین، قبل از مقدار دهی پورت D ، محاسبه کنین و تو یه متغیر بایتی بذارین و بعد از مقدار دهی پورت D، فقط اون متغیر رو تو پورت B بذارین.
              بهتر که چه ارز کنم. از یه ترانس قوی تر استفاده کردم نور یکم بهتر شد.

              مهندس ببخشیدا من انقد با این کدها کلنجار رفتم که دیگه مغزم سوت میکشه اگه میشه یه قطعه کد بزار ببینم :eek:

              دیدگاه


                #8
                پاسخ : یه مشکل خیلی فجیه در نمایش با سون سگمنت

                پس یعنی مشکل از تغذیه هم بوده؟

                مثلا اینطوری:
                کد:
                X = ~(SEGMENT[tEMP / 10];
                PORTB = 0X00;
                PORTD = 0X01;
                PORTB = X;
                اینجا X یه متغیره که محاسبات رو منتقل میکنه به قبل از مقدار دهی پورت ها و بعد از پورت D، بلافاصله پورت B مقدار میگیره.
                کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

                دیدگاه


                  #9
                  پاسخ : یه مشکل خیلی فجیه در نمایش با سون سگمنت

                  اگه از کد خسته شدی مقاومت سری شده با سگمنت ها رو کم کن
                  روش بهتری نسبت به این هست که ولتاژ ترانست رو بالا ببری
                  برای کاری در حوزه اربعین نیاز به نیروی داوطلب هستیم.
                  http://hosseinwalkingday.com

                  دیدگاه


                    #10
                    پاسخ : یه مشکل خیلی فجیه در نمایش با سون سگمنت

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

                    اضافه شده در تاریخ :
                    90 درصد مشکلمو پیدا کردم. ایراد از ترانزیستورها بود. :rolleyes:

                    ترانزیستورهایی که استفاده کردم bc337 و bc327 هستش.

                    مدارو با ترانزیستور bd136 تست کردم نورش بیشتر شد.

                    میخاستم کمک بگیرم که از چه ترانزیستوری استفاده کنم (به جای 337 و 327) ؟ :question: :nerd:

                    دیدگاه


                      #11
                      پاسخ : یه مشکل خیلی فجیه در نمایش با سون سگمنت

                      نوشته اصلی توسط engpakbaz
                      90 درصد مشکلمو پیدا کردم. ایراد از ترانزیستورها بود. :rolleyes:
                      بسیار عالی.

                      چرا از دو جور ترانزیستور استفاده کردین؟ چرا همه رو بصورت کاتد مشترک روشن نکردین؟ من معمولا کاتد میبندم. بجای ترانزیستور هم از ULN ها استفاده میکنم. چون هم جای کمتری میگیرن و هم راحت هستن. برای NPN هم از BD139 استفاده کنین.
                      کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

                      دیدگاه


                        #12
                        پاسخ : یه مشکل خیلی فجیه در نمایش با سون سگمنت

                        نوشته اصلی توسط نو رسیده
                        بسیار عالی.

                        چرا از دو جور ترانزیستور استفاده کردین؟ چرا همه رو بصورت کاتد مشترک روشن نکردین؟
                        چون تعداد سگمنتها زیادن (15 تا) نمیشد مستقیم با میکرو کنترل کنم و از یه دیکدر 4 به 16 استفاده کردم.
                        و از طرفی 6 تا از سگمنتها 12 ولت هستن که باید با uln کنترل بشن و همین ایجاب کرده که دو جور ترانزیستور استفاده بشه :smile:

                        دیدگاه

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