[Go to Bottom]
APLIKASI TIMER
DENGAN MIKROKONTROLLER PIC16F84A
1. Tujuan [kembali]
- Mempelajari aplikasi output pada mikrokontroller PIC 16F84A
- Mempelajari aplikasi input pada mikrokontroller PIC 16F84A
- Mempelajari aplikasi I/O pada mikrokontroller PIC 16F84A
b. LED
c. Jumper
d. Rangkaian reset
e. LCD
3.
DasarTeori [kembali]
Mikrokontroler
PIC16F84 merupakan salah satu mikrokontroler dari keluarga PIC mikro yang
popular digunakan sekarang ini, mulai dari pemula hingga para profesional. Hal
tersebut karena PIC16F84 sangat praktis dan menggunakan teknologi FLASH memori
sehingga dapat diprogram-hapus hinggaseribukali.
Keunggulan mikrokontroler jenis RISC ini dibanding dengan mikrokontroler 8-bit lain di kelasnya terutama terletak pada kecepatan dan kompresi kodenya. Selain itu, PIC16F84 juga tergolong praktis dan ringkas karena memiliki kemasan 18 pin dengan 13 jalur I/O. meskipun demikian, mikrokontroler PIC16F84 bukan termasuk mikrokontroler yang memiliki fitur yang lengkap. Dalam keluarga PICmikro, PIC16F84 tergolong mikrokontroler skala sedang (Mid-Range).
Keunggulan mikrokontroler jenis RISC ini dibanding dengan mikrokontroler 8-bit lain di kelasnya terutama terletak pada kecepatan dan kompresi kodenya. Selain itu, PIC16F84 juga tergolong praktis dan ringkas karena memiliki kemasan 18 pin dengan 13 jalur I/O. meskipun demikian, mikrokontroler PIC16F84 bukan termasuk mikrokontroler yang memiliki fitur yang lengkap. Dalam keluarga PICmikro, PIC16F84 tergolong mikrokontroler skala sedang (Mid-Range).
Fitur-Fitur PIC16F84
PIC16F84 bukanlah mikrokontroler yang istimewa
dalam keluarga PICmikro. Namun demikian, PIC16F84 cukup mudah dipelajari dan
dapat dibilang memiliki kemampuan yang handal sebagai mikrokontroler yang hanya
memiliki kemasan 18 pin. Fitur-fitur pada PIC16F84 antara lain:
- Kapasitas memori program 1024 x 14 FLASH memori
- Ram berukuran 68 byte
- Memori data berukuran 64 byte pada EEPROM
- Memiliki 13 buah I/O (5 pada PortA dan 8 pada PortB)
- Merupakan mikrokontroler RISC, sehingga hanya memiliki 35 macan instruksi
- Memiliki Timer 8-bit dengan Prescaler 8-bit
- Watch Dog Timer (WDT) dengan osilator internal
- Fuse untuk kode pengaman
- Dapat langsung menghidupkan LED
- Pemrograman di dalam sistem (ICSP)
- Mode SLEEP untuk menghemat daya
- Kemasan fisik 18 pin DIP
- Tegangan operasi normal 5 VDC
Deskripsi Pin-Pin

Pin Mikrokontroler PIC16F84
|
Mikrokontroler
PIC16F84 diproduksi dalam kemasan 18 pin PDIP (Plastic Dual In Line) maupun 18
pin SO (Small Outline). Namun yang banyak dipasaran adalah dalam kemasan PDIP.
Pin-pin untuk I/O sebanyak 13 pin, yang terdiri atas 5 pin untuk Port A dan 8
pin untuk Port B. Ada beberapa pin pada mikrokontroler ini yang memiliki fungsi
ganda, yaitu pin 3, pin 4, pin 12, dan pin 13. Pin 3 dapat berfungsi sebagai
pin I/O untuk Port A atau sebagai jalur input untuk clock eksternal. Pin 4
berfungsi sebagai pin reset dan juga dapat digunakan sebagai pin Vpp saat mode
pemrograman. Sedangkan pin 12 dan pin 13 masing-masing berfungsi sebagai pin
I/O dari Port B namun sekaligus juga dapat berfungsi sebagai pin clock dan data
masukan pada pemrograman mikrokontroler.
Pembangkit Clock-Oscilator
Suatu
mikrokontroler tidak akan dapat bekerja jika tidak diberi detak (clock) melalui
suatu osilator. Osilator adalah rangkaian yang akan memberikan pulsa pada
mikrokontroler dan berguna untuk mensinkronkan sistem dalam mikrokontroler
tersebut. Untuk mengaktifkan sumber clock ini cukup dengan menambahkan
rangkaian pasif saja seperti resistor dan kapasitor (RC Oscilator), kristal
atau keramik resonator. Salah satu keistimewaan mikrokontroler PIC16F84 adalah
terdapatnya 4 pilihan penggunaan osilator. Untuk pemakaian yang tidak
memerlukan pewaktu kritis, bahkan dapat menggunakan sepasang resistor dan
kapasitor saja sebagai osilator.
Nilai kristal yang dapat dipakai maksimum adalah 4 MHz atau 10 MHz, hal ini karena mikrokontroler PIC16F84 dibuat dalam 2 versi frekuensi kerja. Untuk menentukan frekuensi maksimumnya dapat dilihat pada badan mikrokontroler. Jika terdapat tulisan PIC16F84-04/P berarti frekuensi maksimum yang diijinkan adalah 4 MHz.
Nilai kristal yang dapat dipakai maksimum adalah 4 MHz atau 10 MHz, hal ini karena mikrokontroler PIC16F84 dibuat dalam 2 versi frekuensi kerja. Untuk menentukan frekuensi maksimumnya dapat dilihat pada badan mikrokontroler. Jika terdapat tulisan PIC16F84-04/P berarti frekuensi maksimum yang diijinkan adalah 4 MHz.
4. Program [kembali]
// LCD module connections
5. Flowchart [kembali]
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections
char a=0, jam=0, menit=0, detik=0; // deklarasi dan isi variabel
char detikpul, detiksat, menitpul, menitsat, jampul, jamsat; // deklarasi variabel
void PrintToDisplay(){ // fungsi mencetak ke layar
jampul=jam/10; // mendapatkan nilai puluhan jam
jamsat=jam%10; // mendapatkan nilai satuan jam
menitpul=menit/10; // mendapatkan nilai puluhan menit
menitsat=menit%10; // mendapatkan nilai satuan menit
detikpul=detik/10; // mendapatkan nilai puluhan detik
detiksat=detik%10; // mendapatkan nilai satuan menit
Lcd_out(1,1,"Waktu: : : "); // cetak ke layar
Lcd_Chr(1,7,jampul+48); // cetak nilai puluhan jam ke LCD
Lcd_Chr_Cp(jamsat+48); // cetak nilai satuan jam ke LCD
Lcd_Chr_Cp(':'); // cetak ke LCD
Lcd_Chr_Cp(menitpul+48); // cetak nilai puluhan menit ke LCD
Lcd_Chr_Cp(menitsat+48); // cetak nilai satuan menit ke LCD
Lcd_Chr_Cp(':'); // cetak ke LCD
Lcd_Chr_Cp(detikpul+48); // cetak nilai puluhan detik ke LCD
Lcd_Chr_Cp(detiksat+48); // cetak nilai satuan detik ke LCD
delay_ms(10); // delay 10 ms
}
void interrupt(){ // aktifkan interrupt
if(a<125){ // jika a<125, maka
a++;INTCON=0xa0;TMR0=131;} // tambah a, aktifkan TMR0, isi TMR0
else{ // jika tidak, maka
a=0; // a diisi 0
if(detik<59){ // jika detik<59, maka
detik++;INTCON=0xa0;TMR0=131;} // detik+1, aktifkan TMR0, isi TMR0
else {detik=0; // jika detik = 0, maka
if(menit<59) // jika menit<59, maka
{menit++; INTCON=0xa0; TMR0=131;} // menit+1, aktifkan TMR0, isi TMR0
else{menit=0; // jika jika tidak,menit=0
if (jam<11){ // jika jam<59, maka
jam++; INTCON=0xa0; TMR0=131;} // jam+1, aktifkan TMR0, isi TMR0
else{ // jika tidak
jam=0; INTCON=0xa0; TMR0=131;} // jam=0 , aktifkan TMR0, isi TMR0
}
}
}
}
void main(){
Lcd_init(); // Inisialisasi LCD
Lcd_Cmd(_LCD_CLEAR); // bersihkan layar LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // matikan cursor LCD
TRISB=0x00; // PORTB sebagai output
OPTION_REG=0x86; // Input clock internal 8Mhz, Prescalar 1:128
TMR0=131; // isi nilai TMR0
INTCON=0xa0; // aktifkan TMR0;
do{
PrintToDisplay(); // panggil fungsi
}
while(1); // loop
}
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections
char a=0, jam=0, menit=0, detik=0; // deklarasi dan isi variabel
char detikpul, detiksat, menitpul, menitsat, jampul, jamsat; // deklarasi variabel
void PrintToDisplay(){ // fungsi mencetak ke layar
jampul=jam/10; // mendapatkan nilai puluhan jam
jamsat=jam%10; // mendapatkan nilai satuan jam
menitpul=menit/10; // mendapatkan nilai puluhan menit
menitsat=menit%10; // mendapatkan nilai satuan menit
detikpul=detik/10; // mendapatkan nilai puluhan detik
detiksat=detik%10; // mendapatkan nilai satuan menit
Lcd_out(1,1,"Waktu: : : "); // cetak ke layar
Lcd_Chr(1,7,jampul+48); // cetak nilai puluhan jam ke LCD
Lcd_Chr_Cp(jamsat+48); // cetak nilai satuan jam ke LCD
Lcd_Chr_Cp(':'); // cetak ke LCD
Lcd_Chr_Cp(menitpul+48); // cetak nilai puluhan menit ke LCD
Lcd_Chr_Cp(menitsat+48); // cetak nilai satuan menit ke LCD
Lcd_Chr_Cp(':'); // cetak ke LCD
Lcd_Chr_Cp(detikpul+48); // cetak nilai puluhan detik ke LCD
Lcd_Chr_Cp(detiksat+48); // cetak nilai satuan detik ke LCD
delay_ms(10); // delay 10 ms
}
void interrupt(){ // aktifkan interrupt
if(a<125){ // jika a<125, maka
a++;INTCON=0xa0;TMR0=131;} // tambah a, aktifkan TMR0, isi TMR0
else{ // jika tidak, maka
a=0; // a diisi 0
if(detik<59){ // jika detik<59, maka
detik++;INTCON=0xa0;TMR0=131;} // detik+1, aktifkan TMR0, isi TMR0
else {detik=0; // jika detik = 0, maka
if(menit<59) // jika menit<59, maka
{menit++; INTCON=0xa0; TMR0=131;} // menit+1, aktifkan TMR0, isi TMR0
else{menit=0; // jika jika tidak,menit=0
if (jam<11){ // jika jam<59, maka
jam++; INTCON=0xa0; TMR0=131;} // jam+1, aktifkan TMR0, isi TMR0
else{ // jika tidak
jam=0; INTCON=0xa0; TMR0=131;} // jam=0 , aktifkan TMR0, isi TMR0
}
}
}
}
void main(){
Lcd_init(); // Inisialisasi LCD
Lcd_Cmd(_LCD_CLEAR); // bersihkan layar LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // matikan cursor LCD
TRISB=0x00; // PORTB sebagai output
OPTION_REG=0x86; // Input clock internal 8Mhz, Prescalar 1:128
TMR0=131; // isi nilai TMR0
INTCON=0xa0; // aktifkan TMR0;
do{
PrintToDisplay(); // panggil fungsi
}
while(1); // loop
}
5. Flowchart [kembali]

7. Video rangkaian [kembali]
8. Link download [kembali]
link download rangkaian : disini aja
link download video : disini aja
link download program : disini aja
link download HTML : disini aja
8. Link download [kembali]
link download rangkaian : disini aja
link download video : disini aja
link download program : disini aja
link download HTML : disini aja
Tidak ada komentar:
Posting Komentar