Simulasi Menampilkan Waktu Dan Tanggal Pada HyperTerminal Pada Proteus Menggunakan C++

       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
  1. Aplikasi Proteus,
  2. Aplikasi compailer (CAVR)
  3. Virtual serial port emulator
Nah jika semua sudah siap, kita mulai saja ya….!
Pertama-tama buat skema rangkaian pada proteus seperti pada gambar dibawah.

Ragkaia simulasi

Jika telah selesai maka lakukan setingan seperti berikut :
  1. Double klik pada Atmga16 sehingga muncul tampilan seperti berikut :

                                                Ikuti langkah diatas
  1. 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();
}
};

Tidak ada komentar:

Posting Komentar