raspi_lcd_rebol

Bagaimana Cara Memrogram LCD Menggunakan Raspberry Pi dan REBOL

raspi_lcd_rebol

LCD 2 x 16-karakter merupakan komponen tampilan yang populer dan relatif mudah digunakan, baik secara rangkaian (hardware) maupun secara pemrograman (software). Pada tulisan kali ini saya akan memberikan catatan eksperimen tentang bagaimana memrogram LCD menggunakan bahasa REBOL.

Pada eksperimen ini saya menggunakan modul prototipe LCD dengan konfigurasi pin header konektor sebagai berikut:

Pin Nama Pin
1 GND
2 VCC
3 LCD-RS
4 LCD-E
5 DATA-4
6 DATA-5
7 DATA-6
8 DATA-7

Untuk mengontrol LCD yang kita butuhkan adalah sumber tegangan untuk LCD (VCC-GND) dan 6 buah pin GPIO yang difungsikan sebagai OUTPUT. Kita dapat menggunakan GPIO yang mana saja. Namun akan lebih baik jika kita menggunakan GPIO tanpa fitur tambahan seperti I2C, SPI atau UART, jadi GPIO yang murni untuk digital-input atau digital-output. Untuk Raspi B+, kita bisa gunakan GPIO dengan nomor pin header 29 hingga 40 yang meliputi antara lain GPIO05, GPIO06, GP12, GPIO13 dan seterusnya.

Pada eksperimen ini saya menggunakan pin-pin GPIO berikut ini:

Pin LCD Pin Raspberry Pi
LCD-RS GPIO-20
LCD-E GPIO-21
DATA-4 GPIO-26
DATA-5 GPIO-19
DATA-6 GPIO-13
DATA-7 GPIO-6
VCC VCC
GND GND

Keenam pin GPIO tersebut harus diaktifkan dan difungsikan sebagai OUTPUT. Berikut adalah penggalan program yang bertugas mengaktifkan dan mengeset fungsi GPIO-GPIO untuk LCD tersebut.

;Konfigurasi GPIO untuk LCD
;LCD-GPIO [RS,  E, D4, D5, D6, D7]
LCD-GPIO: [20  21  26  19  13   6]
LCD-RS: LCD-GPIO/1
LCD-E: LCD-GPIO/2
LCD-D4: LCD-GPIO/3
LCD-D5: LCD-GPIO/4
LCD-D6: LCD-GPIO/5
LCD-D7: LCD-GPIO/6

init-gpio: func [
   gpios [block!]
][
   foreach n gpios [
      either exists? to file! ajoin [%/sys/class/gpio/gpio n] [
         write to file! ajoin [%/sys/class/gpio/gpio n "/direction"] "out^/"
      ][
         write %/sys/class/gpio/export ajoin [n newline]
         write to file! ajoin [%/sys/class/gpio/gpio n "/direction"] "out^/"
      ]
   ]
]

Anda dapat menggunakan GPIO yang lain sesuai dengan kebutuhan aplikasi. Namun jika Anda perhatikan pada layout pin Raspberry Pi, maka pemilihan GPIO di atas, selain dipilih GPIO yang tidak memiliki fungsi/fitur tambahan, maka keenam pin GPIO itu terletak pada satu area pin (bagian bawah) sehingga diharapkan akan lebih rapi dan lebih mudah pemasangannya.

Pemrograman LCD Menggunakan REBOL

LCD perlu diinisialisasi terlebih dahulu sebelum dapat digunakan. Inisialisasi meliputi pemilihan mode pemrograman antara lain mode 8-bit dan mode-4 bit, pengesetan properti kursor dan penghapusan layar LCD (clear-screen).

Btw, pemrograman mode 8-bit tentu lebih mudah dibandingkan dengan mode 4-bit karena kita bisa langsung menuliskan data 8-bit dalam satu kali proses. Namun demikian, demi menghemat penggunaan pin GPIO, maka kita harus menggunakan mode 4-bit sehingga kita bisa menghemat 4 pin GPIO untuk keperluan yang lain.

Pada mode 4-bit, kita harus mengirimkan data yang berukuran 8-bit dalam 2 kali proses dengan pembagian 4-bit (nibble). Adapun urutan pengirimannya adalah high-nibble (bit4-bit7) dan kemudian low-nibble (bit0-bit3).

Untuk mengatur konfigurasi LCD, data ditulis ke Control-Register. Untuk menulis ke Control-Register, maka pin LCD-RS (Register Selector) harus diberi logika “0”. Dan untuk menampilkan karakter ke LCD, data ditulis ke Data-Register. Untuk menulis ke Data-Register, maka pin LCD-RS harus diberi logika “1”.

Setelah register tujuan ditentukan dengan mengeset/mereset LCD-RS, maka data bisa ditulis ke pin-pin data DATA-4, DATA-5, DATA-6 dan DATA-7 dengan urutan seperti yang telah dijelaskan sebelumnya. Dan untuk memasukkan data ke register yang dituju, maka digunakanlah pin LCD-E. LCD-E digunakan untuk meng-update atau memasukkan data ke register. Perubahan kondisi logika dari logika “1” ke logika “0” pada pin LCD-E akan menyebabkan data pada pin-pin data ditulis/masuk ke register yang dituju.

Penasaran bagaimana programnya? Berikut adalah penggalan program untuk menulis data ke LCD dan inisialisasi LCD.

write-lcd: func [
   d [binary!]
   /DATA
][
   either DATA [set-gpio LCD-RS "1"] [set-gpio LCD-RS "0"]
   set-gpio LCD-D4 "0"
   set-gpio LCD-D5 "0"
   set-gpio LCD-D6 "0"
   set-gpio LCD-D7 "0"
   all [equal? #{10} d and #{10} set-gpio LCD-D4 "1"]
   all [equal? #{20} d and #{20} set-gpio LCD-D5 "1"]
   all [equal? #{40} d and #{40} set-gpio LCD-D6 "1"]
   all [equal? #{80} d and #{80} set-gpio LCD-D7 "1"]
   set-gpio LCD-E "1"
   set-gpio LCD-E "0"  ;tulis 4-bit high-nibble

   set-gpio LCD-D4 "0"
   set-gpio LCD-D5 "0"
   set-gpio LCD-D6 "0"
   set-gpio LCD-D7 "0"
   all [equal? #{01} d and #{01} set-gpio LCD-D4 "1"]
   all [equal? #{02} d and #{02} set-gpio LCD-D5 "1"]
   all [equal? #{04} d and #{04} set-gpio LCD-D6 "1"]
   all [equal? #{08} d and #{08} set-gpio LCD-D7 "1"]
   set-gpio LCD-E "1"
   set-gpio LCD-E "0"   ;tulis 4-bit low-nibble
]

init-lcd: func [ 
][
  write-lcd #{33}
  write-lcd #{32}
  write-lcd #{28}
  write-lcd #{0C}  
  write-lcd #{06}
  write-lcd #{01}  
]

Nah, begitulah cerita singkat tentang proses pemrograman LCD yang disertai penggalan program dalam bahasa  REBOL.

Untuk program selengkapnya, saya mohon maaf hanya menampilkan screenshot-nya sahaja karena listingnya cukup panjang. Anda dapat menghubungi saya melalui email atau SMS jika berminat dengan file-file program REBOL pada eksperimen ini. Nah, berikut adalah beberapa screenshot program REBOL untuk menampilkan tulisan pada LCD 2 x 16 karakter.

rebol3_lcd_1

rebol_lcd_2

Menjalankan Program LCD REBOL

Untuk menjalankan program LCD REBOL, kita bisa menggunakan perintah berikut ini:

$ sudo ./r3 rpilcd.r

Dan selain foto pada awal tulisan, berikut ini adalah foto lain hasil pengujian yang saya lakukan.

raspi_lcd_raspi

raspi_lcd_suhu

Dengan adanya LCD meskipun cuma berukuran 2 x 16 karakter, kita bisa menampilkan informasi-informasi penting seperti suhu CPU, sisa memori, hasil pembacaan sensor suhu, sensor kelembaban dan lain sebagainya.

Nah, sekian dulu Catatan Eksperimen Raspberry Pi untuk kali ini. Nantikan catatan eksperimen selanjutnya.

Informasi Modul LCD Raspberry Pi

Modul LCD 2 x 16 karakter untuk Raspberry Pi sedang saya siapkan. Informasi harga dan cara pemesanan akan saya sampaikan setelah modul siap. Modul akan dilengkapi dengan program Command-Line Interface (CLI) untuk memudahkan menampilkan tulisan pada LCD melalui Shell. Dengan program CLI, kita akan dapat menampilkan tulisan pada LCD menggunakan program apapun seperti Python, PHP dan BASH.

Selamat berkarya.

raspi_led_tombol

Bagaimana Cara Membaca Tombol Menggunakan Raspberry Pi dan REBOL

Pada postingan sebelumnya saya memberikan contoh bagaimana cara mengontrol lampu LED menggunakan Raspberry Pi. Dan sesuai janji saya di akhir postingan tersebut, saya akan memberikan contoh bagaimana cara membaca masukan menggunakan Raspberry Pi. Pada contoh ini saya akan menggunakan sebuah Push-Button sebagai tombol untuk mengaktifkan rangkaian flip-flop. Jadi flip-flop akan bekerja jika dan selama tombol ditekan dan flip-flop akan berhenti bekerja jika dan selama tombol tidak ditekan (dilepas). Tipe masukan (dalam hal ini tombol) adalah aktif-tinggi. Jika ditekan, pin akan bertegangan 3V3 (berlogika tinggi) dan jika tidak ditekan, pin akan bertegangan 0V (berlogika rendah).

raspi_led_tombol

LED1 dan LED2 masih tetap dikontrol oleh pin GPIO-5 dan GPIO-6, sedangkan tombol PB1 dihubungkan ke pin GPIO-26.

Membaca Status Masukan GPIO (SHELL)

Untuk membaca status masukan GPIO, kita bisa menggunakan perintah cat. Berikut adalah langkah-langkahnya:

  1. Buka terminal
  2. Aktifkan akses root
    $ sudo -i
  3. Konfigurasi GPIO-26 sebagai INPUT
    $ echo "26" > /sys/class/gpio/export
    $ echo "in" > /sys/class/gpio/gpio26/direction
  4. Tanpa ditekan tombolnya, baca masukan GPIO-26
    $ cat /sys/class/gpio/gpio26/value
  5. Tombol ditekan dan baca masukan GPIO-26
    $ cat /sys/class/gpio/gpio26/value

Hasil eksperimen perintah-perintah tersebut dapat dilihat pada screenshot berikut ini.

raspi_gpio_in_shell

Nampak pada screenshot di atas bahwa perintah cat /sys/class/gpio/gpio26/valuemenghasilkan nilai 0 ketika tombol tidak ditekan dan menghasilkan nilai 1 ketika tombol ditekan.

Flip-Flop Terkendali Tombol (REBOL)

Untuk membuat rangkaian flip-flop terkendali tombol, berikut adalah listing program REBOL-nya.

Listing Program flipflop.r3

REBOL [
	filename: %flipflop.r3
	title: "Flip-Flop Terkendali Tombol"
	programmer: "Chandra MDE"
	website: http://raspi.teknikelektrolinks.com
]

DPB1: %/sys/class/gpio/gpio26/direction
VPB1: %/sys/class/gpio/gpio26/value
DLED1: %/sys/class/gpio/gpio5/direction
DLED2: %/sys/class/gpio/gpio6/direction
VLED1: %/sys/class/gpio/gpio5/value
VLED2: %/sys/class/gpio/gpio6/value

;inisialisasi GPIO-5 dan GPIO-6 = OUTPUT, GPIO-26 = INPUT
init-gpio: func [
][
	write %/sys/class/gpio/export "5"
	write DLED1 "out"
	write VLED1 "0"
	
	write %/sys/class/gpio/export "6"
	write DLED2 "out"
	write VLED2 "0"
	
	write %/sys/class/gpio/export "26"
	write DPB1 "in"
]

;lampu kedip alias flipflop
flip-flop: func [
][
	write VLED1 "1" ;on
	wait .1  ;100ms - cepat
	write VLED1 "0" ;off
	write VLED2 "1" ;on
	wait .1
	write VLED2 "0" ;off
]

n: 0
i: []

init-gpio
print "Tekan TOMBOL untuk mengaktifkan flip-flop..."
forever [
	i: read VPB1
	if i == #{310A} [ ;jika tombol ditekan
		n: n + 1
		print ["Perulangan ke-" n]
		flip-flop
                ;selesai jika sudah blinking 15 kali
		if n == 15 [print "Selesai." quit]
	]
]

Menjalankan flipflop.r3

Untuk menjalankan program flipflop.r3, gunakan perintah:

$ sudo ./r3 flipflop.r3

Dan berikut ini adalah hasil eksekusi program flipflop.r3:

raspi_flipflop_tombol

Nah, cukup sekian Catatan Eksperimen Raspberry Pi kali ini, semoga ada guna dan manfaatnya.

Jika Anda berminat dengan file aplikasi REBOL3 dan file program flipflop.r3, silakan menuliskan komentar di bawah postingan ini dengan menyertakan nama dan alamat emailnya. File-file akan saya kirimkan ke alamat email Anda masing-masing.

Selamat berkarya.

raspi_gpio_led

Bagaimana Cara Mengontrol Lampu LED Menggunakan Raspberry Pi dan REBOL

Mengontrol lampu LED menggunakan GPIO Raspberry Pi sangatlah mudah. GPIO dapat diakses seperti layaknya mengakses file. Dan memanglah setahu saya segala sesuatu yang namanya IO pada sistem operasi linux dapat diakses secara file. Pada postingan kali ini saya akan berikan contoh bagaimana cara mengontrol lampu LED menggunakan Raspberry Pi dan REBOL.

Mengakses GPIO Raspi Dengan Shell

GPIO Raspberry Pi dapat kita akses secara langsung melalui shell menggunakan perintah-perintah Shell seperti echo (write) dan cat (read). Sebelum dapat mengakses GPIO, maka perlu dilakukan export terlebih dahulu. Export akan menciptakan folder baru untuk pin yang di-export dan sekaligus menciptakan file-file fungsi kontrol untuk mengontrol fungsi pin yang di-export. Fungsi kontrol tersebut antara lain:

  • active_low
  • direction
  • edge
  • power
  • subsystem
  • uevent
  • value

File-file fungsi kontrol tersebut dapat dibaca oleh non-root (user) akan tetapi untuk menuliskan data hanya dapat dilakukan oleh root sebagai pemilik. Oleh karenanya diperlukan sudo.

Berikut adalah contoh menyalakan lampu LED pada GPIO-5 (pin-29) menggunakan shell.

  1. Buka terminal
  2. Rangkai LED seperti foto di atas (LED aktif LOW)
  3. Aktifkan akses root dengan perintah:
    $ sudo -i
  4. Konfigurasi GPIO-5 sebagai OUTPUT dan LED=OFF dengan perintah:
    $ echo "5" > /sys/class/gpio/export
    $ echo "out" > /sys/class/gpio/gpio5/direction
    $ echo "1" > /sys/class/gpio/gpio5/value
  5. Menyalakan LED dengan mengeset GPIO-5 = LOW (“0″)
    $ echo "0" > /sys/class/gpio/gpio5/value
  6. Mematikan LED dengan mengeset GPIO-5 = HIGH (“1″)
    $ echo "0" > /sys/class/gpio/gpio5/value
  7. Kembalikan GPIO-5 ke kondisi semula setelah digunakan
    $ echo "5" > /sys/class/gpio/unexport
  8. Dan kita kembalikan kembali ke akses user
    $ exit

Guampang, bukan? Nah, sekarang kita akan melakukan hal yang sama dengan REBOL3.

Mengakses GPIO Raspi Dengan REBOL3

  1. Masih dengan rangkaian LED yang sama, kita buka terminal
  2. Jalankan REBOL3 dengan perintah:
    $ sudo ./r3
  3. Konfigurasi GPIO-5 sebagai output dan LED=OFF dengan perintah:
    >> write %/sys/class/gpio/export "5"
    >> write %/sys/class/gpio/gpio5/direction "out"
    >> write %/sys/class/gpio/gpio5/value "1"
  4. Menyalakan LED dengan mengeset GPIO-5 = LOW (“0″)
    >> write %/sys/class/gpio/gpio5/value "0"
  5. Mematikan LED dengan mengeset GPIO-5 = HIGH (“1″)
    >> write %/sys/class/gpio/gpio5/value "1"
  6. Membuat Blinking LED dengan perulangan 10 kali – delay 500ms
    >> gpio5: %/sys/class/gpio/gpio5/value
    >> loop 10 [write gpio5 "0" wait .5 write gpio5 "1" wait .5]
  7. LED pada GPIO-5 pun berkedip sebanyak 10 kali dengan durasi-on/off 500 milidetik.

raspi_gpio_rebol

Contoh Program Flip-Flop

Setelah sukses mengontrol sebuah lampu LED pada GPIO-5 (pin-29), sekarang kita akan mengontrol dua lampu LED dengan membuat aplikasi Flip-Flop. LED1 terhubung ke GPIO-5 dan LED2 terhubung ke GPIO-6. Berikut adalah kode program REBOL-nya.

Listing Program flipflop56.r3

REBOL [
  filename: %flipflop56.r3
  title: "Flip-Flop LED Raspi GPIO-5 dan GPIO-6"
  programmer: "Chandra MDE"
  blog: "Raspberry Pi Notes"
  website: http://raspi.teknikelektrolinks.com
]

jumlah-loop: 1000 ; default = seribu kedip
		  ; jumlah-kedip bisa diatur menggunakan parameter
		  ; contoh: ./r3 flipflop56.r3 10 ===> 10 kali

all [system/script/args jumlah-loop: to integer! system/script/args]

DLED1: %/sys/class/gpio/gpio5/direction
DLED2: %/sys/class/gpio/gpio6/direction
VLED1: %/sys/class/gpio/gpio5/value
VLED2: %/sys/class/gpio/gpio6/value

;inisialisasi GPIO-5 dan GPIO-6 sebagai OUTPUT
init-gpio: func [
][
	write %/sys/class/gpio/export "5"
	write DLED1 "out"
	write VLED1 "1"
	write %/sys/class/gpio/export "6"
	write DLED2 "out"
	write VLED2 "1"
]

;lampu kedip alias flipflop
flip-flop: func [
][
	write VLED1 "0" ;on
	wait .5
	write VLED1 "1" ;off
	write VLED2 "0" ;on
	wait .5
	write VLED2 "1" ;off
]

init-gpio
for n 1 jumlah-loop 1 [
        print ["Perulangan ke-" n]
	flip-flop
]
quit

Menjalankan Program Flip-Flop

Setelah kode program flipflop56.r3 selesai diketik, kita dapat langsung mencobanya dengan menjalankan perintah pada shell sebagai berikut:

$ sudo ./r3 flipflop56.r3

Pemanggilan tanpa argument (parameter) akan menyebabkan program menjalankan proses flip-flop sebanyak 1000 kali, yakni nilai default dari jumlah-loop. Untuk menjalankan proses flip-flop sebanyak 10 kali, gunakan perintah sebagai berikut:

$ sudo ./r3 flipflop56.r3 10

Screenshot Flip-Flop RASPI-REBOL

raspi_rebol_flipflop

Video Pengujian Flip-Flop REBOL

Anda dapat menyaksikan video pengujian program dan rangkaian di atas pada situs youtube melalui link berikut ini:

https://youtu.be/X_hM9Dj7Ao0

Sangat menarik, bukan? Pada postingan yang akan datang saya akan memberikan contoh bagaimana membaca masukan (input) dari GPIO Raspberry Pi menggunakan Shell dan REBOL. File aplikasi REBOL3 (r3) dan kode program flipflop56.r3 dapat Anda miliki secara GRATIS dengan MEMBERIKAN KOMENTAR di bawah postingan ini.

Silakan memberikan komentar beserta nama dan alamat email Anda dan saya akan mengirim file-file tersebut langsung ke email Anda.

Sekian Catatan Eksperimen Raspberry Pi kali ini. Semoga bermanfaat.

Selamat berkarya!

STAR51 – Sistem Minimum AT89S51/STC51 Yang Muantap!

Teknik Elektro Links

Mikrokontroler AT89S51/52 merupakan mikrokontroler yang sangat populer di Indonesia. Mikrokontroler AT89S51/52 memiliki jumlah pin I/O yang relatif banyak yakni 32 pin. Mikrokotroler ini sangat mudah digunakan karena tidak memerlukan pengesetan fusebit seperti halnya mikrokontrler tipe AVR. Cukup dengan memberikan suplai VCC-GND sebesar 5V DC, rangkaian osilator menggunakan kristal dan rangkaian reset, maka AT89S51/52 siap digunakan.

star51_pcb_640Meskipun AT89S51 tidak secanggih AVR, akan tetapi sampai saat ini mikrokontroler tipe ini masih menjadi pilihan bagi pemula yang ingin belajar dan praktek mikrokontroler.

Gambar di atas adalah modul sistem minimum AT89S51/52 yang saya beri nama STAR51. Modul ini memiliki rangkaian catudaya dengan regulator tegangan 7805 untuk menghasilkan tegangan kerja mikro sebesar 5V DC. Modul juga dilengkapi dengan rangkaian konverter tegangan RS232/TTL sehingga STAR51 dapat berkomunikasi dengan komputer, modem, atau piranti lain yang memiliki port komunikasi RS232.

Berikut adalah spesifikasi modul sistem minimum STAR51:

  • Mikrokontroler AT89S51/52 (4K Flash Memory, 128 byte RAM)
  • Kristal…

Lihat pos aslinya 239 kata lagi