Monday, August 3, 2015

Pemograman RTC dengan mikrokontroler menggunakan bascom

IC RTC DS1307
IC RTC DS 1307





Rangkaian RTC DS 1307
Rangkaian RTC DS 1307



Rangkaian LCD 16x02
Rangkaian LCD 16x02





Pada tutorial belajar mikrokontroler kali ini kita akan mempelajari bagaimana membuat program RTC menggunakan bascom.

Pemograman RTC menggunakan bascom, RTC merupakan IC yang berhubungan dengan waktu seperti, jam, menit,detik, hari,tanggal bulan dan tahun.

Untuk menghasilkan waktu pada rangkaian elektronika anda, tentu dibutuhkan IC RTC ini.

Pada IC RTC terdapat beberapa fitur antara lain pengaturan waktu, pengambilan data waktu, serta RAM sebagai tempat penyimpanan data sementara.

Kita juga bisa menambahkan baterai untuk membackup tegangan ke IC RTC agar data dalam RAM tidak hilang dan waktu yang terdapat pada IC ini tetap melakukan perhitungan.

Perhitungan waktu yang dilakukan oleh IC RTC ini valid hingga tahun 2100 serta mode jam yang digunakan bisa di atur ingin Mode 24 jam atau mode AM PM.

Untuk komunikasi dengan perangkat lain seperti mikrokontroler, RTC DS1307 yang digunakan pada tutorial bascom kali ini menggunakan teknik I2C untuk komunikasinya.

Apa itu I2C, I2C yaitu komunikasi secara serial dengan menggunakan 2 jalur data, komunikasi yang dilakukan mengirimkan data dan menerima data.

Sedangkan pada SPI dan Mikrowire menggunakan 3 jalur data. Adapun pada RTC penggunaan 2 jalur berguna, 1 jalur untuk clock dan 1 jalurnya lagi untuk pertukaran data (data input dan data output).

Sedangakan komunikasi SPI dan Mikrowire menggunakan 3 jalur data yang berguna 1 jalur untuk clock, 1 jalur untuk data input dan 1 jalur untuk data output.

Komunikasi I2C pada IC RTC hampir sama dengan komunikasi eeprom serial seperti tipe 24C04.

Kegunaan pin-pin pada IC RTC:
  1. Vbat


  2. Terhubung dengan baterai 3,3 Volt

  3. GND, Vcc

  4. Input tegangan Vcc adalah 5 V

  5. X1,X2

  6. Terhubung dengan crystal 32768 kHz

  7. SQW (Square Wave Output)

  8. Pin ini mengeluarkan output berupa sinyal salah satu dari 13 taps yang disediakan oleh 15 tingkat pembagi internal dari RTC. Sinyal yang dikeluarkan dalam bentuk kotak

  9. SCL

  10. Pin ini mengeluarkan sinyal clock. Agar dapat bekerja pin ini harus diberi resistor pull up

  11. SDA

  12. Pin SDA ini berguna untuk data in dan data out.


Rangkaian RTC di bagian atas :
Untuk rangkaian RTC, bisa dilihat pada gambar di atas dari artikel . Pada rangkaian di atas  digunakan LCD 16x02 untuk menampilkan data waktu yang diberikan oleh RTC.

Pada gambar rangkaian yang terdapat di atas tampak antara rangkaian LCD, RTC dan mikrokontroler belum tersambung. Anda bisa mengikuti keterangan di atas untuk port RTC(lihat gambar Port D5 dan Port D6), untuk LCD (Port B0-Port B7) baca keterangan

Penyambungan Port-port mikrokontroler yang dihubungkan pada RTC:
  1. SDA = Portd.6
  2. SCL = Port5.5
Penyambungan Port-port mikrokontroler yang dihubungkan pada LCD:
  1. Db4 = Portb.4
  2. Db5 = Portb.5
  3. Db6 = Portb.6
  4. Db7 = Portb.7
  5. E = Portb.1
  6. Rs = Portb.0


 
Untuk melakukan pengetesan program yang dibuat alangkah baiknya menggunakan rangkaian yang anda beli dari toko.

Karena rangkaian yang dibeli dari toko telah terjamin dari kesalahan solder, komponen yang terpasang cukup kokoh.

Sebagai seorang programmer pemula yang ingin melakukan pemograman RTC, akan dijelaskan bagaimana logika untuk membuat program RTC.
Berikut program/ aplikasi untuk membaca waktu RTC yang akan kita tampilkan pada LCD:


‘----------------------------------
‘Deklarasi Librari
‘--------------------------------------------
$lib “mcsbyte.lbx”
$lib “ds1307clock.lib”

‘----------------------------------
‘Konfigurasi pin SCL dan SDA
‘--------------------------------------------
Config Scl = portd.5
Config Sda = portd.6
‘----------------------------------
‘Konfigurasi Alamat DS 1307
‘--------------------------------------------
Const Ds1307w = &HD0
Const Ds1307r = &HD1

‘----------------------------------
‘Konfigurasi Clock
‘--------------------------------------------
Config Clock = User
‘----------------------------------
‘Deklarasi Variabel-variabel yang digunakan
‘--------------------------------------------
Dim hari as byte
‘----------------------------------
‘Konfigurasi LCD
‘--------------------------------------------
Config Lcdpin = pin, Db4 = Portb.4 , Db5 = Portb.5, Db6 = Portb.6, Db7 = Portb.7, E = Portb.1, Rs = Portb.0
Config Lcd = 16*2
‘----------------------------------
‘Rutin Utama
‘--------------------------------------------
Cls
Date$ = "11/11/00"
Time$ = "02:20:00"
Lcd “Set Waktu”
Input Time$
Input Date$
Cls
Lcd “TANGGAL”
Locate 1,9
Lcd Date$
Lowerline
Lcd “JAM”
Locate 2,9
Lcd Time$
Waitms 1000
Do
Cls
Lcd “TANGGAL”
Locate 1,9
Lcd Date$
Waitms 10
Lowerline
Lcd “JAM”
Locate 2,9
Lcd Time$
Waitms 1000
Loop
End

‘----------------------------------
‘Sub rutin mengambil waktu
‘--------------------------------------------
Getdatetime:
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cstart
I2cwbyte Ds1307r
I2crbyte _sec, Ack
I2crbyte _min, Ack
I2crbyte _hour, Ack
I2crbyte Weekday, Ack
I2crbyte _day, Ack
I2crbyte _month,Ack
I2crbyte _year, Nack

I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return


‘----------------------------------
‘Sub rutin mengatur tanggal
‘--------------------------------------------
Setdate:
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)

I2cstart
I2cwbyte Ds1307w
I2cwbyte 4
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cstop
Return
‘----------------------------------
‘sub rutin mengatur jam
‘--------------------------------------------
Settime:
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop
Return


Penjelasan program:
  1. Dalam melakukan pemograman yang perlu diingat adalah program selalu dieksekusi dari atas ke bawah. Jika ada perintah menuju ke fungsi atau metoda maka program akan mengeksekusi metoda atau fungsi tersebut setelah itu barulah ia kembali ke baris program terakhir sebelum ia mengeksekusi metoda tersebut dan melanjutkan eksekusinya sampai program tersebut ada perintah berhenti atau perintah menuju ke fungsi atau metoda.

  1. Tanda petik atas (‘) pada program berarti kalimat di samping tanda (‘) tidak dieksekusi/dicompile oleh aplikasi BASCOM. Tanda petik merupakan pernyataan yang tidak akan dieksekusi oleh BASCOM

‘----------------------------------
‘Deklarasi Librari
‘--------------------------------------------

  1. Penggunaan Librari/pustaka/fungsi milik BASCOM
$lib “mcsbyte.lbx”
$lib “ds1307clock.lib”
Perintah di atas berarti kita menggunakan library/pustaka milik bascom yaitu
Rutin-rutin pengkonversi integer dapat menkonversi bilangan byte, integer, word dan longs ke sebuah string ini maksudnya beberapa kode akan mengalami overhead ketika kamu tidak menggunakan tipe bilangan long. Kamu dapat memasukan library mcsbyte.lbx untuk mengatasi hal tersebut library mcsbyte.lbx ini hanya dapat digunakan bila ingin merubah byte ke string.

ds1307clock.lib
Penggunaan library di atas harus dituliskan jika kita menggunakan RTC DS1307 pada rangkaian mikrokontroler. Namun jika pada saat mengkompile BASCOM tidak terdapat library ini, coba anda gunakan dahulu tanpa menggunakan library ini (hapus perintah library ini), jika masih terdapat error yang membutuhkan library ini anda harus mendownloadnya pada situs BASCOM.


  1. Inisialisasi pin SCL dan SDA terhubung ke port mikrokontroler
Config Scl = portd.6
Config Sda = portd.5
Karena kita menggunakan RTC maka kita harus menginisialisasi/memberitahu diawal program untuk SCL dan SDA pada RTC terhubung ke port mana dari mikrokontroler. Pada rangkaian di atas portd.6 terhubung ke pin SCL dari RTC sedangkan portd.5 terhubung ke pin SDA
  1. Dilakukan juga inisialisai awal alamat dari DS1307 dengan perintah, ini menandakan bahwa untuk melakukan penulisan(mengeset jam,menit dsb) ke IC Ds1307 menggunakan &HD0 dan melakukan pembacaan(mengambil jam,menit dsb) ke IC Ds1307 dengan menggunakan data &HD1

Const Ds1307w = &HD0
Const Ds1307r = &HD1

  1. Inisialisasi penggunaan clock pada RTC

Config Clock = User
Ketika kamu menggunakan config clock User, hanya internal variabel seperti _sec , _min , _hour akan dibuat

  1. Melakukan deklarasi variabel karena kita menggunakan variabel hari di dalam rutin program, maka perintahnya adalah

Dim hari as byte

  1. Melakukan inisialisasi LCD karena menggunakan LCD. Cara memprogram penggunaan LCD dapat dilihat di

Config Lcdpin = pin, Db4 = Portb.4 , Db5 = Portb.5, Db6 = Portb.6, Db7 = Portb.7, E = Portb.1, Rs = Portb.0

Config Lcd = 16*2
  1. Penjelasan rutin utama

Rutin utama merupakan program utama kita untuk mengendalikan RTC dan LCD berikut penjelasannya

Cls
Pertama-tama Perintah cls akan membersihkan Layar LCD

Lcd “Set Waktu”    'menuliskan pada LCD "Set Waktu"
Perintah Lcd “Set Waktu” akan menuliskan di LCD kata “Set Waktu”
Input Time$    'Menulisikan waktu dari var time ke RTC perintah input akan memanggil
                           'Rutin Settime
Input Date$     'Menulisikan waktu dari var date ke RTC perintah input akan memanggil
                           'Rutin Setdate

Cls                     'membersihkan display LCD
Lcd “TANGGAL”    'Menuliskan TANGGAL di LCD
Locate 1,9                 'memajukan cursor ke baris 1 kolom ke -9
Lcd Date$                 'menampilkan Date pada baris ke-1 kolom ke-9
Upperline                 'memindahkan kursor ke baris ke 2
Lcd “JAM”               'menuliskan kata JAM ke LCD
Locate 2,9                'memindahkan kursor ke baris 2 kolom 9
Lcd Time$               'menuliskan Jam ke LCD baris ke 2 kolom ke 9
Waitms 1000          'menunggu 1000 ms
Do                             'melakukan perintah perulangan Do... Loop
Cls                             'membersihkan display LCD
Lcd “TANGGAL”    'Menuliskan TANGGAL di LCD
Locate 1,9                 'memajukan cursor ke baris 1 kolom ke -9
Lcd Date$                 'menampilkan Date pada baris ke-1 kolom ke-9
Upperline                 'memindahkan kursor ke baris ke 2
Lcd “JAM”               'menuliskan kata JAM ke LCD
Locate 2,9                'memindahkan kursor ke baris 2 kolom 9
Lcd Time$               'menuliskan Jam ke LCD baris ke 2 kolom ke 9
Waitms 1000          'menunggu 1000 ms
Loop                          'melompat ke do
  1. Rutin untuk membaca waktu di dalam RTC, rutin ini akan dipanggil ketika ada perintah membaca RTC
Getdatetime:
I2cstart                       'memberi sinyal start komunikasi serial dengan I2C
I2cwbyte Ds1307w   'memberi sinyal penulisan byte &HD0 ke RTC untuk fungsi Read RTC
I2cwbyte 0                'memberikan sinyal 0 byte ke RTC untuk melakukan Read
I2cstart                      'memberi sinyal start komunikasi serial dengan I2C
I2cwbyte Ds1307r    'memberi sinyal penulisan byte &HD1 ke RTC untuk fungsi Read RTC
I2crbyte _sec, Ack   'sinyal jawaban RTC akan disimpan dalam vari _sec
I2crbyte _min, Ack   'sinyal jawaban RTC akan disimpan dalam vari _min
I2crbyte _hour, Ack   'sinyal jawaban RTC akan disimpan dalam vari _hour
I2crbyte Weekday, Ack  'sinyal jawaban RTC akan disimpan dalam vari _Weekday
I2crbyte _day, Ack    'sinyal jawaban RTC akan disimpan dalam vari _day
I2crbyte _month,Ack    'sinyal jawaban RTC akan disimpan dalam vari _month
I2crbyte _year, Nack     'sinyal jawaban RTC akan disimpan dalam vari _year

I2cstop   'memberi sinyal menghentikan komunikasi I2C
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)

'Perintah diatas akan merubah isi dari var _sec, _min, _hour, _day, _month, _year ke
'decimal
Return   'kembali ke program sebelum pemanggilan rutin Getdatetime
  1. Rutin Untuk mengeset tanggal pada RTC, rutin ini akan dipanggil ketika ada perintah menset tanggal RTC

Setdate:
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)



'Perintah diatas akan merubah isi dari var  _day, _month, _year ke 
'decimal

I2cstart                      'memberi sinyal start komunikasi serial dengan I2C
I2cwbyte Ds1307w  'memberi sinyal penulisan byte &HD0 ke RTC untuk fungsi Read RTC
I2cwbyte 4               'memberikan sinyal 4 byte ke RTC untuk melakukan Read
I2cwbyte _day      'memberi sinyal ke RTC untuk mengeset day
I2cwbyte _month   'memberi sinyal ke RTC untuk mengeset month
I2cwbyte _year      'memberi sinyal ke RTC untuk mengeset year
I2cstop                     'memberi sinyal menghentikan komunikasi I2C                  
Return                     'kembali ke program sebelum pemanggilan rutin Setdate

  1. Rutin untuk mengeset Jam pada RTC, , rutin ini akan dipanggil ketika ada perintah membaca RTC

Settime:
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
'Perintah diatas akan merubah isi dari var  _sec, _min, _hour ke
'decimal

I2cstart           'memberi sinyal start komunikasi serial dengan I2C
I2cwbyte Ds1307w  'memberi sinyal penulisan byte &HD0 ke RTC untuk fungsi Read RTC
I2cwbyte 0               'memberikan sinyal 0 byte ke RTC untuk melakukan Read
I2cwbyte _sec         ''memberi sinyal ke RTC untuk mengeset sec
I2cwbyte _min       'memberi sinyal ke RTC untuk mengeset min
I2cwbyte _hour      'memberi sinyal ke RTC untuk mengeset hour
I2cstop                     'memberi sinyal menghentikan komunikasi I2C
Return                     'kembali ke program sebelum pemanggilan rutin Settime




Pemograman RTC dengan mikrokontroler menggunakan bascom Rating: 4.5 Diposkan Oleh: Dedy Fermana

0 komentar:

Post a Comment

Note: Only a member of this blog may post a comment.