اطلاعیه

Collapse
No announcement yet.

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

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

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

    نوشته اصلی توسط abritco
    سلامی دوباره خدمت دوست عزیزم.
    خیلی ممنون از اینکه پاسخ میدی.
    من زیاد از lcd تو پروژه های مختلف تو avr و xmega استفاده کردم فکر نمیکنم مشکل از بایاس lcd باشه.
    تو پروتئوس هم میبندم همینطوره. :read:
    سلام جناب abritco
    خواهش می کنم ، قصد جسارت نداشتم تنها باید از روال عادی که lcd بعد از روشن شدن طی می کند اطمینان پیدا می کردم و بابت همین خواستم وضعیت lcd رو در ابتدا و قبل از ارسال فرامین میکرو بدونم ، اگر زحمتی نیست کل فایل پروژه و پروتئوس رو در اینجا قرار بدین تا بهتر بتونم کمکتون کنم
    هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

    دیدگاه


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

      خواهش میکنم دوستم باعث افتخار منه که از شما چیزی یاد بگیرم.
      فایل ها رو تو ادرس زیر اپلودکردم.
      http://up.persianscript.ir/uploads/6524-New-Folder.rar
      Someone who can change the world
      ELECTRONIC ENGINEER

      دیدگاه


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

        اقای دکتر حال میکرومون خوب میشه؟ :cry2:
        Someone who can change the world
        ELECTRONIC ENGINEER

        دیدگاه


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

          سلام
          تراشه Pic18f4550 بلاک تایمینگ بسیار پیشرفته ای در خانواده PIC18f ها دارد که ذکر چند نکته مهم هست
          1-این تراشه مطابق FIGURE 1-1 ، برای فعال سازی و استفاده از قابلیتهای میکرو باید به درستی و با تنظیم چندیت بیت پیکربندی ، تنظیم شود که از آنجایی که تعداد این متغییرهای زیاد بوده و تنظیم کردن آنها با چک کردن تمامی آنها آسان نیست پیشنهاد می کنم که از زیر منو
          Window->PIc Memory View->configuration bit
          تنظیم کرده و در انتها بر روی دکمه
          Generate source code
          کلیک کنید تا کدهای خروجی را بتوانید با کپی و پیست کردن در برنامه اضافه کنید
          2-متاسفانه من فایل lcd.h شما را در اختیار نداشتم که تنظیمات آن فایل را چک کنم اما ذکر این نکته مهم هست که فرکانس کاری در عملکرد صحیح lcd بسیار مهم است که اگر حتی دقت کرده باشین اکثر کامپایلرها مقدار دقیق آن را جهت اجرای فرامین اصلی از شما می پرسند و خود را تنظیم می کنن(از جهتی که شما با میکروهای دیگر به خوبی کار کردین می تونین این مورد را در code vision , bascom , ... ببینید) بابت همین هم در برنامه lcd.h سعی کردم با تاخیرهای مختلف اجرای دستورات را به ازای میکروهای 4 مگاهرتز تا 20 مگاهرتز تنظیم کنم که اگر فرکانس اولیه پایین و بالاتر این باشد باید بر اساس ان lcd.h و تاخیرها را کمی تنظیم کنید ان شالله که در آینده وقت شود این قسمت را اضافه کنم که با تنظیم کریستال در ابتدا فایل lcd.h نیاز به تنظیمات و تغییرات زیادی نباشید.
          3-برنامه و فایل lcd.h-این برنامه رو من با فرکانس 4 مگاهرتز خارجی تست کردم و مشکلی وجود ندارد
          کد:
          #include <p18f4550.h>
          #include "LCD1.h"
          #include <stdio.h>
          #include <delays.h>
          
          // PIC18F4550 Configuration Bit Settings
          
          // CONFIG1L
          #pragma config PLLDIV = 1    // PLL Prescaler Selection bits (No prescale (4 MHz oscillator input drives PLL directly))
          #pragma config CPUDIV = OSC1_PLL2// System Clock Postscaler Selection bits ([Primary Oscillator Src: /1][96 MHz PLL Src: /2])
          #pragma config USBDIV = 1    // USB Clock Selection bit (used in Full-Speed USB mode only; UCFG:FSEN = 1) (USB clock source comes directly from the primary oscillator block with no postscale)
          
          // CONFIG1H
          #pragma config FOSC = HSPLL_HS    // Oscillator Selection bits (HS oscillator (HS))
          #pragma config FCMEN = OFF   // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
          #pragma config IESO = OFF    // Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)
          
          // CONFIG2L
          #pragma config PWRT = OFF    // Power-up Timer Enable bit (PWRT disabled)
          #pragma config BOR = ON     // Brown-out Reset Enable bits (Brown-out Reset enabled in hardware only (SBOREN is disabled))
          #pragma config BORV = 3     // Brown-out Reset Voltage bits (Minimum setting)
          #pragma config VREGEN = OFF   // USB Voltage Regulator Enable bit (USB voltage regulator disabled)
          
          // CONFIG2H
          #pragma config WDT = OFF    // Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))
          #pragma config WDTPS = 32768  // Watchdog Timer Postscale Select bits (1:32768)
          
          // CONFIG3H
          #pragma config CCP2MX = OFF   // CCP2 MUX bit (CCP2 input/output is multiplexed with RB3)
          #pragma config PBADEN = OFF   // PORTB A/D Enable bit (PORTB<4:0> pins are configured as digital I/O on Reset)
          #pragma config LPT1OSC = OFF  // Low-Power Timer 1 Oscillator Enable bit (Timer1 configured for higher power operation)
          #pragma config MCLRE = ON    // MCLR Pin Enable bit (MCLR pin enabled; RE3 input pin disabled)
          
          // CONFIG4L
          #pragma config STVREN = ON   // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
          #pragma config LVP = OFF    // Single-Supply ICSP Enable bit (Single-Supply ICSP disabled)
          #pragma config ICPRT = OFF   // Dedicated In-Circuit Debug/Programming Port (ICPORT) Enable bit (ICPORT disabled)
          #pragma config XINST = OFF   // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))
          
          // CONFIG5L
          #pragma config CP0 = OFF    // Code Protection bit (Block 0 (000800-001FFFh) is not code-protected)
          #pragma config CP1 = OFF    // Code Protection bit (Block 1 (002000-003FFFh) is not code-protected)
          #pragma config CP2 = OFF    // Code Protection bit (Block 2 (004000-005FFFh) is not code-protected)
          #pragma config CP3 = OFF    // Code Protection bit (Block 3 (006000-007FFFh) is not code-protected)
          
          // CONFIG5H
          #pragma config CPB = OFF    // Boot Block Code Protection bit (Boot block (000000-0007FFh) is not code-protected)
          #pragma config CPD = OFF    // Data EEPROM Code Protection bit (Data EEPROM is not code-protected)
          
          // CONFIG6L
          #pragma config WRT0 = OFF    // Write Protection bit (Block 0 (000800-001FFFh) is not write-protected)
          #pragma config WRT1 = OFF    // Write Protection bit (Block 1 (002000-003FFFh) is not write-protected)
          #pragma config WRT2 = OFF    // Write Protection bit (Block 2 (004000-005FFFh) is not write-protected)
          #pragma config WRT3 = OFF    // Write Protection bit (Block 3 (006000-007FFFh) is not write-protected)
          
          // CONFIG6H
          #pragma config WRTC = OFF    // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) are not write-protected)
          #pragma config WRTB = OFF    // Boot Block Write Protection bit (Boot block (000000-0007FFh) is not write-protected)
          #pragma config WRTD = OFF    // Data EEPROM Write Protection bit (Data EEPROM is not write-protected)
          
          // CONFIG7L
          #pragma config EBTR0 = OFF   // Table Read Protection bit (Block 0 (000800-001FFFh) is not protected from table reads executed in other blocks)
          #pragma config EBTR1 = OFF   // Table Read Protection bit (Block 1 (002000-003FFFh) is not protected from table reads executed in other blocks)
          #pragma config EBTR2 = OFF   // Table Read Protection bit (Block 2 (004000-005FFFh) is not protected from table reads executed in other blocks)
          #pragma config EBTR3 = OFF   // Table Read Protection bit (Block 3 (006000-007FFFh) is not protected from table reads executed in other blocks)
          
          // CONFIG7H
          #pragma config EBTRB = OFF   // Boot Block Table Read Protection bit (Boot block (000000-0007FFh) is not protected from table reads executed in other blocks)
          
          
          
          
          
          void main (){
            unsigned char msg[17];
            while(1){
            lcdinit();
            cls();
            locate(1,1);
            sprintf(msg,"hello");
            lcdprint(msg);
            Delay10KTCYx(20);
            }
          
          }

          فایل lcd.h

          کد:
          /* 
           * File:  RHDS.h
           * Created on July 16, 2012, 4:33 PM
           */
          #include "delays.h"
          
          #define rs PORTDbits.RD4
          #define en PORTDbits.RD5
          #define rsts TRISDbits.RD4
          #define ents TRISDbits.RD5
          
          #define d4 PORTDbits.RD0
          #define d5 PORTDbits.RD1
          #define d6 PORTDbits.RD2
          #define d7 PORTDbits.RD3
          
          #define td4 TRISDbits.RD0
          #define td5 TRISDbits.RD1
          #define td6 TRISDbits.RD2
          #define td7 TRISDbits.RD3
          
          
          //////////////////////////LCD function//////////////////
          void prin(rom char *datas);
          void writedata(unsigned char s);
          void writecommand(unsigned char s);
          void lcdinit();
          void lcdprint(unsigned char datas[16]);
          void cls();
          void locate(unsigned char row,unsigned char column);
          void cursoron(void);
          void cursoroff(void);
          void displayon(void);
          void displayoff(void);
          void shiftleft(void);
          void shiftright(void);
          void xzlc85cv(unsigned char s);
          
          unsigned char lslcd;
          
          void xzlc85cv(unsigned char s){
            d4= s & 0x01;
            d5= s>>1 & 0x01;
            d6= s>>2 & 0x01;
            d7= s>>3 & 0x01;
          }
          
          void writedata(unsigned char s){
            rs=1;
            en=0;
            xzlc85cv(s>>4);
            en=1;
            Delay10TCYx(40);
            en=0;
            Delay10TCYx(40);
          
            rs=1;
            en=0;
            xzlc85cv(s & 0x0f);
            en=1;
            Delay10TCYx(40);
            en=0;
            Delay10TCYx(40);
          }
          
          void writecommand(unsigned char s){
            rs=0;
            en=0;
            xzlc85cv(s>>4);
            en=1;
            Delay10TCYx(5);
            en=0;
            Delay100TCYx(40);
          
            rs=0;
            en=0;
            xzlc85cv(s & 0x0f);
            en=1;
            Delay10TCYx(40);
            en=0;
            Delay10TCYx(40);
          
          }
          void lcdinit()
          {
            lslcd=0;
            td4=0;td5=0;td6=0;td7=0;
            ents=0;rsts=0;
             
            Delay10KTCYx(50);
            en=0;
            Delay10KTCYx(20);
            writecommand(0x3);
            Delay1KTCYx(20);
            writecommand(0x3);
            Delay1KTCYx(20);
            writecommand(0x20);
            Delay1KTCYx(20);
            writecommand(0x2c);
            Delay1KTCYx(20);
            writecommand(0x06);
            Delay1KTCYx(20);
            writecommand(0x02);
            Delay1KTCYx(20);
            writecommand(0x01);
            Delay1KTCYx(20);
            writecommand(0x01);
            Delay1KTCYx(50);
            writecommand(0x0C);
            Delay1KTCYx(20);
            lslcd=0x0C;
          }
          void lcdprint(unsigned char datas[16])
          {
            unsigned char i;
            i=0;
            while(datas[i]!=0)
            {
              writedata(datas[i]);
              Delay10TCYx(30);
              i=i+1;
            }
          }
          
          void prin(rom char *datas)
          {
          unsigned char i;
          i=0;
          for(i=0;datas[i];i++)
          {
            writedata(datas[i]);
            Delay100TCYx(30);
          }
          }
          
          
          void cls(){
              writecommand(0x01);
              Delay1KTCYx(80);
          }
          void locate(unsigned char row,unsigned char column){
            if(row>0 && column>0)
            {
              switch(row)
              {
                case 1:row=0x80;break;
                case 2:row=0xC0;break;
                default:return;
              }
              column+=row-1;
              writecommand(column);
            }
          
          }
          
          void displayoff(void){
            if(lslcd==0x0C || lslcd==0x08)
            {
            lslcd=0x08;
            }
            else
            {
            lslcd=0x0A;
            }
            writecommand(lslcd);
            Delay1KTCYx(5);
          }
          
          void displayon(void){
            if(lslcd==0x0C || lslcd==0x08)
            {
            lslcd=0x0C;
            }
            else
            {
            lslcd=0x0E;
            }
            writecommand(lslcd);
            Delay1KTCYx(5);
          }
          
          void cursoroff(void){
            if(lslcd==0x0A || lslcd==0x08)
            {
            lslcd=0x08;
            }
            else
            {
            lslcd=0x0C;
            }
            writecommand(lslcd);
            Delay1KTCYx(5);
          }
          
          void cursoron(void){
            if(lslcd==0x0A || lslcd==0x08)
            {
            lslcd=0x0A;
            }
            else
            {
            lslcd=0x0E;
            }
            writecommand(lslcd);
            Delay1KTCYx(5);
          }
          void shiftright(void)
          {
            writecommand(0x1C);
            Delay1KTCYx(10);
          }
          void shiftleft(void)
          {
            writecommand(0x18);
            Delay1KTCYx(10);
          }
          4-یه عذر خواهی هم بابت تاخیر داشته باشم چون من مدتها هست(تقریبا یکسال) دست به کار عملی نزده و درگیر تمیز کردن خانه و مهمانیهای عید بودم ،و باید تمامی برنامه ها را نصب ، مدار روی برد برد می بستم ،تست میکردم و دیتاشیت را مطالعه می کردم دیگر نشد از این تندتر برسم خدمتتون، که به خوبی خودتون ببخشید.احتمالا روزهای آینده تا 20 روز شاید به انجمن سر نزم یا زیاد نرسم به پستها جواب بدم، و برای اینکه مابقی سوالات بی پاسخ نماند ان شالله آنها را در انجمن PIC و در هر پست جدید بپرسین که ان شالله من یا بقیه دوستان با تجربه تر از من در خدمتتون باشیم
          هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

          دیدگاه


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

            خیلی ممنون دوست عزیز واقعا ممنون از زحماتی که کشیدی.لطف کردی.
            اگر امکانش هست فایل پروژه رو با پروتئوسش برام قرار بدید.چون من الان دارم تو پروتئوس چک میکنم جواب نمیده .
            باز هم تشکر میکنم.
            Someone who can change the world
            ELECTRONIC ENGINEER

            دیدگاه


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

              سلام
              خواهش می کنم ، وظیفه هست
              من در پروتئوس به جواب نرسیدم اما در عمل که تست کردم بدون کوچکترین مشکلی کار می کرد، حالا شاید من به خوبی پروتئوس رو به یاد ندارم یا شاید هم هماهنگ سازی رو به خوبی انجام نداده ام.
              برای نداشتن کوچکترین مشکل پیشنهاد می کنم
              1-LCD را می توانید در مد 8 بیتی راه اندازی کنید
              http://www.eca.ir/forum2/index.php?t...8595#msg378595
              2-می توانید از کتابخانه خود پیشنهادی mplab که یکی از اساتید سایت در آدرس زیر توضیح دادن استفاده کنید
              http://www.eca.ir/forum2/index.php?topic=59815.0
              هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

              دیدگاه


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

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

                دیدگاه


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

                  نوشته اصلی توسط maahhhddddiiiii
                  سلام.
                  این لینکی که برای نرم افزاره MPLABX گذاشتید فیلتره دانلود هم نمیشه.
                  اگه میشه نرم افزارو بزارید تو سایتتون.
                  ممنون میشم اگه بزارید تو سایت
                  http://www.proton.rozblog.com/PROTON/60
                  برای ورود علم ، تکنولوژی ، پیشرفت به اجازه کسی احتیاج نیست !

                  دیدگاه


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

                    در مورد LCD من از کتابخانه MPLAB استفاده میکنم که توی اون اشاره شده که با توجه به فرکانس کاری تون چند تا دستور تاخیر رو تنظیم کنین من برای راحتی کار اون کتابخونه رو ویرایش کردم و شما کافیه با مقدار دهی به دیفاین xtal مقدار فرکانس کاری تون رو قبل از اینکلود کتابخانه مشخص کنین
                    چند تا هم تابع locate و cls و lcdinit و cursor بهش اضافه کردم (البته توابع اضافه شده ممکنه توی سایزهای مختلف LCD به جز 2x16 خوب کار نکنه)
                    لینک دانلود:

                    http://constant2x.xzn.ir/other/xlcd.h

                    من یه سوال داشتم:
                    اون طور که من فهمیدم میکروی 18f452 از دو بردار وقفه که در آدرس 8h و 18h که شامل الویت بالا و پایین هستن استفاده میشه توی example های mplab نمونه کدی برای نوشتن روتین وقفه هستش
                    من مثلا وقفه های تایمرهای 0 و 1 و اینتراپت خارجی 0 و رو فعال میکنم و تایمرها رو هم روی high prioridy قرار میدم
                    مشکلی که وجود داره برای توی روتین وقفه الویت بالا ، با دستور IF بررسی میکنم که کدوم پرچم یک شده تا بفهمم که وقفه مربوط به چی بوده و همینطور هر کدوم که وقفه رخ داده باشه باید پرچمش رو هم خودم صفر کنم
                    از این لحاظ میشه گفت عملکرد PIC نسبت به AVR ضعیفتر هستش
                    تنها راه برداشتن دستور if میتونه این باشه که نهایتا از دو وقفه به صورت الویت بالا و پایین استفاده کنیم که توی روتین الویت بالا بدون شرط if مطمئن باشیم که وقفه رخ داده کدوم هستش
                    در بین آدرس 8h و 18h چند خانه فاصله وجود داره من فکر میکردم مثل AVR آدرس بردار وقفه هر کدوم متفاوت باشه و پشت سر هم باشن ولی ظاهرا اینطور نیست چون تو دیتاشیتش چیزی پیدا نکردم

                    سوالم اینه که این شرایط توی همه میکروهای PIC سری 16f و 18f و DSPIC و PIC32 وجود داره یا نه ؟
                    [br /][hr]http://pcenter.ir[hr][br /]

                    دیدگاه


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

                      نوشته اصلی توسط ConstantError
                      خب کسی نظری نداشت؟؟؟
                      میکروهای زیر18F اولویت وقفه ندارن.حالا این بردار وقفه که فرمودین رو تاحالا بهش دقت نکردم.(حالا اسمبلی بود؛یه چیزی! تو C چه نیازی هست بدونیم؟)

                      دیدگاه


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


                        نوشته اصلی توسط شاهرخ مستقیمی
                        میکروهای زیر18F اولویت وقفه ندارن.حالا این بردار وقفه که فرمودین رو تاحالا بهش دقت نکردم.(حالا اسمبلی بود؛یه چیزی! تو C چه نیازی هست بدونیم؟)
                        دیگه داشتم ناامید میشدم فکر کردم کسی اینجا نیست!
                        بله میکروهای 16f الویت وقفه ندارن
                        به چی دقت نکردین!؟ بردار وقفه رو هر بار که با اینتراپت کار میکنین استفاده میکنید
                        توی AVR هر وقفه ای دارای یک بردار وقفه مخصوص خودش بود و بردار وقفه ها پشت سر هم قرار داشتن که اونجا میتونستیم با دستور JMP به محل روتین وقفه پرش کنیم
                        من وقتی روی قسمتهای مختلف PIC18f452 کار میکردم دیدم که همه وقفه ها یک بردار وقفه دارن(البته دوتا یکی الویت بالا و یکی الویت پایین) برای همین لازم بود توی روتین وقفه ، چون همه وقفهای هم سطح اون در صورت فعال بودن به اونجا پرش میکردن از دستور IF برای مقایسه پرچم وقفه ها برای پیدا کردن وقفه رخ داده استفاده بشه
                        پس از چند سال کار با AVR و شنیدن تعریف های میکروهای 8 بیتی PIC این مسئله برام عجیب بود و خیلی ناراحت کننده چون با کوچ کردن به PIC قصد داشتم از ایرادات AVR راحت بشم نه اینکه به نواقص و مشکلاتش اضافه بشه!
                        بله بنده هم فعلا نیازی به الویت بندی وقفه ها (به جز برای RTC ) ندارم ولی داشتن بردار وقفه اختصاصی برای هر وقفه برام خیلی مهمه

                        سوالم این بود که این مسئله توی PIC های پیشرفته تر سری 16 بیت و 32 بیت هم وجود داره یا نه؟
                        که دیتاشیت زیر بهم کمک کرد بعد تعطیلات اولین کارم باید خرید یه PIC24 باشه!
                        [br /][hr]http://pcenter.ir[hr][br /]

                        دیدگاه


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

                          نوشته اصلی توسط baby_1
                          جلسه سوم:پیکربندی سخت افزار و روش پروگرم کردن تراشه
                          وضعیت پایه های PIC18f452 به صورت زیر است

                          برای راه اندازی اولیه تراشه باید چند تا نیاز تراشه رو برآورده کنین
                          1-ولتاژ تغذیه آی سی
                          2-نوسان ساز
                          3-قرار دادن پایه MCLR در وضعیت منطقی مناسب
                          برای شروع پس ابتدا پایه های 11 و 32 رو به مثبت منبع تغذیه مدار وصل می کنیم(5 ولت dc)
                          پایه های 12 و 31 رو به GND مدار متصل می کنیم که اختلاف پتانسیل بین پایه های 11و12 و همچنین 32 و31 برابر 5 ولت بشه
                          بر خلاف بعضی از تراشه های میکروکنترولر که با آزاد گذاشتن پایه Reset و با توجه به ساختار داخلی تراشه می تونه روشن بشه و فعالیت خودش رو آغار کنه(نمونه بارز AVR) حتما باید در میکروهای شرکت میکروچیپ پایه 1 میکرو یا همون MCLR رو توسط یه مقاومت به سطح 5 ولت PULLUP کنین و برای ریست کردن تراشه می بایست این پایه رو به زمین مدار متصل کرد.
                          برای نوسان ساز هم از کریستال استفاده می کنیم که برای پایداری بیشتر نوسان از دو خازن که برای Bypass کردن استفاده می شه به دو پایه کریستال متصل می کنیم.این خازن ها هر چی بیشتر باشن پایداری کریستالتون بیشتر می شه اما به چه قیمت ؟ افزایش زمان بالا آمدن میکرو. به شخصه چک کردم با افزایش مقدار خازن تا حد نانو فاراد یا میکروفاراد تراشه یه جور اینقدر زمانش طولانی می شه که اصلا دیگه بالا نمی یاد.خازن ها مقدارشون برای بهترین وضعیت باید در بازه 15 تا 33 پیکوفاراد قرار داشته باشه.
                          پس تا اینجا پیکربندی مدار به صورت زیر در می یاد

                          یادتون باشه با برنامه proteus نمی تونم پایه های تغذیه مدار رو نشون بدم که به خوبی خودتون ببخشید

                          حالا نوبت پروگرم کردن تراشه هست
                          تراشه رو می شه به چندین روش پروگرم کردن
                          1-از طریق پروتکل JTAG
                          2-از طریق پروتکل خود میکروچیپ به صورت سریال
                          3-از طریق بوت لودر که بعضی از تراشه های دارای USB , Ethernet , … می تونن برنامه ریزی بشن
                          ما در اینجا چون وضعیت مالی دانشجویی کاربران رو نگاه می کنیم گزینه دوم مقرون به صرفه تر هست.پس تا اینجا همه کارهای که میکروچیپی بوده بیان از پروگرمر پیشنهادی خود میکروچیپ هم استفاده کنین یعنی PICKIT که یه نمونه در سایت توسط مدیر انجمن Sa3ID قرار داده شده
                          http://www.eca.ir/forum2/index.php?topic=38944.0
                          یا اینکه بیام برای سایت تبلیغ جمع کنم و بگم پروگرمر خود سایت ECA رو که آماده هست رو تهیه کنین(لینک این تبلیغ رو فعلا قرار نمی دم تا آقای بلورچیان بیان بگن هر چی از این تبلیغ من به فروش می رسه نصف نصف :rolleyes: )
                          نمای برنامه پروگرمر به این صورت هست

                          اگر تراشه روی پروگرمر وجود داشته باشه با اجرا کردن برنامه خودکار تراشه تشخیص داده می شه و جزئیات براتون نمایش داده می شه


                          روش کار:
                          برای پاک کردن محتویات تراشه بعد از شناسایی توسط برنامه می تونین دکمه Erase رو کلیک کنین
                          برای پروگرم کردن تراشه بعد از شناسایی توسط برنامه و انتخاب فایل HEX توسط منوی
                          File->import
                          می تونین دکمه write رو کلیک کنین
                          برای تشخیص اینکه برنامه تراشه دقیقا چیزی هست که روی کامپیوتر قرار داشته(همون فایل HEX) دکمه Verify رو کلیک کنین
                          برای پروگرم کردن تراشه به صورت ICSP باید پایه PGD و PGC و MCLR و زمین مدار و میکرو رو به پایانه های پروگرمر به این نام متصل کنین و با اعمال ولتاژ راه اندازی میکرو نسبت به پروگرم کردن تراشه اقدام کنین.
                          Baby.X\dist\default\production


                          سلام

                          یه سوال دارم

                          نو دیتاشیت میکرو PIC18F452 نوشته که اوسیلاتور رو باید به پایه های OSC1 و OSC2 یعنی پایه های 13 و 14 وصل بشه.

                          ولی شما به پایه های 13 و 15 وصل کردین.

                          لطفا دلیلشو بیان کنین.

                          دیدگاه


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

                            این یه اشتباه توی ترسیم شماتیک در پروتیوس هست شما بایستی به همان پایه های 13 و 14 وصل کنید
                            تو پروتیوس اهمیتی نداره که کریستال وصل بشه یا نه واسه همین مشکلی پیش نمی آد
                            پایه های 15 و 16 مربوط به اتصال کریستال زیر 200K هرتز برای اسیلاتور تایممر1 هست که البته من یادمه که توی پروتیوس تست کرده بودم اسیلاتور تایمر کار نمیکرد ولی تو عمل مشکلی نداره و کار میکنه
                            [br /][hr]http://pcenter.ir[hr][br /]

                            دیدگاه


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

                              [move]سلام[/move]
                              میخواستم بدونم کسی با pic18f452 به صورت multitasking کار کرده؟
                              مشکل اینجاست که وقتی میخوام کتابخونه salvo اضافه کنم با خطا مواجه میشم که به توابع داخلیش گیر میده!! :question:

                              دیدگاه


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

                                لینک دانلود MPLABX IDE 2.05 در صفحه ی اول تاپیک قرار گرفت.


                                دیدگاه

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