Assalamualaikum
Selamat malam sahabat microver's...kabar baik semua kan?
Di malam yang mendekati lebaran 2014 ini saya akan sharing tentang bagaimana mambuat jam digital dengan LCD 2 X16 tanpa RTC dan dengan software Code vision AVR.
Ini adalah penampakan hasil jam nya :D
Lalu apa itu RTC?
RTC /Real Time Clock merupakan suatu chip (IC) yang memiliki fungsi sebagai penyimpan waktu dan tanggal. RTC DS1307 merupakan Real-time clock (RTC) yang dapat meyimpan data-data detik, menit, jam, tanggal, bulan, hari dalam seminggu, dan tahun valid hingga 2100. 56-byte, battery-backed, RAM nonvolatile (NV) RAM untuk penyimpanan. RTC DS1307 merupakan Real-time clock (RTC) dengan jalur data parallel yang memiliki Antarmuka serial Two-wire (I2C), Sinyal luaran gelombang-kotak terprogram (Programmable squarewave), Deteksi otomatis kegagalan-daya (power-fail) dan rangkaian switch, Konsumsi daya kurang dari 500nA menggunakan mode baterai cadangan dengan operasional osilator. Tersedia fitur industri dengan ketahana suhu: -40°C hingga +85°C. Tersedia dalam kemasa 8-pin DIP atau SOIC.
Ok langsung saja menuju ke proyek,Jujur untuk source code program jam digital ini adalah hasil dari editan program yang telah di buat orang h3x..tapi dari sini kita akan lebih mengerti dan memahami tentang source code dalam program tersebut. Mari kita buat .... let's go.....
- Untuk langkah pertama kita buka software CAVR.
- Pilih menu File>>New, dan pilih option Project, OK
- Nanti ada kotak konfirmasi,apakah kamu akan dipandu dengan wizard apa tidak mau,saya sarankan anda menggunakan nya karena nanti dalam pemograman agar lebih urut dan gampang dalam menganalisa suatu kesalahan pemograman.tampilan nya sebagai berikut : (Pilih Yes)
- lalu muncul kotak dialog berikut,pilih OK
- Setelah itu akan muncul tampilan seperti gambar di bawah ini. Pada tab Chip, pilih chip ATmega8, dan Clock 12 MHz (Dalam hal ini bisa menyesuaikan dengan sismin yang anda pakai).
- Pilih menu Ports dan setting port yang akan digunakan.karena saya menggunakan portD sebagai output maka saya pilih yang port D,oiya jangan lupa mensetting data direction nya menjadi OUT karena nanti kita akan menggunakan port D tersebut sebagai output ke tampilan LCD 2x16
- Didalam program ini,saya menggunakan 3 buah tombol sebagai input untuk mensetting jam tersebut yaitu tombol SET,UP,DOWN lihat sesuai gambar.
- Sedangkan agar Fungsi LCD sesuai dengan program maka kita konfigurasi LCD tersebut seperti gambar dibawah ini,dalam proyek kali ini saya menggunakan minsis ATmega8 mas Bebit Deartha atau bisa kunjungi situs beliau disini
- Untuk langkah selanjutnya kita akan mensetting timer,hal ini sangat perlu dan penting karena disini kita akan menentukan waktu 1 detik nya.setting sesuai gambar dibawah ini.
- Bila sudah kita click Program>>Generate,Save and exit lalu akan muncul jendela penyimpanan,beri nama file project sesuka anda dan siap untuk menuliskan source code jam.
- Ketika muncul jendela untuk menuliskan souurce code,disitu sudah terdapat beberapa code program yang sudah terinisialisasi oleh code wizard AVR,maka untuk lebih cepatnya anda bisa menghapus semua tulisan itu,lalu copy paste kan program ini di situ tadi :
- /*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 13/07/2014
Author : REY
Company : UMT
Comments:
Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 12,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
unsigned char temp[6];
int detik=0, menit=0, jam=12, indeks=6;
#include <mega8.h>
#include <stdlib.h>
#include <delay.h>
// Alphanumeric LCD functions
#include <alcd.h>
// Timer1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer1 value
TCNT1H=0xD23A >> 8;
TCNT1L=0xD23A & 0xff;
detik++;
}
void jam_digital()
{
if (detik==60)
{
lcd_clear();
detik=0;
menit++;
}
if (menit==60)
{
lcd_clear();
menit=0;
jam++;
}
if (jam==24)
{
lcd_clear();
jam=0;
}
}
void tampil_lcd()
{
lcd_gotoxy(0,0);
lcd_putsf("Jam Digital REY");
itoa(jam,temp); //menampilkan JAM di LCD
lcd_gotoxy(4,1);
lcd_puts(temp);
itoa(detik,temp); //menampilkan DETIK di LCD
lcd_gotoxy(10,1);
lcd_puts(temp);
lcd_gotoxy(9,1); //menampilkan :
lcd_putsf(":");
itoa(menit,temp); //menampilkan MENIT di LCD
lcd_gotoxy(7,1);
lcd_puts(temp);
lcd_gotoxy(6,1); //menampilkan :
lcd_putsf(":");
lcd_gotoxy(1,1); //menampilkan <<
lcd_putsf("<<");
lcd_gotoxy(13,1); //menampilkan :
lcd_putsf(">>");
}
void set_jam()
{
if (PINB.0==0 && indeks==6)
{
TIMSK=0x00; //MENGHENTIKAN TIMER
delay_ms(300);
indeks=5;
while (PINB.0==1 && indeks==5)
{
tampil_lcd();
if (PINB.1==0)
{
delay_ms(300);
jam=jam+10;
if (jam>=24)
{
jam=23;
}
}
if (PINB.2==0)
{
delay_ms(300);
jam=jam-10;
if (jam<=9)
{
lcd_clear();
if (jam<0)
{
jam=0;
}
}
}
}
}
if (PINB.0==0 && indeks==5)
{
delay_ms(300);
indeks=4;
while (PINB.0==1 && indeks==4)
{
tampil_lcd();
if (PINB.1==0)
{
delay_ms(300);
jam=jam+1;
if (jam>=24)
{
jam=23;
}
}
if (PINB.2==0)
{
delay_ms(300);
jam=jam-1;
if (jam<=9)
{
lcd_clear();
if (jam<0)
{
jam=0;
}
}
}
}
}
if (PINB.0==0 && indeks==4)
{
delay_ms(300);
indeks=3;
while (PINB.0==1 && indeks==3)
{
tampil_lcd();
if (PINB.1==0)
{
delay_ms(300);
menit=menit+10;
if (menit>=60)
{
menit=59;
}
}
if (PINB.2==0)
{
delay_ms(300);
menit=menit-10;
if (menit<=9)
{
lcd_clear();
if (menit<0)
{
menit=0;
}
}
}
}
}
if (PINB.0==0 && indeks==3)
{
delay_ms(300);
indeks=2;
while (PINB.0==1 && indeks==2)
{
tampil_lcd();
if (PINB.1==0)
{
delay_ms(300);
menit=menit+1;
if (menit>=60)
{
menit=59;
}
}
if (PINB.2==0)
{
delay_ms(300);
menit=menit-1;
if (menit<=9)
{
lcd_clear();
if (menit<0)
{
menit=0;
}
}
}
}
}
if (PINB.0==0 && indeks==2)
{
delay_ms(300);
indeks=1;
while (PINB.0==1 && indeks==1)
{
tampil_lcd();
if (PINB.1==0)
{
delay_ms(300);
detik=detik+1;
if (detik>=60)
{
detik=59;
}
}
if (PINB.2==0)
{
delay_ms(300);
detik=detik-1;
if (detik<=9)
{
lcd_clear();
if (detik<0)
{
detik=0;
}
}
}
}
}
if (PINB.0==0 && indeks==1)
{
delay_ms(300);
indeks=0;
while (PINB.0==1 && indeks==0)
{
tampil_lcd();
if (PINB.1==0)
{
delay_ms(300);
detik=detik+1;
if (detik>=60)
{
detik=59;
}
}
if (PINB.2==0)
{
delay_ms(300);
detik=detik-1;
if (detik<=9)
{
lcd_clear();
if (detik<0)
{
detik=0;
}
}
}
}
indeks=6;
TIMSK=0x04; //MEMULAI LAGI TIMER
delay_ms(450);
}
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=P State1=P State0=P
PORTB=0x07;
DDRB=0x00;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11,719 kHz
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0xD2;
TCNT1L=0x3A;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x04;
// USART initialization
// USART disabled
UCSRB=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTD Bit 2
// RD - PORTD Bit 0
// EN - PORTD Bit 3
// D4 - PORTD Bit 4
// D5 - PORTD Bit 5
// D6 - PORTD Bit 6
// D7 - PORTD Bit 7
// Characters/line: 16
lcd_init(16);
// Global enable interrupts
#asm("sei")
while (1)
{
jam_digital();
tampil_lcd();
set_jam();
}
}
- Lalu click project >> check syntax,jika program diatas benar maka tidak akan muncul tanda error,,hal ini adalah sebuah instruksi dari CAVR untuk mengecheck penulisan dalam program yang kita buat tadi.
- Lalu click Project >> Compile
- Lalu click Project >> Build All
- Nah program sudah menghasilkan file hex yang siap untuk dimasukkan ke dalam chip microcontroller..
Keep calm rek..
7 comments:
kang kalo buat timer hitung mundur listingnya bagaimana? mohon penjelasannya akang :)
Mantab bro kode langsung berjalan, thank,s.
Ijin copas ya .....
gan ada simulasi di proteusnya gak?
rangkaian proteusnya gimana mas?
skema rangkaian nya minta dong pak, hehe trims.
kok pas saya coba 1 detik nya bukan 1 detik tapi baru 1 detik pas sudah 10 detik ya ?
mas kok kodingan saya ga jalan
Post a Comment