Kamis, 27 Desember 2012

Membuat Jam Digital


DS1307 merupakan IC Real Time Clock (RTC) yang dapat diakses dengan mikrokontroler menggunakan komunikasi serial I2C. Berikut ini contoh untuk menampilkan RTC DS1307 pada LCD menggunakan Bascom AVR. Dengan adanya RTC ini maka kita dapat menampilkan waktu yang berupa jam, menit, dan detik, serta tanggal, yaitu hari, bulan dan tahun, seperti yang tercatum di datasheet DS1307.


Koneksi RTC DS1307 dengan Mikrokontroler
Berikut ini gambar schematic dari rangkaian RTC DS1307 yang disimulasikan di proteus 7.4 dengan menggunakan Mikrokontroler ATmega32.


Data jam pada RTC disimulasi ini dapat dirubah dengan menekan swicth seting jam agar terhubung ke groud. Maka  data detik, menit dan jam dapat disesuaikan, Berikut ini listing program rtc ds1307 menggunakan bascom AVR.

$regfile = "m32def.dat"
$crystal = 12000000

'konfigurasi pin LCD
   Config Porta = Output
   Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.2 , Rs = Porta.0
   Config Lcd = 16 * 4 : Cursor Off
   Cls

   $lib "ds1307clock.lib"

'konfigurasi pin Sda & Scl untuk komunikasi I2C
   Config Sda = Portc.1
   Config Scl = Portc.0

'nilai konstanta Ds1307  saat tulis dan baca
   Const Ds1307w = &HD0
   Const Ds1307r = &HD1

'konfiguasi input pust bottom
   Config Pinb.0 = Input , Pinb.1 = Input , Pinb.2 = Input , Pinb.3 = Input
   Config Debounce = 30

'Pendeklarasian variabel yang digunakan'
   Dim A As Byte , B As Byte , Data1 As Byte , C As Byte
   Dim Detik As Byte , Menit As Byte , Jam As Byte

Cursor Off
Cls

'program utama
Cls
   Main:
   Do
   Gosub Ds1307
   Gosub Seting
   Gosub Pustbottom
Loop

Ds1307:
      I2cstart
      I2cwbyte Ds1307w                   'kirim alamat register RAM
      I2cwbyte 0                         'kirim alamat o  yang dibaca detik
      I2cstart
      I2cwbyte Ds1307r                   'baca alamat register RAM
      I2crbyte Detik , Ack               'Variable Detik
      I2crbyte Menit , Ack               'Variable Menit
      I2crbyte Jam , Nack                'variable Jam
      I2cstop

Detik = Makedec(detik) : Menit = Makedec(menit) : Jam = Makedec(jam)
If Detik > 59 Then Detik = 0
If Menit > 59 Then Menit = 0
If Jam > 23 Then
Jam = 0
Gosub Detik
End If

Return
Seting:
If Pinb.3 = 1 Then Gosub Disply_seting
Disply_seting:
      Locate 3 , 1
      Lcd "Jam = "
      If Jam < 10 Then
      Lcd "0" ; Jam ; ":" ;
      Else
      Lcd Jam ; ":" ;
      End If

      If Menit < 10 Then
      Lcd "0" ; Menit ; ":" ;
      Else
      Lcd Menit ; ":" ;
      End If

      If Detik < 10 Then
      Lcd "0" ; Detik
      Else
      Lcd Detik
      End If

Locate 4 , 1
If Jam = 6 Then
Lcd "selamat pagi "
End If

Locate 4 , 1
If Jam = 10 Then
Lcd "selamat Siang"
End If

Locate 4 , 1
If Jam = 16 Then
Lcd "selamat sore"
End If

Return
Pustbottom:
   Debounce Pinb.0 , 0 , Detik , Sub
   Debounce Pinb.1 , 0 , Menit , Sub
   Debounce Pinb.2 , 0 , Jam , Sub

Return
Detik:
      Incr Detik
      If Detik > 59 Then Detik = 0
      Detik = Makebcd(detik)
      I2cstart
      I2cwbyte Ds1307w
      I2cwbyte 0
      I2cwbyte Detik
      I2cstop
      Return

Menit:
      Incr Menit
      If Menit > 59 Then Menit = 0
      Menit = Makebcd(menit)
      I2cstart
      I2cwbyte Ds1307w
      I2cwbyte 1
      I2cwbyte Menit
      I2cstop
      Return
Jam:
      Incr Jam
      If Jam > 23 Then Jam = 0
      Jam = Makebcd(jam)
      I2cstart
      I2cwbyte Ds1307w
      I2cwbyte 2
      I2cwbyte Jam
      I2cstop

Return

semoga bisa bermafaat ..^_^

Rabu, 11 Januari 2012

Pengenalan PWM (pulse width Modulation)


      Post pertama, kali ini  akan membahas tentang prinsip dasar pwm.

PWM (Pulse Width Modulation) merupakan suatu metode untuk mendapatkan sinyal DC yang bervariasi yang dikendalikan secara analog maupun digital yang bertujuan untuk mengontrol kecepatan motor. Sinyal DC tersebut adalah suatu pulsa dengan frekuensi dan amplitudo tetap dan lebar pulsa yang dapat diubah – ubah. PWM bisa dibangkitkan secara software maupun hardware. sehingga dapat dibentuk gelombang dengan duty cycle yang dapat diatur sesuai dengan program. Adapun bentuk gelombang PWM dapat dilihat pada Gambar dibawah ini :

Bentuk Gelombang PWM
PWM pada dasarnya adalah menyalakan (ON) dan mematikan (OFF) motor DC dengan cepat, Kuncinya adalah mengatur berapa lama waktu ON dan OFF.


T - ON Dan T - OFF Pada PWM
Duty Cycle adalah rasio lebar pulsa (dalam satuan waktu) ON terhadap periodenya/waktu total (waktu total = ON + OFF). Duty cycle 10% artinya lebar pulsa high adalah 10% dari periode sinyal kotak, begitu juga 50% dan 90%.

Duty Cycle 10%, 50% dan 90%
Variasi duty cycle ini memberikan harga tegangan rata – rata yang berbeda–beda. Sinyal PWM dengan duty cycle yang besar memiliki harga rata-rata yang lebih besar dibandingkan yang memiliki duty cycle kecil. Nilai tegangan yang diberikan sebanding dengan nilai duty cycle yang diberikan. Adapun rumus duty cycle, yaitu :
duty cycle = t high / (t high + t low) × 100% 
Metode Pulse Width Modulation (PWM) merupakan metode yang cukup efektif untuk mengendalikan kecepatan motor DC. PWM ini bekerja dengan cara membuat gelombang persegi yang memiliki perbandingan pulsa high terhadap pulsa low yang telah ditentukan, biasanya diskalakan dari 0 hingga 100% seperti pada Gambar  Gelombang persegi ini memiliki frekuensi tetap (biasanya maximum 10 KHz) namun lebar pulsa high dan low dalam 1 periode yang akan diatur. Perbandingan pulsa high terhadap low ini akan menentukan jumlah daya yang diberikan ke motor DC. 
Penggunaan sinyal PWM biasanya untuk mengendalikan kecepatan motor DC . Salah satu faktor penting dalam penggunaan sinyal ini adalah besarnya frekuensi yang dipilih. Membangkitkan sinyal dengan frekuensi rendah lebih mudah dibandingkan frekuensi tinggi. Tetapi sinyal PWM dengan frekuensi rendah tidak memberikan hasil yang memuaskan jika diaplikasikan pada motor DC. Putaran motor DC pada sinyal PWM frekuensi rendah akan tersendat-sendat atau putaran motor tidak mulus.