اطلاعیه

Collapse
No announcement yet.

تغییر بیتها در MIkroc

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    تغییر بیتها در MIkroc

    سلام
    من یه پروژه تو زندگی با pic انجام دادم که همینه. مشکل اینجاست که وقتی یه بیت از PORTC رو تغییر میدم بقیه بیت ها ممکنه صفر کنن.
    میکرو PIC16F72 هستش. البته من از اون پایه ها که صفر میشن زیاد بار میکشم.
    حدس من اینه که میکرو وقتی میخواد یه بیت رو تغییر بده میاد از پورت میخونه و پس از تغییر اون بیت دوباره تو پورت مینویسه. حالا چون این پایه ها دچار افت ولتاژ شدن موقع خوندن صفر خونده میشن و ...
    مگه پورت های این میکرو bit accessible نیستن؟ این اتفاق اصلا منطقی نیست برای من.
    کامپایلر mikro c هستش. ممکنه ضعف اون باشه؟
    بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
    اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

    #2
    پاسخ : تغییر بیتها در MIkroc

    سلام دوست عزیز.بعید میدونم کامپایلر MikroC تو یه همچین موردی ایرادی بده.کاش یه خرده بیشتر توضیح میدادین که چیکار میکنین؟اگه میتونین از یه طبقه ترانزیستور به عنوان بافر استفاده کنین که خب چه بهتر اگه نه،به هر پین میتونین 25mA جریان وارد بکنین.واسه تغییر پورتC هم که خب مشخصه؛احتیاطا و البته جسارتا با دستورTRISC=0 کل پورت خروجی میشه و در صورت نیازTRISC.bx که به جایxشماره پین رو مینویسین.واسه تغییر وضعیت پین خروجی PORTC=xxویا در صورت نیاز PORTC.bx=1 or 0 که تنها یه پین(x) رو تغییر میده.امیدوارم به دردتون بخوره. :redface:

    دیدگاه


      #3
      پاسخ : تغییر بیتها در MIkroc

      سلام
      مرسی از جوابتون .
      آخه کدش زیاده.


      کد:
      #define RELAY_ON()  {PORTC.F3=0;TRISC.F3=0;}
      #define RELAY_OFF()  {PORTC.F3=1;TRISC.F3=1;}
      
      
      // all ports outputs
      #define _7SEG_A      PORTA.F2
      #define _7SEG_B      PORTA.F5
      #define _7SEG_C      PORTB.F2
      #define _7SEG_D      PORTB.F4
      #define _7SEG_E      PORTB.F5
      #define _7SEG_F      PORTA.F4
      #define _7SEG_G      PORTB.F1
      #define _7SEG_DP     PORTB.F3
      
      #define _7SEG_COM1    PORTC.F0
      #define _7SEG_COM2    PORTC.F1
      #define _7SEG_COM3    PORTB.F7
      
      // all ports configs
      #define _7SEG_A_TRIS   TRISA.F2
      #define _7SEG_B_TRIS   TRISA.F5
      #define _7SEG_C_TRIS   TRISB.F2
      #define _7SEG_D_TRIS   TRISB.F4
      #define _7SEG_E_TRIS   TRISB.F5
      #define _7SEG_F_TRIS   TRISA.F4
      #define _7SEG_G_TRIS   TRISB.F1
      #define _7SEG_DP_TRIS   TRISB.F3
      
      #define _7SEG_COM1_TRIS  TRISC.F0
      #define _7SEG_COM2_TRIS  TRISC.F1
      #define _7SEG_COM3_TRIS  TRISB.F7
      
      
      void setseg_display(char val)
      {
         _7SEG_A = _7SEG_A_TRIS = (val & 0x01) ? 0 : 1;
         _7SEG_B = _7SEG_B_TRIS = (val & 0x02) ? 0 : 1;
         _7SEG_C = (val & 0x04) ? 0 : 1;
         _7SEG_D = (val & 0x08) ? 0 : 1;
         _7SEG_E = (val & 0x10) ? 0 : 1;
         _7SEG_F = (val & 0x20) ? 0 : 1;
         _7SEG_G = (val & 0x40) ? 0 : 1;
         _7SEG_DP = (val & 0x80) ? 0 : 1;
      }
      
      void refresh_display()
      {
         static char i = 0 , mask = 1;
         _7SEG_COM1 = _7SEG_COM2 = _7SEG_COM3 = 0;
         _7SEG_COM1_TRIS = _7SEG_COM2_TRIS = _7SEG_COM3_TRIS = 0;
      
         setseg_display( decoder[disbuf[i]]&mask );
      
         if( i == 0 )
           _7SEG_COM1 = 1;
         if( i == 1 )
           _7SEG_COM2 = 1;
         if( i == 2 )
           _7SEG_COM3 = 1;
      
         mask = mask << 1;
         if( mask == 0 )
         {
           mask = 1;
           i++;
           if( i == 3 )
             i = 0;
         }
      }


      اگه ماکر های مربوط به رله رو (RELAY_ON و RELAY_OFF) قبل از refresh_display() صدا کنم مشکلی نیست. ولی موقعی که بعد از refresh_display() صدا میکنم دوتا از سگمنت ها که پایه com اونها رو پورت c هست خیلی کم نور میشن. علتش هم همونه که وقتی ماکروهای رله میخوان کار کنن پایه های com سون سگمنت که رو پورت c هستن ریست میشن.
      بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
      اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

      دیدگاه


        #4
        پاسخ : تغییر بیتها در MIkroc

        ببخشید یه مورد نسبتا عجیب دیدم! اولین بارم هست که میبینم TRISX.Fx=x معمولا b. استفاده نمیکنن؟
        وقتی که میخواین رله رو خاموش کنین چرا جهت پورت رو تغییر میدین؟
        از کدوم میکرو استفاده میکنین؟( خسته نباشم! الان یادم افتاده بپرسم! :mrgreen
        میتونین رله رو به یه پورت دیگه وصل کنین؟
        و اینکه رله رو با ترانزیستورpnp درایو میکنین؟چرا؟(البته مهم هم نیستها! تفننی پرسیدم!)

        دیدگاه


          #5
          پاسخ : تغییر بیتها در MIkroc

          نوشته اصلی توسط شاهرخ
          ببخشید یه مورد نسبتا عجیب دیدم! اولین بارم هست که میبینم TRISX.Fx=x معمولا b. استفاده نمیکنن؟
          وقتی که میخواین رله رو خاموش کنین چرا جهت پورت رو تغییر میدین؟
          از کدوم میکرو استفاده میکنین؟( خسته نباشم! الان یادم افتاده بپرسم! :mrgreen
          میتونین رله رو به یه پورت دیگه وصل کنین؟
          و اینکه رله رو با ترانزیستورpnp درایو میکنین؟چرا؟(البته مهم هم نیستها! تفننی پرسیدم!)
          من که اولین بارمه با pic کار میکنم سرچ کردم دیدم باید PORx.Fn بزارم. تازه وقتی از portx.bn استفاده می کنم خطا میده.
          در مورد رله یکم توضیحش سخته باید کل مدار رو بزارم و بگم. مدار محافظ دیجیتالیه.
          pic16f72 هستش.
          بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
          اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

          دیدگاه


            #6
            پاسخ : تغییر بیتها در MIkroc

            سلام.میتونین مدار(شماتیک یا بلوک دیاگرام) رو واسم ایمیل بزنین؟یا همینجا بزارین؟فرقی نمیکنه...
            shahrokhmostaghimi@gmail.com
            مگه کامپایلرmikroCنیست؟نبایدErrorبده! البته الان امتحان کردم f. با b. هیچ فرقی نمیکنه!
            اینکه ترتیب وصل کردن پایه ها پشت سر هم نیست به خاطر PCB هست؟
            راستی الان یه بار دیگه به اولهای برنامه که نگاه کردم دیدم از پایهA.4 استفاده کردین.این پایهOpen Drain هست.موقع خروجی شدن باید با10kاهم Pull up بشه.
            و الان هم یه بار دیگه با دقت بیشتر به برنامه نگاه کردم... :question:چرا وسط برنامه Config پورت رو تغییر میدین؟ oo:قراره دیتایی خونده بشه؟

            دیدگاه


              #7
              پاسخ : تغییر بیتها در MIkroc

              آقا یه چیزی الان یادم افتاد.تو اول برنامه رجیسترهای ADCON0=0 و ADCON1=255 قرار بده.چون پورتAپیشفرض آنالوگ هست باADCON1 مشخص میکنی پورتA دیجیتال باشه و با ADCON0 هم ماژولADC رو خفه ش میکنی...البته احتیاطا!! :mrgreen:

              دیدگاه


                #8
                پاسخ : تغییر بیتها در MIkroc

                سلام خیلی ممنون که اینقدر برنامه دقیق بررسی کردید
                ببخشید دیر جواب میدم. امروز شدیدا سرما خوردم از صبح سردرد دارم و ...
                من هیچی از pic نمیدونستم و قیمت ارزون pic16f72 باعث شد از این میکرو استفاده کنم. برنامه ای رو هم که نوشتم همش با آزمون و خطا و مطالعه تکه تکه دیتاشیت بود که به دل خودم نچسبید. حس میکنم به پروژه مسلط نیستم.
                یه محافظ دیجیتال برقه که چون کار تیراژه باید تو هزینه ها خیلی صرفه جویی میشد و همه چی تو یه برد کوچیک جا میشد. به همین دلیل پایه های سون سگمنت آند رو به هر جا که را داد وصل کردم.
                اولش کار خوب پیش میرفت تا اینکه مشکلم با پورت A شروع شد که سگمنت هایی که به این پورت بودن اصلا معلوم نبود چطور کار میکنن. البته من اونموقع شبیه سازی میکردم. این سگمنت ها یا روشن نمیشدن یا خاموش نمیشدن. تا با آزمون و خطا تونستم با دستکاری همزمان tris و port این سگمنت ها رو کنترل کنم(البته تو شبیه سازی، شاید اگه مدار رو عملا تست میکردم همونطور که انتظار داشتم با رجیستر port تنها میشد خاموش و روشن کردشون.

                mikroc 8.2 هستش.

                بله حواسم به پورت open drain هست.

                راجه به adc هم از مثال های خودش استفاده کردم فقط یکم دستکاری کردم شما یه بررسی کنید ببینید چطوریه مدارو هم فرستادم.


                کد:
                  OPTION_REG = 0x84;    // Assign prescaler to TMR0
                  TMR0 = 26;       // Timer0 initial value
                  INTCON = 0xA0;      // Enable TMRO interrupt
                  
                  ADCON1 = 0b101;     // Configure analog inputs and Vref
                  ADCON0 = 0xC0;      // Configure analog internal RC OSC


                الان میخوام برای قدم آخر watch dog اضافه کنم. دستور watch dog reset چیه؟ wdt ش با فیوزبیتاش فعال میشه دیگه؟ تو برنامه که نباید کاری غیر از ریستش انجام بدم.

                بازم ممنون
                بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
                اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

                دیدگاه


                  #9
                  پاسخ : تغییر بیتها در MIkroc

                  سلام.انشالله هرچه زودتر حالتون خوب بشه... :applause:
                  آخرین ورژن MikroC الان تو سایتش نگاه کردم 5.3 هست! oo: شما با 2.8 کار میکنین یا 8.2 ؟؟؟
                  یه سری مواردی تو شماتیک دیدم که جسارتا به نظرم درست نبود.مثلا راه اندازی رله و راه اندازی7seg اونها رو دارم تغییرش میدم.فکر نکنم تو هزینه نهایی تفاوت زیادی ایجاد بشه.
                  با توجه به اینکه توفایل شماتیک که فرستادین،از خازنهای ظرفیت بالا استفاده کردین حدس میزنم کهPCB رو میخواین با همین پروتئوس طراحی بکنین؛که اگه قراره بردتون رو تعداد بالا باشه اکیدا توصیه میکنم که باAltium بردتون رو طراحی کنین.
                  اگه وقت بکنم یه کد کوچولوی راه اندازی هم واسش مینویسم.
                  با عرض شرمندگی تا الان موردی واسم پیش نیومده که لازم بشه ازWatch dog استفاده کنم! :mrgreen: واسه اون هم به تنظیمات رجیسترهای
                  option_reg ؛pcon ،intcon و tmr0 یه نگاهی بندازین.تو تنظیمات پروژه کامپایلر هم میشه تنظیمش کرد.البته یه نکته هم در نظر بگیرین که تو بعضی پروگرمر ها موقع پروگرم کردن میکرو میشه Watchdog رو فعال یا غیر فعال کرد.بالاخره یکی از این 3 تا حالت جواب خواهد داد! :mrgreen:
                  واسه چی از TL431 استفاده کردین؟ و اینکه اون دیود زنری که گذاشتین که ولتاژش 5.1 هست واسه محافظت گذاشتین دیگه؟

                  دیدگاه


                    #10
                    پاسخ : تغییر بیتها در MIkroc

                    سلام خیلی ممنون
                    ورژن میکرو C که همون 8.2 هست ولی نوشته 2002 تا 2008 نمیدونم فلسفش چیه؟


                    زنر که رگولاتوره اگه نباشه 20 ولت میره تو میکرو.
                    در مورد پیکربندی مدار هم من چند تا محافظ رو بررسی کردم و همگی بالاتفاق از رو دست هم همین سیستم رو پیاده کرده بودن که چند تا مزیت داره.
                    مزیت اولش اینه که تو سیستم های قدیم وقتی رله راه میافتاد ولتاژ افت میکرد و تغذیه میکرو ضعیف میشد و شما مجبور بودی مقاومت های وات بالا سر را زنر بزاری و ...
                    اما اینجا رله با مقاومت بایاس زنر موازی میشه و برعکس کمک میکنه ولتاژ تثبیت بشه.
                    سیستم تغذیه اش و درایو رله به نظرم حرف نداره و من خودم خیلی باهاش حال کردم.

                    این کامپایلر من چطوریه؟ یا خیلی قدیمیه یا خیلی جدید
                    بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
                    اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

                    دیدگاه


                      #11
                      پاسخ : تغییر بیتها در MIkroc

                      و اما برنامه...
                      کد:
                      TRISB=0;
                      TRISC=0;
                      ADCON0=0xC1;
                      ADCON1=5;
                      #define com1 PORTC.b0
                      #define com2 PORTC.b1
                      #define com3 PORTC.b2
                      #define com4 PORTC.b3
                      #define relay PORTC.b4
                      
                      #define 7SEG_A PORTB.b0
                      #define 7SEG_B PORTB.b1
                      #define 7SEG_C PORTB.b2
                      #define 7SEG_D PORTB.b3
                      #define 7SEG_E PORTB.b4
                      #define 7SEG_F PORTB.b5
                      #define 7SEG_G PORTB.b6
                      #define 7SEG_DP PORTB.b7
                      بقیه رجیستر ها رو وقت نشد دقیق نگاه کنم.با همون نگاه سطحی به نظر درست میومد.
                      ضمنا ایمیلتون رو هم چک کنین.
                      واسه مدار راه انداز رله هم اونطور که شما گفتین راه انداز خفنی باید باشه! ولی تو اینجا یه همچین مداری لازمه؟ این مدار رو عملی تست کردین؟اگه رله تون 5 ولت باشه دیگه اون قضیه تثبیت و زنر و... پیش نمیاد.تجربه ش رو داشتم :agree:
                      کامپایلرتون حرف نداره!!من یکی Error دادم! :mrgreen:
                      ازکجا دانلود کردین؟

                      دیدگاه


                        #12
                        پاسخ : تغییر بیتها در MIkroc

                        از اینجا دانلود کردم
                        مال سال 2008 هستش ولی این ورژنها چرا کمتر میشن هر چی میگزره؟
                        http://www.sonsivri.to/forum/index.php?topic=5933.0

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

                        بله مدار رو عملی بستم و دو روزه داره تست میشه.
                        خیلی خنک تر از نمونه های دیگه کار میکنه. طوری که همه مقاومتها 1/4 وات هستن و اصلا حرارتی حس نمیشه.
                        از 85 ولت تا 220 ولت تست کردم دنبال برق دو فازم نباید با دوفاز شدن بسوزه.
                        امروز که خونه موندم فردا عکساشو میزارم.
                        بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
                        اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

                        دیدگاه


                          #13
                          پاسخ : تغییر بیتها در MIkroc

                          ببخشید از بس عجله کردم اشتباه شده بود

                          از 85 ولت تا 220 ولت تست کردم دنبال برق دو فازم نباید با دوفاز شدن بسوزه.
                          متوجه منظورتون نشدم.
                          راستی یه سوال دیگه: واسه تامین تغذیه میکرو از چی استفاده میکنین؟ واسه این میپرسم که اگه مدار راه اندازی که هست رو استفاده میکنین ایجاد ولتاژ20 ولت باعث افزایش هزینه نمیشه؟ اگه رله 5 ولت باشه یه منبع 5 ولت -0.5 آمپر هم واسه کل مدار زیاده!

                          دیدگاه


                            #14
                            پاسخ : تغییر بیتها در MIkroc

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

                            این ساده ترین شکلیه که شما میتونید کار کنید. لحیم کاری 3 ترانزیستور (سگمنت ها 3 تایی هستش) تو تیراژ 10 هزار اگه هر ترانزیستور 40 ثانیه وقت بگیره در حدود 1200000 ثانیه زمان تولید رو بالا میبره که اگه 1 نفر بخواد با روزی هشت ساعت کار این کار رو انجام بده 41 روز طول میکشه که اگه حقوقش 400 تومن باشه یعنی 520 هزار تومن هزینه تو تیراژ 10 هزار تا.
                            در صورتی که با حذف اون سه ترانزیستور مدار هم بدون مشکل کار میکنه.
                            منم اولش که تولید کنندش بهم گفت یکم برام نامفهوم بود ولی فهمیدم اگه هزینه ها رو این شکلی کم نکنن نمیتونن دوام بیارن.

                            نوشته اصلی توسط شاهرخ
                            ببخشید از بس عجله کردم اشتباه شده بود
                            متوجه منظورتون نشدم.
                            راستی یه سوال دیگه: واسه تامین تغذیه میکرو از چی استفاده میکنین؟ واسه این میپرسم که اگه مدار راه اندازی که هست رو استفاده میکنین ایجاد ولتاژ20 ولت باعث افزایش هزینه نمیشه؟ اگه رله 5 ولت باشه یه منبع 5 ولت -0.5 آمپر هم واسه کل مدار زیاده!
                            ما از منبع تغذیه استفاده نمیکنیم. با یه خازن 1 میکروفاراد 400 ولت و دیودپل و زنر.
                            بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
                            اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

                            دیدگاه


                              #15
                              پاسخ : تغییر بیتها در MIkroc

                              حساب این همه ثانیه رو نکرده بودم!
                              اگه مشکل لحیم کاری هست،تو یه همچین تیراژ بالایی خب چاپ سبز بزنین خیال خودتون رو راحت کنین.به جای ترانزیستور ها هم میتونینULN2803 استفاده بکنین.
                              الان این مدار با مدار قبلی 2تا تغییر اساسی کرده: نحوه ی راه اندازی رله و سون سگمنت
                              البته تو این مدار به کل فراموش کردم که مقاومت سر راه a~g و dp بزارم.اگه شدت نورش مناسب هست خب ترانزیستور ها رو حذف کنین ولی لااقل یه مقاومت100 اهمی واسشون بزارین.شما رله رو 5 ولت انتخاب کنین ایرادی پیش میاد؟

                              دیدگاه

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