Pemrograman PIC Microcontrollers

PIC microcontrollers adalah alat yang sangat berguna dan serba boleh untuk digunakan dalam banyak projek elektronik. Mereka sangat murah dan mudah dicari. Mereka juga sangat berkuasa dan ramai yang mampu mempercepatkan sehingga 64 MIPS dengan menggunakan blok pengayun dalaman, kira-kira 16 kali lebih cepat daripada kebanyakan mikrokontroler AVR yang boleh dibandingkan. PIC juga mudah untuk program, namun mendapatkan projek yang dibina dapat beberapa kali menjadi rumit. Arahan ini akan berjalan melalui proses penubuhan perisian, membuat projek baru, dan mengatur beberapa fungsi yang sangat mudah untuk menguji konfigurasi dan memastikan semuanya berfungsi. Mereka direka untuk menjadi sangat terbuka berakhir; selepas projek dicipta dan asas-asas selesai pembaca digalakkan untuk meneroka semua ciri dan tambahan yang tidak dilindungi dalam arahan ini. Juga anda akan mendapati bahawa arahan ini akan bermula berjalan melalui langkah demi langkah, tetapi sebagai arahan di akhir pembaca digalakkan untuk meneroka cara lain untuk mencapai tugas dan membuat projek itu sendiri.

Apa yang anda perlukan Untuk membina projek dengan mikrokontroler PIC hanya memerlukan beberapa item.

  • PIC mikrokontroler
    • Arahan ini adalah untuk pengaturcaraan MCU siri PIC18F, walaupun yang lain adalah sama.
    • Diperolehi daripada laman web Microchips.
    • Microchip membolehkan pelajar dengan alamat e-mel sah .edu sampel PIC secara percuma!
    • PIC yang saya gunakan untuk membuat arahan ini ialah PIC18F22K80
  • PICkit 3 Debugger dalam Circuit
    • Boleh didapati daripada Microchip.
    • Kos $ 45 untuk umum, dan # 34 dengan diskaun pelajar jika anda mempunyai alamat e-mel .edu.
    • Terdapat juga pengaturcara lain yang akan berfungsi dengan baik; Walau bagaimanapun, ini adalah yang terbaik untuk bermula.
  • Breadboard dan wayar papan lapis
  • LED, butang, potensiometer, atau apa sahaja yang anda ingin sambungkan ke PIC

Langkah 1: Membina Perkakasan

Sebelum melakukan sebarang pengaturcaraan, langkah pertama adalah membina perkakasan. Walaupun portfolio PIC18F sangat besar, banyak cip mempunyai beberapa persamaan. Untuk maklumat yang lebih terperinci lihat bahagian "Garis Panduan Bermula dengan PIC18Fxxxx Microcontrollers" di dalam datasheet peranti anda. Untuk pin-out terperinci pengawal mikro PIC lihat bahagian "Pin Diagram" dalam lembaran data peranti anda.

Nota: VDD = Voltan Positif dan VSS = Ground.
  1. Sambungkan pin MCLR melalui perintang 1kΩ ke VDD.
  2. Sambungkan kapasitor 0.1μF antara setiap pasangan pasangan VDD-VSS atau AVDD-AVSS yang bersambung.
  3. Sambungkan kapasitor 10μF antara VCAP dan VSS.
  4. Sambungkan pin MCLR ke pin 1 dari PICkit 3.
  5. Sambungkan VDD ke pin 2 dari PICkit 3.
  6. Sambungkan VSS ke pin 3 dari PICkit 3.
  7. Sambung PGD pin ke pin 4 dari PICkit 3.
  8. Sambung PGC pin ke pin 5 dari PICkit 3.
  9. Tinggalkan pin 6 daripada PICkit 3 yang tidak berkaitan.
  10. Sambungkan sebarang input analog ke pin dengan fungsi ANx di mana x adalah nombor.
  11. Sambungkan sebarang input atau output digital ke pin dengan fungsi Rxy di mana x adalah huruf yang mengenal pasti port, dan y adalah nombor yang mengenal pasti bit tersebut.
Sebagai contoh saya mempunyai LED yang disambungkan antara RA0 dan tanah, pengelap potensiometer yang disambungkan ke AN1, dan suis DPST disambungkan ke RA2. Anda mungkin mendapati lebih mudah untuk memprogramkan PIC jika anda telah membuat skema skematik anda.

Langkah 2: Dapatkan Perisian

Arahan ini akan menggunakan pengkomputeran XC8 dan MPLAB X IDE oleh Microchip. Langkah ini akan menerangkan cara untuk mendapatkan alat ini dan pastikan ia telah dipasang dengan betul.
  1. Untuk mendapatkan versi terkini perisian, layari laman web Microchips di //www.microchip.com/pagehandler/en-us/family/mplabx/
  2. Pilih perisian untuk OS anda dan ikuti arahan pemasangan piawai.
Nota: Jika anda menggunakan Windows 8, anda mungkin perlu menjalankan pemasang dalam mod keserasian untuk Windows 7.
  1. Setelah perisian dipasang, mulailah MPLAB X
  2. Dalam bar menu pilih Tools-> Options
  3. Dalam dialog Opsyen, pilih tab Tertanam dan pastikan XC8 disenaraikan dalam senarai Toolchain.
  4. Jika ia disenaraikan pilih OK dan langkah seterusnya.
  5. Sekiranya ia tidak disenaraikan, pastikan penginstalan selesai, dan klik butang Pindai untuk Membina Alat.
  6. Jika masih belum disenaraikan, lihat pada forum Microchips untuk mendapatkan bantuan dengan masalah khusus anda.

Langkah 3: Buat Projek Baru

Dalam langkah ini kita akan membuat projek baru berdasarkan template dari Microchip.
  1. Pada bar menu pilih Fail-> Projek Baru ...
  2. Dalam kotak dialog fail baru mengembangkan Sampel dan pilih Microchip Embedded
  3. Dalam kotak projek pilih Templat PIC18 C
  4. Pilih Seterusnya
  5. Beri projek apa-apa nama yang anda suka
  6. Pilih lokasi untuk menyelamatkan projek ke dalam kotak Lokasi Projek
  7. Tinggalkan Folder Projek sebagai pilihan lalai
  8. Semak kotak "Tetapkan sebagai Projek Utama"
  9. Pilih Selesai
Projek ini sekarang akan muncul dalam Projek Explore di sebelah kiri skrin.

Langkah 4: Membina Parameter

Sebelum kita dapat memulakan pengaturcaraan kita perlu menetapkan parameter bina.
Buat Konfigurasi
  1. Klik kanan pada nama projek dalam bar alatan projek.
  2. Dalam dialog Projek Properties pilih Manage Configurations ...
  3. Dalam dialog Tatarajah pilih Baru
  4. Dalam dialog Nama Konfigurasi Baru masukkan Default dan klik OK
  5. Dalam dialog Tatarajah pastikan Lalai dipilih dan klik Set Aktif
  6. Klik OK dalam dialog Konfigurasi
Tetapkan Sifat Konfigurasi
  1. Dalam dialog Projek Properties pilih "Conf: [Default]" dalam senarai Kategori
    1. Dalam kotak Peranti, taip nama peranti yang anda gunakan. Dalam kes saya PIC18F26K80
    2. Dalam senarai Alat Perkakasan pilih PICkit3
    3. Dalam Rangkaian Tool Compiler pilih XC8 (v ...) Di mana ... adalah versi yang telah anda pasang.
    4. Pilih Terapkan
  2. Di bawah Conf: [Lalai] pilih PICkit 3
    1. Untuk kategori Pilihan pilih Kuasa
    2. Periksa "Litar sasaran kuasa dari PICkit3
    3. Pilih Terapkan.
  3. Di bawah Conf: [Default] pilih pengkompil XC8
    1. Untuk kategori Pilihan pilih Pengoptimuman
    2. Tetapkan "Set Optimization" kepada "tiada"
    3. Pilih Terapkan
  4. Klik OK untuk menutup kotak dialog
Uji Konfigurasi Untuk menguji konfigurasi klik butang bersih dan membina (yang dengan tukul dan penyapu). Teks akan mula menatal dalam tetingkap output di bahagian bawah halaman. Sekiranya semuanya berjaya, teks ini akan mengatakan BUILD SUCCESSFUL (jumlah masa: ...) . Sekiranya anda mendapat ralat, kembali ke langkah ini untuk memastikan anda tidak terlepas apa-apa, dan semuanya telah digunakan.

Langkah 5: Tetapkan Bit Konfigurasi

Langkah seterusnya ialah menetapkan bit konfigurasi. Bit konfigurasi memberitahu MCU keadaan awalnya apabila ia diaktifkan. Ia digunakan untuk menetapkan sumber jam dan kelajuan, konfigurasi jam pengawas, dan ciri-ciri lain yang serupa. Bit konfigurasi bergantung pada peranti, jadi semak lembaran data untuk cip yang anda gunakan untuk maklumat lanjut.
  1. Dalam explorer projek mengembangkan Source Files dan configuration_bits.c terbuka
  2. Alih keluar semua teks di bawah baris #endif
  3. Perhatikan tab baru telah dibuka di bahagian bawah skrin
  4. Tetapkan bit yang diperlukan untuk projek anda. Oleh kerana ini bergantung kepada cip, semak lembaran data untuk maklumat lanjut tentang apa yang dilakukan oleh setiap orang. Sesetengah tetapan biasa ikut:
    1. Set Arahan Lanjutan - Perlu ditetapkan OFF apabila menggunakan templat
    2. Oscillator - Digunakan untuk memilih pemproses. Kecuali anda menggunakan kristal luaran, tinggalkan sebagai pengayun RC Dalaman. Lihat helaian data untuk konfigurasi pengayun lain. Nota: CLKOUT akan membolehkan debugging lebih mudah, dan perlu dihidupkan jika tersedia.
    3. PLL Enable - Akan membenarkan penggunaan masa depan PLL. Nota: ini tidak akan menghidupkan PLL, ia hanya akan membolehkannya. Adalah disyorkan untuk membolehkannya.
    4. Pemasa Pengawas Jam - Pemasa anjing menonton digunakan untuk memastikan pemproses tidak akan dikunci. Ia bagaimanapun menjadikannya lebih sukar untuk debug. Adalah disyorkan untuk mematikannya semasa pengaturcaraan pada mulanya, dan hanya membolehkannya selepas projek hampir selesai.
    5. Kod / Jadual Tulis / Membaca melindungi - Digunakan untuk melumpuhkan penulisan atau bacaan kepada beberapa ingatan tertentu. Tinggalkan semua orang yang cacat.
    6. Sekiranya tidak pasti tentang tetapan, biasanya selamat untuk meninggalkannya.
  5. Selepas semua bit konfigurasi telah ditetapkan, klik butang "Menjana kod sumber ke output" di bahagian bawah panel.
  6. Panel sekarang akan beralih ke tab Output. Pilih semua teks dalam tab ini dan salin ke papan klip
  7. Tampalkannya di bahagian bawah fail configuration_bits.c dan simpan sekarang.
  8. Bersihkan dan buat semula projek dengan mengklik ikon penyapu dan palu.
  9. Pastikan pembinaan berjaya. Semak juga untuk memastikan tiada ralat dalam output
Sekiranya semuanya berjalan lancar ke langkah seterusnya. Sekiranya terdapat ralat atau amaran yang membetulkannya sebelum bergerak.

Langkah 6: Konfigurasi Oscillator

Langkah seterusnya adalah untuk memulakan pengaturcaraan; Walau bagaimanapun, sebelum kita sampai ke kod aplikasi, kita mesti memprogramkan kod sistem. Kod sistem adalah fungsi tahap rendah seperti mengkonfigurasi pengayun dan fungsi kelewatan asas.

Menentukan Pengaturan

Sebelum kita dapat memprogram tetapan, kita mesti memilih kelajuan yang kita mahu jalankan. Untuk contoh ini saya akan menggunakan 16MHz kerana kebanyakan PIC boleh berjalan pada kelajuan ini. Untuk konfigurasi saya, saya akan menggunakan 4MHz postscaller dari HF-INTOSC, dan 4x PLL memberikan kekerapan output 4MHz * 4x = 16MHz
  1. Dalam lembaran data cari bahagian yang dilabelkan Konfigurasi Oscillator
  2. Perkara pertama yang disenaraikan dalam bahagian ini ialah Jenis Osilator. Jika anda menggunakan pengayun dalaman maka gunakan tetapan yang berkaitan dengan INTIO1
  3. Pada halaman berikutnya atau dua, anda akan dapati lukisan skematik pengayun sama seperti yang ditunjukkan. Ia berguna untuk mengesan isyarat pada lukisan ini untuk memastikan kelajuan yang betul dipilih.
  4. Langkah seterusnya adalah memprogramkan tetapan ini ke MCU. Ini dilakukan dengan menetapkan daftar. Daftar pertama yang ditetapkan adalah OSCCON.
    1. IDLEN - digunakan untuk mengawal tindakan arahan tidur. Boleh dibiarkan secara lalai.
    2. IRCF - Pemilihan osilator. Oleh kerana saya menggunakan HF-INTOSC / 4 (4MHz) saya perlu menetapkan ini kepada nilai binari sebanyak 101
    3. OSTS - Baca sedikit sahaja
    4. HFIOFS - Bacalah sedikit sahaja
    5. SCS - jam pilih bit. Oleh kerana saya menggunakan pengayun dalaman, saya akan menetapkan kepada 1x di mana x boleh menjadi 0 atau 1
  5. Senarai seterusnya ialah OSCCON2; Walau bagaimanapun, daftar ini kebanyakannya dibaca sahaja dan tidak penting pada ketika ini
  6. Daftar konfigurasi pengayun terakhir adalah OSCTUNE. Kami tidak akan menilai kekerapan untuk projek ini, namun kami mesti menggunakan daftar ini untuk menghidupkan PLL menggunakan bit PLLEN.

Memohon Tetapan

  1. Kembali ke MPLAB
  2. Dalam projek explorer di bawah Source Files open system.c
  3. Di bahagian bawah fail ini ialah fungsi ConfigureOscillator. Keluarkan komen dalam fungsi itu.
  4. Untuk menetapkan bit jenis pendaftaran dalam semua topi nama daftar, diikuti dengan bit perkataan huruf kecil dan kemudian tempoh dan nama bit.
  5. Untuk menetapkan bit mengikutinya dengan tanda yang sama. Untuk menggunakan jenis binary 0bXXXX di mana XXXX adalah nombor perduaan. Akhirnya tamat garis dengan setengah kolon.
  6. Tetapkan semua bit seperti yang ditentukan di atas untuk mendaftar OSCCON. Contoh: OSCCONbits.IRCF = 0b101;
  7. Lakukan yang sama untuk semua daftar pengayun diperlukan yang lain. Lihat di bawah untuk contoh fungsi ConfigureOscillator yang telah selesai.
  8. Apabila selesai membina dan periksa amaran / kesilapan

 / ** * Konfigurasikan sumber jam dan kelajuan * / tidak sah KonfigurasiOscillator (kosong) {OSCCONbits. IRCF = 0b101; OSCCONbits. SCS = 0b00; OSCTUNEbits. PLLEN = 0b1; } 

Langkah 7: Tunggu Fungsi Milli-Kedua

Salah satu fungsi yang paling berguna adalah wait_ms. Walau bagaimanapun, ini bukan fungsi dalam perpustakaan biasa, dan perlu diprogramkan oleh anda. Untuk pelaksanaan ini akan ada gelung yang akan memegang pemproses hingga waktu yang diberikan telah berlalu.

PIC18F microcontrollers memerlukan 4 jam siklus untuk melaksanakan satu baris kod pemasangan. Oleh itu, dengan jam 16MHz, garisan akan dilaksanakan pada 4 juta baris sesaat = 4000 garisan setiap miliaran kedua. Oleh kerana satu gelung akan mengambil satu arahan setiap kali untuk perbandingan, dan dua untuk operasi satu untuk badan gelung, ia akan berfungsi dengan sempurna. Kami hanya perlu untuk gelung untuk gelung 1000 kali setiap juta saat.
  1. Dalam system.c buat fungsi baru di bahagian bawah fail jenis void wait_ms (waktu uint16_t)
  2. Berikut adalah fungsi yang lengkap
 / ** * Tunggu beberapa juta saat menggunakan skema menunggu sibuk. * @param masa - masa di ms untuk menunggu. * / void wait_ms (uint16_t time) {timel panjang statik = 0; timel = time * 1000l; untuk (timel; timel -); // tiada keadaan permulaan, sementara masa adalah> 0, masa pengurangan setiap gelung} 
  1. Buka system.h dalam folder Fail Header dalam pelayar projek
  2. Pada akhir tambahkan baris wait_ms void (uint16_t); untuk prototaip fungsi.
  3. Tukar talian 8 dari 8000000L ke 16000000L
  4. Membina dan semak kesilapan / amaran

Langkah 8: Berkedip LED

Cara terbaik untuk menguji segala-galanya disiapkan dengan betul adalah untuk mengecat cahaya LED. Jika lampu berkelip pada kadar yang dijangka maka semuanya telah dikonfigurasi dengan betul. Dalam contoh ini LED disambungkan ke PORT A, Pin 0 (RA0 pada datasheet). Jika anda mempunyai LED anda disambungkan ke pin lain, gunakan daftar dan bit yang sesuai.
  1. Buka main.c dalam penampil projek di bawah fail sumber.
Fungsi void utama (tidak sah) adalah titik masuk utama program. Apabila kuasa MCU yang pertama di atas akan memasuki fungsi ini. Baris pertama memanggil fungsi ConfigureOscillator yang anda isi untuk menetapkan sumber dan kelajuan jam. Talian seterusnya memanggil InitApp, satu fungsi yang akan kami isi dalam masa yang singkat, dan akhirnya ia memasuki gelung tak terhingga. Oleh kerana tiada sistem operasi untuk berfungsi kembali, tiada panggilan balik pada akhir.
Fungsi siap sepatutnya seperti ini:
  1. Segera di atas gelung semasa menambah kod berikut.
    1. Tetapkan pin LED sebagai output - TRISAbits.TRISA0 = 0; / // menetapkan bit TRIS kepada 0 set sebagai output, tetapkan kepada 1 set sebagai input
  2. Di dalam gelung semasa menambah kod berikut
    1. Tetapkan LED ke OFF - LATAbits.LATA0 = 0; // bit LAT mengawal output pin. 0 = LOW, 1 = TINGGI
    2. Tunggu 1/2 saat - wait_ms (500);
    3. Tetapkan LED ke ON - LATAbits.LATA0 = 1;
    4. Tunggu 1/2 saat - wait_ms (500);
 void main (void) {/ * Konfigurasi pengayun untuk peranti * / ConfigureOscillator (); / * Menerapkan I / O dan Peripherals untuk aplikasi * / InitApp (); TRISAbits.TRISA0 = 0; / // set pin sebagai output sementara (1) {LATAbits.LATA0 = 0; // set pin LOW wait_ms (500); // tunggu 0.5 saat LATAbits.LATA0 = 1; / / set pin HIGH wait_ms (500); // tunggu 0.5 saat}} 
  1. Bina program dan periksa kesilapan atau amaran
  2. Pastikan PICkit disambungkan dengan betul kepada PIC dan komputer
  3. Klik butang peranti dan membuat program (butang di sebelah kanan butang bersih dan bina)
  4. Jika ditanya pilih PICkit 3 dan klik OK
  5. Apabila amaran menunjukkan pemeriksaan berganda anda mempunyai PIC yang betul di litar dan klik OK
  6. Jika amaran menunjukkan tentang ID Peranti Sasaran klik OK untuk mengabaikannya

Langkah 9: Membaca Nilai Analog

Setakat ini program itu boleh berkelipkan LED. Seterusnya membolehkan memberikan beberapa input pengguna. Kami akan menggunakan potensiometer untuk menghasilkan isyarat analog yang akan mengubah kelajuan LED. ADC mengambil voltan analog, dan menghasilkan nilai digital.
  1. Dalam pelayar projek buka user.c di bawah Source Files
  2. Di atas fungsi InitApp mencipta fungsi baru void init_adc(void)
  3. Masukkan kod berikut untuk memulakan modul ADC
 / ** * Menerapkan Analog ke Penukar Digital. * / tidak sah init_adc (void) {TRISAbits. TRISA1 = 0b1; / // set pin sebagai input ANCON0bits. ANSEL1 = 0b1; / // set pin sebagai analog ADCON1bits. VCFG = 0b00; / / set v + rujukan kepada Vdd ADCON1bits. VNCFG = 0b0; / / menetapkan v- rujukan kepada GND ADCON1bits. CHSN = 0b000; // masukkan input negatif kepada GND ADCON2bits. ADFM = 0b1; // betul membenarkan keluaran ADCON2bits. ACQT = 0b110; // 16 TAD ADCON2bits. ADCS = 0b101; // gunakan Fosc / 16 untuk ADCON0bits sumber jam. ADON = 0b1; / // menghidupkan ADC} 
  1. Seterusnya buat fungsi lain dengan segera selepas dipanggil uint16_t adc_convert(uint8_t channel)
 / ** * Menerapkan analog ke penukaran digital. * @param channel Saluran masukan ADC untuk digunakan. * @ semula Nilai penukaran. * / uint16_t adc_convert (channel uint8_t) ADRESL; / pulangkan hasilnya 
  1. Dalam fungsi InitApp tambah baris init_adc()
  2. Dalam file user.h tambahkan prototaip uint16_t adc_convert(uint8_t);
  3. Ubah utama untuk sepadan dengan yang berikut:
 void main (void) {uint16_t adc_value; // berubah untuk memegang keputusan penukaran ADC dalam / * Konfigurasi pengayun untuk peranti * / ConfigureOscillator (); / * Menerapkan I / O dan Peripherals untuk aplikasi * / InitApp (); TRISAbits. TRISA0 = 0; / // set pin sebagai output sementara (1) {LATAbits. LATA0 = 0; // set pin LOW adc_value = adc_convert (1); / / preform A / D penukaran pada channel 1 wait_ms (adc_value>> 2); // tunggu 0.5 saat LATAbits. LATA0 = 1; // set pin HIGH adc_value = adc_convert (1); / / preform A / D penukaran pada channel 1 wait_ms (adc_value>> 2); // tunggu 0.5 saat}} 
  1. Bina dan muat turun kod. Apabila anda menghidupkan POT kelajuan berkelip LED harus berubah

Langkah 10: Baca Nilai Digital

Seterusnya mari dapatkan input digital dari suis. Apabila suis dimatikan, kami akan mempunyai program melakukan apa yang telah dilakukan sepanjang masa, dan apabila suis pada program akan menyala pepejal LED sehingga suis dimatikan lagi.
  1. Untuk menetapkan pin sebagai input, tulis 1 kepada pin yang mendaftar bit TRIS - TRISAbits.TRISA2 = 1;
  2. Sekiranya ciri analog berkongsi pin, mungkin diperlukan untuk menetapkannya secara digital dengan membersihkan sedikit yang sesuai dalam daftar ANCONx
  3. Apabila menulis nilai kepada pin menggunakan daftar LAT; Walau bagaimanapun, apabila membaca nilai dari pin, gunakan PORT register - value = PORTAbits.RA2;
  4. Ubah utama kepada yang berikut:
 void main (void) {uint16_t adc_value; // berubah untuk memegang keputusan penukaran ADC dalam / * Konfigurasi pengayun untuk peranti * / ConfigureOscillator (); / * Menerapkan I / O dan Peripherals untuk aplikasi * / InitApp (); TRISAbits. TRISA0 = 0; / // set pin sebagai output TRISAbits. TRISA2 = 1; / // set pin sebagai input ANCON0bits. ANSEL2 = 0; / // set pin sebagai digital while (1) {if (PORTAbits RA2) // jika pin tinggi {LATAbits. LATA0 = 1; // tetapkan pin sebagai tinggi} lain // jika pin adalah rendah {// berkedip LATAbits LED. LATA0 = 0; // set pin LOW adc_value = adc_convert (1); / / preform A / D penukaran pada channel 1 wait_ms (adc_value>> 2); // tunggu beberapa kali LATAbits. LATA0 = 1; // set pin HIGH adc_value = adc_convert (1); / / preform A / D penukaran pada channel 1 wait_ms (adc_value>> 2); // tunggu beberapa saat}}} 

Iaitu ia! Anda kini mempunyai pengetahuan asas tentang cara membuat projek baru, membaca dan menulis ke pin digital, dan cara membaca dari pin analog. Ketiga ciri ini akan membolehkan anda melakukan 90% daripada projek menggunakan PIC di Internet. Juga, semasa anda meneruskan penerokaan anda ke dalam mikrokontroler PIC, anda akan mendapati bahawa kebanyakan ciri-ciri lain memerlukan langkah yang sangat serupa untuk mengkonfigurasi periferal, dan membaca dan hak untuk mendaftar.

Artikel Berkaitan