Friday, October 31, 2014

Real Time Clock dengan DS3231 di Raspberry Pi

Beberapa waktu yang lalu aku dapat mainan baru berupa raspberry pi tipe b+. Setelah ambil micro sd dari tablet langsung saja tak instal pake raspbmc. Untuk menginstal raspbmc di raspberry pi tidaklah begitu sulit karena sudah banyak bertebaran di internet manualnya. Waktu instal raspberry pi terhubung ke internet lewat lan di kantor sehingga semua prosesnya lancar sampai update segala. Aku begitu kaget ketika sampai di kos tak nyalakan lagi ternyata jam nya tidak cocok. Akhirnya aku tau di internet dan ternyata aku dapat jawabannnya. Ternyata dia (si  raspberry pi  itu) tidak punya hardware clock seperti di komputer atau laptop biasa.

Beberapa hari kemuadian aku mulai cari solusi. Ternyata di jauh sana ada yang jualan kayah gini
contohnya di http://nicegear.co.nz/raspberry-pi/high-precision-real-time-clock-for-raspberry-pi/ . Ternyata harganya nggak mahal juga tapi sayang aku tidak berhasil mendapatkannya di toko toko online di Indonesia mulai dari tokopedia,bhineka sampai cari di kaskus juga. Apalagi cari di toko elektronik sebelah kantor.

Dari gambar nya ada tulisan DS3231 tak coba saja cari di google.
Wow ternyata katanya itu adalah chipset real time clock. Mungkin mirip jam digital gitu. Aku juga dapat datasheetnya di http://datasheets.maximintegrated.com/en/ds/DS3231.pdf dan setelah tak baca ternyata nggak mudeng semua karena bahasanya tingkat tinggi.

Aku cari cari lagi dan akhirnya dapat http://nicegear.co.nz/blog/using-an-i2c-real-time-clock-rtc-with-a-raspberry-pi/ dan http://www.instructables.com/id/How-to-add-a-Real-time-clock-to-the-Raspberry-Pi-o/?ALLSTEPS
dari kedua link tersebut aku simpulkan bahwa ternyata chipset realtime clock tidak hanya DS3231 tapi ada juga DS1307 dan koneksinya pake i2c. Setelah cukup yakin aku pun cari yang jualan chip DS3231. Akhirnya aku dapat di https://www.tokopedia.com/sadewa-elc/ds3231-eeprom-module tapi bentuknya beda dan nggak ada keterangannya buat raspberry pi. Karena harganya murah aku pun beli satu.

Beberapa hari kemudian datang juga pesananku. Bentuknya seperti ini
Ada tulisannya 32K, SQW, SCL, SDA, VCC dan GND. Karea di link yang tak dapatkan diatas tidak ada cara memasangnya maka aku pakai cara coba coba saja.









Kebetulan aku punya gambar gpio raspberry pi b+ seperti ini


 Tanpa pikir panjang aku langsung pasang pake female-female konektor. Pertama aku pasang yang GND ke pin no 6 dan VCC ke pin no 1 dan ternyata ada lampunya menyala! Senang sekali rasanya. Setelah itu aku pasang SCL ke pin 5 dan sda ke pin 3 karena memang di situ ada tulisannya SCL1 I2C sama SCL1 I2C. Kok masih ada 2 pin lagi? tapi menurut penerawanganku nggak usah dipasang. Wkkkkwkwk pake metode dukun segala. Setelah itu aku ikuti langkah di link diatas.

Langkah pertama katanya menghilangkan backlist kernel modulnya

# Remove the module blacklist entry so it can be loaded on boot
sudo sed -i 's/blacklist i2c-bcm2708/#blacklist i2c-bcm2708/' /etc/modprobe.d/raspi-blacklist.conf
 
Wo panjang banget perintahnya. Dari pada pusing aku pake cara lain saja, intinya hanya menambah # (komen) di /etc/modprobe.d/raspi-blacklist.conf baris yang berisi blacklist i2c-bcm2708. Aku pake perintah nano /etc/modprobe.d/raspi-blacklist.conf lalu tak cari baris blacklist i2c-bcm2708 lalu depannya tak tambah # terus ctrl x lalu pilih y untuk menyimpan.

Langkah kedua menambahkan modulnya pake modprobe

# Load the module now
sudo modprobe i2c-bcm2708
 
Daripada nanti kalo reboot hilang aku masukkan sekalian di /etc/modules. Caranya seperti biasa pake nano /etc/modules lalu tak tambahkan tiga baris i2c-bcm2708 lalu i2c-dev lalu rtc-ds1307 seperti di link yang satunya biar bisa lihat pake i2cdetect sekalian. Setelah disimpan aku pun reboot raspberry pi agar modul kernel diload.

Langkah ketiga  melihat hardware dengan i2cdetect

#i2cdetect  -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- 57 -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --








Jika mengeluarkan output comnand not found maka paket i2c-tools belum terinstall di raspberry pi. Untuk menginstallnya pake perintah apt-get install i2c-tools tapi harus konek internet dulu.

Langkah keempat menambahkan baris ke rc.local

# Add the RTC device on boot
sudo sed -i 's#^exit 0$#echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device#' /etc/rc.local
echo exit 0 | sudo tee -a /etc/rc.local
 
 
 Perintah di atas intinya menmbahkan baris echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device di file /etc/rc.local tepat di atas exit 0. Seperti biasa bisa pake nano sebagai text editor. Angka sakti 0x68 sebenarnya didapat dari hasil dari i2cdetect di atas dimana ada UU di kolom 8 baris 60. Nama modulnya pake ds1307 bukan ds3231 tapi ternyata bisa mungkin mirip kali ya cara kerja hardwarenya.

Setelah selesai booting coba coba tak ketik perintah hwclock ternyata keluar output tapi tanggalnya masih kacau. Tahunnya masih 2007 wkwkkwkwkwkwk. Tak coba perintah date ternyata tanggal dan jamnya sudah bener akhirnya tak cocokkan jam di rtc nya dengan perintah hwclock -w. Setelah ini hasil perintah date sama hwclock menunjukkan waktu yang hampir sama yang bearti tanggal sistem sudah sama dengan tanggal di rtc. Sekarang tinggal menambahkan perintah di hwclock -s di bawah baris ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device diatas exit 0 di file /etc/rc.local pake nano agar jam sistem selalu diupdate dari jam di rtc pada waktu sistem operasi booting

Sekarang masalahnya tinggal satu. Gimana caranya mencocokkan jam di rtc sesuai jam sistem pada waktu sistem operasi shutdown. Harapannya jika jam sistem di update maka pada waktu shutdown jam di hardware clock ikut terupdate juga. Untuk sementara jika mengupdate jam sistem harus update jam di rtc secara manual pake hwclock -w jika lupa maka jam sistem jadi nggak cocok lagi karena diupdate sesuai jam rtc pada saat booting. Pembaca ada yang tau caranya? kasih tau ya