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 USBSkema 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.
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
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)
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.
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 KW di latar depan dengan Arduino Uno ORI di latar belakang
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.
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.
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
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.
ESP8266Modul ESP32 LOLIN32
Berikut ini tabel perbandingan kekuatan dari prosesor yang dipakai, dilihat dari clock, flash memory dan static RAM.
Model
Clock
Flash Memory
Static RAM
ATMega328
16 MHz
32 kB
2 kB
STM32F103C8T
72 MHz
64 kB
20 kB
LPC1769
100 MHz
512 kB
64 kB
ESP32
240 MHz
external (typical 4 MB)
520 kB
ESP8266
160 MHz
external
80 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:
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
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
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.
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
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:
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
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.
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
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
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
H-Bridge
H-Bridge diperlukan untuk beban yang memerlukan polaritas yang dapat diubah.
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
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.
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.
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
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
Modul Level Converter
Input Tegangan Kecil
Yang dimaksud dengan ‘tegangan kecil’ di sini adalah tegangan input yang lebih kecildari tegangan supply (VCC) mikrokontroler.
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
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
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.
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
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 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.
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
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 🙂
Aplikasi ini memunculkan sebuah USB Audio Device di desktop PC.
Belum jelas bagaimana cara mengaksesnya dari 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”