Pada artikel ini diuraikan macam-macam arsitektur perangkat lunak dalam konteks system embedded. Pertama akan diuraikan arsitektur aplikasi desktop sebagai perbandingan. Kemudian akan kita lihat 3 macam arsitektur yang umum dipakai pada system embedded, yaitu pertama: arsitektur super loop, kedua arsitektur super loop dengan interupsi. Arsitektur , kedua ini dikenal juga dengan nama foreground-background. Ketiga adalah arsitektur multithreading.
Ada dua macam aplikasi:
Aplikasi Desktop
Aplikasi Sistem Embedded
Ada beberapa macam arsitektur software sistem embedded:
Super loop (tanpa interupsi)
Super loop dengan interupsi / foreground-background
Multithreading
Aplikasi Desktop
Berikut ini arsitektur desktop yang biasa. Pada aplikasi desktop, pengguna mesti menjalankan dulu system operasi pada computer yang dipakai, misalkan Windows, atau Linux.. Aplikasi dijalankan oleh pengguna. Sistem operasi akan menjalankan aplikasi tersebut , biasanya dengan cara mengambil kode dari storage seperti har disk atau flash memory, kemudian mengalokasikan resource seperti CPU, RAM , input output ke aplikasi tersebut. Kemudian aplikasi mulai dijalankan pada START. Kemudian aplikasi ini melakukan suatu proses yang dapat terdiri dari beberapa task (atau pekerjaan). Setelah proses ini selesai, maka aplikasi akan berhenti, di flowchart dilambangkan dengan STOP. Sistem operasi kemudian menghapus aplikasi dari memori. Pada saat ini aplikasi selesai.
Diagram alir perangkat lunak aplikasi desktop
Arsitektur Superloop
Berikut ini adalah arsitektur paling sederhana yang dipakai pada sistem embedded, yaitu arsitektur superloop. Pada arsitektur ini , software dikelompokkan menjadi 2 bagian, yaitu bagian INIT yang berisi kode-kode inisialisasi yang hanya dijalankan satu kali saja pada aplikasi tersebut. Biasanya bagian INIT ini berisi konfigurasi hardware pada mikroprosesor / mikrokontroler yang dipakai. Misalnya adalah melakukan setting pin-pin sebagai input ataupun sebagai output. Kemudian ada bagian TASK / Tugas, yang dikerjakan berulang-ulang tanpa henti. Pada diagram alir / flowchart aplikasi sistem embedded tidak ada blok STOP , karena aplikasi tidak pernah berhenti. Arsitektur ini dapat dipakai untuk 1 task atau beberapa task yang tidak memerlukan jadwal atau pewaktuan yang kritis.
Diagram alir perangkat lunak embedded dengan superloop
Superloop pada Arduino
Pada Arduino , arsitektur perangkat lunak yang paling sering dipakai adalah superloop. Di sini sudah difasilitasi dengan cara memberikan 2 buah fungsi dasar yaitu fungsi setup() dan fungsi loop(). Fungsi setup() hanya dijalankan sekali saja di awal, biasanya berisi inisialisasi hardware. Selain itu ada fungsi loop() yang dijalankan terus menerus. Jadi flowchart atau diagram alir program Arduino prinsipnya adalah seperti pada gambar ini. Sebagai contoh adalah perangkat lunak lampu kedip yang tersedia di contoh aplikasi Arduino. Aplikasi ini biasanya aplikasi yang pertama kali kita jalankan di Arduino, untuk mengecek apakah compiler dan hardware yang dipakai berfungsi baik. Pada aplikasi ini pada bagian setup() berisi inisialisasi sebuah pin (dalam hal ini pin LED_BUILTIN) sebagai output. Pada Arduino Nano dan Arduino UNO, pin LED_BUILTIN ini adalah pin 13. Kemudian pada fungsi loop() , di dalamnya adalah Task untuk menyalakan dan mematikan LED dengan delay sebanyak 1000 milidetik.
Berikut ini contoh perangkat lunak Arduino sesuai dengan diagram alir di atas.
// https://www.arduino.cc/en/tutorial/blink
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000); digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
Superloop Dengan Dua Task
Aplikasi superloop umumnya hanya baik dipakai untuk satu task / tugas yang tidak memerlukan pewaktuan yang kritis. Bisa juga dipakai untuk dua atau lebih task, namun akan ada masalah kalau kedua task tersebut memerlukan pewaktuan yang berbeda. Pada ilustrasi flowchart ini kita lihat 2 buah task / pekerjaan yang dimasukkan ke dalam sebuah loop. Task 1 dan Task 2 akan bekerja bergantian. Untuk memulai Task 2 harus menunggu task 1 selesai, dan sebaliknya : task 1 harus menunggu task 2 selesai sebelum task 1 dapat mulai bekerja.
Diagram alir superloop dengan dua task
Lampu Kedip Dengan Superloop
Berikut ini flowchart lampu kedip pada Arduino. Software ini berfungsi cukup baik dan dapat mudah difahami untuk karena pada system ini hanya ada 1 task saja, dan frekuensi lampu kedip tidak terlalu kritis. Secara sepintas, perioda lampu kedip adalah 2 detik , sehingga frekuensi lampu kedip adalah 0,5 Hz. Namun jika kita lihat lebih teliti, perioda akan sedikit lebih besar dari 2 detik. Perioda sebenarnya adalah 2 detik (karena delay 1000 ms) , ditambah waktu untuk menyalakan LED, dan waktu untuk mematikan LED, serta waktu untuk melakukan JUMP dari bawah setelah delay 1000 milidetik ke LED ON..
Diagram alir lampu kedip dengan superloop
// https://www.arduino.cc/en/tutorial/blink
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000); digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
Arsitektur Superloop Dengan Interupsi / Foreground-Background
Arsitektur berikutnya adalah superloop dengan interupsi, atau dikenal juga sebagai foreground-background. Pada arsitektur ini terdapat superloop seperti pada arsitektur sebelumnya, ditambah dengan beberapa buah Task yang dijalankan dengan interupsi. Interupsi ini ditrigger oleh suatu kejadian pada hardware Pada keadaan normal tanpa interupsi, yang dijalankan hanya Loop() saja, di sini menjalankan Task 1. Jika ada Interupsi 1, maka Task 1 akan dihentikan dulu, kemudian CPU menjalankan Task 2 sampai selesai , kemudian Interupsi 1 menjalankan RETI (return from interrupt) yang mengakhiri pelaksanaan interupsi 1. setelah itu baru kemudian Loop() yang berisi Task 1 diteruskan. Demikian juga hal serupa jika terjadi Interupsi 2 dan interupsi 3. Loop () ini dikenal juga sebagai background (latar belakang), sedangkan interupsi ini diistilahkan juga dengan Foreground. Analoginya Background ini posisinya di belakang, jadi tidak kelihatan jika ada sesuatu di depannya. Foreground jika ada akan menutupi Background. Maka dari tamsilan ini arsitektur ini dikenal juga dengan nama foreground-background.
Diagram alir superloop dengan interupsi
Contoh Superloop Dengan Interupsi Timer
Interupsi yang umum dipakai misalnya adalah interupsi timer dan interupsi eksternal. Interupsi timer dapat timbul jika ada timer yang overflow atau mencapai suatu angka tertentu. Secara praktisnya, Timer ini dapat dipakai untuk membuat sebuah Task yang aktif secara periodik. Pada Arduino Nano/UNO terdapat 3 timer hardware di mikrokontrolernya, sehingga kita dapat membuat 3 buah interupsi timer. Dari sini kita dapat membuat 3 buah LED berkedip, dengan masing-masing dikendalikan oleh 1 interupsi timer. Dengan arsitektur ini, kita dapat mempunyai task periodic sebanyak jumlah timer yang tersedia pada mikrokontroler
Diagram alir superloop dengan interupsi timer
Lampu Kedip Dengan Interupsi
Sebagai contoh pada gambar ini adalah aplikasi untuk membuat 4 buah LED berkedip dengan frekuensi yang berbeda. LED 1, LED 2 dan LED 3 akan berkedip sesuai dengan frekuensi yang diprogramkan pada timer 0, 1 dan 2. Setting timer ini dilakukan di bagian INIT(). LED 4 berkedip sendiri di superloop, namun periodanya tidak akan seusai 100% dengan waktu delay di superloop.
Arsitektur Multi Thread Dengan Real Time Operating System (RTOS)
Berikut ini adalah diagram alir arsitektur dengan multithreading atau multitasking. Untuk dapat menjalankan diagram alir ini, harus menggunakan suatu Real Time Operating System seperti FreeRTOS. Pada RTOS, superloop biasanya hanya berisi inisialisasi RTOS, selain itu kosong saja. Fungsi-fungsi di dalam aplikasi dijalankan sebagai Task pada Thread ataupun sebagai interupsi. Interupsi di sini bekerja sama seperti pada arsitektur sebelumnya. Perbedaan utama di sini adalah ada bagian yang bernama Real Time Kernenl dan Thread. Real Time Kernel biasanya dijalankan secara rutin oleh salah satu interupsi Timer pada mikrokontroler. Real Time Kernel ini kemudian tugasnya adalah menjalankan Thread-thread / Task yang ada pada aplikasi tersebut. Real Time Kernel dapat menjalankan dan menghentikan setiap task secara bergantian, sehingga seakan-akan kita memiliki beberapa CPU , padahal sebenarnya hanya ada 1 buah CPU. Pada Thread 1 dan Thread 2, struktur di dalamnya ada inisialisasi, dan ada sebuah superloop di masing-masingnya.
Diagram alir multithread dengan superloop, interupsi dan thread
Lampu Kedip dengan RTOS
Berikut ini contoh 4 buah lampu kedip dengan menggunakan FreeRTOS.
Banyak sistem embedded berinteraksi dengan dunia fisik, sehingga system embedded harus dapat merespon dunia fisik secara cukup cepat. Respon cepat ini disebut juga sebagai “real time” .
Tidak semua sistem embedded harus real time, demikian juga tidak semua sistem real time harus embedded
Pengertian Menurut Kamus
The actual time during which something takes place
–The computer may partly analyze the data in real time (as it comes in) – R.H. March
Maksudnya dari ‘the actual time during which something takes place” adalah ada 2 atau lebih kejadian, dan semuanya terjadi praktis pada waktu yang sama.
Real time secara Bahasa Inggris diartikan sesuatu yang terjadi seketika, namun dalam dunia teknik, kita perlu definisi yang lebih lugas.
Pengertian dalam Sistem Embedded
A real-time computer system is a computer system where the correctness of the system behavior depends not only on the logical results of the computations, but also on the physical time when these results are produced. By system behavior we mean the sequence of outputs in time of a system.
Sumber: Herman Kopetz, Real Time Systems, Design Principles for Distributed Embedded Applications 2nd edition, Springer, 2011, halaman 2
Terjemahan bebas: “Sistem komputer waktu nyata adalah system computer yang ketepatan perilakunya tergantung tidak hanya pada hasil komputasinya , namun juga waktu terjadinya hasil komputasi tersebut. Perilaku system di sini adalah urutan output terhadap waktu pada system tersebut.”
Jadi pada sistem komputer biasa, kualitas sistem hanya ditentukan hasil perhitungan yang benar, sedangkan pada komputer waktu nyata (real time), kualitas ditentukan oleh ketepatan hasil perhitungan dan waktu keluarnya hasil perhitungan tersebut.
Batasan ‘cepat’ perlu diturunkan dari fenomena fisik pada sistem. Jadi kita perlu memahami perilaku system fisik supaya dapat mendapatkan batasan waktu yang tepat.
Jika komputasi terlalu lambat maka sistem komputasi tidak dapat merespon perubahan fisik dengan baik. Jika hasil komputasi (dikeluarkan) terlalu cepat maka output juga dianggap tidak tepat.
Optimasi komputer juga diperlukan. Jika komputer yang dipakai terlalu cepat dari yang diperlukan, maka harganya akan lebih mahal. Jadi dalam hal ini perlu penentuan kecepatan komputer yang optimal.
Real time bukan hanya sekedar menggunakan prosesor yang cepat, namun juga ada masalah penjadwalan. Hal ini akan dibahas di bahasan Real Time Operating System di bagian Scheduler (penjadwal). Pada RTOS, selain kecepatan komputasi juga ada faktor pergantian ke pekerjaan yang lebih penting.
Referensi
Herman Kopetz, Real Time Systems, Design Principles for Distributed Embedded Applications 2nd edition, Springer, 2011
Arti yang paling dekat dengan arti embedded pada dunia elektronika adalah arti nomor 2, yang artinya kurang lebih “sesuatu yang menyatu atau tertanam di dalam benda lain”. Terjemahan langsung istilah ‘embedded’ adalah ‘tertanam’.
Definisi berikut diambil dari buku “Peter Marwedel, Embedded System Design 3rd edition, Springer 2018, halaman 2″
“Embedded systems are information processing systems embedded into enclosing products”
Pada pengertian ini embedded system adalah suatu system pengolah informasi yang digabungkan atau ditanamkan ke suatu produk atau benda lain. Sistem pengolah informasi di sini tidak harus berupa komputer atau mikroprosesor.
Tertanam atau menyatu di sini berarti bagi orang yang melihat produk hanya melihat produk saja, tidak lagi melihat prosesor di dalamnya sebagai suatu benda yang terpisah.
Berikut ini beberapa definisi menurut literatur lain.
“An embedded system is any application where a dedicated computer is built right into the system” [Jack Ganssle, The Art of Designing Embedded Systems, 2nd Edition, Newnes, 2008]
An application that contains at least one programmable computer (uC, uP or DSP) and which is used by individuals who are in the main, unaware that the system is computer based. [ Pont, M.J. , Patterns for Time Triggered Embedded Systems, (2001)]
Any computer system hidden in any products , [David E. Simon, An Embedded Software Primer ,Addison-Wesley Professional; 1st edition (1999)]
Definisi ini menyebutkan secara spesifik bahwa sistem embedded adalah mikroprosesor, dapat berupa mikroprosesor biasa, mikrokontroler ataupun mikropsesor dari jenis digital signal processor
Komputer Umum
Sistem komputer ada yang umum (general purpose) dan embedded. Pada sistem komputer yang umum, kita masih dapat mengenali bahwa benda tersebut adalah sebuah komputer. Dari spesifikasinya biasanya berdasarkan fitur-fitur komputer, seperti kecepatan CPU (Central Processing Unit), ukuran memori dan ukuran storage. Sedangkan pada sistem embedded, biasanya spesifikasinya tidak menampilkan kemampuan komputer yang dipakai di dalamnya, namun hanya menampilkan kemampuan produknya.
Berikut ini beberapa jenis sistem komputer umum:
Desktop Personal Computer
Notebook atau Laptop
Mobile: Smartphone dan tablet
information processing: web server, server database
Berikut ini contoh spesifikasi laptop. Perhatikan bahwa disebut jelas tentang kemampuan CPU, memori dan storage dari laptop tersebut.
Thinkpad T495Spesifikasi Thinkpad T495
Contoh Produk Dengan Sistem Embedded
Berikut ini contoh mesin cuci tipe front loading otomatis. Di dalam mesin cuci ini ada mikroprosesor untuk mengendalikan semua pekerjaan mesin cuci tersebut. Namun dalam spesifikasinya sama sekali tidak disebut tentang kemampuan mikroprosesornya tersebut.
Berikut ini diagram blok suatu sistem mikroprosor. Komponen utama pada suatu mikroprosesor adalah CPU (Central Processing Unit), memori (RAM, ROM, Flash Memory, EEPROM, EPROM, NVRAM) , Input Output dan bus mikroprosesor.
Diagram blok sistem mikroprosesor
Arti dari sistem mikroprosesor sangat mirip dengan system embedded.
Ketika kita bicara system mikroprosesor, biasanya konteksnya kita membahas struktur susunan sistem mikroprosesor, yang terdiri dari CPU, memori dan input output.
Ketika kita membicarakan system embedded, biasanya konteksnya adalah system mikroprosesor ini akan dijadikan bagian dari suatu produk lain.
Di banyak literatur, istilah ‘sistem mikroprosesor’ sinonim dengan ‘sistem embedded’. Pada buku literatur yang baru-baru, misalkan Ketika kita mencari referensi tentang Arduino, yang merupakan mikroprosesor, seringkali judul bukunya mengandung kata ‘embedded’.
Namun perlu diingat juga bahwa tidak semua system embedded menggunakan mikroprosesor, seperti definisi yang sudah disebut di awal. Di bukunya, Peter Marwedel mencontohkan ada system embedded yang menggunakan FPGA (field programmable Gate Array) sebagai pengolah informasi. FPGA ini adalah rangkaian digital yang terdiri dari gerbang rangkaian logika dan memori, yang disusun sebagai pengolah informasi. Untuk kuliah ini kita hanya focus ke system embedded yang menggunakan mikroprosesor.
Smart Room dapat dibuat dengan menggunakan mikroprosesor. Berikut ini tahap-tahap pembuatan smart room tersebut.
Menentukan Tujuan Smart Room
Tahap pertama dari sebuah pekerjaan/proyek adalah menentukan tujuan utama pekerjaan tersebut.
Berikut ini beberapa alternatif tujuan sebuah smart room
Meningkatkan kenyamanan ruangan, bisa dari sisi pencahayaan, temperatur, kelembaban
Menghemat pemakaian energi. Suatu ruangan memerlukan temperatur untuk penerangan dan pemanasan/pendinginan
Meningkatkan keamanan ruangan
Menentukan Spesifikasi Sistem
Setelah tujuan ditentukan,berikutnya adalah menentukan spesifikasi teknis dari ruangan tersebut.
Hal-hal yang perlu diperhatikan pada spesifikasi smart-room:
Apakah temperatur perlu diukur?
Apakah temperatur perlu dikendalikan?
Apakah kelembaban perlu diukur?
Apakah kelembaban perlu dikendalikan?
Apakah cahaya perlu diukur?
Apakah cahaya perlu dikendalikan?
Temperatur ruangan diukur dengan ketelitian tertentu, misal 1 derajat Celcius, 0,5 derajat Celcius dan sebagainya
Rentang temperatur ruangan ditentukan. Hal ini untuk menentukan rentang sensor temperatur yang diperlukan.
Target temperatur yang diinginkan
Ketelitian pengukuran kelembaban.
Rentang kelembaban ruangan yang perlu diukur
Target kelembaban yang diinginkan.
Membuat Perancangan Sistem Secara Keseluruhan
Pada tahap ini dibuat arsitektur sistem secara keseluruhan. Aliran data & informasi ditentukan.
Perancangan perangkat keras
Pada tahap ini dilakukan pembuatan rancangan perangkat keras.
Hal-hal yang perlu ditentukan:
Menentukan mikrokontroler yang dipakai , jika menggunakan mikroprosesor
Menentukan sensor-sensor yang dipakai
Menentukan aktuator-aktuator yang diperlukan
Menentukan catu daya (power supply) yang diperlukan
Kotak untuk menyimpan perangkat
Berikut ini contoh sistem smart room dengan sebuah mikrokontroler sebagai pengendali utama.
Blok Diagram Perangkat Keras Smart-Room
Contoh prosesor populer yang dapat dipakai di antaranya:
Arduino UNO (ATmega328)
Arduino Nano (ATmega328)
ESP32 (Espressif)
ESP8266
ESP32 dan ESP8266 dapat dipakai jika kita memerlukan WiFi atau Bluetooth. Jika tidak perlu komunikasi nirkabel, cukup menggunakan Arduino berbasis ATmega328.
Contoh sensor yang dapat dipakai
LM35: sensor temperatur analog
DS18S20: sensor temperatur digital
BMP280: sensor temperatur dan tekanan udara
BME280: sensor temperatur, kelembaban dan tekanan udara
LDR (Light Dependent Resistor): sensor cahaya
Photodiode : sensor cahaya
Contoh Display yang dapat dipakai:
LCD 16×2
LCD 20×4
LCD matrix
Perancangan perangkat lunak
Pada tahap ini dilakukan hal-hal sebagai berikut
menentukan apakah akan menggunakan sistem operasi. pada sistem seperti ini sering dipakai sistem operasi waktu nyata (Real Time Operating System /RTOS ). Salah satu RTOS yang sering dipakai adalah FreeRTOS (https://www.freertos.org/)
membuat model diagram alir (flow chart)
membuat model aliran data (data flow diagram)
membuat model FSM (finite state machine) jika pada sistem terdapat proses yang memerlukan FSM
membuat model pengolahan sinyal dengan DSP (Digital Signal Processing), jika terdapat pengolahan sinyal secara digital. Umumnya melibatkan filter digital , equalizer digital, perekaman data digital.
Implementasi Perangkat Keras
Pada tahap ini dibuat papan rangkaian dengan PCB (Printed Circuit Board)
Implementasi Perangkat Lunak
Pada tahap ini dilakukan proses pembuatan perangkat lunak untuk mikrokontroler
Pengujian sistem
Pada tahap ini dilakukan pengujian untuk membandingkan antara perilaku sistem dengan spesifikasi yang diinginkan. Untuk itu diperlukan pengukuran-pengukuran untuk kemudian dibandingkan dengan angka-angka yang diinginkan pada spesifikasi.
Pengujian ini biasanya dilakukan secara kuantitatif, sehingga cukup obyektif.
Perangkat yang diperlukan untuk pengujian sistem di antaranya
Termometer digital atau analog sesuai dengan rentang temperatur dan ketelitian yang diinginkan
Higrometer digital atau analog sesuai dengan rentang kelembaban dan ketelitian pengukuran kelembaban.
Light Meter untuk mengukur pencahayaan ruangan
Voltmeter / Wattmeter untuk mengukur unjuk kerja tegangan/ arus/ daya pada rangkaian.
Validasi Sistem
Pada tahap ini dilakukan perbandingan antara tujuan sistem dengan perilaku sistem. Jika sistem yang dibuat sudah dapat menyelesaikan permasalahan di tujuan, maka sistem dapat dikatakan sudah berhasil divalidasi.
Validasi ini biasanya dilakukan secara kualitatif sehinggak agak sedikit subyektif.
Suatu sistem filter digital secara prinsip sederhana mengubah sinyal analog menjadi digital, kemudian mengolah sinyal digital tersebut dengan algoritma tertentu, kemudian mengubah sinyal digital kembali menjadi sinyal analog. Secara diagram blok dapat digambarkan sebagai berikut:
Sistem filter digital
Filter digital dapat diimplementasikan dengan beberapa cara, di antaranya dengan sistem mikroprosesor dan sistem digital seperti FPGA (Filed Programmable Gate Array).
Dalam prakteknya, sistem tersebut perlu beberapa tambahan subsistem/modul supaya dapat diimplementasikan secara nyata.
Berikut ini sistem lengkap filter digital untuk diimplementasikan dengan sistem mikroprosesor:
Detail sistem filter digital versi 1
Penjelasan Sistem Filter Digital Sederhana
Input: sinyal input berasal dari input, misal untuk sistem audio dapat berupa mikrofon, atau MP3 player, atau komputer.
Sinyal input ini memiliki level tegangan dan impedansi tertentu. Seringkali sinyal ini perlu diperkuat dulu. Misal mikrofon biasanya memiliki kuat sinyal puluhan sampai ratusan milivolt dengan impedansi ratusan ohm.
Penguat: Penguat memiliki fungsi buffering dan juga menyesuaikan amplitudo supaya cocok dengan amplitudo dari ADC yang dipakai.
Pengubah Level Tegangan: tegangan input berupa tegangan bolak-balik, bisa saja memiliki tegangan positif dan negatif. ADC yang dipakai seringkali hanya dapat menerima tegangan positif, sehingga tegangan input mesti digeser agar menjadi positif.
Low Pass Filter (anti aliasing): sesuai teori sinyal, frekuensi sampling setidaknya memiliki frekuensi 2x frekuensi kerja sinyal yang diukur. Sinyal input yang lebih dari 1/2 frekuensi sampling harus ditapis supaya tidak terjadi aliasing.
ADC (Analog to Digital Converter): mengubah tegangan analog menjadi suatu angka digital, dengan resolusi bit tertentu, dan kecepatan sampling tertentu.
Filter Digital: melakukan proses pengolahan sinyal yang diinginkan, dapat berupa LPF (low pass filter) , HPF (high pass filter), BPF (band pass filter), BSF (band stop filter) ataupun Equalizer.
Digital to Analog Converter: mengubah sinyal digital menjadi sinyal analog. Umumnya menggunakan prinsip ZoH (Zero order Hold).
Reconstruction Filter: sinyal dari Zero order Hold memiliki bentuk seperti anak tangga (staircase), sehingga memiliki komponen frekuensi tinggi. Untuk itu perlu ada filter rekonstruksi yang menghilangkan komponen frekuensi tinggi tersebut. Selain itu ZoH juga mengubah respon frekuensi, yaitu memberi redaman di frekuensi tinggi. Idealnya reconstruction filter juga mengkompensasi hal tersebut.
Penguat: untuk menyesuaikan level tegangan dan impedansi dari DAC ke tahap selanjutnya
Power supply: implisit semua sistem elektronika perlu power supply. Sistem pengolah digital ada bagian analog dan digital, sehingga masing-masing perlu level tegangan dan power supply tersendiri.
Kelemahan Sistem Filter Digital Sederhana
Sistem di atas sudah dapat berfungsi dengan baik, namun memiliki beberapa kelemahan.
Masalah pertama: konversi analog ke digital
filter anti aliasing sulit untuk dibuat ‘tajam’, sehingga frekuensi sampling mesti jauh lebih tinggi daripada frekuensi kerja sinyal. Jika frekuensi sampling terlalu dekat, respon frekuensi kerja terpengaruh oleh anti aliasing filter, atau juga sebagian sinyal frekuensi tinggi dapat menembus filter anti aliasing.
akibat frekuensi sampling tinggi, maka bagian filter digital mesti bekerja pada frekuensi lebih tinggi daripada frekuensi kerja sinyal.
hal ini juga berpengaruh jika sinyal perlu disimpan: storage akan membesar
hal ini juga berpengaruh jika sinyal perlu dikirim: keperluan bandwidth komunikasi membesar.
solusi: sampling dilakukan dengan frekuensi tinggi, namun frekuensi sampling diturunkan (downsampling) sebelum sinyal diolah/dikirim/disimpan.
pada proses downsampling, sinyal perlu difilter secara digital supaya tidak terjadi aliasing. proses filter digital lebih mudah dibandingkan filter analog, terutama karena masalah ketelitian nilai komponen analog.
Masalah kedua: konversi digital ke analog
Zero order Hold pada DAC mempunyai respon frekuensi sinc(), sehingga ada redaman di frekuensi tinggi
solusi 1: sinyal digital diubah ke frekuensi tinggi sebelum masuk ke DAC, dengan demikian pengaruh redaman frekuensi tinggi berkurang.
solusi 2: sinyal digital diperkuat dulu di frekuensi tinggi dengan equalizer, supaya dapat mengkompensasi redaman di frekuensi tinggi.
Berikut ini proses ekualisasi sinyal untuk kompensasi pengaruh ZoH.
Ekualisasi sinyal digital to analog
Pada solusi (a) proses ekualisasi dilakukan secara digital sebelum DAC , disebut sebagai tahap pre-equalization.
Pada solusi (b) proses ekualisasi dilakukan secara analog setelah LPF, disebut sebagai tahap post-equalization.
Sistem Lengkap
Berikut ini blok diagram sistem filter digital dengan tambahan solusi-solusi supaya mengurangi permasalahan-permasalahan.
Sistem filter digital lengkap versi 2
Pada sistem ini dipilih pre-ekualisasi secara digital , dengan pertimbangan merancang equalizer secara digital lebih mudah. Proses pembuatan equalizer ini dapat dilakukan dengan metode ‘Design of FIR Filters Using the Frequency Sampling Method’.
Tambahan pada artikel ini adalah dilakukan filtering dengan LPF untuk membantu memuluskan sinyal hasil sensor.
Sensor detak jantung dari pulsesensor.com
Tahap pengolahan sinyal adalah sebagai berikut:
Pulsesensor sebagai sumber sinyal yang berasal dari detak jantung
Sinyal tegangan dari sensor dimasukkan ke Filter resistor dan kapasitor sebagai low pass filter untuk menghindari terjadinya aliasing,
Tegangan hasil filter dimasukkan ke modul Arduino Nano untuk dikonversikan ke digital dengan ADC. Data disampling dengan frekuensi 1 kHz dengan ADC pada Arduino Nano,
Data digital kemudian dikirimkan dengan komunikasi serial asinkron dengan kecepatan 115200 bps melalui port USB ke desktop PC.
Data direkam di desktop PC dengan perangkat lunak RealTerm. Data direkam ke sebuah file TXT di PC.
Data hasil rekaman kemudian dianalisis dengan perangkat lunak python menggunakan Jupyter Notebook
Berikut ini diagram blok aliran sinyal pada sistem ini:
Berikut ini detail uraian aliran sinyal pada sistem tersebut
Sinyal hasil pengukuran dari ADCSinyal asli diperbesar
Tujuan dari sensor tersebut adalah mengukur detak jantung seseorang.
Ada beberapa hal yang mempersulit perhitungan detak jantung:
amplitudo sinyal berubah-ubah, tergantung kondisi tangan, tekanan pada sensor, dan sebagainya, sehingga batas ambang sinyal berubah-ubah
Sinyal detak jantung memiliki puncak yang tinggi, dan ada juga puncak yang lebih kecil. Mesti ada algoritma untuk mendeteksi puncak yang tinggi saja.
Sinyal hasil pengukuran ADC masih kurang rata, sehingga untuk membuat lebih halus dilakukan filtering pada frekuensi cut off 4 Hz. Frekuensi cut-off 4 Hz dipilih mengingat detak jantung maksimum orang normal adalah 220 per menit, atau setara 3,667 Hz. Jadi sinyal di atas frekuensi 3,667 Hz tidak diperlukan.
Filter menggunakan filter digital IIR 4 pole. Filter 6 pole menghasilkan filter yang tidak stabil, sehingga akhirnya dipakai 4 pole saja. Jenis filter IIR supaya perhitungan lebih sederhana, mengingat sistem ini akan diimplementasikan di mikrokontroler dengan kemampuan komputasi yang terbatas.
Desain filter menggunakan Iowa Hills IIR Filter Designer Version 6.5 sebagai berikut:
Implementasi filter dengan bahasa Python, menggunakan struktur filter “Nth Order Coeffiecients”.
Struktur filter IIR (Infinite Impulse Response) yang dipakai adalah sebagai berikut:
Hasil filter adalah sebagai berikut (sinyal merah).
Sinyal hasil filter dengan low pass dengan fc=4 Hz
Sinyal hasi pengukuran mengandung sinyal DC offset, sehingga rata-ratanya tidak 0. Untuk menghilangkan DC offset, dilakukan filtering dengan LPF pada 200 mHz. Filter 2 pole IIR.
Hasil filter adalah sebagai berikut (sinyal merah):
Sinyal hasil filter LPF 0.2 Hz
Sinyal tanpa offset diperoleh dengan sinyal hasil filter 4 Hz dikurangi dengan sinyal hasil filter di 0.2 Hz. Hasilnya adalah sinyal (warna biru) di gambar di bawah ini.
Sinyal biru kemudian disearahkan (rectified), sehingga didapat sinyal warna merah.
Sinyal hasil offset dan penyearahan
Sinyal hasil penyearahan difilter lagi dengan filter 0.2 Hz, untuk membantu deteksi puncak. Deteksi puncak agak sulit, karena dari hasil filter 4 Hz masih ada puncak kecil. Dengan sinyal hasil penyearahan diharapkan mampu mendeteksi puncak yang tinggi saja.
Gabungan sinyal
Proses terakhir adalah deteksi puncak. Hanya puncak yang tinggi yang dihitung.
Deteksi puncak pulsa denyut jantung
Penutup
Dari percobaan yang dilakukan, filtering (penapisan) analog dan digital dapat membantu membentuk sinyal supaya lebih mudah diproses.
Berikut ini beberapa jenis display yang sering dipakai untuk sistem mikroprosesor berbasis Arduino:
Dot matriks 16×2
Dot matriks 20×4
E Paper / E-Ink display
OLED
LCD TFT / IPS
Antar muka yang dipakai ke display antara lain:
komunikasi paralel
komunikasi serial I2C
komunikasi serial SPI
Komunikasi paralel menggunakan banyak pin, karena setiap bit menggunakan 1 jalur. Antar muka serial hanya memerlukan pin sedikit. Display keluaran baru umumnya sudah menggunakan komunikasi serial.
Berikut ini contoh antar muka ESP32 LOLIN32 Lite dengan display E-INK, menggunakan protokol SPI.
Antar muka LOLIN32 LITE dengan display E-INK Heltec
Mikrokontroler ESP32 dapat berkirim data melalui jaringan dengan komputer lain. Untuk menjaga kerahasiaan data yang dikirim tersebut, maka perlu dilakukan enkripsi data yang dikirim. Pada tulisan ringkas ini akan ditinjau library enkripsi data yang kompatibel antara ESP32 dan Windows, sehingga memungkinkan pertukaran data dengan enkripsi antara keduanya.
menggunakan AES-128 dengan mode ECB (Electronic Codebook). Seperti diketahui, mode ECB ini punya banyak kelemahan, sehingga kalau mau lebih profesional kita mesti menggunakan mode lain seperti CBC (Cipher Block Chaining).
ukuran data harus kelipatan 16 byte. Jika ukuran data lebih dari 16 byte, maka fungsi mesti dipanggil berulangkali, dan kalau ukuran data bukan kelipatan 16, perlu dilakukan padding (pengisian) supaya menjadi kelipatan 16.
Selanjutnya bagaimana supaya data yang dienkripsi di ESP32 dapat dibaca di Windows? Untuk itu perlu diinstall library yang sama / kompatibel di Windows. Untuk mudahnya, pada contoh ini akan digunakan library yang sama supaya tidak perlu mengubah source code.
Library yang dipakai pada ESP32 tersebut adalah Mbed TLS(https://tls.mbed.org/) . Library Mbed TLS tersedia dalam bentuk source code, jadi dapat juga dicompile sendiri untuk platform lain. Untuk Windows, sudah ada library yang sudah dicompile, jadi tinggal diinstall saja. Versi yang tersedia untuk compiler GNU based (Cygwin, MinGW) dan Visual Studio.
Pada contoh berikut ini akan dipakai IDE Netbeans 8.2 dengan compiler Cygwin. Netbeans terbaru adalah versi 11, namun Netbeans yang sudah support C/C++ baru sampai versi 8.2, jadi versi 11 belum mendukung bahasa C / C++.
Library perlu diinstall dari program Setup dari Cygwin. Jalankan program instalasi Cygwin (setup-x86_64.exe), kemudian masuk ke menu pemilihan packages. Pilih View “Full”, dan Search di “mbedtls”. Pilih untuk install library mbedtls dan mbedtls-devel.
Cygwin Mbed TLS library
Nama library untuk Mbed TLS adalah libmbedcrypto. Selanjutnya tambahkan library tersebut di setting project dari Netbeans
Berikut ini tampilan library di Netbeans. Lokasi library tersebut adalah di C:/cygwin64/lib/libmbedcrypto.dll.a
/* * enkripsi data dengan AES-CBC * modifikasi dari https://everythingesp.com/esp32-arduino-tutorial-encryption-aes128-in-ecb-mode/ * menggunakan library mbedtls dari cygwin */ #include "mbedtls/aes.h" #include "string.h" #include "stdio.h"
printf("\n\nDeciphered text:\n"); for (int i = 0; i < 16; i++) { printf("%c", (char) decipheredTextOutput[i]); //printf("%c", (char) decipheredTextOutput[i]); } return 0; }
Perubahan yang dilakukan:
memindahkan isi setup() di Arduino ke main() di Netbeans
menambahkan header file stdio.h dan string.h
mengganti Serial.print() dengan printf()
Output di ESP32 Arduino
Output Windows 32
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0018,len:4 load:0x3fff001c,len:928 ho 0 tail 12 room 4 load:0x40078000,len:8740 load:0x40080400,len:5788 entry 0x4008069c Original plain text: Tech tutorials x Ciphered text: 567a3b23b683d8488d5d40d2a56e31d2 Deciphered text: Tech tutorials x
Original plain text: Tech tutorials x Ciphered text: 567a3b23b683d8488d5d40d2a56e31d2 Deciphered text: Tech tutorials x RUN SUCCESSFUL (total time: 70ms)
Dari hasil di atas, nampak bahwa ciphered text adalah identik, dan keduanya dapat melakukan proses dekripsi. Jadi dapat disimpulkan kedua program tersebut mempunyai fungsi yang sama, jadi data yang dienkripsi di ESP32 dapat dibaca di Windows dan sebaliknya.
Tahap selanjutnya adalah menambahkan proses komunikasi data dengan menggunakan UDP/TCP di ESP32 dan Windows, namun hal itu akan menjadi tulisan lain lagi.
Pulse Width Modulation (PWM) atau modulasi lebar pulsa sangat bermanfaat pada sistem mikrokontroler, salah satunya adalah untuk mengendalikan motor DC. Pada chip ATmega328, sinyal PWM ini dapat dibangkitkan dengan perangkat lunak, ataupun dapat dibangkitkan dari perangkat keras dengan menggunakan periferal Timer internal. PWM dari perangkat keras cukup praktis karena tidak membebani perangkat lunak, namun ada keterbatasan karena pada ATmega328 hanya terdapat 3 buah timer internal, sehingga tidak bisa memiliki banyak output PWM dari perangkat keras.
Berikut ini ujicoba output PWM (Pulse Width Modulation) dari Timer 0 pada ATmega328. Modul yang digunakan adalah Arduino Nano clone.
Konfigurasi pengujian PWM ini adalah sebagai berikut:
Perangkat keras menggunakan Timer 0 (8 bit)
Clock Source: System Clock
Clock Value 2000.000 kHz
Mode: Fast PWM top=0xFF
Out A: Non-Inverted PWM
Out B: Disconnected
tidak ada interupsi dari Timer0
output pada pin OC0A (pin PD6 pada ATmega328, D6 pada Arduino Nano)
Pengaturan register menggunakan Code Wizard dari CodeVision AVR Evaluation dengan detail sebagai berikut ini:
Source code terkait dengan Timer 0 adalah sebagai berikut:
Variable yang dapat diubah-ubah adalah OCR0A untuk mengatur duty-cycle dari PWM. Nilai register ini dapat diisi dari 0x00 sampai dengan 0xff (255)
Tahap selanjutnya adalah pengujian output PWM dengan cara melihat sinyal yang dihasilkan dengan osiloskop GW INSTEK GDS-1042
Berikut ini adalah output dengan nilai register OCR0A=0x00. Perioda PWM adalah 2000/256 = 0.128 ms
OCR0A=0x01
Nampak bahwa nilai register 0 akan memberikan sinyal yang paling pendek, yaitu dengan panjang pulsa 500 ns. Berikut ini adalah sinyal yang sama dilihat dengan time base 100 ns per div
OCR0A=0x01, zoom
Berikut ini adalah sinyal dengan OCR0A=0x80 atau duty cycle=50%
OCR0A=0x80
Berikut ini adalah sinyal dengan OCR0A=0xfe (254)
OCR0A=0xfe (254)
Terakhir adalah sinyal dengan duty cycle = 100% , dengan OCR0A=0xff (255)
OCR0A=0xff
Hal penting yang perlu diperhatikan: nilai duty cycle tidak pernah 0%, minimum adalah 1/256. Nilai maksimum duty cycle adalah 100%. Untuk membuat sinyal PWM duty cycle =0 dapat dilakukan dengan mematikan output PWM.
Mikrokontroler/mikroprosesor berbasis ESP32 mempunyai fitur on-chip-debugging dengan protokol JTAG. Supaya ESP32 ini dapat didebug, maka perlu ada komponen JTAG Adapter. Petunjuk pemilihan JTAG adapter terdapat di artikel “Selecting JTAG Adapter“. Cara termudah adalah menggunakan board ESP32-WROVER-KIT yang sudah mempunyai JTAG adapter di dalamnya. Cara lain adalah menambahkan JTAG adapter pada board ESP32 yang belum dilengkapi dengan JTAG Adapter. Daftar JTAG Adapter yang dapat dipakai dapat dilihat antara lain di artikel “Debug Adapter Hardware“.
Pada tulisan ini diuraikan cara menyambungkan ESP32 ke JTAG Adapter berbasis FT2232HL.
Cara termudah melakukan debugging pada ESP32 adalah menggunakan board ESP32-WROVER-KIT yang sudah ada JTAG Adapter built-in di dalamnya. Sayangnya harga board ini agak mahal (sekitar USD 50). Jika Espressif sendiri menggunakan FT2232 untuk JTAG Adapter, nampaknya kemampuan FT2232 cukup bagus sebagai debugger.
Harga board ESP32 yang murah sekitar USD 7, sedangkan breakout board untuk FT2232 harganya sekitar USD 7, jadi dengan USD 14 sudah memperoleh ESP32 lengkap dengan JTAG debugger. Hanya saja perlu merangkai sendiri ESP32 dengan FT2232.
Hardware
Berikut ini teknik penyambungan ESP32 ke FT2232 menurut beberapa sumber.
#1 Analisis Skematik ESP32 WROVER KIT
Contoh cara menyambungkan antara ESP32 dengan FT2232 dapat dilihat dari skematik ESP32 WROVER KIT di situs Espressif. Berikut ini adalah pin JTAG pada ESP32, yaitu:
MTCK
MTDI
MTDO
MTMS
EN
Pin JTAG pada ESP32
Berikut ini adalah bagian dari skematik ESP32 WROVER KIT, khususnya yang tersambung ke JTAG. Pin yang dipakai adalah ADBUS0, ADBUS1, ADBUS2, ADBUS3, ACBUS1, yang tersambung ke sinyal TCK, TDI, TDO, TMS dan R_RST
Pin JTAG pada FT2232HL
Tabel berikut berisi hasil analisis daftar pin dan sinyal JTAG pada skematik ESP32 WROVER KIT tersebut:
Pin FT2232HL
Sinyal
Sinyal
Pin ESP32
ADBUS0
TCK
MTCK
R_IO13
ADBUS1
TDI
MTDI
R_IO12
ADBUS2
TDO
MTDO
R_IO15
ADBUS3
TMS
MTMS
R_IO14
ACBUS2
RST
EN
R_nTRST
#2 Situs PlatformIO
Penyambungan JTAG juga dijelaskan di situs PlatformIO sebagai berikut:
FT2232H Mini-Module Pin
Board JTAG Pin
Description
GND [CN2-2]
GND
Digital ground
AD0 [CN2-7]
TCK
JTAG Return Test Clock
AD1 [CN2-10]
TDI
Test Data In
AD2 [CN2-9]
TDO
Test Data Out
AD3 [CN2-12]
TMS
Test Mode State
AC2 [CN2-20]
RESET
Connect this pin to the (active low) reset input of the target CPU (EN for ESP32)
Modul FT2232 yang dipakai pada artikel tersebut adalah “FT2232H Mini Module” yang diproduksi oleh FTDI.
FT2232H Mini Modul
Produk breakout board serupa juga dibuat oleh CJMCU seperti pada foto berikut:
CJMCU-2232HL
#3 Forum Platformio
Sebagai perbandingan, berikut ini daftar koneksi JTAG ke ESP32 menurut artikel forum PlatformIO (Debugging ESP32 – How), modul FT2232 yang digunakan adalah “FTDI2232 minimodule”:
To debug ESP32 using FTDI2232 minimodule, here is the required connection: FTDI AD0 -> ESP32 GPIO13 (TCK) FTDI AD1 -> ESP32 GPIO12 (TDI) FTDI AD2 -> ESP32 GPIO15 (TDO) FTDI AD3 -> ESP32 GPIO14 (TMS) FTDI AC2 -> ESP32 EN (RST) FTDI GND -> ESP32 GND
Penggunaan FT2232H sebagai JTAG juga dijelaskan secara ringkas di datasheet FT2232H sebagai berikut:
Konfigurasi pin FT2232H
Software
Setelah mendapatkan kepastian cara menyambungkan hardware JTAG debugger, selanjutnya adalah setting software untuk melakukan debugging.
Status saat ini baru melakukan studi software apa saja yang perlu disiapkan. Beriktu ini penjelasan software untuk debugging ESP32:
Penggunaan software debugger Eclipse/Command Line: https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/jtag-debugging/using-debugger.html https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/jtag-debugging/configure-other-jtag.html
Penggunaan Debugger dengan PlatformIO: http://docs.platformio.org/en/latest/plus/debug-tools/minimodule.html
Debugging ESP32 secara umum: https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/jtag-debugging/
Hasil debugging menyusul.
Kesimpulan
Kesimpulan sementara ini:
Menurut studi literatur, ESP32 dapat didebug dengan hardware FT2232HL, dengan biaya total USD 14, lebih murah daripada harus memakai ESP WROVER KIT seharga USD 50.
Penyambungan antara ESP32 dan FT2232 dijelaskan di beberapa situs, dengan isi konsisten.
Proses debugging belum dilakukan, namun dari pengalaman selama ini, isi artikel di situs Espressif cukup lengkap dan mudah diikuti. Nampak bahwa Espressif cukup serius mengusahakan agar produk ESP32nya mudah dipakai oleh ‘orang biasa’.
Pengembangan suatu sistem elektronika melibatkan beberapa pekerjaan yang berbeda. Ada beberapa versi ruang lingkup pengembangan sistem elektronika menurut para ahli.
Berikut ini menurut buku Jens Lienig,Hans Bruemmer, Fundamentals of Electronic System Design.
Model Jens & Hans ini ruang lingkupnya luas, dari bagian terluar dari sistem elektronik, sampai ke dalam . Namun demikian tidak dibahas hal-hal yang terlalu spesifik , seperti misalnya mengenai model perangkat lunak untuk sistem yang menggunakan sistem mikroprosesor.
Berikut ini lebih spesifik ke sistem embedded, menurut buku Lee & Seshia, Introduction to Embedded Systems, a cyber-physical systems approach. Sistem embedded secara ringkasnya adalah sistem yang di dalamnya menggunakan komputer/mikroprosesor sebagai salah satu komponen utama, namun komputer/mikroprosesor ini tidak nampak.
Model dari Lee & Seshia ini nampaknya fokus ke mikroprosesor dan teknik pembuatan software di dalamnya. Tidak dibahas permasalahan hardware lainnya.
Berikut ini menurut buku Peter Marweddel, Embedded System Design, Foundations of Cyber-Physical Systems, and the Internet of Things, 3rd Edition.
Model dari Peter Marwedel ini sedikit lebih luas daripada model Lee & Seshia, namun masih lebih sempit dibandingkan model Jens & Hans.
Kesimpulan sementara:
Secara umum sistem elektronika perlu memperhatikan model Jens & Hans
Jika sistem elektronika yang dibuat menggunakan mikroprosesor & perangkat lunak, perlu menggunakan model Lee & Seshia atau model Peter Marwedel untuk detail di perangkat lunaknya.
Breakout board MCP4725 tampak atasBreakout board MCP4725 tampak bawah
MCP4725 adalah Digital to Analog Converter 12 bit dengan antarmuka digital dengan protokol I2C. Komponen ini sangat bermanfaat jika kita ingin menambahkan kemampuan output analog pada suatu sistem mikroprosesor/mikrokontroler yang belum memiliki kemampuan DAC di dalamnya. Mikrokontroler tanpa DAC misalnya adalah Arduino Nano (ATMega328) dan STM32F103C8T (Blue Pill).
Modul MCP4725 yang banyak nampaknya adalah hasil kloning dari modul MCP4725 buatan Sparkfun, mengingat penampilannya sangat mirip.
Modul MCP4725 buatan SparkfunSkema modul MCP4725 versi Sparkfun
Pada modul MCP4725 tersebut ada jumper yang dapat dikonfigurasi:
SJ1 untuk mengaktifkan atau menonaktifkan pull up resistor I2C berukuran 4k7. Defaultnya adalah pull up resistor terhubung. Jika ingin diganti/ditiadakan, maka jalur pada PCB mesti dipotong dengan cutter.
SJ2 untuk memilih alamat I2C dari modul MCP4725 pada pin 0. Defaultnya adalah terhubung ke GND , sehingga alamat pada I2C adalah 1100000 (4 bit ‘1100’ adalah 4 bit device code, 2 bit berikutnya ’00’ adalah A2 dan A1, 0 terakhir sesuai dengan input A0)
Percobaan MCP4725 Dengan Arduino Nano
Tahap pertama, aktifkan library MCP4725 dari Adafruit. Penjelasan library ini terdapat di https://github.com/adafruit/Adafruit_MCP4725
Mikroprosesor dapat menerima input analog maupun digital. Pada input analog, tentunya terjadi perubahan dari analog ke digital dengan menggunakan ADC (Analog to Digital Converter). Namun sebelum masuk ke ADC, ada beberapa proses yang perlu diperhatikan, di antaranya:
Level shift, karena pada umumnya input analog berbentuk sinyal AC yang negatif dan positif, sedangkan kebanyakan ADC hanya menerima sinyal positif. Sinyal yang ada negatif dan positif ditambah dengan suatu nilai, sehingga semua sinyal menjadi bernilai positif. Jika ADC dapat menerima sinyal positif, maka level shift ini tidak diperlukan.
Penguat (amplifier) atau peredam (attenuator), untuk memperkuat atau memperlemah sinyal agar rentang tegangan sinyal analog yang masuk dan rentang tegangan ADC cocok
Clipper / clamp. ADC hanya dapat menerima tegangan pada rentang tertentu tanpa merusaknya. Misal pin ATMega328 pada Arduino hanya dapat menerima tegangan maksimal VCC+0,7 volt dan minimal GND-0,7 volt. Untuk itu perlu ada rangkaian yang dapat memotong sinyal masuk jika melebihi batas tersebut. Sebenarnya sinyal dari penguat/peredam seharusnya sudah berada dalam rentang tegangan ADC, namun pada kondisi tertentu, sinyal input kadang-kadang dapat naik-turn di luar jangkauan yang normal. Jika kita tidak yakin 100% bahwa tegangan akan berada pada rentang tersebut, maka lebih aman jika dipasang clipper / clamp.
Filter anti aliasing / Low Pass Filter. Frekuensi sinyal input harus kurang dari 1/2 frekuensi sampling supaya tidak terjadi aliasing.
Tegangan referensi. ADC memerlukan tegangan referensi, ada yang tegangan referensi didapat dari luar mikroprosesor, ada juga mikroprosesor yang sudah menggunakan tegangan referensi built in.
Sample & Hold. Jika perubahan sinyal input sangat cepat dibandingkan dengan kecepatan konversi pada ADC, maka tegangan input perlu ditahan (hold) dengan suatu rangkaian , supaya tegangan input ADC tidak berubah-ubah selama konversi berlangsung.
Multiplexer, jika 1 ADC dipakai untuk beberapa kanal input yang berbeda. Khusus untu multiplexer dibahas di artikel “Antar Muka Input Analog Multi Kanal“
Surge Arrester. Khusus jika ada resiko sambaran petir tidak langsung, maka pada input analog perlu dipasang surge arrester untuk meredam imbas sambaran petir tidak langsung tersebut.
Pemrosesan sinyal input ADC
Level Shift
Level shift pada prinsipnya adalah rangkaian penjumlah (adder) berbasis op-amp. Rangkaian level shift ini dapat disatukan dengan amplifier/attenuator, dengan mengatur besarnya penguatan yang diperlukan. Berikut contoh level shift yang mengubah sinyal analog dengan rentang -5 sampai +5 menjadi rentang 0 sampai 3,3 volt.
Output dari rangkaian analog dapat memiliki level tegangan di luar kemampuan ADC, untuk itu tegangan yang masuk ke bagian ADC perlu dijaga supaya tidak terlalu tinggi dan juga tidak terlalu rendah.
Berikut ini contoh rangkaian clamp berbasis diode schottky
Rangkaian proteksi input ADC dengan diode schottky
Berikut contoh rangkaian berbasis op amp yang membatasi sinyal analog menjadi rentang 0 volt sampai dengan 4,096 volt dengan op-amp LT6015.