Membuat Timer Digital dengan RTC & Mengirimkan Data ke Komputer - Elang Sakti
Download Ebook Belajar Arduino PDF, Arduino untuk pemula
Jasa Pembuatan Program Arduino, pemrograman Arduino
# Hack Your Skills! to be Professional Mechatronics

Membuat Timer Digital dengan RTC & Mengirimkan Data ke Komputer

Tidak ada komentar
Membuat Timer Digital dengan RTC DS1302 lampu otomatis

Tulisan ini kelanjutan dari artikel sebelumnya [1], yaitu tentang komunikasi serial RS232 dengan internal clock 1MHz. Project ini merupakan rangkaian dari pembuatan timer digital untuk lampu otomatis. RTC yang digunakan adalah DS1302. RTC ini ada yang berpendapat agak ribet karena protokol komunikasinya tidak standar dan tidak menggunakan protokol I2C. Sehingga programmer harus membuat coding sendiri, tapi pada CodeVision AVR library untuk modul ini sudah tersedia.

Library RTC DS1302 sudah disediakan di CodeVision AVR sehingga Anda tinggal menggunakannya, untuk informasi lebih detailnya silakan Anda download manual CodeVision di link ini [2]. Untuk penjelasan dan contoh coding DS1302 Anda bisa cek di halaman 348 pada manual tersebut.

Baca juga : Timer Switch Digital untuk Mesin Pelumas (Pompa Grease)

Komunikasi Serial RS232 dengan Clock 1MHz & Baud Rate 4800

Program di bawah ini menggunakan ATMega16A dengan clock 1MHz, sehingga komunikasi serial yang akan digunakan tentu dengan baud rate 4800 agar data yang dikirimkan tidak error. RTC dipasang pada PORTB dengan konfigurasi:
  • Pin CLK pada RTC dihubungkan ke PORTB.3
  • Pin DAT/IO pada RTC dihubungkan ke PORTB.5
  • Pin RST pada RTC dihubungkan ke PORTB.7

/*
 *  Komunikasi Serial UART ATMega16A - PU
 *  dengan internal Clock 1Mhz dan BAUDRATE 4800
 *  dan RTC DS1302 pada PORTB
 *  coder : haripinter
 */

#include 

#asm
    .equ __ds1302_port=0x18
    .equ __ds1302_io=5
    .equ __ds1302_sclk=3
    .equ __ds1302_rst=7
#endasm

#include <ds1302.h>
#include <stdio.h>
#include <delay.h>

unsigned char hour, min, sec, day, month, year;
int last_detik = 0;

void main(void){
    // Setting UART
    // Clock 1MHz & BAUDRATE 4800
    UCSRA=0x00;
    UCSRB=0x18;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x0C;
    
    // hidupkan dioda charge pada RTC1302
    rtc_init(1,1,3);
    
    while(1){
        rtc_get_time(&hour, &min, &sec); 
        if(last_detik != sec){   
            rtc_get_date(&day, &month, &year);
            printf("Date %d:%02d:%d ",day,month,year);
            printf("Time %2d:%02d:%02d \n",hour,min,sec); 
            last_detik = sec;       
        }
    }
}

Program di atas awalnya akan membaca data tanggal dan jam dari RTC, kemudian setiap detik akan mengirimkan data ke komputer melalui komunikasi serial RS232. Fungsi rtc_ini(), rtc_get_date(), dan rtc_get_time() merupakan fungsi untuk mengaktifkan dan mengambil data dari DS1302. Sedangkan untuk mengeset jam dan tanggal, Anda bisa menggunakan rtc_set_date() dan rtc_set_time(). Informasi lebih lanjut library DS1302, Anda bisa cek di manual CVAVR atau membuka file ds1302.lib pada folder lib di folder instalasi CVAVR Anda.

Mungkin ada yang bertanya, kenapa untuk untuk menetukan detik tidak menggunakan delay 1000ms?

Seperti yang sudah saya jelaskan pada artikel sebelumnya, 1000ms untuk clock 1MHz lebih lambat dari 1000ms kenyataaanya. Oleh sebab itu, perubahan detik pada program di atas mengacu pada perubahan detik pada RCT. Jika nilai detik RTC berbeda dari data detik sebelumnya, maka dianggap 1 detik dan kirimkan data.

Komunikasi UART (Serial) RS232 dengan Clock 11.0592 dan Baud Rate 9600

Sebelumnya kita sudah membahas tentang komunikasi serial RS232 dengan clock mikrokontroller 1MHz. Jika kita ingin mengubah clock dengan clock external, maka konfigurasi UART juga harus diubah. Berikut contoh perubahan setting UART untuk clock 11.0592.

UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;

Sehingga program diatas secara lengkap akan berubah seperti berikut ini:

/*
 *  Komunikasi Serial UART ATMega16A - PU
 *  dengan internal Clock 11.0592Mhz
 *  agar bisa menggunakan xtal / clock external, ada triknya!
 *  BAUDRATE 9600
 *  dan RTC DS1302 pada PORTB
 */
 
#include 

#asm
    .equ __ds1302_port=0x18
    .equ __ds1302_io=5
    .equ __ds1302_sclk=3
    .equ __ds1302_rst=7
#endasm

#include <ds1302.h>
#include <stdio.h>
#include <delay.h>

unsigned char hour, min, sec, day, month, year;
int last_detik = 0;

void main(void){
    // setting UART
    // dengan clock 11.0592 dan BAUDRATE 9600
    UCSRA=0x00;
    UCSRB=0x18;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x47;
    
    rtc_init(1,1,3);
    
    while(1){
        rtc_get_time(&hour, &min, &sec); 
        if(last_detik != sec){   
            rtc_get_date(&day, &month, &year);
            printf("Date %d:%02d:%d ",day,month,year);
            printf("Time %2d:%02d:%02d \n",hour,min,sec); 
            last_detik = sec;       
        }
    }
}

Implementasi dasar dari timer digital ini selanjutnya akan digunakan untuk menampilkan jam pada LCD, mengendalikan relay untuk lampu otomatis, dan membuat animasi detak dengan LED.


[1] http://www.elangsakti.com/2015/07/komunikasi-serial-rs232-internal-clock-1mhz.html
[2] https://spaces.atmel.com/gf/download/frsrelease/193/1300/cvavrman.pdf

Written by ElangSakti
Membuat Timer Digital dengan RTC & Mengirimkan Data ke Komputer
Bahasan: Tulisan ini kelanjutan dari artikel sebelumnya [1], yaitu tentang komunikasi serial RS232 dengan internal clock 1MHz . Project ini meru...
Published at Selasa, 07 Juli 2015, Updated at Selasa, 07 Juli 2015
Reviewed by dr. on
Rating: 4.7

Tidak ada komentar :

Posting Komentar