Percobaan Pemrograman Periferal Input/Output ESP32

Berikut ini beberapa percobaan pemrograman untuk mengakses input/output periferal pada mikroprosesor ESP32. Percobaan dilakukan pada board Lolin32 Lite, namun dapat dilakukan juga pada board ESP32 tipe lain.

Jenis percobaan yang umum pada mikroprosesor di antaranya sebagai berikut:

  • Input digital
  • Output digital
  • Input analog (dengan Analog to Digital Converter / ADC)
  • Output analog (dengan Digital to Analog converter / DAC)
  • Port serial (input output)
  • Interupsi timer
  • Interupsi eksternal / pin

Percobaan Port Digital

under construction

Percobaan Port Serial

Pada ESP32 terdapat 3 buah port serial: UART0, UART1 dan UART2. UART0 sudah tersambung melalui chip USB Serial CH340 pada board Lolin32 Lite, sehingga jika ingin menggunakan UART0 cukup dengan menyambungkan kabel USB dari PC ke konektor mikro USB pada ESP32. Port UART0 ini dipakai untuk melakukan upload program dan juga sebagai input/output default dari ESP32. Output ke port UART0 dari program di ESP32 dapat dilakukan dengan fungsi input/output standar seperti printf().

Pin-pin untuk UART0 pada ESP32 adalah U0TXD sebagai TX dan U0RXD sebagai RX. Level tegangan TX dan RX di sini adalah 3.3 volt.

Pin TX dan RX UART0 terhubung ke ESP32

Pin TX dan RX ini terhubung ke IC CH340C yang kemudian terhubung ke port USB (pin D+ dan D-)

Konverter TX/RX (TTL 3.3 volt) ke USB
Skema port USB pada Lolin32 Lite

Port UART2 dan UART3 dapat diaktifkan jika perlu. Pin yang dipakai dapat dipilih dan diatur menggunakan software. Jika UART2 dan UART3 tidak digunakan, pin-pin nya dapat dipakai sebagai fungsi lain, misalkan sebagai GPIO input/output digital.

Pin UART2 dan UART3 menggunakan level TTL, sehingga jika ingin dihubungkan ke PC dapat menggunakan konverter USB ke Serial. Perlu dipilih komponen USB to Serial yang dapat menggunakan level tegangan 3.3 volt. Skema pemasangan konverter adalah sebagai berikut:

interkoneksi port serial UART2 dan UART3

Pin TX dihubungkan dengan RX , pin RX dihubungkan dengan TX, kedua pin GND dihubungkan. Pin 5 volt / 3,3 volt jangan dihubungkan , kecuali memang ESP32 mau diberi daya dari modul USB-Serial.

Perhatikan bahwa mesti menggunakan modul USB-Serial dengan tegangan kerja 3m3 volt. Ada modul USB-Serial yang dapat bekerja pada tegangan 5 volt maupun 3,3 volt, dan dapat diatur menggunakan jumper.

Chip USB to Serial yang umum di pasaran antara lain:

  • FTDI based, misal FT232. Biasanya paling mahal, namun enaknya adalah drivernya sudah built in di Windows maupun Mac OSX
  • CH340 based, ini biasanya lebih murah dibandingkan FTDI
  • Prolific based

Berikut ini modul USB to Serial berbasis CH340. Modul ini tidak ada setting tegangan.

Konverter USB to Serial berbasis CH340

Berikut ini modul USB to Serial berbasis FTDI (FT232RL). Modul ini ada setting tegangan kerja antara 3,3 volt dan 5 volt.

Konverter USB to Serial berbasis FTDI FT232RL

Pin pada modul USB-Serial cukup banyak, namun yang umum dihubungkan cukup GND, TX dan RX.

ESP32 Lolin32 Lite

ESP32 Lolin32 Lite buatan WEMOS

Fitur utama dari Lolin32 Lite adalah sebagai berikut

  • WiFi
  • bluetooth
  • 4MB Flash
  • Lithium battery interface, 500mA Max charging current
Lolin32 Lite
Penampilan fisik Lolin32 Lite
Lolin32 Lite
Pin-pin pada Lolin32 Lite
Array of Lolin32 Lite

Komponen utama pada Lolin32 Lite adalah sebagai berikut:

  • ESP32-D0WDQ6  (prosesor Espressif ESP32)(https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf)
    “ESP32-D0WDQ6, Dual core, No embedded flash, Wi-Fi b/g/n + BT/BLE Dual Mode, QFN 6*6”
  • W25Q32FVSS (3V 32M-bit Serial Flash Memory With Dual/Quad SPI & QPI) https://www.winbond.com/resource-files/w25q32fv%20revi%2010202015.pdf
  • UMH3N (General purpose dual digital transistor) http://rohmfs.rohm.com/en/products/databook/datasheet/discrete/transistor/digital/emh3t2r-e.pdf
    https://www.mouser.com/ds/2/348/umh3ntn-e-1018108.pdf
  • CH340C (USB to serial chip) https://www.mpja.com/download/35227cpdata.pdf
  • ME6211 (High speed LDO regulators) https://datasheet.lcsc.com/szlcsc/Nanjing-Micro-One-Elec-ME6211C33M5G-N_C82942.pdf
  • TP4054 (TP4054 Standalone Linear Li-lon Battery Charger with Thermal Regulation in SOT)
    https://www.piekarz.pl/pl/pdf.php?id=30089 (English)
    https://datasheet.lcsc.com/szlcsc/Nanjing-Extension-Microelectronics-TP4054_C32574.pdf (Chinese)
  • LED onboard di pin 22 (GPIO22), active low, melalui resistor 2k

Untuk menjalankan FreeRTOS pada ESP32, ada 2 alternatif:

Resource

Perbandingan Board Arduino

Dalam tulisan ini akan dibandingkan beberapa produk board Arduino yang mudah diperoleh di Indonesia. Arduino UNO ini sangat populer, sehingga banyak perusahaan lain yang membuat cl Daftar lengkap produk Arduino original dapat dilihat di daftar produk Arduino di website Arduino. Sebagai referensi harga saya menggunakan harga di Central Electronic Jaya Plaza dan situs online Deal Extreme

Berikut ini beberapa produk Arduino:

No Nama Merek Gambar Keterangan Vendor Harga
1 Arduino Uno R3

Arduino UNO R3
Arduino UNO R3
Arduino asli Jaya Plaza Rp 327.500
2 Funduino UNO R3 ATMega328P

Funduino UNO R3
Funduino UNO R3
Kompatibel dengan Arduino UNO R3 DealExterme USD 11.46
Fundiono UNO R3 Funduino

Funduino UNO R3
Funduino UNO R3
Kompatibel dengan Arduino UNO R3 Deal Extreme USD 13.44
3 XDRDuino UNO XDRDuino

XDRDuino UNO R3
XDRDuino UNO R3
Kompatibel dengan Arduino UNO R3 Deal Extreme USD 12.23
4 UNO ATMega328

UNO ATMega 328
UNO ATMega 328
Kompatibel dengan Arduino UNO R3 Deal Extreme USD 14.66
Makerduino UNO v3.0 Maker Studio

Makerduino UNO
Makerduino UNO
Kompatibel dengan Arduino UNO R3 Deal Extreme USD 15.31
Seeduino S-V3

Seeduino S-V3
Seeduino S-V3
Kompatibel dengan Arduino MEGA 2560
Deal Extreme USD 24.99
Zduino Uno Openjumper

Zduino UNO
Zduino UNO
Kompatibel dengan Arduino MEGA 2560 Deal Extreme USD 22.30
Itead Mega 2560 R3 Itead

Iteaduino Mega
Iteaduino Mega
Kompatibel dengan Arduino MEGA 2560 Deal Extreme USD 27.30
Arduino Leonardo
Arduino Due
Arduino Yun
Arduino Tre
Arduino Micro
Arduino Robot
Arduino Esplora

Arduino Esplora
Arduino Esplora
Jaya Plaza Rp 1000000
Arduino Mega ADK
Arduino Ethernet
Arduino Mega 2560
Arduino Mini
Lilypad Arduino USB
Lilypad Arduino Simple
Lilypad Arduino SimpleSnap
Lilypad Arduino
Arduino Pro Mini
Arduino Pro
Arduino Fio

FreeRTOS Untuk Arduino AVR, ESP32 dan STM32F103 Blue Pill

Sistem operasi FreeRTOS dapat diaplikasikan pada berbagai mikrokontroler. Pada tulisan ini diulas SDK (IDE + compiler) yang dapat dipakai untuk menjalankan FreeRTOS pada Arduino (UNO+Nano), ESP32 dan STM32F103 (Blue Pill)

Arduino

Arduino Nano
Arduino Nano

Espressif ESP32

ESP32 Lolin Wemos
ESP32 Lolin Wemos

STM32F103C8T6 (Blue Pill)

STM32F103C8T Blue Pill
STM32F103C8T Blue Pill

Perbedaan Arduino ORI dan KW

Apa sih perbedaan utama antara Arduino ORI dan KW? Apakah perbedaannya besar sekali? Pada tulisan ini akan dibahas satu aspek saja, yaitu dari chip USB yang dipakai

Harga

Perbedaan utama tentunya adalah harga. Arduino UNO ori harganya 300 ribuan, sedangkan Arduino UNO KW/clone harganya di bisa bawah 100 ribu.  Arduino Nano original harganya di atas 100 ribu, sedangkan yang KW/clone sekitar 30 ribu sampai 40 ribu.

Hardware

Dari sisi hardware, Arduino Nano / UNO ori maupun KW menggunakan prosesor ATMega168 / ATmega328, dengan variasi ada yang menggunakan kemasan DIP, ada yang SMD. Perbedaan ada pada chip USB to Serial untuk Arduino Nano. Arduino Nano ORI menggunakan chip FTDI untuk menyambungkan port serial ke USB, sedangkan Arduino Nano KW/clone seringnya menggunakan chip CH340 untuk menyambungkan port serial ke USB. Arduino Nano KW  ada yang menggunakan chip FTDI (FT232), namun harganya biasanya lebih mahal daripada Arduino Nano dengan chip CH340.

CH340 di bagian bawah Arduino Nano

Software

Dari sisi software yang dimasukkan ke dalamnya, tidak ada perbedaan pada Arduino Nano/UNO baik yang KW maupun ORI, keduanya sama-sama menggunakan ATMega168 atau ATMega328, jadi tidak ada perbedaan source code.

Driver di Host

USB pada Arduino perlu driver pada komputer host yang dipakai. Komputer host yang umum dipakai adalah berbasis Windows, OSX dan Linux. Pada tulisan ini hanya dibahas Windows dan OSX, karena yang Linux belum dicoba.

Arduino yang clone seringnya untuk USB serial menggunakan chip USB to serial tipe CH340. Arduino yang original biasanya menggunakan chip FTDI. Driver FTDI di Windows 10 sudah built-in, jadi tinggal pasang saja Arduino tersebut ke  USB maka akan langsung dikenali.

Arduino yang KW umumnya menggunakan chip CH340, sedangkan driver CH340 tidak built-in di Windows 10, sehingga driver untuk CH340 mesti download & install dulu, baru kemudian Arduino tersebutdapat dikenali. Agak repot, namun proses ini hanya dilakukan sekali saja, setelah itu tidak perlu dilakukan lagi.

Kasus berbeda pada sistem operasi OSX (Apple). Pada OSX (Apple) sudah ada driver untuk FTDI, sehingga untuk Arduino yang ORI tinggal pasang saja USBnya, maka akan langsung dikenali.

Driver CH340 pada OSX belum ada built in, sehingga perlu install dulu. Selain itu juga driver CH340 secara default tidak bisa diinstall di OSX, karena sertifikatnya tidak diakui. Jadi untuk install driver CH340, pengecekan sertifikat driver harus dinonaktifkan dulu, jadi prosesnya agak ribet.

Pada Linux, driver untuk CH340 dan FTDI sudah built in, jadi tidak ada masalah seperti pada OSX. Ref: https://sparks.gogo.co.nz/ch340.html

Kesimpulan : kalau pakai sistem operasi Windows 10, pakai Arduino KW saja, cuma beda install driver CH340 paling juga 10 menitan. Jika pakai OSX dan tidak mau repot, pilih saja Arduino yang menggunakan chip FTDI.

Arduino nano di latar depan dengan Arduino Uno di latar belakang
Arduino nano KW di latar depan dengan Arduino Uno ORI di latar belakang

Referensi

Mengirim Data Sensor Jarak Jauh

Pada sistem mikroprosesor seperti Arduino, kadang-kadang diperlukan sensor analog yang jaraknya cukup jauh dari perangkat pengendali, sehingga perlu teknik khusus untuk pengiriman data dari sensor analog tersebut. Pada jarak yang jauh, sinyal analog mudah sekali mengalami gangguan, terutama masuknya sinyal lain (noise) dan redaman dari kabel, sehingga sinyal dari sensor yang sampai ke mikroprosesor sudah tidak sama dengan sinyal aslinya.

Untuk mengatasi permasalahan tersebut, ada beberapa solusi sebagai berikut:

  • Menggunakan pengiriman data digital, jadi sinyal dari sensor yang analog, diubah dulu menjadi digital dengan sebuah mikrokontroler, kemudian baru data digital ini dikirim dengan kabel. Supaya lebih kuat, kabel yang panjang dapat menggunakan protokol RS-232 atau RS-485. Sinyal TTL biasa (5 volt maupun 3.3 volt) rentan jika dipakai untuk mengirim data digital jarak jauh. Protokol serial RS-232 dapat dipakai mengirim data sampai puluhan meter, sedangkan protokol serial RS-485 dapat dipakai mengirim data sampai ratusan meter.
  • Menggunakan Current Loop 4-20 mA
  • Menggunakan VCO (Voltage Controlled Oscillator). Prinsipnya adalah tegangan diubah ke frekuensi, baru sinyal frekuensi ini yang dikirim.
  • Menggunakan radio, seperti Wifi, LoraWAN dan sebagainya

Berikut ini contoh sistem pengiriman data sensor jarak jauh menggunakan pengiriman data digital dengan komunikasi serial dan sinyal RS485:

Pengiriman data sensor jarak jauh dengan RS-485

Cara kerja adalah sebagai berikut:

  • Sensor menghasilkan tegangan analog.
  • Tegangan analog diubah menjadi digital dengan menggunakan ADC pada mikrokontroler Arduino 1. Perlu diperhatikan juga apakah sinyal dari sensor analog sudah cukup besar untuk dapat dibaca oleh ADC. Jika kurang, maka perlu diperkuat dulu dengan amplifier. Jika frekuensi agak tinggi, mungkin diperlukan juga rangkaian sample & hold sebelum masuk ke ADC.
  • Data digital dikirim dengan menggunakan protokol serial melalui port serial pada Arduino 1. Level tegangannya adalah TTL sesuai dengan tegangan kerja Arduino 1. Sinyal ini sudah digital, namun belum cukup kuat untuk dikirim pada jarak jauh.
  • Sinyal serial TTL diubah menjadi RS-485 dengan menggunakan IC konverter TTL – RS-485
  • Sinyal dalam format RS485 dikirimkan dengan kabel, yang dapat dibuat agak panjang. Supaya sinyalnya bagus, mesti menggunakan kabel twisted pair, misalnya kabel yang digunakan pada kabel ethernet LAN (Local Area Network). Pada kabel LAN ada 4 pasang kabel yang sudah dipuntir (twisted). Pada pengiriman data 1 arah, cukup digunakan 1 pasang saja.
  • Sinyal RS-485 diubah menjadi TTL dengan IC konverter RS-485 ke TTL.
  • Sinyal serial dalam level TTL dimasukkan ke dalam port serial pada Arduino 2. Sinyal ini dapat langsung dibaca oleh software di Arduino 2.

Contoh hardware dan software untuk menyambungkan RS-485 antara lain dapat dibaca di https://arduino-info.wikispaces.com/SoftwareSerialRS485Example.

Rangkaian percobaan Arduino dan RS485

Rangkaian percobaan Arduino dan RS485

Pada contoh rangkaian di atas, kabel RS485 yang dipakai pendek saja , hanya beberapa cm. Menurut spesifikasinya , RS485 dapat dipakai sampai beberapa ratus meter, tergantung kecepatan data yang dipakai. Makin cepat datanya, makin pendek jaraknya.

Referensi

Mikroprosesor untuk FreeRTOS

FreeRTOS adalah suatu sistem operasi untuk membuat sistem real time berbasis mikroprosesor. Sistem operasi ini cocok untuk sistem-sistem yang kecil dan sederhana. Untuk sistem yang lebih kompleks, diperlukan sistem operasi real-time yang lebih besar seperti eCOS, embedded Linux (or Real Time Linux) ataupun uCLinux.

Berikut ini beberapa mikroprosesor yang cocok untuk menjalankan sistem operasi FreeRTOS.

Prosesor di gambar di atas adalah sebagai berikut:

  • NXP LPCXpresso LPC1769
  • Espressif ESP8266
  • Esperssif ESP32
  • Arduino Nano (clone)
  • ST Micro STM32F103C8T dan programmernya ST-LINK-V2

Barang-barang yang ditampilkan di sini adalah prosesor yang ada di laboratorium dan sempat dicoba. Masih banyak lagi prosesor yang dapat menjalankan FreeRTOS yang belum dicoba.

Arduino Nano dapat menjalankan FreeRTOS mengingat porting FreeRTOS untuk Atmel AVR tersedia di situs FreeRTOS. Namun kemampuannya terbatas, mengingat memori di ATMega328 sangat terbatas.

Arduino Nano
Arduino Nano

Selanjutnya adalah board LPCXPresso dengan prosesor NXP LPC1769. Kemampuan prosesor ini cukup tinggi.

LPCXpresso dengan prosesor NXP LPC1769

STM32F103 kemampuannya menengah saja, tidak terlalu tinggi, namun kelebihan utama dari prosesor ini adalah tersedia dengan harga murah dari berbagai vendor. Artikel tentang modul ini banyak di Internet sehingga lumayan memudahkan bagi pemula.

Modul STM32F103C8T “Blue Pill”

STM32F103 dapat diisi proram dengan berbagai cara, namun yang paling mudah adalah menggunakan modul ST-LINK-V2 berikut ini.

ST-LINK-V2 untuk upload program ke STM32

Daya tarik utama dari ST-LINK-V2 adalah harganya yang murah, karena banyak versi clone / KW-nya.

Berikutnya adalah prosesor ESP8266 dan ESP32 dari Espressif. Porting FreeRTOS untuk prosesor ini banyak tersedia.

ESP8266
ESP8266
Modul ESP32 LOLIN32

Berikut ini tabel perbandingan kekuatan dari prosesor yang dipakai, dilihat dari clock, flash memory dan static RAM.

ModelClockFlash MemoryStatic RAM
ATMega32816 MHz32 kB2 kB
STM32F103C8T72 MHz64 kB20 kB
LPC1769100 MHz512 kB64 kB
ESP32240 MHzexternal (typical 4 MB)520 kB
ESP8266160 MHzexternal80 kB

Perbandingan clock kurang lebih mewakili kecepatan, walaupun sebenarnya perbandingan kecepatan tidak dapat hanya dibandingkan dari clock saja, namun juga mesti melihat arsitektur masing-masing mikroprosesor.

Referensi ports dan demo untuk FreeRTOS adalah sebagai berikut:

Upload Program ke STM32F103CBT6 Blue Pill Dengan ST-LINK V2 Dan ST-LINK Utility

Artikel ini berisi percobaan menggunakan perangkat ST-LINK V2 untuk menyambungkan STM32F103CBT6 ke komputer pengembangan.

Interkoneksi antara ST-LINK dengan STM32 menggunakan 3 buah kabel sebagai berikut.

  • ST-LINK SWCLK <->Blue Pill DCLK (SWCLK)
  • ST-LINK SWDIO <-> Blue Pill DIO (SWDIO)
  • ST-LINK GND <-> Blue Pill GND

Berikut daftar pin pada STM32F103. Pin-pin untuk sambungan ke ST-LINK sudah dikumpulkan terpisah di bagian bawah sehingga cukup memudahkan.

STM32F103 Pinout Diagram

Daftar pin pada ST-LINK V2 sudah tertulis pada casingnya, jadi cukup mudah untuk mengikutinya.

ST-LINK V2 dapat dikendalikan dari komputer dengan berbagai cara. Salah satunya adalah dengan menggunaan software ST-LINK Utility dari ST Micro.
Software ST-LINK Utility dapat diunduh di https://www.st.com/en/development-tools/stsw-link004.html . URLnya ada di bagian paling bawah, dengan subjudul ‘GET SOFTWARE’

Untuk mendapatkan software itu, mesti login ke situs ST.COM atau cukup dengan mengisi nama dan email. URL untuk pengunduhan akan dikirim ke email tersebut.

Setelah dijalankan, maka softwer STM-32 ST-LINK Utility secara otomatis akan berusaha mendeteksi adanya programmer ST-LINK . Kondisi sambungan dapat dicek pada menu “Target” -> “Settings”. Berikut ini tampilan “Settings” jika belum berhasil mendeteksi ST-LINK. Pada ‘Serial Number’ akan muncul pesan ‘No ST-LINK detected!’

ST-LINK tidak terdeteksi

Jika sudah berhasil mendeteksi ST-LINK maka akan muncul keterangan pada bagian ‘Serial Number’

ST-LINK terdeteksi

Jika STM32F103 Blue Pill tidak langsung terdeteksi, maka perlu klik pada button ‘Refresh’.

Jika STM32F103 Blue Pill masih tidak terdeteksi, maka “Mode” diubah ke ke “Connect Under Reset”, kemudian klik pada “Refresh” berbarengan dengan mereset board Blue Pill. Jika waktunya tepat, maka sambungan akan terjadi.


Jika sambungan berhasil, maka akan muncul tipe STM32 target yang dipakai pada bagian “STM32 Target Information”

Sambungan antar ST-LINK dengan STM32 berhasil

Setelah tersambung seperti ini, maka dapat dilanjutkan untuk melakukan proses upload ataupun download software firmware STM32.

Referensi

  • Skema BLue Pill https://wiki.stm32duino.com/index.php?title=File:Bluepillpinout.gif
  • Penjelasan teknis Blue Pill https://wiki.stm32duino.com/index.php?title=Blue_Pill
  • https://primalcortex.wordpress.com/2017/06/13/building-a-black-magic-debug-probe/
  • ST LINK V2 Utility https://www.st.com/en/development-tools/st-link-v2.html

Output Digital Mikrokontroler Dengan MOSFET

Berikut ini contoh rangkaian penguat output digital suatu mikrokontroler dengan menggunakan MOSFET kanal N.

Arus keluaran dari mikrokontroler sangat terbatas. Pada ATMega328 misalnya, 1 pin hanya dapat memberikan maksimal 40 mA kalau hanya 1 pin yang aktif. Jika semua pin output aktif, maka arus maksimal setiap pin sekitar 8 mA.

Output Digital Mikrokontroler Dengan MOSFET
Output Digital Mikrokontroler Dengan MOSFET

Cara Kerja Rangkaian

IRF520 adalah transistor jenis MOSFET kanal N, memerlukan tegangan gate (Vgs) sekitar 2 sampai 4 volt agar transistor ini aktif sebagai sakelar (ON). Tegangan gate ini diperoleh dari mikrokontroler, yang disambungkan ke terminal OUT pada gambar di atas.

Pada rangkaian minimalis, resistor 10 ohm di atas dapat diganti dengan kabel, dan transistor 22k ohm dapat dihilangkan. Namun pada rangkaian di atas ditambahkan resistor 10 ohm yang berfungsi sebagai ‘gate resistor’, yaitu untuk membatasi arus transien yang mengalir ke gate ketika pin OUT berubah dari 0 volt menjadi 5 volt. Arus transien ini tidak merusak transistor maupun mikrokontroler, namun dapat menjadi osilasi dan membangkitkan radiasi yang mengganggu komponen lainnya. Resistor 22k fungsinya untuk menjaga gate transistor dalam keadaan ‘LOW’ kalau terminal OUT dalam keadaan floating/mengambang. Kondisi floating ini terjadi umumnya ketika mikrokontroler baru direset, karena pada waktu mikrokontroler baru direset, biasanya semua pin dikonfigurasikan sebagai input, bukan sebagai output.

Transistor IRF520 mempunyai kemampuan arus drain (D) maksimal sebesar 9.2 ampere pada temperatur 25 derajat Celcius, dan 6.5 ampere pada temperatur 100 derajat Celcius.

Referensi

Mirror:

Teknik Output Digital pada Mikrokontroler

Mikrokontroler seperti Arduino sering perlu disambungkan ke berbagai perangkat digital, untuk itu diperlukan kemampuan output dari mikrokontroler yang perlu disesuaikan dengan sifat perangkat yang dituju. Berikut ini beberapa kemungkinan permasalahan output yang dijumpai:

  • Tegangan kecil, arus kecil (langsung)
  • Tegangan kecil, arus besar (perlu penguat arus BJT/MOSFET)
  • Tegangan besar (perlu pengubah tegangan BJT/MOSFET, Relay)
  • Beban Induktif (kumparan,motor)
  • Galvanic Isolation (dengan optocoupler)
  • H-Bridge untuk motor 2 arah
  • Pulse Width Modulation untuk mengatur pemberian energi
  • Serial to Paralel untuk menambah port I/O

Tegangan Kecil Arus Kecil

Tegangan kecil di sini maksudnya adalah tegangan perangkat output sama atau kurang dari tegangan output mikrokontroler.

Arus kecil di sini maksudnya adalah arus yang diperlukan perangkat output sama atau kurang dari kemampuan arus output mikrokontroler.

Pada kasus ini output dari mikrokontroler cocok dari sisi arus maupun tegangan, sehingga output mikrokontroler dapat langsung dihubungkan ke beban / perangkat output.

Misal, output yang diinginkan adalah menyalakan sebuah LED. LED mempunyai tegangan maju sekitar 2 volt, dengan arus 25 mA jika ingin cukup terang. Port pada ATMega328 dapat memberikan arus maksimal 40 mA, dengan tegangan output 5 volt, maka dalam hal ini, LED dapat langsung dihubungkan ke output ATMega328 tanpa perlu penguatan, cukup dengan resistor sebagai pembatas arus.

LED output
LED output

Tegangan Kecil Arus Besar

Tegangan kecil di sini maksudnya adalah tegangan perangkat output sama atau kurang dari tegangan output mikrokontroler.

Arus besar di sini maksudnya adalah arus yang diperlukan perangkat output lebih dari kemampuan arus output mikrokontroler.

Contoh kasus:

  • lampu LED perlu 25 mA, sedangkan output mikrokontroler hanya sanggup 8 mA karena pin output lain juga aktif
  • LED 7 segmen , setiap segmen 25 mA, jadi perlu total 25 mA x 8 = 200 mA untuk arus di pin common anoda/katoda.

Dalam hal ini maka diperlukan penguatan arus, yang antara lain dapat dilakukan dengan komponen berikut:

  • Transistor BJT NPN (misal BC548)
  • Transistor BJT PNP (misal BC557)
  • Transistor MOSFET kanal N (misal IRF520)
  • Transistor MOSFET kanal P
  • Transistor Darlington terintegrasi,  seperti IC ULN2803

Secara teoritis, penguatan ini dapat juga dilakukan menggunakan penguat / amplifier analog ataupun op-amp, namun hal ini tidak praktis karena penguat analog umumnya menggunakan transistor dalam kondisi aktif sehingga penggunaan arus lebih besar. Penguat digital hanya menggunakan 2 keadaan transistor ON dan OFF, sehingga disipasi daya pada transistor lebih kecil.

Contoh rangkaian penguat arus dengan transistor NPN sebagai berikut:

Penguat output digital dengan transistor NPN
Penguat output digital dengan transistor NPN

Contoh rangkaian penguat arus dengan MOSFET sebagai berikut, cara kerjanya dijelaskan di artikel “Output Digital Mikrokontroler Dengan MOSFET“:

Output Digital Mikrokontroler Dengan MOSFET
Output Digital Mikrokontroler Dengan MOSFET

Tegangan Besar

Tegangan besar di sini maksudnya adalah tegangan yang diinginkan lebih tinggi dari tegangan output mikrokontroler. Misal output mikrokontroler adalah TTL 5 volt, sedangkan output diinginkan level CMOS, misal 9 volt. Maka dapat dipakai rangkaian berikut ini:

Konverter TTL 5 volt ke level CMOS
Konverter TTL 5 volt ke level CMOS

Pada contoh berikut ini , ada 5 buah LED seri yang ingin dinyalakan. 1 LED memerlukan tegangan 2 volt, sehingga total perlu 10 volt. Untuk itu diperlukan transistor NPN sebagai sakelarnya.

Penguat arus digital dengan transistor NPN
Penguat arus digital dengan transistor NPN

Selain itu untuk menaikkan tegagnan dapat menggunakan komponen bidirectional logic converter.

Bidirectional level converter
Bidirectional level converter

3.3V 5V Bi Directional Level Converter
3.3V 5V Bi Directional Level Converter

Beban Induktif

Beban induktif perlu dioda pengaman, karena ketika output dimatikan maka arus pada dioda masih ingin tetap mengalir.

Jika arus apda beban induktif melebihi kemampuan output port mikrokontroler maka arus perlu diperkuat dengan transistor BJT ataupun MOSFET.

Penguat output untuk beban induktif
Penguat output untuk beban induktif

Jika perlu banyak mengendalikan beban induktif, maka alternatif yang baik adalah IC ULN3803. ULN2803 di dalamnya sudah memiliki penguat arus dengan transistor dan dioda pengaman, sehingga cocok untuk beban induktif. Kemampuan arus setiap kanalnya adalah 500 mA.

ULN2803 diagram
ULN2803 diagram

Galvanic Isolation

Pada galvanic isolation, antara mikrokontroler dengan komponen yang dikendalikan tidak terdapat hubungan secara elektrik. Jalur ground dan sinyal betul-betul terpisah. Untuk mencapai galvanic isolation dapat menggunakan kopling magnetik ataupun optocoupler. Untuk aplikasi Arduino yang sederhana, yang praktis adalah menggunakan optocoupler  jika dekat, dan menggunakan fiber optik jika jaraknya agak jauh.

Galvanic isolation
Galvanic isolation

H-Bridge

H-Bridge diperlukan untuk beban yang memerlukan polaritas yang dapat diubah.

Contoh output pengendali motor dengan TB6612FNG:

Motor driver TB6612FNG untuk output PWM ke motor secara digital dari mikrokontroler
Motor driver TB6612FNG

Contoh lain adalah IC TLE 5205-2:

TLE 5025-2 kemasan TO-220
TLE 5025-2, H-Bridge dengan kemasan TO-220

Pulse Width Modulation

[under construction]

Serial to Paralel

Penambahan port input output pada Arduino dapat dilakukan dengan menggunakan komponen antar muka serial ke paralel. Komponen yang sering dipakai di antaranya adalah “74HC164 8-Bit Parallel-Out Serial Shift Register” dan “PCF8574 Remote8-Bit I/O Expander for I2C Bus“.

Diagram logika 74HC164 shift register sebagai output digital
Diagram logika 74HC164 shift register

Prinsip kerja 74HC164 adalah sebagai sebuah shift register 8 bit. Data serial dimasukkan pada pin A dan B. Setiap ada pulsa clock pada pin CLK, maka data 1 bit dimasukkan ke shift register. Data pada shift register ditampilkan pada pin Qa sampai dengan Qh. Jadi setiap 74HC164 dapat menambah 8 port output. Jika diinginkan lebih dari 8 port output, maka 74HC164 berikutnya dapat ditambahkan secara cascade. 74HC164 ini hanya dapat berfungsi sebagai output digital.

Alternatif lainnya adalah menggunakan IC 74HC595. Prinsip kerjanya serupa, namun kelebihan 74HC595 adalah terdapat tambahan register output selain shift register, sehingga perubahan output dapat dilakukan secara serentak. 74HC595 juga memiliki three-state buffer di bagian outputnya sehingga lebih fleksibel.

SNx4HC5958-Bit Shift RegistersWith 3-StateOutputRegisters
Blok diagram 74HC595

PCF8574 adalah periferal I2C yang memiliki 8 buah port input output digital. PCF8574 dapat disambungkan dengan protokol I2C ke mikroprosesor. Jika memerlukan lebih dari 8 port digital, maka dapat ditambahkan PCF8574 berikutnya. Setiap PCF8574 mesti memiliki alamat yang berbeda. Alamat dapat diatur dengan pin A0,A1 dan A2, sehingga dari kombinasi 3 pin ini kita dapat menghubungkan 8 buah PCF8574 ke sebuah mikroprosesor, total menjadi 8×8 = 64 port digital sebagai input ataupun output.

Referensi

Teknik Input Digital Mikrokontroler

Suatu mikrokontroler perlu dapat menangani input digital dalam berbagai kondisi. Berikut ini beberapa kemungkinan input digital yang dapat dihadapi dalam merancang suatu sistem berbasis mikrokontroler:

  • Input tegangan normal (sama dengan VCC), artinya level tegangan digital sama dengan mikrokontroler
  • Input tegangan besar (>VCC), artinya level tegangan digital lebih tinggi daripada tegangan kerja mikrokontroler
  • Input tegangan kecil (<VCC), artinya level tegangan digital lebih rendah daripada tegangan kerja mikrokontroler
  • Galvanic Isolation (optocoupler), jika perbedaan level tegangan antara input dan mikrokontroler sangat besar, atau ground input dan mikrokontroler tidak boleh disatukan.
  • Input jarak jauh (1m, 10m, 100m, >100m), jika jarak antara sumber sinyal digital dan mikrokontroler cukup jauh, maka perlu rangkaian tambahan.
  • Paralel to Serial untuk menambah port I/O, jika port di mikrokontroler kurang, maka perlu teknik  menambah port

Input Tegangan Normal

Pada keadaan tegangan masuk sudah sama dengan batas masukan tegangan mikrokontroler, maka paling mudah adalah langsung disambung ke pin masukan mikrokontroler.

Input Tegangan Besar

Yang dimaksud dengan ‘tegangan besar’ di sini adalah tegangan input yang lebih besar dari tegangan supply (VCC) mikrokontroler.

Beberapa alternatif solusi:

  • Tegangan input perlu dikurangi/dibagi supaya <=VCC (dengan resistor, transistor, dsb)
  • Tegangan input perlu dibatasi supaya <=VCC (dengan dioda/transistor)

Ide lain yang tidak konvensional:

  • diperkecil menggunakan operational amplifier, dengan rangkaian yang penguatannya kurang dari 1
  • tegangan di atas 5 volt diperkecil dengan menggunakan regulator 7805

Berikut ini rangkaian bidirectional level converter yang dapat digunakan untuk menaikkan tegangan maupun menurunkan tegangan.

Bidirectional level converter
Bidirectional level converter

Rangkaian level converter seringnya menggunakan transistor tipe MOSFET jenis SMD, yang agak repot memasangnya. Untuk itu banyak yang menyediakan modul-modul level converter siap pakai yang dapat dipasang di breadboard ataupun di PCB. Contohnya adalah rangkaian level converter berbasis transistor BSS138.

Rangkaian level converter
Rangkaian level converter

Modul Level Converter
Modul Level Converter

Input Tegangan Kecil

Yang dimaksud dengan ‘tegangan kecil’ di sini adalah tegangan input yang lebih kecildari tegangan supply (VCC) mikrokontroler.

[under construction]

Galvanic Isolation

[under construction]

Input Jarak Jauh

[under construction]

Paralel to Serial

[under construction]

Input Output Digital Dengan Raspberry PI

Percobaan input output digital Dengan Raspberry PI.

Input menggunakan 2 buah push button dan 1 buah sakelar toggle.

Output menggunakan 1 buah LED 7 segment.

Pemrograman dengan bahasa Python, dengan library IO menggunakan gpiozero [https://gpiozero.readthedocs.io/en/stable/]

Input Output Digital Dengan Raspberry PI
Input Output Digital Dengan Raspberry PI

Antar Muka Input Analog Multi Kanal

Berikut ini beberapa cara menyambungkan beberapa input analog ke suatu mikrokontroler.

Pencuplikan Sekuensial Konversi Sekuensial

Cara pertama adalah dengan menggunakan 1 buah ADC yang dipakai untuk membaca semua kanal secara bergantian. Agar dapat membaca beberapa kanal, maka di depan ADC dipasang sebuah multiplekser analog, yang dapat memilih input analog mana yang akan dibaca. Pada metode ini , pencuplikan / sampling pada setiap kanal input terjadi tidak serentak, namun secara berurutan.

 

Input analog sekuensial
Input analog sekuensial

Pencuplikan terjadi di waktu yang tidak sama, sehingga dapat menjadi noise/ jitter, terutama kalau waktu konversi ADC agak panjang.

Pencuplikan Serentak Konversi Sekuensial

Cara kedua adalah dengan menggunakan beberapa komponen sample/hold, agar memungkinkan terjadinya pencuplikan semua kanal pada waktu yang bersamaan. Konversi dari analog ke digital dilakuan satu per satu dengan sebuah ADC. Cara ini memiliki kelebihan yaitu semua data diambil pada waktu yang bersamaan, sehingga lebih mudah untuk pengolahan sinyal digitalnya.

 

Input analog serentak versi 1
Input analog serentak versi 1

Pencuplikan Serentak Konversi Serentak

Cara ketiga adalah melakukan pencuplikan secara bersamaan, dan melakukan konversi analog ke digital secara bersamaan juga. Cara ini lebih cepat dibandingkan cara kedua.

Input analog serentak versi 2
Input analog serentak versi 2

Komponen yang dapat dipakai

  • Sample & Hold dapat menggunakan “LF398 Monolithic Sample and Hold Circuit” ataupun rangkaian diskrit dengan op-amp dan kapasitor.
  • ADC dapat menggunakan ADC yang sudah built in di mikrokontroler, ataupun ADC eksternal seperti ADC MCP3008
  • Multiplexer analog dapat menggunakan built-in multiplekser di dalam ATMega328, atau menggunakan ADC yang sudah ada multiplexer (MCP3008), atau menggunakan switch analog seperti CD4066

Referensi

Percobaan Software Diagnostic pada Nu-LB-NUC140

Pada tulisan ini diuraikan ujicoba software diagnostic dari BSP (Board Support Packages).

Percobaan di bawah ini menggunakan BSP terbaru: NUC100Series BSP_CMSIS V1.05.001.zip [1]

Project file yang digunakan didapat di direktori berikut: NUC100SeriesBSP_v1.05.001\NuvotonPlatform_Keil\Sample\Diagnostic

DevBoardDemo

  • Output ke UART
  • Demo kecepatan prosesor
  • Jika ada pin SW_INT ditekan, ditampilkan di LED RGB
  • Jika ada pin SW_INT ditekan, akan ada pergeseran frekuensi buzzer.
  • mustinya ada output ke buzzer, namun di software disebut buzzer di GPB12, padahal sesungguhnya ada di GPB11

Diagnostic pada Nuvoton NU-LB-NUC140
Diagnostic pada Nuvoton NU-LB-NUC140

Smpl_DataFlash

  • Demo penggunaan APROM sebagai Data Flash
  • Input output ke UART

Dataflash
Dataflash

Smpl_PowerManagement

  • Demo power down mode
  • interface ke UART

Powerdown pada NU-LB-NUC140
Powerdown pada NU-LB-NUC140

Referensi

Percobaan Software Sample dari Nu-LB-NUC140

Pada tulisan ini diuraikan ujicoba software sample dari BSP (Board Support Packages).

Percobaan di bawah ini menggunakan BSP terbaru: NUC100Series BSP_CMSIS V1.05.001.zip [1]

Project file yang digunakan didapat di direktori berikut: NUC100SeriesBSP_v1.05.001\NuvotonPlatform_Keil\Sample\NUC1xx-LB_002

 

Smpl_ADC_PWM

  • Test ADC dengan input dari potensiometer
  • Test PWM dengan output RGB LED

Hasil:

  • Posisi potensio menghasilkan tegangan analog yang diukur oleh mikrokontroler
  • Angka hasil pengukuran ditampilkan di LCD
  • RGB LED menyala dengan PWM, menghasilkan kecerahan sesuai dengan posisi potensiometer

Demo ADC PWM NU-LB-NUC140 Nuvoton
Demo ADC PWM NUC140

 

Smpl_CDROM_HID

  • Memunculkan sebuah device USB CDROM di windows
  • Dapat melakukan pengiriman data ke flash di board melalui aplikasi “HID AP.exe” di direktori \NUC100SeriesBSP_v1.05.001\NuvotonPlatform_Keil\Sample\NUC1xx-LB_002\Smpl_CDROM_HID\Software GUI\Release

Smpl_Capture

  • Nampaknya percobaan Capture Timer
  • Tidak jelas juga apa yang dikerjakan, karena variabel “CaptureValue” selalu bernilai 0

Smpl_FATFS_SDCard

  • Akses ke FAT file system di SD Card
  • Termasuk fungsi melakukan formatting

Smpl_FMC

  • Akses ke Flash Memory Controller
  • Literatur detail ada di Training File: “07_NuMicro FMC.pdf”

Smpl_HID_FILE_IO

  • Belum dicoba

Smpl_HID_IO

  • Belum dicoba

Smpl_I2C_24LC64

  • Input dari keypad onboard (K1 ~ K9)
  • Akses ke on board EEPROM (24LC64)
  • Demo menulis ke EEPROM dengan fungsi Write_24LC64() dan membacanya dengan fungsi Read_24LC64()
  • Penjelasan ada di Training Material “06_NuMicro I2C.pdf”
  • Application Note: “AN1009EN How to access 24C64 via IIC V1.00.pdf”

Smpl_Interrupt

  • Demo interupsi dari switch SW_INT dan Deep Sleep (PWCON)
  • Output ke UART

Smpl_LIN_Master

  • Belum dicoba. Nampaknya sulit dicoba karena memerlukan 2 buah prosesor yang mempunyai LIN interface

Smpl_LIN_Slave

  • Belum dicoba. Nampaknya sulit dicoba karena memerlukan 2 buah prosesor yang mempunyai LIN interface

Smpl_NAU7802

  • Nampaknya tidak kompatibel dengan board NU-LB-NUC140 rev 2.1, karena tidak ada ADC NAU7802 . Kemungkinan ADC ini ada di revisi sebelumnya.
  • Penjelasan mengenai NAU7802: [2]

Demo NAU7802 Nuvoton NU-LB-NUC140
Demo NAU7802 Nuvoton NU-LB-NUC140

Smpl_SPI_Flash_PDMA

  • Demo akses Flash menggunakan PDMA

Demo flash PDMA Nuvoton NU-LB-NUC140
Demo flash PDMA Nuvoton NU-LB-NUC140

 

Smpl_SPI_Flashx2

  • Demo fitur SPI Flash

Demo Flash 2x Nuvoton NU-LB-NUC140
Demo Flash 2x Nuvoton NU-LB-NUC140

Smpl_Start_Kit

Software ini berisi contoh akses periferal berikut:

  • LED 7 segment
  • LCD (tanpa backlight)
  • LED 5 ~ LED 8
  • Timer auto reload

Hasil percobaan & catatan penting

  • Software ini menyalakan LCD graphic dan LED 7 segment
  • LED 7 segment menyala bergantian dengan delay software, bukan timer
  • Untuk menyalakan backlight LCD dapat dilakukan dengan mengubah GPD14 menjadi 0
  • LED5 ~ LED8 diaktifkan oleh interupsi timer
  • LED5 ~ LED8 tidak terdapat di skematik. Keterangan tentang LED ini hanya ada di file “Nu-LB-NUC140 User’s Guide v2.0.pdf” pada halaman 8. Menurut tabel di tersebut, LED5 ~ LED8 dikendalikan oleh pin GPIO GPC12 ~ GPC15. Hal ini sesuai dengan kode di software.

Berikut ini kode untuk menyalakan backlight LCD:

DrvGPIO_ClrBit(E_GPD,14);

Berikut ini kode untuk mematikan backlight LCD:

DrvGPIO_SetBit(E_GPD,14);

Berikut ini kode untuk menyalakan Buzzer:

DrvGPIO_ClrBit(E_GPB,11);

Berikut ini kode untuk mematikan Buzzer:

DrvGPIO_SetBit(E_GPB,11);

Demo sample starter kit Nuvoton NU-LB-NUC140
Demo sample starter kit Nuvoton NU-LB-NUC140

Smpl_Timer_WDT_RTC

  • Demonstrasi penggunaan Watch Dog Timer dan Real Time Clock
  • Teorinya bisa dibaca di “04_NuMicro WDT_Timer_RTC_UART.pdf”
  • Application note WDT: “AN1005EN How to use WDT V1.01.pdf”
  • Application note RTC: “AN1013SC How to use RTC.pdf” in Simplified Chinese 🙂

Demo watchdog timer, realtime clock Nuvoton NU-LB-NUC140
Demo watchdog timer, realtime clock Nuvoton NU-LB-NUC140

 

Smpl_UAC

  • Aplikasi ini memunculkan sebuah USB Audio Device di desktop PC.
  • Belum jelas bagaimana cara mengaksesnya dari windows.

Tampilan device manager di windows
Tampilan device manager di windows

 

Smpl_UDC_SDCard

  • Aplikasi ini membuat sebuah USB Disk. Untuk itu memerlukan sebuah memory tipe SD yang dimasukkan ke slot SD di bagian bawah board
  • Cara kerja software ini dijelaskan di Application Note “AN1020EN_USB MassStorage V1.00.pdf”. Detail tentang USB dijelaskan di “NuMicro NUC100 Series Driver Reference Guide.pdf”

Hasil percobaan:

  • jika ada SD card maka akan muncul pesan di PC
  • file-file di SD Card dapat dibaca dari PC.
  • Software ini menyalakan LEDS1 yang nampaknya adalah LED indikator bahwa SD card mendapat catu daya. Rangkaian LEDS1 dapat dilihat di file “Nu-LB-NUC140 Board Schematic v2.0.pdf” bagian SD Interface.

Smpl_VCOM_IO

  • Program ini nampaknya membuat sebuah port serial virtual di PC melalui port USB.
  • Penjelasan mengenai VCOM ada di file “Training/12_NuMicro VCOM.pdf”
  • Hasil pencarian google menunjukkan referensi ke forum di http://bbs.21ic.com/redirect.php?tid=204413&goto=lastpost
  • Virtual USB COM dideteksi oleh Windows, namun tidak ada drivernya

Hasil Percobaan:

  • tidak jalan karena driver tidak tersedia