UglyDDS STM32 dengan HAL – OLED SSD1306

DDS= Direct Digital Synthesizer. HAL= Hardware Abstraction Layer. Sebelumnya, saya mengerjakan project UglyDDS berbasis Arduino. Kali ini digunakan STM32 dengan library HAL bawaan pabrik ST. Porting ini masih tahap awal display OLED nya saja. Pakai OLED karena jalur I2C yang sederhana. Baiklah, baru mulai saja sudah pusing utak-atik kode. Yach gara-gara OLED yang ternyata mati hehehe. Mau jungkir balik ya tetap gak nyala sebelum diganti OLED yang baru.

Untuk rancang bangun digunakan STM32CubeIDE dan board F407 Discovery. Enaknya, pada Discovery, ST-LINK sudah include jadi tidak ribet. Nantinya saat implementasi, rencana beralih ke seri F411 atau F401 black-pill board yang murah meriah.

Untuk Library SSD1306 STM32 saya mencoba punya afiskon dan punya 4ilo (yang lebih sederhana). Keduanya jalan lancar di Discovery board basis F407 (maupun di blackpill basis F411). Kedua library ini mirip karena stm32-ssd1306 merupakan fork dari ssd1306-stm32HAL punya 4ilo. Karena orientasi UglyDDS sederhana saja cuma angka dan teks, maka library ssd1306-stm32HAL mungkin lebih cocok. Jika Ingin yang fitur yang lengkap, pilih punya afiskon.

stm32-ssd1306

Digunakan Discovery board dengan chip STM32F407VGT6. Listing main.c dan .ioc untuk STM32CubeIDE bisa Anda cek dan download di sini. Board apapun yang dipakai, tentukan RCC lebih dulu mau pakai internal (HSI) atau eksternal clock (HSE). Dalam contoh ini digunakan HSE dengan xtal 8 MHz.

Pilih Crystal/Ceramic Resonator!

Download library dan kopikan file header dan .c ke direktori Inc dan Src. Contoh dapat dilihat di atas. Untuk koneksi I2C digunakan pin PB7 untuk SDA dan PB6 untuk SCL. Pada set di atas, digunakan interupt pada I2C. Lebih baik dibanding metode pooling ketika urusan semakin banyak dan tugas menumpuk.

Ubah nama ssd1306_conf_template.h menjadi ssd1306_conf.h dan edit jeroan file tersebut. Sesuaikan dengan tipe chip STM32 Anda.

Dipilih define STM32F4 (line 12) karena pakai STM32F407. Default sudah menggunakan I2C disamping opsi lain SPI. Untuk alamat I2C default 0x3C.

Sedangkan kode lengkap seperti di bawah : Sorry urutan kacau hehe. Yang penting urutan angkanya bisa diikuti.

Setelah STM32CubeIDE membangkitkan kode, tambahkan line 24-26.

Kemudian tambahkan line 98 dan 103.


Kode yang diletakkan pada USER CODE BEGIN dan USER CODE END tidak akan hilang saat file .ioc diperbaharui. Pada contoh di atas, ssd1306_TestAll () akan hilang hehe. Jadi lebih baik letakkan di antara line 101 dan 102.

Lakukan kompilasi/ Build project dan RUN. Semestinya OLED Anda akan unjuk gigi bersama kucing kesayangan Anda.

Setelah puas bermain dengan kucing, saatnya bermain yang lain 🙂

ssd1306-stm32HAL

Library punya 4ilo ini sederhana. Jika fokus ke teks dan angka, gunakan library ini. Setelah mendownload library, hanya 4 file yang diperlukan. kopikan ke direktori Core Anda. fonts.h, ssd1306.h, fonts.c, dan ssd1306.c

File ssd1306.h mungkin perlu diedit agar sesuai kebutuhan.

Pada line 18 sesuaikan dengan Chip STM32 Anda. Default digunakan F4xx. Untuk line 23, biarkan address tetap 0x78. Satu anomali jika dengan OLED yang sama pada library sebelumnya digunakan 0x3C. Tapi hanya alamat 0x78 yang jalan hehe. Saya belum melakukan investigasi mengenai hal ini.

Pada main.c :

Sedang contoh untuk menggunakan library ini seperti di bawah : (saya menggunakan interupt dan DMA pada I2C).

Untuk aneka file termasuk .ioc bisa Anda cek/download di GITHUB saya.

———————-

Cerita kiri-kanan 🙂

Dibanding F103 yang populer, saya lebih condong ke seri STM32 F401/F411 karena punya FPU (Floating Point Unit) dan memory yang lebih besar. Struktur jeroan chip ya lebih canggih juga. Sedang harga tidak terlalu beda.

DDS ini banyak dipakai pada radio amatir homebrew. Chip yang dipakai Si5351. Apa bedanya dengan DDS pakai Arduino board? Jika sekedar DDS, Arduino lebih dari cukup. Ya betul, lebih dari cukup.

Jika ingin tetap bermain dengan mikrokontroler 8 bit, chip Atmega 328p bisa diprogram langsung pakai assembly untuk meningkatkan performa. Atau pakai AVR GCC murni misalnya.

STM32 jauh lebih rumit. Mikrokontroler 32 bit ini diperlukan jika butuh aplikasi lain yang butuh kecepatan tinggi. Semisal Anda memanfaatkan DDS sebagai antena analyzer atau pengukur frekuensi sekalian. STM32 akan cepat melahap formula matematika dibanding chip Atmega328p.

Lingkungan kerja standar di STM32 menggunakan STM32CubeIDE. Digunakan HAL (Hardware Abstract Layer) bawaan resmi. Bisa pakai libopencm3 atau bare metal CMSIS jika ingin. Atau…..Jika banyak waktu…. bisa pakai Assembly lol.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s