اطلاعیه

Collapse
No announcement yet.

کار نکردن PIC16F877A

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

    کار نکردن PIC16F877A

    من هر برنامه ای برای این میکرو مینویسم کار نمیکنه دلیلش رو نمیدونم چی هست
    کریستال هم 8MHZ خارجی هست که فیوز بیت رو هم روی HS تنظیم می کنم
    من با نرم افزار CCS برنامه مینویسم

    #2
    پاسخ : کار نکردن PIC16F877A

    سلام مهندس.مدار ریست رو بستی؟حداقل پایه ریست باید با یک مقاومت 10k به 5v وصل باشه تا میکرو ریست نشه پایه ریست پایه شماره 1 است.اگر این نبود بازم مشکلتو بگو

    دیدگاه


      #3
      پاسخ : کار نکردن PIC16F877A

      این کار رو هم کردم نمیدونم مشکل از چی هست بعضی وقت ها رو lcd یه چیزی مینویسه ولی دیگه کار نمیکنه
      این هم از برنامه البته فکر نکنم مشکل از این برنامه باشه

      #include <16f877a.h>
      #use delay(oscillator=8M)
      #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,PARITY=n)
      #define use_portb_lcd TRUE
      #include <lcd.c>
      void show(void);
      char id[12],i;
      int8 conter=0;

      #int_rda
      void rx_isr()
      {
      id[conter]= getc();
      conter++;

      }




      void main (void)
      {

      enable_interrupts(INT_RDA);
      enable_interrupts(GLOBAL);
      set_tris_d(0x00);

      lcd_init();
      while(true)
      {
      lcd_gotoxy(1,1);
      lcd_putc(" "
      lcd_gotoxy(1,2);
      lcd_putc(" "
      delay_ms(100);
      lcd_gotoxy(1,1);
      lcd_putc(" Pass Card "
      delay_ms(400);
      if(conter>=11)
      {
      show();
      }
      lcd_gotoxy(1,2);
      lcd_putc(" RFID MODULE "
      delay_ms(300);
      }
      }




      void show(void)
      {

      conter=0;
      lcd_gotoxy(1,1);
      lcd_putc("Card ID "
      lcd_gotoxy(1,2);
      lcd_putc(" "
      lcd_gotoxy(1,2);
      for(i=0;i<12;i++)
      {
      printf(LCD_PUTC,"%u",id[i]);
      }
      OUTPUT_D(0xff);
      delay_ms(1000);
      OUTPUT_D(0x00);
      delay_ms(1000);
      }

      دیدگاه


        #4
        پاسخ : کار نکردن PIC16F877A

        سلام عزیزم.
        من فکر میکنم برنامتون اشکال داره. اون متغیر conter که تعریف کردین هربار که از سریال کاراکتری رو بگیره، افزایش پیدا میکنه و تا 0xff=255 میره تازه اگه unsigned تعریف میکردین. در صورتیکه شما طول id[] رو 12 تعریف کردین. واسه همین وقتی conter از 12 تجاوز کنه میکرو معلوم نیست از کجا واسه خودش بخونه و اجرا کنه و احتمالا هنگ میکنه.

        دیدگاه


          #5
          پاسخ : کار نکردن PIC16F877A

          همونطور که دوست خوبمون Micro20 گفتن برنامتون ایراد داره که البته یک ایراد در همون روتین وقفه دریافت سریال و مربوط به متغیر conter است که دوستمون گفتند. مورد دیگه اینه که شما میخواهید یک رشته کارکتر رو رو LCD نمایش بدید . حتما میدونید که هر رشته دارای یک انتها هست که این انتها با رقم 0x00 یا nul مشخص میشه.
          توابع مربوط به رشته ها و البته تابع نمایش رشته در LCD اعمال خودشون رو تا این کارکتر نول انجام میدن. ولی در برنامه ایکه شما نوشتید رشته id رو بدون اینکه در انتها کارکتر نول داشته باشه به این توابع منتقل کردید که این خودش معلوم نیست چه پاسخی داشته باشه .

          برای اینکه بخواهید یک رشته با تعداد کارکتر مشخص(فرضاً 12) رو نشون بدید بهتره یک پرچم تعریف کنید و در روتین وقفه دریافت زمانی که شمارنده conter به یک عدد کمتر از تعداد مشخص شده (11) رسید و یا زمانی که کارکتر NUL رو از پورت سریال دریافت کرد یک کارکتر nul به آخرین کارکتر دریافت شده اضافه کنید و رشته رو ببندید و شمارنده رو صفر کنید. و در همین لحظه پرچم رو یک کنید. در برنامه اصلی هم همیشه این پرچم رو چک کنید. وقتی این پرچم یک باشه برنامه تشخیص میده یک رشته دریافت شده و اون رو نمایش میده.

          دیدگاه


            #6
            پاسخ : کار نکردن PIC16F877A

            ممنون از دوستان برای اینکه ایراد های این برنامه رو به من گفتید

            ولی من یه برنامه نوشتم که فقط یه اسم رو lcd نشون بده ولی باز هم نشون نمیده


            #include <16f877a.h>
            #use delay(oscillator=8M)
            #define use_portb_lcd TRUE
            #include <lcd.c>




            void main (void)
            {

            lcd_init();
            while(true)
            {

            lcd_gotoxy(1,1);
            lcd_putc(" test lcd "
            delay_ms(400);
            i
            }
            }

            دیدگاه


              #7
              پاسخ : کار نکردن PIC16F877A

              ظاهراً LCD رو به PORTB متصل کردید. آیا در این اتصال از پین RB3 هم استفاده شده؟
              این پین همون پایه مربوط به سیگنال PGM برای مد برنامه ریزی ولتاژ پایینه. و به طور پیشفرض به عنوان PGM در دسترسه و شما به عنوان I/O نمیتونید ازش استفاده کنید.
              اگر از این پین استفاده کردید مد LVP رو غیر فعال کنید(البته اگر از پروگرمر HV استفاده میکنید این کار رو کنید) یا اینکه سیگنال مربوطه رو به پین دیگه ای منتقل کنید.

              دیدگاه


                #8
                پاسخ : کار نکردن PIC16F877A

                من اینجوری بستم


                پروگرامر من هم TNM100+ هست

                دیدگاه


                  #9
                  پاسخ : کار نکردن PIC16F877A

                  در مدار پین RB3 شناور مونده. اونو به زمین وصل کنید ببینید مشکل حل میشه؟

                  دیدگاه


                    #10
                    پاسخ : کار نکردن PIC16F877A

                    نوشته اصلی توسط SMART-CARD
                    من اینجوری بستم


                    پروگرامر من هم TNM100+ هست
                    از دستور #fuse برای معرفی و مقدار دهی رجیستراتون استفاده کنید(اسیلاتورتون). در ضمن پایه کنتراست lcd تون رو هم pull down کنین. موفق باشی دوست خوبم.

                    دیدگاه


                      #11
                      پاسخ : کار نکردن PIC16F877A

                      دوستان این کار ها رو هم کردم نشد

                      به نظرتون ممکن میکرو مشکل داشته باشه
                      ولی پروگرامر که میکرو رو میشناسه

                      دیدگاه


                        #12
                        پاسخ : کار نکردن PIC16F877A

                        برنامه رو توی پرتیوس تست کنید و عکس مدار رو کامل رو بگذارید شاید بتونیم مشکلش رو پیدا کنیم
                        گل سرخ گل سرخ است و خار , خار . نه خار بد است و نه گل سرخ خوب . اگر انسان از روي زمين محو شود , گلها آنجا خواهند بود و خارها نيز آنجا . اما ديگر كسي نيست كه بگويد گلهاي سرخ خوبند و خارها بد !

                        دیدگاه


                          #13
                          پاسخ : کار نکردن PIC16F877A

                          بفرمایید گذاشتم


                          http://up.iranblog.com/images/v9ggjy0wzmua1xxgwjya.rar

                          دیدگاه


                            #14
                            پاسخ : کار نکردن PIC16F877A

                            پایه PGM رو با یه مقاومت یک کیلواهم به Vcc وصل کن.
                            اگه از کریستال خارجی استفاده میآ‌کنی، فیوزبیت نوسانآ‌ساز رو از نوع XT بذار.
                            ایشالا که مشکل حل میآ‌شه.

                            [move]بای[/move]

                            دیدگاه


                              #15
                              پاسخ : کار نکردن PIC16F877A

                              #include <16f877a.h>
                              #fuses HS
                              #use delay(clock=8000000)

                              #define use_portb_lcd TRUE
                              #include <lcd.c>




                              void main (void)
                              {

                              SET_TRIS_B( 0x00 );

                              lcd_init();
                              while(true)
                              {
                              lcd_gotoxy(1,1);

                              printf(lcd_putc"TEST LCD"
                              delay_ms(500);

                              }
                              }

                              برنامه رو تغییر دادم و تست کردم کار میکنه باید پورت ال سی دی رو به عنوان خروجی تعریف میکردید(SET_TRIS_B( 0x00 )
                              گل سرخ گل سرخ است و خار , خار . نه خار بد است و نه گل سرخ خوب . اگر انسان از روي زمين محو شود , گلها آنجا خواهند بود و خارها نيز آنجا . اما ديگر كسي نيست كه بگويد گلهاي سرخ خوبند و خارها بد !

                              دیدگاه

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