Showing posts with label Tutorial 4. Show all posts
Showing posts with label Tutorial 4. Show all posts

Wednesday, February 23, 2011

Tutorial 4.4: PIC Configuration - Penerangan

Assalamualaikum semua,

Alhamdulillah saya berkesempatan untuk meng update blog ini untuk siri 4.x. Tutorial 4.4 adalah yang terakhir dalam siri 4.x ini.

Harap tutorial ini dapat membantu sesiapa yang ingin belajar mikro controller PIC dan jika ada soalan, silakan kemuka di chat box (menu sebelah kiri) atau send email ke allpicproject@gmail.com.

Selamat membaca.

Terima kasih.


1. Paparan standard menu 'PIC Configuration'


2. FOSC : Oscillator Selection Bits – untuk memilih jenis clock yang digunakan oleh PIC

RC – Clock dijana oleh litar RC (Perintang dan Capacitor) dan dimasukkan ke PIC melalui pin RA7 manakala pin RA6 akan menghasilkan clock tersebut untuk kegunaan alatan luaran (external clock for other usage).

RCIO - Clock dijana oleh litar RC (Perintang dan Capacitor) dan dimasukkan ke PIC melalui pin RA7 manakala pin RA6 berfungsi sebagai normal I/O ( masukan /keluaran).

INTOSC – Clock dalaman PIC itu sendiri ( kelajuan sehingga 8Mhz) manakala pin RA6 akan menghasilkan clock tersebut untuk kegunaan luaran dan pin RA7 berfungsi sebagai normal I/O.

INTOSCIO – Clock dalaman PIC itu sendiri ( kelajuan sehingga 8Mhz ) manakala pin RA6 n RA7 berfungsi sebagai normal I/O.

EC – Clock dari luar (dari timer luar atau sumber luar) dan dimasukkan ke dalam PIC melalui pin RA7 dan pin RA6 berfungsi sebagai normal I/O.

HS – Clock kelajuan tinggi menggunakan Crystal (dalam kes ini Crstal yang digunakan = 19.660800 Mhz) dan di sambungkan kepada pin RA6 n RA7.

XT – Clock kelajuan biasa menggunakan Crystal (biasanya 4Mhz atau 1Mhz)

LP – Low power/kelajuan rendah menggunakan Crystal ( contoh 32 kHz )

Rujuk datasheet PIC16F887 bahagian 4.0 untuk maklumat lanjut.

Dalam pembelajaran di blog ini, setting ini di set kepada ‘HS’


3. WDTE : Watchdog Timer Enable Bit

Secara ringkasnya fungsi Watchdog Timer – WDT (jika di set ‘WDT enabled’) adalah untuk me ‘reset’ kan PIC jika PIC hang / stuck semasa beroperasi secara uutomatik. Ini sangat sesuai jika gadget PIC tersebut berada di luar kawasan (tiada manusia yang akan me ‘reset’ kan PIC tersebut secara manual). WDT akan me ‘reset’ kan PIC bila mana pemasa (timer) WDT ‘overflow’ / time-up (lebih kurang sampai nilai tertentu).

Jika setting ini di ‘enable’ (WDTE Enabled), adalah perlu ada dalam software/firmware, satu routine di dalam PIC tersebut untuk sentiasa me ‘reset’kan WDT ini supaya WDT tidak akan me ‘reset’ PIC secara tiba-tiba ( bila tiba masa WDT overflow/time-up) .

Kegagalan me ‘reset’ WDT di dalam PIC (melalui software/firmware) akan menyebabkan WDT tersebut akan me ‘reset’ PIC tersebut walaupun PIC itu beroperasi secara normal (tidak hang / stuck ).

Dalam pembelajaran di blog ini, setting ini di set kepada ‘WDT disabled and can …. ‘ (jadi tak perlu tulis routine dalam software/firmware PIC untuk sentiasa me ‘reset’ WDT.


4. PWRTE : Power-up Timer Enable Bit

Setting ini ( PWRT enabled) berfungsi untuk memberi tempoh masa tertentu supaya sumber bekalan PIC stabil sebelum PIC mula beroperasi manakala ‘PWRT disabled’ adalah sebaliknya.

Dalam pembelajaran di blog ini, setting ini di set kepada ‘PWRT enabled’


5. MCLRE : RE3/MCLR pin function select bit

MCLR adalah ‘master clear’ atau lebih di kenali sebagai ‘reset’. Jika pin ini ( pin RE3/MCLR iaitu pin no. 1) di sambung ke ‘ground’ PIC akan berada dalam keadaan ‘reset’.

Jika setting ini ( RE3/MCLR pin function is MCLR) digunakan, maka pin ini ( pin no. 1) mestilah di sambung ke 5V+ melalui perintang 10k ( ‘pull-up’) supaya PIC boleh beroperasi ( bukan dalam keadaan ‘reset’). Biasanya pin ini juga di sambung ke ‘ground’ melalui butang tekan / push button untuk me ‘reset’ PIC secara manual.

Jika setting ini ( ‘RE3/MCLR pin function is digital input … ‘) di gunakan, maka pin RE3/MCLR berfungsi sebagai normal masukan dan tidak boleh berfungsi untuk me ‘reset’ PIC. ( Sila OFF/ON sumber kuasa PIC untuk ‘reset’ PIC).

Dalam pembelajaran di blog ini, setting ini di set kepada ‘RE3/MCLR pin function is MCLR’

6. CP : Code Protection bit

Setting ini ( Program memory code protection is enabled) akan melindungi code/firware dalam PIC tersebut daripada di lihat/baca ( melalui programmer / PICkit2 ).

Setting ini ( Program memory code protection is disabled), membolehkan code dalam PIC dibaca dengan programmer / PICkit2.

Dalam pembelajaran di blog ini, setting ini di set kepada ‘Program memory code protection is disabled’


7. CPD : Data Code Protection bit

Setting ini ( Data memory code protection is enabled) akan melindungi data dalam PIC tersebut daripada di lihat/baca ( melalui programmer / PICkit2 ).

Setting ini ( Data memory code protection is disabled), membolehkan data dalam PIC dibaca dengan programmer / PICkit2.

Dalam pembelajaran di blog ini, setting ini di set kepada ‘Data memory code protection is disabled’


8. BOREN : Brown Out Reset Selection bits

Secara ringkasnya BOREN (jika di enabled) ini adalah berfungsi untuk me ‘reset’ PIC (berada dalam keadaan reset sehingga bekalan kuasa normal) jika sumber kuasa PIC kurang daripada paras tertentu iaitu di bawah/kurang dari 4.0V atau 2.1V bergantung setting di step x)

Ini adalah bertujuan supaya PIC dapat beroperasi dalam keadaan sempurna (tidak melakukan kesilapan disebabkan bekalan kuasa PIC tidak stabil).

Dalam pembelajaran di blog ini, setting ini di set kepada ‘BOR enabled’


9. IESO : Internal External Switchover bit

Setting ini (Internal/External Switchover mode is enabled) membenarkan clock yang digunakan PIC (contohnya jika crystal gagal berfungsi dengan baik) di tukar kepada internal clock ( clock dalaman PIC ) dan sebaliknya.

Dalam pembelajaran di blog ini, setting ini di set kepada ‘External Switchover mode is enabled’


10. FCMEN : Fail-Safe Clock Monitor Enable bit

Setting ini (Fail-Safe Clock Monitor Enable is enabled) memerhati / monitor status clock yang digunakan oleh PIC samada ia berfungsi dengan baik atau sebaliknya.

Dalam pembelajaran di blog ini, setting ini di set kepada ‘Fail-Safe Clock Monitor Enable is enabled’


11. LVP : Low Voltage Programming Enable bit

Setting ini (RB3/PGM pin has PGM function, low voltage programming enabled) bermaksud membenarkan PIC ini di program menggunakan kaedah ‘low voltage programming’ iaitu menggunakan voltage 5V sahaja berbanding kaedah ‘high voltage programming’ ( PICkit2 menggunakan kaedah ini) iaitu 12.5V – 13.0V.

Jika setting di atas digunakan, pin RB3/PGM tidak boleh digunakan sebagai normal I/O dan ini merugikan jika banyak input/output diperlukan dalam sesuatu projek PIC. Dengan setting ini juga, pin RB3/PGM mestilah di ‘pull-up’ jika tidak menggunakannya sebagai pin ‘low voltage programming’ supaya PIC tidak berada dalam mod programming.

Jadi jika guna setting ini (RB3 pin has digital I/O, HV on MCLR must be used for programmimg) pin RB3 tidak dibazirkan dan akan berfungsi sebagai normal I/O dan untuk program PIC, kaedah biasa iaitu kaedah ‘high voltage programming’ (ie. Guna PICkit2 programmer) boleh digunakan.

Dalam pembelajaran di blog ini, setting ini di set kepada ‘RB3 pin has digital I/O, HV on MCLR must be used for programmimg’


12. BOR4V : Brown-out Reset Selection bit

Dalam pembelajaran di blog ini, setting ini di set kepada ‘Brown-out Reset set to 4.0V’

13. WRT : Flash Program Memory Self Write Enable bits.

Dalam pembelajaran di blog ini, setting ini di set kepada ‘Write protection off’ (tidak digunakan dalam pembelajaran di blog ini).


14. Paparan Configuration yang akan digunakan dalam seluruh tutorial di blog ini
(kecuali atas sebab-sebab tertentu).



Untuk lebih lanjut/terperinci, sila rujuk datasheet PIC16F887 bahagian 14.1 (seperti gambar dibawah).



Cara-cara lain untuk set config untuk PIC


1. Config code (Hex code) dimasukkan terus ke dalam program C (rujuk arahan dalam kotak merah).

Bila kita masukkan kod config PIC terus ke dalam program C, setting yang kita set di menu 'Configuration bits' ((tutorial setting PIC yang sebelum ini) akan di abaikan dan PIC akan guna config code dalam program C tersebut dalam proses compilation (process tukar bahasa C kepada Hex code).

Saya akan gunakan keadah ini dalam tutorial saya yang seterusnya


2. 1. Config code (code yang difahami manusia) dimasukkan terus ke dalam program C (rujuk arahan dalam kotak merah).

Cara ini pun boleh. Cara ini mudah di fahami oleh user/manusia. Bila config code di set dengan cara ini, setting yang di set di menu 'Configuration Bits' akan di abaikan.

Sila rujuk file pic16F887.h di dalam Hi-Tech C folder (installation folder di drive C:\) untuk arahan-arahan lain.




Sekian, terima kasih.

Tuesday, January 25, 2011

Tutorial 4.3: LED.c - Penerangan

Assalamualaikum semua,

Pada kali ini, saya akan menerangkan secara ringkas tentang isi kandungan file LED.c.

Kepada sesiapa yang tidak jelas, sila emailkan kepada saya di allpicproject@gmail.com atau letakkan message anda di CBOX di sebelah kiri blog.






1. #include
  • Mesti ada dalam setiap file.c (hitech.c) dan mesti berada di baris paling atas.
  • Kegunaanya adalah untuk memuatkan/mendapatkan maklumat-maklumat penting bagi microcontroller seperti alamat pin, alamat port, pin naming dan lain-lain.
  • Untuk pengetahuan lanjut, sila rujuk file pic.h di tempat hitech.c di install.

2. /*
3. * LED Demo program
4. * Running LEDs on Port D
5. */
  • Ini adalah komen-komen pengenalan dan info. Setiap komen mestilah di dahulukan dengan ‘/*’ dan di tamatkan dengan ‘*/’. Komen jenis ini boleh berada dalam beberapa baris seperti contoh di atas.
  • Tanda komen ‘//’ dalam ‘// Set varible I n J sebagai unsign int (nilai 0 - 65k)’ adalah tanda komen untuk satu baris sahaja. Jika komen tersebut perlukan 2 baris maka setiap baris mestilah dimulakan dengan ‘//’

6. main(void){
17 }
  • Rujuk no. 6, ini adalah function utama ( function ini mesti nama ‘main(void)’. Setiap file.c yang utama mesti ada function ini. Di function inilah setiap program c akan bermula.
  • Rujuk no. 17, ‘}’ ini adalah tanda penutup bagi function ‘main(void).
  • Arahan-arahan bahasa C yang berada di dalam ‘{‘ dan ‘}’ akan di jalankan / run.


7. unsigned int I, J; // Set varible I n J sebagai unsign int (nilai 0 - 65k)
  • Int adalah singkatan bagi integer
  • Baris ini menetapkan pembolehubah I dan J sebagai pembolehubah unsigned integer
  • Nilai unsigned integer adalah 0 à 65,535
  • Nilai integer (bukan unsigned) adalah -32,768 à 32,765
  • Setiap baris arahan mesti di akhiri dengan tanda ‘;’

8. TRISD = 0; /* Set semua Pin Port D sebagai output */
  • PIC16F887 mempunyai lima jenis port iaitu PORTA, PORTB,PORTC, PORTD dan PORTE (sila rujuk datasheet untuk maklumat terperinci)
  • Bilangan pin dalam setiap PORT tak sama (rujuk datasheet)
  • PORTD terdiri dari 8 bit iaitu RD0 à RD7 dan RD7 adalah nilai bit yang terbesar (MSB)
  • Nilai PORTD dari 0 à 255 atau 0b00000000 à 0b11111111 (format binary) atau 0x00 à0xFF (format hexadecimal)
  • TRISD adalah gabungan TRIS dan PORTD
  • TRIS adalah arahan untuk set sesuatu port sebagai masukan/keluaran (input/output)
  • TRISD = 0 adalah sama dengan TRISD = 0b00000000 (0bxxxxxxxx adalah format binary)
  • TRISD = 255 çè TRISD = 0b11111111 çè TRISD = 0xFF (format hexadecimal)
  • TRISD = 0 = 0b00000000 bermaksud semua bit/pin PORTD di set sebagai keluaran/output. 0 à Output / keluaran , 1 à Input / masukan
  • Jika TRISD = 0b10000000, bermaksud hanya bit RD7 / bit D7 di set sebagai Input dan selainnya adalah sebagai Output.
  • Setiap baris arahan mesti di akhiri dengan tanda ‘;’

9. J = 1; // Set nilai default/awal J = 0
  • Set nilai J bersamaan 1.
  • Setiap baris arahan mesti di akhiri dengan tanda ‘;’


10 while(1){ // Loop selama-lamanya
16 } // Penutup untuk 'while' syntax.
  • Arahan ‘while(1){ ……} ‘ melaksana semua arahan-arahan yang berada di dalam ‘{ … }’ tanpa henti / selama-lamanya.

11 PORTD = J; // Set portD dengan nilai J
  • Setkan nilai PORTD bersamaan dengan nilai J
  • Setiap baris arahan mesti di akhiri dengan tanda ‘;’

12 for(I = 65000 ; --I ;) continue; // Sebagai delay
13 for(I = 65000 ; --I ;) continue; // Sebagai delay - satu lagi delay
  • Ini adalah arahan ‘for … next’ atau ‘for … buat sesuatu … ulang sehingga no 0 atau no tertentu.
  • Dalam kes ini, hanya di set sebagai masa lengah / delay sahaja.


14 J = J * 2; // Nilai J di darab dengan 2.
  • Setiap baris arahan mesti di akhiri dengan tanda ‘;’


15 if(J > 128) J = 1; // Set nilai J = 1 jika nilai J > 128.
  • Setiap baris arahan mesti di akhiri dengan tanda ‘;’

Bersambung ....

Sunday, January 23, 2011

Tutorial 4.2: Programkan Hex code ke dalam PIC

Assalamualaikum semua.

Hari ni saya nak tunjukkan macammana kita nak masukkan/ burn kan firmware/hex code yang telah dihasilkan dalam tutorial 4.1 ke dalam PIC16F887 di dalam board PIC v2 ( PIC board v2). Bila PIC16F887 telah dimasukkan dengan hex code dan disambung dengan supply (8V -13V), maka PIC board v2 akan mempamirkan LED 'running light'.


Langkah-langkah adalah seperti berikut:


1. Pilih jenis programmer yang akan digunakan ... dalam kes ini adalah PICkit2


2. Sebelum tekan butang 'Re-establish PICkit 2 .... ' (dalam bulatan merah)
pastikan PICkit2 disambung ke PC dan PIC board v2 telah di sambung
ke PICkit2(rujuk 'DIAGRAM - macammana nak program PIC').


3. PICkit2 dan PIC16F887 ( dalam PIC board v2) telah di kesan.
Jika tiada message seperti di atas (setelah PICkit2 n PIC board v2
disambung ke PC), sila periksa semua sambungan dan sila
ulangi langkah 2.


4. Klik icon 'Program the target device' (dalam bulatan merah) untuk
memprogram PIC16F887 dengan hex code hasil daripada tutorial 4.1.


5. Hex code telah berjaya di program ke dalam PIC16F887.







Friday, January 21, 2011

Tutorial 4.1: Set PIC configuration

Assalamualaikum semua.

Dalam tutorial 4.0, saya telah menunjukkan macam mana nak mula tulis program c dengan menggunakan 'Project Wizard'.

Jadi untuk kali ini, saya akan tunjukkan cara untuk menentukan konfigurasi (configuration) untuk PIC. Secara ringkasnya, konfigurasi ni perlu di setkan adalah menentukan cara PIC berfungsi. Sebagai contoh, PIC nak guna 'clock' secara dalaman ataupun dari sumber luar dan sebagainya.

Saya juga akan tunjuk secara gambarajah supaya senang ikut dan senang faham. Kalau ada kemusykilan, sila email ke allpicproject@gmail.com atau tinggalkan pesanan di CBOX sebelah.




1. Di menu, tekan 'Configure' dan pilih 'Configuration Bits'


2. Uncheck checkbox ( dalam bulatan merah)


3. Di column 'Setting' tukarkan semua yang berada dalam kotak merah supaya sama dalam gambarajah di atas. Bila dah tukar di bahagian 'Setting' , no yang terdapat di column 'Value' mesti sama dengan nombor yang ada di gambar atas.


4. Check checkbox seperti dalam kotak merah paling atas (Configuration Bits set in code).


5. Klik butang merah 'Re-build with compiler ..... ' ( dalam kotak merah) untuk compile/tukarkan program c (LED.c) kepada hex/binary code
(bahasa yang microcontroller/PIC akan faham)


6. Berjaya 100% ... Program C (LED.c) telah berjaya di compile
(ditukarkan kepada hex code/binary code)
7. Hex code hasil compilation ( Demo02_LED.hex)


Bersambung .....

Tutorial 4.0: Program C untuk 'ON' kan LED

Assalamualaikum semua,

Ok, oleh kerana lama sangat saya tinggalkan tutorial ni, saya rasa lebih baik saya mula balik dengan program C (dalam hi-tech C) yang pertama (cara nak install Mplab, sila rujuk post yang terdahulu).

Ok, dalam tutorial nie, saya akan program C untuk nyalakan LED secara berturutan (running light). Program nie dibuat simple supaya senang ikut dan tak banyak perlu fikir untuk permulaan nie.

So, saya akan menggunakan 'project wizard' supaya senang ikut dan senang faham. So saya start dari mula.




1. Run/double click 'Mplab IDE v8.63' (sekarang saya guna
version 8.63, version yang terdahulu pun ok).


2. Default MPLAB IDE.


3. Di menu, klik 'Project' dan pilih 'Project Wizard'.


4. Klik 'Next'.


5. Pilih PIC microcontroller 'PIC16F887'


6. Di 'Active Toolsuite', pilih 'HI-TECH Universal Toolsuite'

7. Klik 'browse' dan namakan projek sebagai 'Demo02_LED'
di dalam folder 'D:/Allpicproject/Demo02_LED'


8. Lokasi dan nama project disimpan


9. Tekan Next


10. Tekan butang 'finish' ... selesai.


11. Arrange kan kedudukan ruang MPLAB seperti kat atas.
(Saya akan menggunakan susunan tersebut untuk tutorial ini)


12. Right click atas 'Demo02_LED.mcp' dan pilih 'Add new file'


13. Buatkan main folder 'Allpicproject' dan subfolder 'Demo02_LED'
dan namakan file tersebut sebagai LED.c ... tekan butang 'Save'


14. Copy program C di bawah dan paste kan ke dalam ruang 'LED.c
(huraian tentang program, saya akan bagi kemudian)


#include

/*
* LED Demo program
* Running LEDs on Port D
*/

main(void)
{
unsigned int I,J; // Set varible I n J sebagai unsign int (nilai 0 - 65k)

TRISD = 0; /* Set semua Pin Port D sebagai output */
J = 1; // Set nilai default/awal J = 0

while(1){ // While loop selama-lamanya
PORTD = J; // Set portD dengan nilai J
for(I = 65000 ; --I ;) continue; // Sebagai delay
for(I = 65000 ; --I ;) continue; // Sebagai delay - satu lagi delay
J = J * 2; // Nilai J di darab dengan 2.
if(J > 128) J = 1; // Set nilai J = 1 jika nilai J > 128.
} // Penutup untuk 'while' syntax.
} // Penutup untuk 'main(void)' function.






15. Klik 'save file' (gambar disket) untuk save kan file LED.c



16. Save projek ... clik kanan di 'Demo02_LED.mcp' dan pilih 'Save'
( tanda '*' menunjukkan projek ni belum save dan bila dah
di save, tanda tersebut tiada)



17. Ok, semua siap ( dah save semua file 'LED.c' dan Projek 'Demo02_LED.mcp)


Bersambung ..........