Monday, November 28, 2011

Tutorial 6.3 : C Source Code

Assalamualaikum semua,

Berkenaan dengan source code untuk tutorial 6.x (LCD), source code tersebut di bahagikan kepada beberapa bahagian untuk memudahkan pembelajaran yang akan datang. Saya buat dalam bentuk modular ( senang nak pakai n nak buang ).

Fail-fail C tersebut:

1. main.c --- program utama / bermula di sini.
2. Config_PIC16F887.c --- setting/config untuk PIC16F887
3. lcd.c --- setting untuk LCD
4. Set_IO_AllDigital --- untuk set semua pin Analog menjadi pin Digital IO.



main.c part1 ( klik untuk saiz yang lebih besar )


main.c part2 ( klik untuk saiz yang lebih besar )


Config_PIC16F887.c ( klik untuk saiz yang lebih besar )


lcd.c part1 ( klik untuk saiz yang lebih besar )


lcd.c part2 ( klik untuk saiz yang lebih besar )


lcd.c part3 ( klik untuk saiz yang lebih besar )


lcd.c part4 ( klik untuk saiz yang lebih besar )


Set_IO_AllDigital.c ( klik untuk saiz yang lebih besar )


Sekian, terima kasih untuk kali ini.

Insya Allah, bersambung ...

Tutorial 6.2 : Schematic

Assalamualaikum semua,

Disertakan schematic untuk tutorial 6.x ( LCD ).

Dalam schematic di bawah, pin VDD PIC mesti di sambung kepada punca +ve 5V DC bekalan kuasa dan pin VSS PIC di sambung ke Gnd bekalan kuasa.

Dalam schematic itu juga, bekalan DC 5v, V1 dan V1 sebenarnya boleh digabungkan, tak perlu pakai 2 bekalan kuasa 5V 2 unit (cuma dalam schematic tu, saya masukkan dua supply 5V ( V1 n V2 ) sebab tak nak buat sambungan yang panjang berjela).


Sila klik untuk gambar yang lebih besar


Insya Allah, bersambung ...

Thursday, November 24, 2011

Tutorial 6.1 : Hardware

Assalamualaikum semua.

Board/papan litar yang akan digunakan dalam tutorial 6.x adalah seperti berikut:


1. PIC Board v3 ... klik gambar untuk saiz yang lebih besar.


2. PIC Board v3 (tanpa PIC) ... klik gambar untuk saiz yang lebih besar.




3. LED n Button Board v3 ... klik gambar untuk saiz yang lebih besar.



4. LCD board ... klik gambar untuk saiz yang lebih besar.

5. LCD Board ( pandangan depan ) ... klik gambar untuk saiz yang lebih besar.


Insya Allah, tutorial ini akan bersambung bila saya ada kelapangan ...

Saturday, November 19, 2011

Tutorial 6.0 : LCD

Assalamualaikum semua,

Tutorial seterusnya berkenaan dengan penggunaan LCD bersama PIC. Untuk tutorial ini, PIC board v3 akan digunakan disebabkan ianya lebih ringkas dan kemas.

Pada sesiapa yang menggunakan PIC board v1 / PIC board v2, tutorial ini juga boleh digunakan tanpa sebarang masalah.

Board/papan litar lain yang terlibat dalam tutorial ini adalah LED n Button Board v3 selain LCD board.

PIC board v3, LED n Button board v3 dan LCD board akan di terangkan dalam posting yang akan datang. (Insya Allah, bila ada kelapangan saya akan upload dan terangkan board versi baru ).

Sekian. Terima kasih.

Sunday, November 13, 2011

Tutorial 5.5 : Final ( Video )

Alhamdulillah, akhirnya video tu dapat juga di rakamkan.

Saya menggunakan board-board versi baru untuk memudahkan saya dalam menyediakan tutorial - tutorial yang akan datang.

Board- board versi baru, insya allah akan di ulas/diceritakan dalam posting yang akan datang.


Susunan demo untuk tutorial 5.x



Susunan demo yang bertanda.





Sekian terima kasih.

Tuesday, November 8, 2011

Tutorial 5.4 : Penerangan ( Source Code )

Assalamualaikum semua,

Pertama sekali, saya meminta berbanyak maaf atas kelewatan menyambung tutorial v5.x kali ini.

Ok saya akan terangkan fungsi souce code seperti berikut:

#include < pic.h >

Arahan ini mesti ada dan perlu berada di barisan paling atas/awal dalam setiap fail C untuk hitech c. '#include' adalah untuk memasukkan header 'pic.h' semasa proses compile di jalankan. Proses compile adalah proses untuk menukarkan bahasa C kepada bahasa mesin/hex code. Hanya bahasa mesin/hex code akan difahami oleh micro controller PIC dan PIC akan menjalankan fungsi-fungsi yang terkandung dalam hex code tadi.

fail 'pic.h' mengandungi ringkasan-ringkasan / alamat hardware di dalam PIC ( seperti alamat PORTA atau alamat PORTC.1 dan seterusnya ). Untuk kefahaman lanjut, sila buka fail 'pic.h' menggunakan MPLAB IDE atau notepad.


__CONFIG(0x2FE4);
__CONFIG(0x3FFF);


Ini adalah config untuk PIC. Sila rujuk tutorial 4.x untuk kefahaman yang lebih terprinci.


#define BUTTON1 RC1

Ini arahan untuk mentakrifkan/menamakan/aliaskan hardware PIC ( dalam kes ini adalah PORTC.1 / RC1 ) kepada nama lain iaitu 'BUTTON1'. Di dalam program ini, kita akan meng
gunakan nama BUTTON1 sebagai gantinama kepada 'RC1'.

Kelebihan menggunakan gantinama adalah kita boleh letak nama yang mempunyai maksud/menjelaskan fungsi tertentu dan juga jika kita hendak tukar pin yang lain (katakan jika tak mahu guna port RC1 dan ingin mengubahkan kepada port RC0), kita hanya perlu menukarkan arahan di atas sahaja ( kepada #define BUTTON1 RC0 ) dan isi program yang lain tidak perlu dipinda.


main(void)
{
..... apa-apa arahan/semu arahan
}

Ini adalah fungsi di mana setiap fail C akan bermula ( semua bahasa C termasuklah Hitech C, CCS C, mikro C dan sebagainya ).

Sebenarnya fungsi 'main' yang standard adalah seperti dibawah:

void main(void)
{
..... apa-apa arahan/semu arahan
}

Oleh kerana 'void' itu bermaksud secara lebih kurang adalah 'abai' maka fungsi main ini boleh juga di ringkas seperti di bawah:

main( )
{
..... apa-apa arahan/semu arahan
}


Untuk fungsi dalam bahasa C, saya akan sentuh lebih mendalam dalam tutorial-tutorial yang seterusnya ( dengan menggunakan contoh-contoh supaya senang faham ).


unsigned int i;

Untuk set pemboleh i sebagai integer tanpa sign. Bila i diset seperti ini, i boleh dimasukkan dengan nilai 0 sehingga nilai 65,535. Jika di setkan sebagai :

signed int i;

Ini bermaksud/diset i bernilai -32,768 sehingga +32,767. Sila rujuk url di bawah untuk kefahaman lebih terprinci.

http://www.ucblueash.edu/koehler/comath/13.html


ANSEL = 0;
ANSELH = 0;


ANSEL adalah ringkasan kepada Analog Select untuk byte yang rendah (lower byte) dan ANSELH adalaha Analog Select Higher Byte. Insya Allah, saya akan sentuh lebih lanjut berkenaan dengan ANSEL dan ANSELH di dalam tutorial untuk ADC ( Analog to Digital Converter ) yang akan datang berserta dengan contoh untuk kefahaman yang lebih mendalam.

Di dalam tutorial ini, kita setkan ANSEL dan ANSELH = 0 adalah untuk mematikan/disable fungsi ADC untuk pin-pin tertentu ( pin yang berkongsi fungsi analog ... contoh pin A0/AN0 .. AN0 adalah analog 0/pin analog yang pertama). Jika tidak di matikan fungsi Analog, pin-pin yang berkenaan tidak dapat berfungsi dengan normal sebagai masukan/keluaran Digital (Digital I/O).


TRISD = 0;
PORTD = 0;

TRISD = 0 .... bermaksud PortD ( RD0 - RD7 ) diset sebagai output ( TRISD = 0 = 0b00000000 = 0x00). 0b .. bermaksud binary ( iaitu nilai 0 atau 1 ), 0x ... bermaksud hex/perenambelasan ( nilai 0 - F ). Jika TRISD = 1 = 0b00000001 = 0x01 ... ini bermaksud hanya pin RD0 diset sebagai digital input manakala RD1 - RD7 diset sebagai digital output. Secara mudahnya jika 0 bermaksud diset sebagai (o)utput (digital output) dan jika 1 bermaksud diset sebagai (i)nput ( digital output ). Bila sesuatu port diset sebagai digital input, port tersebut akan menerima input samada nilai 0 ( 0 volt ) atau 1 ( 2.2V - 5v ). Sila rujuk datasheet untuk keterangan lanjut berkenaan voltan setara untuk nilai 0 dan nilai 1.

Manakala PORTD =0 bermaksud PORTD dengan nilai 0 = 0b00000000 = 0x00 ( semua pin RD0 - RD7 ... 0 volt ) ... dengan kata lain, semua LED yang bersambung kepada PORTD akan padam ( sebab 0 volt ). Jika PORTD = 1 = 0b00000001 = 0x01 ... maka LED yang disambung ke pin RD0 akan menyala manakala LED-LED yang bersambung ke RD1 - RD7 padam.

TRISB = 15;
PORTB = 0;


TRISB = 15 = 0b00001111 = 0x0F ... bermaksud pin RB4 - RB7 diset sebagai digital output dan pin RB0- RB3 di set sebagai digital input ( terima nilai 0 atau 1 ).

PORTB = 0 = 0b00000000 = 0x00 ... semua LED yang bersambung ke RB0 - RB3 padam. Pin RB4- RB7 tidak terjejas.


for(;;) {
.... arahan-arahan lain
....
}

Satu kaedah untuk loop tanpa henti selain menggunakan while(1) { ... }.


if(BUTTON1 == 1) // No. 1
{
PORTD = 0b10101010; // No. 2
for(i = 50000 ; --i ;) continue; // No. 3
PORTD = 0; // No. 4
}

Arahan ' if(BUTTON1 == 1)' rujuk no. 1, bermaksud jika Button1 = 1 maka arahan - arahan dalam { ... } semuanya akan dilaksanakan oleh microController PIC ( PIC ) dan sebaliknya.

Button1 = 1 bila butang yang bersambung dengan port RC1 ditekan. Bila butang tersebut ditekan, maka isyarat 5V akan di masukkan ke Port RC1 dan bila terdapat isyarat 5V di port tersebut, PIC akan menyatakan bahawa masukan di port RC1 adalah 1. Button1 = RC1 = 1.

Rujuk no. 2, LED yang di sambung kepada PortD ( RD0 - RD7) akan menyala berselang seli ( RD7 = 1 = LED D1 = menyala, RD7 = 0 = LED D2 = padam. RD7 = 1 = 5V (yang menyebabkan LED D1 menyala)

No 3 sebagai delay dengan cara tolak nilai 1 satu demi satu sehingga nilai = 0. Kemudian pergi ke arahan seterusnya.

No 4 setkan PortD = 0 = 0b00000000 = semua LED D1 - D8 = padam.


if(RB0 == 1)
{
PORTD = 0b00001111; // No. 1
for(i = 50000 ; --i ;) continue;
PORTD = 0;
}


No. 1 setkan portD = 0b00001111 = LED D1 - D4 menyala dan D5 - D8 padam. Yang lain adalah sama prinsip dengan yang sebelumnya.


if(RB1 == 1)
{
PORTB = 0b11110000; // No. 1
for(i = 50000 ; --i ;) continue;
PORTB = 0; // No. 2
}


No.1 ... LED di PortB.7/RB7 sehingga RB4 akan menyala sebab TRISB = 0b00001111 (hanya RB7-RB4 diset sebagai output dan selainnya sebagai input)

No.2 ... PORTB = 0 = 0b00000000 - semua LED (port RB7 - RB4) di PORTB padam. RB3-RB0 tak terjejas sebab ia diset sbg input/masukan

Sekian terima kasih atas kunjungan semua.