اطلاعیه

Collapse
No announcement yet.

آموزش میکروکنترولر PIC با MPLAB C

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

    پاسخ : آموزش میکروکنترولر PIC با MPLAB C

    سلام

    شما میتوانید از توابع موجود در هدر stdlib.h استفاده کنید

    برای مثال اگر متغیر شما از نوع long است :


    ltoa(C, (char *)Buffer_01);
    sprintf(Buffer_LCD,"C = %s ", (char *)Buffer_01 );

    اگر C یک متغیر از نوع long است من اون رو با تابع ltoa به یک رشته کاراکتری تبدیل کرده و در آرایه Buffer_01 ذخیره کردم و بعد , از تابع sprintf استفاده کردم
    نا امیدی یه دروغ بزرگه که آدما به خودشون میگن
    تلاش یه حقیقت بزرگه که با صبر به ثمر میرسه

    دیدگاه


      پاسخ : آموزش میکروکنترولر PIC با MPLAB C

      من از تابع itoa استفاده کردم. متغیر p حاصلضرب دو مقدار ADC در آن قرار میگیرد.(ADC1&ADC2) و msg آرایه 16 تایی. برنامه به این شکله
      p=ADC1*ADC2;
      itoa (p,(char*)msg);
      locate(2,1);
      sprintf(msg,"p=%s",(char*)msg);
      lcdprint(msg);
      ولی خروجی و عدد درست و نشون نمیده مشکل چیه؟

      دیدگاه


        پاسخ : آموزش میکروکنترولر PIC با MPLAB C

        سلام

        اگر متغیر P از نوع int است لازم نیست از itoa استفاده کنید , خود sprintf میتواند تبدیل رو انجام بده , آرگومان های ورودی sprintf همگی 16بیتی هستن .

        اما برای رفع مشکل به دو نکته دقت کنید :

        1 - آیا حاصل ضرب ADC1*ADC2 در متغیر P که ظاهرا از نوع int هست جا میشود ؟

        2 - شما از بافر msg هم در خروجی و هم در ورودی تابع sprintf استفاده کردین , بهتره از دو بافر مجزا استفاده کنید .

        نا امیدی یه دروغ بزرگه که آدما به خودشون میگن
        تلاش یه حقیقت بزرگه که با صبر به ثمر میرسه

        دیدگاه


          کار با LCD گرافیکی در MPLAB

          سلام دوستان.
          من میخوام با ال سی دی گرافیکی 128 در 64 و میکروی 18F کار کنم.کسی از دوستان کتابخونه ال سی دی گرافیکی رو واسه MPLAB داره؟

          دیدگاه


            پاسخ : آموزش میکروکنترولر PIC با MPLAB C

            سلام
            جناب baby در صفحه اول راجع به روشن و خاموش کردن led یه پروژه اولیه گذاشته بودند و به عنوان تکلیف گفته بودند که برای پورت های دیگه هم امتحان کنیم.
            من چون تازه کار هستم این کار را کردم :biggrin:. و متوجه شدم که فقط برای پورتهای B,D این پروژه جواب میده و کلید یا led را به هیچکدوم از پورتهای دیگه نمیتوان وصل کرد. یعنی کار نمی کنه oo:. البته من با 16f887 کارکردم. حالا میخواستم از دوستان راجع به علتش بپرسم. ممنون می شم راهنماییم کنید.

            دیدگاه


              پاسخ : آموزش میکروکنترولر PIC با MPLAB C

              جناب baby_1 تا اطلاع ثانوی دیگه تشریف نمیارن انجمن... :cry2:

              برای سوالتون؛ شما باید ADC رو خاموش کنین.

              دیدگاه


                پاسخ : آموزش میکروکنترولر PIC با MPLAB C

                نوشته اصلی توسط شاهرخ
                جناب baby_1 تا اطلاع ثانوی دیگه تشریف نمیارن انجمن... :cry2:

                برای سوالتون؛ شما باید ADC رو خاموش کنین.
                ممنون از جوابتون شاهرخ خان .
                ADC با صفر کردن بیت ADON در 16F887 خاموش میشه دیگه درسته؟ ولی با خاموش کردن ADC هم تفاوتی حاصل نشد. کد برنامه را گذاشتم ممنون میشم بازم راهنمایی کنید. این کد همینجوری کار میده ولی اگه بجای بیت RC0 یا RD3 از مثلا RB0 یا هربیت دیگه از پورت A,B,E استفاده کنیم جواب نمیده.
                #include<pic16f887.h>
                void main(void)
                {
                ADON=0;
                TRISCbits.TRISC0=0;
                TRISDbits.TRISD3=1;
                while(1)
                {
                if(PORTDbits.RD3==0)
                {PORTCbits.RC0=~PORTCbits.RC0;
                while(PORTDbits.RD3==0);
                }
                }
                }

                دیدگاه


                  پاسخ : آموزش میکروکنترولر PIC با MPLAB C

                  شرمنده، ناقص گفتم.اما بهتر بود خودتون هم دیتاشیت رو یه خرده میگشتین!
                  علاوه بر خاموش کردن ADC، باید اون پورت رو به عنوان ورودی دیجیتال تنظیم کنین.

                  دیدگاه


                    پاسخ : آموزش میکروکنترولر PIC با MPLAB C

                    نکته جالبی بود که رجیسترهای ANSEL , ANSELH بصورت پیش فرض روی آنالوگ هستند. نمیدونستم، ممنون که تذکر دادید :nice:.
                    ولی متاسفم که اینو میگم که باوجود صفرکردن این دو رجیستر هم باز برنامه با پورتهای دیگه کارنداد :cry2: :angry:
                    #include<pic16f887.h>
                    void main(void)
                    {
                    ADON=0;
                    ANSEL=0;
                    ANSELH=0;
                    TRISCbits.TRISC0=0;
                    TRISAbits.TRISA3=1;
                    while(1)
                    {
                    if(PORTAbits.RA3==0)
                    {PORTCbits.RC0=~PORTCbits.RC0;
                    while(PORTAbits.RA3==0);
                    }
                    }
                    }

                    دیدگاه


                      پاسخ : آموزش میکروکنترولر PIC با MPLAB C

                      اینو یادم رفت تو پست قبلی اضافه کنم. من یه مشکل دیگه هم با mplabx xc8 پیدا کردم. اون هم اینه که یه برنامه دماسنج نوشتم و با کامپایلر mikroc تست کردم و درست جواب میده ولی توی این کامپایلر موقع نمایش دما روی 7segment فقط یکی از 7seg را روشن میکنه. بعبارتی در تابع زیر که مربوط به نمایش روی 7seg هست فقط داخل دستورات if دومی میره. طوری که انگار همیشه flag را صفر میبینه oo:. در این برنامه تابع display در برنامه main هر 100 میلی ثانیه یکبار فراخوانی میشه تا مقدار 7seg را پدیت کنه. ممنون میشم از راهنمایی دوستان :rolleyes:

                      void display(unsigned char b)
                      {
                      unsigned char SEGMENT[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,
                      0x7D,0x07,0x7F,0x6F};
                      if(flag==1)
                      {PORTEbits.RE1=0;
                      PORTD=SEGMENT[b%10];
                      PORTEbits.RE0=1;
                      flag=0;
                      }
                      if(flag==0)
                      {PORTEbits.RE0=0;
                      PORTD=SEGMENT[b/10];
                      PORTEbits.RE1=1;
                      flag=1;
                      }

                      دیدگاه


                        پاسخ : آموزش میکروکنترولر PIC با MPLAB C

                        خوب ممنون از شاهرخ خان و دیگر دوستان که مارا در حل مشکلاتمان یاری کردند :redface:
                        البته انتظار داشتم که مشکلاتم حل بشه ولی گویا اینجا حل نمیشه :cry:. شاید هم سوالاتم اینقدر پیش پا افتاده است که ارزش جواب دادن نداشته ولی به هر حال فورم خوبی هست و امیدوارم بتونم بیشتر ازش بهره مند بشم و اگه چیزی میدونم به دیگران آموزش بدم.

                        دیدگاه


                          پاسخ : آموزش میکروکنترولر PIC با MPLAB C

                          نوشته اصلی توسط mohammadali110
                          خوب ممنون از شاهرخ خان و دیگر دوستان که مارا در حل مشکلاتمان یاری کردند :redface:
                          البته انتظار داشتم که مشکلاتم حل بشه ولی گویا اینجا حل نمیشه :cry:. شاید هم سوالاتم اینقدر پیش پا افتاده است که ارزش جواب دادن نداشته ولی به هر حال فورم خوبی هست و امیدوارم بتونم بیشتر ازش بهره مند بشم و اگه چیزی میدونم به دیگران آموزش بدم.
                          راستش اومدم دیدم،وقت نشد دقیق بررسی کنم ببینم چشه؟! علامت گذاری کرده بودم و هر دفعه میدیدم با خودم میگفتم الان عجله دارم و...خلاصه شرمنده.به دل نگیرین.
                          ------------------
                          خب حالا همچنان مسئله حل نشده؟ آخه والله هر چی نگاه میکنم به برنامه، ایرادی توش نمیبینم!

                          شما میخواین چی رو توی seg-7 نشون بدین؟ البته در کل این روش برای نشون دادن 2 تا رقم روی سون سگمنت خیلی جالب نیست.

                          دیدگاه


                            پاسخ : آموزش میکروکنترولر PIC با MPLAB C

                            نه خواهش میکنم به دل نمیگیرم :nice:
                            اصل برنامه یه دماسنج با lm35 هست که مقدار دما را روی 7seg نشون میده. توی پروتئوس اجراش کردم ولی نمیدونم کامپایلر xc8 چه مشکلی داره که فقط وارد if دومی میشه و یکی از دو 7seg را روشن میکنه. البته این مشکل با حذف if ها و مقدار دهی هردو 7seg با یکبار فراخوانی تابع display حل شد ولی چون من میخوام با mplabx بیشتر کار کنم برام سوال شده بود که این ide از این جور مشکلات زیاد داره یا نه؟ اگه همیشه اینجوریه برم سراغ mikroc.
                            راستی این مشکل اولم هم هنوز حل نشده. یعنی اون led را با خاموش کردن ADC و دیجیتال کردن پورتها هم نمیشه روشن کرد. تو پروتئوس که اینجوری بود.
                            ممنون :biggrin:

                            دیدگاه


                              پاسخ : آموزش میکروکنترولر PIC با MPLAB C

                              با سلام
                              من میخواستم با xc 8 کار کنم اما کرک براش پیدا نکذدم
                              لطفا کمک بفرمایید.
                              یاعلی
                              محمد.م

                              دیدگاه


                                پاسخ : آموزش میکروکنترولر PIC با MPLAB C

                                سلام، من با mplabxبرنامه که مینویسم توی پروتئوس هم جواب میده ولی وقتی میخوام با پراگرامر نوآوران(pickit2) پراگرامش کنم رو میکرو پروگرام نمیشه یا اشتباه پراگرام میشه، ولی microc این مشکل رو ندارم، کسی میتونه کمکم کنه؟

                                دیدگاه

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