Do You Need Help ?

Contact Me !

          
E-Mail :  me.rudolfworotikan@gmail.com

Microcontroller



  You Are Here -->Project -->Microcontroller -->60 Hour Timer With PIC16F877A

60 Hour Timer With PIC16F877A

Project ini saya sebut 60 Hour Timer, arti nya waktu yang dapat di kontrol hingga 2 hari 5 jam dengan hitungan 1 hari penuh 24 jam atau 60/24 = 2.5 hari, selama anda mempergunakan timer ini untuk kepentingan positif, maka anda akan mendapatkan manfaat dari fungsi alat ini.


Pada project ini saya tampilkan skematik dan video nya, sedangkan untuk kode program nya dapat di lihat pada tulisan di bawah ini, untuk 60 jam timer ini di bangun dengan komponen utama yaitu IC PIC16F877A, seperti anda ketahui dalam project yang saya buat selalu menggunakan IC ini, alasan utama saya menggunakan IC ini, di karenakan IC ini sangat popular dan cukup mudah didapatkan di toko lokal ataupun toko elektronik online di internet, selain itu PIC16F877A ini PORT nya cukup banyak, sehingga sangat mudah bila kita hendak membuat aplikasi yang memerlukan input/output lebih banyak.

Timer ini untuk kepentingan apa ...?, untuk pengaplikasian nya, bisa anda gunakan sebagai fungsi penerangan sewaktu melakukan ETCHING PCB, pengendalian kontrol sebuah alat dan pengaturan putaran motor, maksud nya seperti mesin cuci, semua ini tergantung dari ide anda, untuk apa dan harus bagaimana menerapkan nya, timer ini sengaja di buat untuk maksimal waktu 60 jam, walaupun pada pengcode-an nya bisa di buat hingga lebih dari 60 jam, 60 jam timer ini di buat hanya sebagai sarana pembelajaran Mikrokontroller/microcontroller dan elektronika, jika anda hendak mengembangkan hingga lebih dari 60 jam, maka anda tinggal menambahkan fungsi hitungan nya saja.

Skrip atau kode dari 60 jam timer ini, saya bangun dengan menggunakan Compiler dari Mikroelektronika dengan bahasa C, anda dapat mendapatkan nya secara gratis

Berikut di bawah ini kode atau skrip nya.

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;

sbit SET at RC0_bit;
sbit SPS at RC1_bit;
sbit CLR at RC2_bit;

sbit DTK at RC3_bit;
sbit MNT at RC4_bit;
sbit JMN at RC5_bit;

//Variabel
int hitung;
short detik,menit,jam;
char ff;
bit mulai,pt,ptn,selesai;

void tunda()
{ Delay_ms(300);
}
// Definisikan Karakter Yang Akan Ditampilkan
char rdf[]="RUDOLF WOROTIKAN";
char tmr []="TIMER";
char stt[]="START-TIMER";
char sttm[]="SET"; //"SET TIMER";
char proses[]="SEDANG ON -->";
char prosesi[]="PAUSE";
void interrupt()
{
TMR0 = 155; // Atur Timer
hitung++; // Tambahkan Nilai
INTCON.TMR0IF=0; // Bersihkan Interrupt Flag
INTCON.T0IF=0;
}

void main()
{
CMCON = 255;
ADCON1 = 0xFF; // Hitung yang BENAR, NGGAK BENAR GANTI SAJA
//ADCON1 = 7; // PORTA Sebagai Digital
OPTION_REG=0b00000001;
INTCON.GIE=1;
INTCON.PEIE=1;
INTCON.TMR0IE=1;
TMR0=155;
TRISA=0b11111111;
TRISB=0b00000000; // Definisi Semua PORTB Untuk Output, Ke LCD 2*16
TRISC=0b00111111;
TRISD=0x1F; // TRISD=0b00000000;
// Definisi PORTD 4-5 Untuk Output Dan Lain Nya Off, Ke Led 2* Untuk
// Indikator, Ke External Lampu Atau Perangkat Yg Akan Di Kontrol
TRISE=0b00000011; //TRISE=0b00000000;
// Definis Semua PORTE Untuk Output
PORTE=0b00000100; //PORTE RE2 Untuk Menyalakan Indikator Power Led
PORTD=0; //Bersihkan PORTD Ke Status Standby

//Definisikan Variable
jam=0; menit =0;
detik=0;
mulai=0;
pt=0;
ptn=0;
selesai =0;

main:
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,rdf);
Lcd_Out(2,6,tmr);
delay_ms(2500);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,3,stt);
delay_ms(2500);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
PORTE = 0b00000100 ; // Power Led RE3

while(1)
{
if(hitung>=2500) //Jika Variabel Lebih Besar Dari Pada Atau Sama Dengan 2500
{
hitung=0; //Reset Variabel Ke NOL
if(mulai)
{
jam--;
if(jam < 0)
{
jam = 60;
menit--;
if(menit < 0)
{
menit = 60;
detik--;
if(detik < 0) // Jika Detik Lebih Kecil Dari NOL
{
detik = 60; // Detik
jam = 0;
menit = 0;
detik = 0;
PORTC=0xC0;
mulai = 0;
}
}
}
}
}
else
{
if(!JMN ==1) // Jika Swith DIP, Dipilih Ke Menit Atau Detik, Maka Atur Posisi Digit
// Tersebut !MS
PORTD=0b10000000;
else
PORTD=0b00000000;
}
if(!JMN ==1)
{
if(SET) // Jika Switch DIP Terpilih Pada Detik, Maka Atur Untuk Menit
{
pt=1;
}
if(!SET && pt)
{
pt=0;
jam++; // Naikkan Nilai Plus 1 Setiap Penekanan Push Button Dalam Digit Detik
if(jam==60) jam=0; // Jika Push Button Detik Hingga 60, Maka Detik Kembali Ke NOL, Nilai 60
// Adalah Maksimal 1 Menit SAMA DENGAN 60 Detik
}
}
else
{
if(!MNT ==1)
PORTD=0b01000000;
else
PORTD=0b00000000;
}
if(!MNT ==1)
{
if(SET) // Jika Switch DIP Terpilih Pada Menit, Maka Atur Untuk Menit
{
pt=1;
}
if(!SET && pt)
{
pt=0;
menit++; // Naikkan Nilai Plus 1 Setiap Penekanan Push Button Dalam Digit Menit
if(menit==60) menit=0; // Jika Push Button Menit Hingga 60, Maka Menit Kembali Ke NOL, Nilai
// 60 Adalah Maksimal 1Jam SAMA DENGAN 60 Menit
}
}
else
{
if (!DTK ==1){if (!MNT ==0){if (!JMN ==0)
PORTD=0b00100000;
else
PORTD=0b00000000;
}
}
}
if(!DTK ==1)
{
if(SET) // Jika Switch DIP Terpilih Pada Menit, Maka Atur Untuk Menit
{
pt=1;
}
if(!SET && pt)
{
pt=0;
detik++; // Naikkan Nilai Plus 1 Setiap Penekanan Push Button Dalam Digit
// Menit
if(detik==60) detik=0; // Jika Push Button Menit Hingga 60, Maka Menit Kembali Ke NOL,
// Nilai 60 Adalah Maksimal 1Jam SAMA DENGAN 60 Menit
}
}
if(SPS) // Tekan Maka Akan Memulai Menghitung Mundur Dari Waktu
// Yang Telah Diatur
{
ptn = 1;
}
if(!SPS && ptn) // Bila Di Tekan Kembali, Maka Penghitungan Diberhentikan
Sementara, Hingga Ada Penekanan Kembali
{
ptn = 1; // Pastikan Kode kamu adalah ptn
mulai = ~mulai; // Membalikkan Status
goto tampil ; // Arahkan ke TAMPIL
}
//}
Lcd_Out( 2, 1, sttm ); // Tampilkan sttm
Lcd_Chr( 2, 6, jam/10 + menit/10 + detik/10 );
Lcd_Chr_CP( detik/10 + '0' );
Lcd_Chr_CP( detik%10 + '0' );
Lcd_Chr_CP( ':' );
Lcd_Chr_CP( menit/10 + '0' );
Lcd_Chr_CP( menit%10 + '0' );
Lcd_Chr_CP( ':' );
Lcd_Chr_CP( jam/10 + '0');
Lcd_Chr_CP( jam%10 + '0');
Delay_ms( 60 );
if(CLR) // Tekan Maka Akan Membersihkan Kembali Ke NOL Setelah
// Selesai Hitung
{ PORTC=0b00000000;
Delay_ms( 300 );
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out( 1, 1, "STOP" );
Lcd_Out( 2, 1, "CLEAR FUNCTION" );
Delay_ms( 3000 );
goto main // Kembali ke "MAIN
tampil: // Panggilan untuk TAMPIL Dan PROSES SEGERA WAKTU Nya USAI
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,proses);
delay_ms(100);
}
// Lcd_Out(1,1,prosesi);
}
//Delay_ms( 60 );
}
                     // Coding By Rudolf Worotikan

  Download

Ini adalah skematik nya, dengan menggunakan IC PIC16F877A, IC PIC ini dapat anda dapatkan di tempat anda.


Dibawah ini adalah video nya.

Rdf Play

Rdf StopIf This Video Not Playing Then Try To Use A Chrome Browser ..!.

Welcome to RUDOLF WOROTIKAN Blog.
More Info On This Page....!
Please, Don't Hesitate to Contact Me.
Enjoy Your Time.
TOP
terima kasih telah berkunjung di blog ini ++++ blog ini sedang dalam pengembangan ++++ rudolf worotikan