Digital to Analog Converter (DAC) pada ESP32

Berikut ini percobaan menggunakan DAC (Digital to Analog Converter) pada mikroprosesor ESP32. Modul yang digunakan adalah Lolin32 Lite dari Wemos.

Pemrograman dilakukan di Arduino, jadi sebelumnya harus melakukan instalasi library ESP32 untuk Arduino.

Program DAC yang dicoba adalah sebagai berikut.

#define DAC1 25
// output di pin 25 (DAC1)

void setup() {
Serial.begin(115200);

}
int Value = 255; //255= 3.3V 128=1.65V

void loop() { // Generate a Sine wave
int i;
for (i = 0; i < 256; i++) {
dacWrite(DAC1, i);
}
for (i = 255; i >= 0; i--) {
dacWrite(DAC1, i);
}
}

 

Output diambil dari pin 25. Tampilan sinyal pada pin 25 adalah sebagai berikut:

 

Sinyal output dari DAC pada ESP32
Sinyal output dari DAC pada ESP32

Tegangan maksimum adalah 2,76 volt.

Tegangan minimum adalah -0,36 volt. Kurang jelas kenapa tegangan dapat menjadi negatif.

Frekuensi adalah 360,4 Hz. Perioda adalah 0.0027 detik.

Waktu untuk konversi 1 sampel adalah 5,42 ms.

Frekuensi DAC adalah 184525 Hz.

Debugging ESP32 Dengan FT2232HL

ESP32 dan CJMCU-2232HL

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 FT2232HLSinyalSinyalPin ESP32
ADBUS0TCKMTCKR_IO13
ADBUS1TDIMTDIR_IO12
ADBUS2TDOMTDOR_IO15
ADBUS3TMSMTMSR_IO14
ACBUS2RSTENR_nTRST

#2 Situs PlatformIO

Penyambungan JTAG juga dijelaskan di situs PlatformIO sebagai berikut:

FT2232H Mini-Module PinBoard JTAG PinDescription
GND [CN2-2]GNDDigital ground
AD0 [CN2-7]TCKJTAG Return Test Clock
AD1 [CN2-10]TDITest Data In
AD2 [CN2-9]TDOTest Data Out
AD3 [CN2-12]TMSTest Mode State
AC2 [CN2-20]RESETConnect this pin to the (active low) reset input of the target CPU (EN for ESP32)

Sumber: http://docs.platformio.org/en/latest/plus/debug-tools/minimodule.html

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

Sumber: https://community.platformio.org/t/debugging-esp32-how/4499

#4 Datasheet FT2232H

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’.

Referensi

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