AD (728x90)

Sabtu, 04 Januari 2020

Display jam digital DS1307 menggunakan Seven Segment

Share it Please
Pada kesempatan kali ini saya akan membagikan trik saya dalam menampilkan waktu yang diberikan oleh IC RTC DS1307 menggunakan Seven Segment. Sekedar share aja siapa tau bisa dijadikan referensi buat temen – temen yg hobi oprek mikrokontroller. Karena saya yakin setiap engineer mempunyai trik masing – masing untuk membuat sesuatu dengan hasil yang sama karena banyak jalan menuju roma he..
OK langsung saja.
Step 1: Komponen
Siapkan komponen yang dibutuhkan yaitu:
1.        IC DS1307
2.       Mikrokontroller (Atmega8)
3.       Battery CR302 / Battery CMOS
4.       Crystal RTC 32.768kHz
5.       4 buah 7 segment 1 digit
6.       2 buah IC 74HC595
7.       2 buah led 3mm merah
DS1307 merupakan IC RTC (Real Time Clock) yang mempunyai interface serial I2C. Untuk lebih jelasnya bisa baca datasheet IC nya.
Atmega8 sebagai kontroller untuk melakukan baca tulis waktu dari/ke IC DS1307 dan menampilkanya ke 7 Segment dengan interface IC shift register 74HC595. Atmega8 ini bisa diganti dengan mikrokontroller lain sesuai kebutuhan dan kesukaan anda. 74HC595 saya gunakan sebagai interface karena saya lebih menyukai menggunakan shift register dari pada decoder BCD to 7segment dengan alasan personal tentunya.
Step 2: Simulator & Skematik
Pada langkah ini, saya menggunakan ISIS proteus sebagai simulator dengan skema sebagai berikut.
Tabel koneksi mikrokontroller Atmega8
PIN NAME
PIN NO
DEVICE
PIN NAME
PIN NO
PD2/INT0
4
DS1307
SOUT
7
PD5
11
74HC595(U3)
DS
14
PD6
12
74HC595(U3)
SH_CP
11
PD7
13
74HC595(U3)
ST_CP
12
PC4/SDA
27
DS1307
SDA
5
PC5/SCL
28
DS1307
SCL
6

PIN 7 dari DS1307 juga terhubung dengan pin (+) LED D1 dan D2 sebagai indikator detik.
Step 3: Programming /Coding
Untuk programming saya menggunakan program compiler AVR CodeVision (CVAVR). Dengan source code sebagai berikut.
/*****************************************************
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    : 1/18/2018
Author  : DWI KURNIAWAN
Company : COMUTECH
Comments:


Chip type               : ATmega8L
Program type            : Application
AVR Core Clock frequency: 8.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega8.h>
#include <i2c.h>
#include <ds1307.h>
#include <delay.h>
#include <stdio.h>


#define SHPORT  PORTD.6
#define DSPORT  PORTD.5
#define STPORT  PORTD.7
#define DDRDIS  DDRD

flash char angka[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x7F};

unsigned char hour,min,sec;

interrupt [EXT_INT0] void ext_int0_isr(void)
{
    rtc_get_time(&hour,&min,&sec);
}

void shiftout(char scan,int data1)
{
    unsigned char i;
    DDRDIS = 0xF0; 
    STPORT = 0;
    for ( i=0; i<8;i++)
    {           
        
        SHPORT = 0;
        DSPORT = (scan >> i)& 0x01;  
        delay_us(1);
        SHPORT = 1;         
        delay_us(1);
    }
    for ( i=0; i<8;i++)
    {           
        
        SHPORT = 0;
        DSPORT = (data1 << i)& 0x80;  
        delay_us(1);
        SHPORT = 1;         
        delay_us(1);
    }   
    STPORT = 1;       
   
}

void display(unsigned char jam, unsigned char menit)
{  
    shiftout(0x01,angka[menit%10]);
    shiftout(0x02,angka[menit/10]);
    shiftout(0x04,angka[jam%10]);
    shiftout(0x08,angka[jam/10]);
}

void main(void)
{

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Rising Edge
// INT1: Off
GICR|=0x40;
MCUCR=0x03;
//GIFR=0x40;

i2c_init();

// DS1307 Real Time Clock initialization
// Square wave output on pin SQW/OUT: On
// Square wave frequency: 1Hz
rtc_init(0,1,0);
#asm("sei"); 

while (1)
      {
      display(hour,min);
      }
}

Penjelasan program:
Program utama pada source code diatas adalah fungsi  main(void){…}. Struktur program ini memang hasil dari CodeWizard, tetapi akan lebih baik jika kita memahami satu persatu tiap syntact yang dihasilkan.
Pada program utama, pertama yang di eksekusi adalah inisialisasi interupsi eksternal. Register yang berhubungan dengan interupsi external adalah register
GICR // General Interrupt Control Register
MCUCR // MCU Control Register
GIFR // General Interrupt Flag Register

Pada aplikasi ini kita akan memanfaatkan interupsi eksternal 0(INT0 ) dengan triger berupa pulsa yang diberikan oleh DS1307 pin SOUT(Squarewave Output). Itulah kenapa PORTD.2 dihubungkan dengan pin SOUT DS1307.
Bit – bit pada register GICR adalah sebagai berikut.
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
INT1
INT0
INT2
-
-
-
IVSEL
IVCE

Kita akan memanfaatkan eksternal interrupt 0 sehingga bit6 pada register GICR harus di set (1) sehingga register GICR bernilai 0x40;
Bit – bit pada register MCUCR adalah sebagai berikut.
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
SE
SM2
SM1
SM0
ISC11
ISC10
ISC01
ISC00

Bit yang terpenting dari interupsi eksternal adalah bit 0 s/d bit 3. Yaitu tipe trigger eksternal interrupt 0 dan eksternal interrupt 1.
ISC01
ISC00
Trigger type external interrupt 0
0
0
Low level
0
1
Toggle (any change)
1
0
Falling edge
1
1
Rising edge

ISC11
ISC10
Trigger type external interrupt 1
0
0
Low level
0
1
Toggle (any change)
1
0
Falling edge
1
1
Rising edge

Kita memanfaatkan external interrupt 0 dengan trigger rising edge sehingga nilai register MCUCR adalah 0x03.
Bit – bit pada register GIFR adalah sebagai berikut.
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
INTF1
INTF0
INTF2
-
-
-
-
-

Bit – bit pada register ini adalah flag untuk eksternal interrupt 0,1,dan 2.Masing – masing bit akan set(1) ketika mendeteksi trigger interrupt. Karena kita memanfaatkan interrupt 0 dan trigger rising edge, sehingga ketika pin INT0 berubah kondisi dari 0 ke 1 akan terjadi interrupt dan bit INTF0 akan bernilai 1 sehingga nilai register GIFR = 0x40 dan akan reset(0) ketika vector interrupt dieksekusi.


Written by

We are Creative Blogger Theme Wavers which provides user friendly, effective and easy to use themes. Each support has free and providing HD support screen casting.

0 komentar:

Posting Komentar

© 2013 CitraTechindo. All rights resevered. Designed by Templateism