Thursday, December 1, 2011

Tutorial 6.4 : Penerangan Source Code

Assalamualaikum semua,

Kali ini saya akan membincang/menerangkan fungsi/arahan dalam source code untuk tutorial 6.x.

Untuk source code/part 'main.c', rasanya dapat difahami dengan mudah. Cuma saya ada beberapa komen untuk beberapa bahagian tertentu sahaja. Jika ada sebarang pertanyaan yang lain, sila tinggalkannya di bawah/bahagian komen atau sila komen di SHOUT BOX ( disebelah kanan blog ni.). Nak email kepada saya pun ok.

Saya cuma nak komen sedikit di main.c part 1. Sila rujuk gambar 1 di bawah:

Gambar 1 : main.c part 1

Untuk no. 1,2,3 adalah fail-fail yang kita masukkan/digabung ke dalam program main.c secara menggunakan arahan 'include'. Kebaikannya ialah kita boleh fail-fail ini ke dalam program lain tanpa perlu menulis semula dan boleh juga membuangnya dari program main.c dengan menghapus baris yang berkenaan.

Tanpa kaedah in, kita mesti menulis semula isi-isi dalam fail-fail tersebut ke dalam program main.c dan begitu juga kalau membuangnya ... mesti la kita hapuskan kesemua baris-baris dalam fail-fail tersebut di program main.c.

Untuk n0. 4, sila rujuk fail ldc.c ( ldc.c part 1) ... dan di dalam fail tersebut terdapat arahan '#define BarisAtas 0' ... ini bermaksud BarisAtas bersamaan dengan nilai 0. Arahan ' lcd_goto(BarisAtas); ' bermaksud memanggil subroutine ' void lcd_goto(unsigned char pos) ' di dalam fail ldc.c ( rujuk ldc.c part 3 ) dengan memberikan nilai ' pos ' = nilai ' BarisAtas ' = 0 . Harap dapat faham. Jika kurang faham, sila komen atau email kepada saya.

Untuk no. 5 iaitu ' lcd_puts("Suis Btn0") ' memanggil subroutine ' void lcd_puts(const char * s) ' di fail ldc.c ( rujuk ldc.c part2 ) . Di sini, alamat permulaan untuk perkataan "Suis Btn0" telah di masukkan ke dalam pointer s ( * s adalah alamat pointer s ... kalau tak faham, tak mengapa sebab ini tak menjejaskan pembelajaran kita. Jika nak tahu lebih lanjut, sila rujuk bab 'pointer' dalam mana-mana buku bahasa C ).

Satu lagi, jika jumpa subroutine bermula dengan perkataan 'void' contohnya ' void lcd_goto(unsigned char pos) ' ... ini bermaksud panggilan kepada subroutine itu untuk memproses arahan-arahan dalam subroutine tersebut sahaja. Ini termasuklah arahan ' Set_IO_AllDigital(); ' ... memanggil subroutine ' void Set_IO_AllDigital(void) ' dan melakukan arahan-arahan yang terdapat di dalamnya. Untuk perkataan ' void ' yang berada di dalam kurungan ..... AllDigital(void) , ini bermaksud tiada nilai yang di hantar kepada subroutine tersebut berlainan dengan ' void lcd_goto((unsigned char pos) ' ... yang memerlukan nilai yang untuk pembolehubah 'pos' .


Gambar 2 : ldc.c part 1

Di sini, saya akan sentuh berkenaan dengan source code 'ldc.c', macam mana nak ubah jika nak pakai Port / Pin PIC yang lain. Source code yang lain rasanya dapat di fahami dengan mudah.

Ok, untuk mengguna LCD dengan PIC, minima 6 pin diperlukan. 2 pin untuk signal iaitu RS (Register Select) dan EN (Enable) dan 4 pin lagi untuk data untuk format 4 pin data iaitu pin D4 - D7 di LCD ( LCD ada 8 pin untuk data ... D0 - D7 ). Saya tak sentuh untuk LCD yang guna format 8 pin data.

Rujuk A, arahan ' #define LCD_RS RD4 ' untuk setkan pin yang akan bersambung dengan pin RS di LCD. Jika kita gunakan pin yang lain dari RD4, maka kita perlu set pin tersebut di sini.

Rujuk B, ... pin ini untuk bersambung dengan pin EN / E ( enable ) di LCD. Jika pin lain digunakan, sila set kan nama pin tersebut di sini.

Rujuk C ... Port yang akan digunakan sebagai pin data ( 4 bit data pin ) yang akan di sambungkan kepada pin data D4 - D7 di LCD. Untuk tutorial ini, kita menggunakan pin PIC RD0 - RD3 sebagai data pin. Jadi pin PIC RDO disambung kepada D4 di LCD, pin PIC RD1 -> D5 dan seterusnya sehingga pin PIC RD3 -> D7 di LCD.

Untuk C1 n C2, telah diterangkan di atas.

Kita juga boleh gunakan 6 pin Port A, Port B atau Port C ( jika tak mahu guna Port D). Jika nak gabung pun boleh iaitu sebagai contoh 2pin signal di port B dan 4 pin data di port D. Saya biasanya menggunakan 6 pin tersebut dalam satu port yang sama supaya senang nak urus dan nak ingat ... contohnya D0-D3 untuk data 4 bit dan D4-D5 untuk 2 signal. Tambahan lain adalah 2 pin untuk power supply 5V dc untuk LCD dan ground LCD. Jika nak guna RD4 - RD7 / RA4 - RA7 / RB4 - RB7 /RC4 - RC7 ... beberapa perubahan perlu di lakukan (kod di dalam tutorial ini tak berfungsi untuk pin-pin ini).



Gambar 3, ldc.c part 2

Untuk D n E, ia terpakai jika menggunakan port yang sama untuk RS, EN, Data . Jika RS dan EN menggunakan port yang berlainan, arahan D n E mestilah dibuang.

Jika arahan RS n EN dibuang, maka :

arahan F berubah menjadi ' LCD_DATA = c >> 4; '
arahan G berubah menjadi ' LCD_DATA = c & 0x0F; '

Gambar 4, ldc.c part 4

Untuk H, kita kena set port yang diguna untuk sambung kepada LCD sebagai digital output ( dalam kes ini kita portD sebagai output dengan arahan ' TRISD = 0; ' )

Untuk I, kita perlu set LCD_RS,LCD_EN sebagai 0. (LCD_RW boleh dipadamkan/tak digunakan).

Ok, itu sahaja untuk tutorial 6.4. Jika ada sebarang persoalan/pertanyaaan, sila komen di SHOUT BOX atau emailkan di allpicproject@gmail.com .

Terima kasih semua.

NOTE: Insya Allah, saya akan uploadkan video demo dalam waktu terdekat ( bergantung kepada kelapangan masa saya ). Saya juga upload fail-fail berkenaan di posting yang sama ( source code, eagle schematic, gambar n video ).

0 comments:

Post a Comment