Mungkin ini sebuah project yang biasa saja, dan semua orang pasti sudah bisa membuatnya. Tapi disini saya akan tetap mempostingnya, mungkin saja berguna bagi yang lainnya. Dikarenakan pada aplikasi ini tidak menggunakan RTC (Real Time Clock), sehingga ketika catu daya atau power supply dimatikan maka nilai dari jam digital tersebut akan menunjukan pukul “12:0:0″. Oleh karena itu saya tambahkan 3 buah push button untuk menset nilai tersebut.
Cara kerja jam digital yang saya buat adalah menggunakan penampil LCD 2×16. Kemudian terdapat 3 buah pushbutton yaitu SET, UP dan DOWN. Tombol SET digunakan untuk menset jam, kemudian UP dan DOWN digunakan untuk menset nilai dari jam. Jika ingin menset menit maka harus menekan tombol SET kembali, begitu seterusnya untuk menset detik.
Berikut adalah schematic dan cara menset timer pada CodeVision CodeWizard AVR
Jika teman-teman belum mengerti atau kurang jelas untuk mensetting timer pada CodeVision AVR dapat membaca pada postingan saya tentang Tutorial Timer dan Counter AVR.
Berikut adalah cuplikan programnya (untuk program lengkap dapat didownload pada link dibawah cuplikan program).
Interupt timer 1 setiap 1 detik:
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
TCNT1H=0xD23A >> 8;
TCNT1L=0xD23A & 0xff;
detik++;
}
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
TCNT1H=0xD23A >> 8;
TCNT1L=0xD23A & 0xff;
detik++;
}
Program untuk mendapatkan detik, menit dan jam.
void jam_digital()
{
if (detik==60)
{
lcd_clear();
detik=0;
menit++;
}
if (menit==60) {
if (detik==60)
{
lcd_clear();
detik=0;
menit++;
}
{
lcd_clear();
menit=0;
jam++;
}
if (jam==24)
{
lcd_clear();
jam=0;
}
}
Dan ini adalah setting untuk Timer1:
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0×00;
TCCR1B=0×05;
TCNT1H=0xD2;
TCNT1L=0x3A;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0×00;
TCCR1B=0×05;
TCNT1H=0xD2;
TCNT1L=0x3A;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;
Untuk file program CodeVision AVR dan file simulasi Proteus dapat didownload pada link dibawah ini.
Semoga bermanfaat...
mas bisa ga data dari jam digunakan untuk instruksi ke lain port.. misalnya jika jam 4 adan subuh.. jika jam 12 adan dst...
BalasHapuslebih baik anda menambahkan sebuah program untuk mencek apakah jam telah jam 4 atau jam 12 (misalkan) dengan menggunakan instruksi if
BalasHapusmas saya butuh program bwt project kuliah, "jam dengan countdown(hitung mundur) dan setelah waktu habis buzzer nyala" sudah googling seminggu lebih tidak ketemu-ketemu. :D tolong posting dong...
BalasHapuslink n gak bisa di download, please kirim link baru ke artrageni@gmail.com
BalasHapusmakasih bro