Pada postingan kali ini saya
berusaha mencoba untuk berbagi dengan sahabat sekalian. Kesempatan kali ini
saya memposting bagaimana cara menampilkan waktu dan tanggal pada hyperteminal.
Nah yang perlu sobat sekalian persiapkan adalah
- Aplikasi
Proteus,
- Aplikasi
compailer (CAVR)
- Virtual
serial port emulator
Nah jika semua sudah siap, kita
mulai saja ya….!
Pertama-tama buat skema rangkaian
pada proteus seperti pada gambar dibawah.
Jika telah selesai maka lakukan setingan seperti berikut :
Ragkaia simulasi
Jika telah selesai maka lakukan setingan seperti berikut :
- Double klik pada Atmga16 sehingga muncul tampilan seperti berikut :
Ikuti langkah
diatas
- Doble klick pada komponen compim, sehingga muncul tanpilan seperti pada gambar dibawah :
Ikuti langkah diatas
Pada setingan komponen compim diatas kita melakukan setingan port/COM3 untuk yang satu ini, anda dapat menggunakan com apa saja sesuai kebutuhan, tinggal pengaturannya di Virtual serial port emulator. Setelah selesai, maka selanjutnya kita membuat program, nah dalam pembuatan program fitur-fitur yang harus kita aktifkan adalah :
1. Uart
2. I2C
3. Clock 12 MHz
4. Baut Rate 9600
5. Atmega 16
Setelah melakukan setingan tersebut maka ketikkan list program sebagai berikut :
List Program :
#include <mega16.h>
#include <delay.h>
#include <alcd.h>
#include <stdio.h>
#asm
.equ
__i2c_port=0x15 ;PORTC
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
#include <i2c.h>
// DS1307 Real Time Clock functions
#include <ds1307.h>
unsigned char hour,minute,second,date,month,year,day,num;
// Declare your global variables here
unsigned char dec2bcd(unsigned char num)
{
return ((num/10) + (num % 10));
}
unsigned char bcd2dec(unsigned char num)
{
return ((num/16 ) + (num % 16));
}
void dectobcdrtc(void)
{
hour=dec2bcd(hour);
minute=dec2bcd(minute);
second=dec2bcd(second);
date=dec2bcd(date);
month=dec2bcd(month);
year=dec2bcd(year);
}
void bcdtodecrtc(void)
{
hour=bcd2dec(hour);
minute=bcd2dec(minute);
second=bcd2dec(second);
date=bcd2dec(date);
month=bcd2dec(month);
year=bcd2dec(year);
}
//=================================================
void gettimertc(void)
{
i2c_start();
i2c_write(0xd0);
i2c_write(0);
i2c_stop();
i2c_start();
i2c_write(0xd1);
second=i2c_read(1);
minute=i2c_read(1);
hour=i2c_read(0);
day=i2c_read(1);
date=i2c_read(1);
month=i2c_read(1);
year=i2c_read(0);
i2c_stop();
delay_ms(10);
bcdtodecrtc();
}
void rtc_lcd(void)
{
lcd_gotoxy(0,0);
lcd_putchar((hour / 10)
+ 48);
lcd_putchar((hour % 10)
+ 48);
lcd_putchar(58);
lcd_putchar((minute / 10)
+ 48);
lcd_putchar((minute % 10)
+ 48);
lcd_putchar(58);
lcd_putchar((second / 10)
+ 48);
lcd_putchar((second % 10)
+ 48);
}
void rtc_uart(void)
{
putchar((hour / 10)
+ 48);
putchar((hour % 10)
+ 48);
putchar(58);
putchar((minute / 10)
+ 48);
putchar((minute % 10)
+ 48);
putchar(58);
putchar((second / 10)
+ 48);
putchar((second % 10)
+ 48);
putchar(13);
putchar(10);
delay_ms(1000);
putchar((date / 10)
+ 48);
putchar((date % 10)
+ 48);
putchar(58);
putchar((month / 10)
+ 48);
putchar((month % 10)
+ 48);
putchar(58);
putchar((year / 10)
+ 48);
putchar((year % 10)
+ 48);
putchar(13);
putchar(10);
}
void main(void)
{
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D;
// I2C Bus initialization
i2c_init();
// LCD module initialization
lcd_init(16);
DDRA.0=0;
DDRA.1=0;
DDRA.2=0;
DDRA.3=0;
PORTA.0=1;
PORTA.1=1;
PORTA.2=1;
PORTA.3=1;
//rtc_set_time(00, 00, 00);
while (1)
{
// Place your code here
gettimertc();
rtc_lcd();
rtc_uart();
}
};