Berapa Tegangan Kerja Arduino

Berapakah tegangan kerja Arduino?

Tegangan kerja untuk Arduino Nano dan Arduino UNO adalah 5 volt. Tegangan yang dapat diberikan ke pin-pin Arduino adalah minimum 0 volt, maksimum 5 volt. Perkecualian adalah sebagai berikut: pin RESET dapat menerima tegangan sampai 13 volt. Pin VIN dapat menerima tegangan sampai 20 volt karena di pin tersebut ada regulator DC untuk mengubah tegangan masuk menjadi 5 volt.

Arduino Nano dan Arduino UNO menggunakan prosesor ATmega328. Batas maksimum tegangan pada ATmega328 dapat dilihat di datasheet prosesor ATmega328, di bagian “Absolute Maximum Ratings”. Kutipannya sebagai berikut:

ATmega328 absolute maximum rating
ATmega328 absolute maximum rating

Tegangan pada VIN atau POWER IN tidak langsung dihubungkan ke prosesor ATmega328, melainkan melalui regulator DC. Jadi tegangan maksimumnya tergantung komponen regulator DC yang dipakai.

Pin POWER IN dihubungkan ke regulator 5 volt (NCP1117 pada Arduino UNO dan UA78M05 pada Arduino Nano). NCP1117 maksimal menerima tegangan input 20 volt. UA7805 maksimal menerima input 25 volt. Jika tegangan POWER IN melebihi batas ini, maka regulator 5 volt tersebut akan rusak.

Batas tegangan maksimum pada NCP1117 dapat dibaca pada datasheetnya sebagai berikut:

Tegangan maksimum pada NCP1117
Tegangan maksimum pada NCP1117

Batas tegangan maksimum pada UA78M05 dapat dibaca pada datasheetnya sebagai berikut:

Tegangan maksimal pada UA7805
Tegangan maksimal pada UA7805


Referensi

Perbedaan Arduino dan Mikrokontroler

Arduino adalah kerangka kerja untuk membuat sistem elektronik open-source yang meliputi sejumlah perangkat keras dan perangkat lunak. Sebagian perangkat keras Arduino menggunakan prosesor/mikrokontroler dari keluarga ATmega.

Mikrokontroler adalah komputer kecil pada suatu keping rangkaian integrasi (integrated circuit/IC) terpadu. Pada mikrokontrole sudah ada CPU (Central Processing Unit) , memori dan periferal. Mikrokontroler umumnya dirancang untuk aplikasi yang tertanam di perangkat lain, atau dikenal dengan istilah ‘embedded system’.

Perangkat keras Arduino menggunakan mikrokontroler, namun tidak semua mikrokontroler adalah bagian dari Arduino

Berikut ini contoh mikrokontroler ATmega8535 yang tidak termasuk Arduino.

Perangkat Keras Arduino

Berikut ini contoh perangkat keras Arduino yang menggunakan mikrokontroler dari keluarga ATmega

Nama Prosesor  
Arduino Nano Every ATmega4809  
Arduino Nano ATmega328  
Arduino UNO ATmega328  
Arduino Mega 2560 ATmega2560  
Arduino Leonardo ATmega32u4  

Berikut ini contoh perangkat keras Arduino yang tidak menggunakan mikrokontroler ATmega.

Nama Prosesor  
Arduino Nano 33 IoT SAMD21 Cortex®-M0+ 32bit low power ARM MCU  
Arduino Nano RP2040 Connect Raspberry Pi® RP2040  
Arduino Nano 33 BLE Sense nRF52840  

Berikut ini contoh mikrokontroler yang tidak termasuk pada sistem Arduino:

  • ATmega8535
  • ATmega8
  • ATmega16
  • ATmega32

Mikrokontroler Secara Umum

Mikrokontroler adalah komputer kecil pada suatu keping rangkaian integrasi (integrated circuit/IC) terpadu. Pada mikrokontrole sudah ada CPU (Central Processing Unit) , memori dan periferal. Mikrokontroler umumnya dirancang untuk aplikasi yang tertanam di perangkat lain, atau dikenal dengan istilah ‘embedded system’.

Pada masa lalu, mikrokontroler umumnya dibuat dalam 1 keping chip. Pada saat ini mulai dikenal konsep SoC (System on a Chip). SoC ini menggabungkan keping silikon berisi mikrokontroler dengan komponen-komponen lain yang lebih kompleks, misalnya GPU (Graphical Processing Unit) ataupun antarmuka WiFi.

Mikrokontroler digunakan dalam berbagai produk dan perangkat yang dikontrol secara otomatis, seperti sistem kontrol mesin mobil, perangkat medis, remote control, mesin kantor, alat rumah tangga, perkakas listrik, mainan, dan sistem tertanam (embedded) lainnya. Desain dengan mikrokontroler lebih ekonomis daripada mikroprosesor karena pada mikrokontroler memori dan perangkat input/output dapat digabung dalam 1 chip, sedangkan pada mikroprosesor memori dan perangkat input/output harus ditambahkan pada chip terpisah.

Mikrokontroler ada murni digital, ada juga yang campuran antara sinyal digital dan analog. Dalam konteks internet of things (IoT), mikrokontroler adalah teknik pengumpulan data yang ekonomis dan populer, mengukur dan mengendalikan dunia fisik sebagai perangkat ‘komputasi tepi’. Kontras dari ‘komputasi tepi’ adalah ‘komputasi awan’ atau ‘cloud computing’, di mana data & informasi dikumpulkan secara terpusat untuk kemudian semua data diolah secara terpusat.

Referensi

 

Perbedaan Arduino UNO dan ESP32

Berikut ini perbedaan utama antara Arduino UNO dan ESP32:

Parameter Arduino Uno ESP32
Prosesor ATmega328 Xtensa dual core / single core
Clock prosesor 16 MHz 160 MHz / 240 MHz
Ukuran 68,6 mm x 53,4 mm tergantung board
Analog Input 6 kanal, 10 bit ADC 18 kanal, 12 bit ADC
Tegangan catu daya 6 sampai 20 volt DC, namun disarankan hanya 7 sampai 12 volt DC 5 volt (USB)
Pin untuk Digital Input/Output 14 (6 dengan fitur Pulse Width Modulation) 34 (maksimum)
Berat 25 g tergantung board
Ukuran lebih kecil. shield Arduino Mega tidak dapat dipakai di Arduino UNO lebih besar. shield Arduino UNO dapat dipakai di Arduino Mega
Kapasitas flash memory 32 kilobyte 4 MB (eksternal denganm antar muka SDIO/SPI)
SRAM 2 kilobyte 320 kilobyte
EEPROM 1 kilobyte tidak ada secara khusus, namun dapat menggunakan sebagian memory Flash
Tegangan kerja 5 volt 3 volt
Konektor USB USB type B USB mini
Konektivitas Jaringan tidak ada WiFi 802.11, bluetooth
Port serial (UART) 1 (hardware) 3 (hardware)
I2C 1 kanal 2 kanal
Output analog tidak ada DAC (Digital to Analog Converter) ada DAC 2 kanal, 8 bit
SPI (Serial Peripheral Interface) 1 kanal 4 kanal

 

Arduino UNO R3, ESP32 Devkit-C  , ESP32 Lolin32 Lite
Arduino UNO R3, ESP32 Devkit-C , ESP32 Lolin32 Lite

Arduino UNO

Arduino UNO R3 asli
Arduino UNO R3 asli

Arduino UNO adalah rangkaian mikrokontroler berbasis ATmega328P. Arduino UNO memiliki 14 pin input/output digital (6 di antaranya dapat digunakan sebagai output PWM), 6 input analog, resonator keramik 16 MHz sebagai sumber clock, koneksi USB untuk catu daya dan komunikasi serial, colokan listrik DC, header ICSP (In Circuit Serial Programming), dan tombol reset. Papan rangkaian Arduino UNO berisi semua hal yang diperlukan untuk mendukung mikrokontroler. Untuk menggunakan Arduino UNO, cukup dengan disambung ke komputer dengan kabel USB atau sambungkan dengan adaptor AC-ke-DC atau baterai untuk memulai. Anda dapat mengotak-atik UNO Anda tanpa terlalu khawatir melakukan kesalahan. Pada kondisi terburuk, chip ATmega328 dengan kemasan DIP (Dual In line Package) dapat diganti jika rusak.

ESP32

ESP 32 adalah mikrokontroler yang memiliki banyak fitur pada prosesornya, dan dilengkapi dengan konektivitas Wi-Fi dan Bluetooth terintegrasi untuk berbagai macam aplikasi.

ESP32 mampu berfungsi dengan andal di lingkungan industri, dengan suhu pengoperasian mulai dari –40°C hingga +125°C. ESP32 dapat secara dinamis menghilangkan ketidaksempurnaan sirkuit eksternal dan beradaptasi dengan perubahan kondisi eksternal dengan dukungan rangkaian kalibrasi di dalamnya. Rangkaian kalibrasi ini memungkinkan WiFi pada ESP32 berfungsi tanpa perlu kalibrasi ekstra.

ESP32 dirancang untuk perangkat bergerak (mobile), perangkat elektronik yang dapat dikenakan (wearable electronics), dan aplikasi IoT. Konsumsi daya ESP32 dapat dibuat sangat rendah dengan kombinasi beberapa macam perangkat lunak khusus. ESP32 juga mencakup fitur-fitur canggih, seperti ‘clock gating‘ untuk mereduksi konsumsi daya, berbagai mode daya, dan penskalaan daya secara dinamis.

ESP32 dibuat sangat terintegrasi dengan sakelar pemilih antena di dalamnya, RF balun, power amplifier untuk radio, amplifier penerima radio dengan kebisingan rendah (low noise), filter, dan modul manajemen daya. ESP32 menambahkan fungsionalitas dan keserbagunaan yang banyak aplikasi dengan hanya memerlukan ruang kecil di PCB (Printed Circuit Board)

ESP32 dapat berfungsi sebagai sistem mandiri yang lengkap atau sebagai perangkat pembantu ke mikrokontroler lain, mengurangi overhead tumpukan komunikasi pada prosesor aplikasi utama. ESP32 dapat berinteraksi dengan sistem lain untuk menyediakan fungsionalitas Wi-Fi dan Bluetooth melalui antarmuka SPI/SDIO atau I2C/UART.

Modul ESP32 tersedia dalam berbagai versi, di antaranya adalah Lolin32 Lite dan DevkitC serta clone nya.

ESP32 memiliki beberapa kelebihan dibandingkan Arduino. Di antaranya sebagai berikut:

  • Prosesor di ESP32 dari keluarga Xtensa, lebih cepat dibandingkan prosesor ATmega dengan arsitektur AVR. ESP32 clocknya adalah 240 MHz, sedangkan Arduino UNO menggunakan ATmega328 dengan kecepatan maksimum 16 MHz
  • Jumlah core pada prosesornya lebih banyak. ESP32 mempunyai 2 core, sedangkan ATmega328 hanya 1 core saja.
  • Memori Flash yang terhubung lebih banyak. ESP32 memiliki Flash Memory sebesar 1 MB sampai 16 MB. Arduino UNO memiliki memori flash sebesar 32 KB. Model Arduino lain ada yang memiliki flash lebih besar, seperti ATmega2560 yang memiliki flash sebesar 256 KB
  • Memori RAM lebih besar. ESP32 memiliki SRAM 520 KiB, sedangkan Arduino UNO memiliki SRAM hanya 2 KB. ATmega2560 memiliki SRAM sebesar 8 kilobyte
  • ESP32 memiliki kemampuan nirkabel WiFi 802.11 dan Bluetooth. Fitur ini di Arduino UNO tidak ada, harus menambah modul/shield.

Referensi

Perbedaan Antara Arduino UNO dan Raspberry PI 3

Berikut ini perbedaan utama antara Arduino Uno dan Arduino Nano

Parameter Arduino Uno Raspberry PI 3
Prosesor ATmega328 (AVR), single core, 8 bit ARM Cortex A53, quad core, 64 bit.
Clock 16 MHz 1,2 GHz
Memori RAM 2 kilobyte 1 gigabyte
Memori EEPROM 1 kilobyte tidak ada
Memori Flash 32 kilobyte (internal) tidak ada internal. Memori flashmenggunakan SD card eksternal
Input Analog 6 pin tidak ada
Input/Output Digital 14 (6 dengan fitur Pulse Width Modulation) 40 pin GPIO, namun tidak semuanya dipakai untuk input/output
Sistem Operasi tidak perlu sistem operasi, namun dapat menggunakan sistem operasi real time seperti FreeRTOS Raspberry Pi OSRaspberry Pi Debian, dan berbagai sistem operasi berbasis Linux, Windows IoT Core
Bahasa Pemrograman C / C++ praktis semua bahasa pemrograman yang dapat dijalankan di sistem operasi Linux
Port USB 1 buah USB type B untuk port serial dan catu daya 1 buah mini USB untuk catu daya
4 buah USB type-A untuk memasang periferal seperti keyboard-USB dan mouse-USB
Koneksi jaringan komputer tidak ada Ethernet 802.3 dan Wifi 802.11 (2,4 GHz)
Tegangan Kerja 5 volt 3,3 volt
Catu Daya 5 volt (USB), 6 ~ 12 volt (pin catu daya). Konsumsi arus untuk prosesor maksimum adalah 14 mA. Konsumsi arus untuk periferal output maksimum 200 mA. 5 VDC, 2,5 ampere
Ukuran 68,6 mm x 53,4 mm 85 mm x 56 mm
berat 37 g 50 g
harga Rp 350.000 ~ Rp 450.000 Rp 3,5 juta (model B+)

Arduino UNO

Arduino UNO R3 asli
Arduino UNO R3 asli

Arduino UNO adalah rangkaian mikrokontroler berbasis ATmega328P. Arduino UNO memiliki 14 pin input/output digital (6 di antaranya dapat digunakan sebagai output PWM), 6 input analog, resonator keramik 16 MHz sebagai sumber clock, koneksi USB untuk catu daya dan komunikasi serial, colokan listrik DC, header ICSP (In Circuit Serial Programming), dan tombol reset. Papan rangkaian Arduino UNO berisi semua hal yang diperlukan untuk mendukung mikrokontroler. Untuk menggunakan Arduino UNO, cukup dengan disambung ke komputer dengan kabel USB atau sambungkan dengan adaptor AC-ke-DC atau baterai untuk memulai. Anda dapat mengotak-atik UNO Anda tanpa terlalu khawatir melakukan kesalahan. Jika ATmega328 rusak dapat diganti jika rusak.

Raspberry PI Model 3

Spesifikasi Raspberry Pi secara ringkas

The Raspberry Pi 3 Model B+ is the final revision in the Raspberry Pi 3 range.

  • Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz
  • 1GB LPDDR2 SDRAM
  • 2.4GHz and 5GHz IEEE 802.11.b/g/n/ac wireless LAN, Bluetooth 4.2, BLE
  • Gigabit Ethernet over USB 2.0 (maximum throughput 300 Mbps)
  • Extended 40-pin GPIO header
  • Full-size HDMI
  • 4 USB 2.0 ports
  • CSI camera port for connecting a Raspberry Pi camera
  • DSI display port for connecting a Raspberry Pi touchscreen display
  • 4-pole stereo output and composite video port
  • Micro SD port for loading your operating system and storing data
  • 5V/2.5A DC power input
  • Power-over-Ethernet (PoE) support (requires separate PoE HAT)

Memilih Arduino Atau Raspberry Pi

Arduino dan Raspberry memiliki kelebihan dan kekurangan masing-masing. Berikut ini beberapa saran untuk melakukan pemilihan.

Faktor-faktor yang mengarah ke Raspberry Pi:

  • Perlu menjalankan aplikasi perlu dijalankan di sistem operasi Linux, misal database MySQL, web server Apache, dan sebagainya.
  • Aplikasi menggunakan bahasa pemrograman selain C/C++, misal Python, PHP, Java dan sebagainya.
  • Perlu terhubung ke internet lewat ethernet atau wifi
  • Tidak perlu input analog. Jika terpaksa perlu input analog, maka perlu menambah ADC eksternal seperti MCP3008, ADC1115 , HX711
  • Perlu output HDMI ke monitor
  • Perlu kamera
  • Perlu memori besar, baik memori RAM ataupun memori Flash.
  • Perlu kecepatan komputasi besar
  • Perlu periferal USB, seperti keyboard, mouse
  • Fasih menggunakan sistem operasi berbasis Linux

Faktor-faktor yang mengarahkan ke Arduino

  • Harga Arduino lebih murah
  • Aplikasi sederhana, sehingga sumber daya CPU dan memori yang diperlukan aplikasi sedikit.
  • Aplikasi mobile dengan sumber energi solar cell atau baterai, sehingga perlu hemat energi.
  • Tidak perlu konektivitas jaringan komputer, seperti ethernet atau wifi.
  • Perlu input analog
  • Perlu fitur real time dengan sistem operasi real time seperti FreeRTOS.
  • Porting real time operating system (RTOS) untuk Raspberry Pi tersedia untuk beberapa RTOS, namun tidak sepopuler pada Arduino atau mikrokontroler lain.
  • erlu akses langsung ke interupsi pada mikroprosesor. Pada Raspberry Pi, interupsi diurus oleh sistem operasi, jadi tidak dapat diakses langsung oleh pengguna.

Referensi

Buffer pada Komunikasi Serial Arduino Nano ATmega328

Arduino Nano dapat melakukan komunikasi serial baik transmit (mengirim) maupun receive (menerima). Pada library Arduino, sudah disiapkan buffer FIFO (First In First Out) pada data yang dikirimkan maupun data yang diterima. Pada tulisan ini dilakukan pengecekan berapa ukuran buffer tersebut. Pengujian ini dilakukan pada Arduino Nano dengan prosesor ATmega328. Untuk prosesor lain, ada kemungkinan ukuran buffernya berbeda.

Library Arduino untuk komunikasi serial memiliki buffer FIFO untuk outgoing maupun incoming.

Hardware yang diperlukan:

  • Komputer Desktop PC / Laptop
  • Arduino Nano Atmega328
  • Kabel USB

Buffer Pengiriman

Ukuran buffer pengiriman yang tersisa dapat dicek dengan fungsi Serial.availableForWrite() . Pada kondisi awal seharusnya buffer yang tersisa adalah maksimal, karena belum ada karakter yang dikirim.

Contoh program:

void setup() {
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  int incomingByte ;
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);
  incomingByte = Serial.availableForWrite();
  Serial.print("jumlah available: ");
  Serial.println(incomingByte, DEC);
}

Output seperti sebagai berikut

14:42:26.343 -> jumlah available: 63

Artinya ukuran bufffer outgoing adalah 63 karakter

Buffer Penerimaan

Ukuran buffer data masuk (receive) dapat dicek dengan fungsi Serial.available

Contoh program

void setup() {
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  int incomingByte ;
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);
  incomingByte = Serial.availableForWrite();
  Serial.print("jumlah available: ");
  Serial.println(incomingByte, DEC);
}

Setelah itu kirimkan beberapa karakter dari PC ke Arduino. Angka yang ditampilkan akan naik, namun akan berhenti di suatu batas tertentu. Angka inilah yang menunjukkan ukuran buffer FIFO incoming.

Dari hasil percobaan didapatkan rekaman komunikas serial sebagai berikut

14:37:37.062 -> jumlah available: 0
14:37:39.051 -> jumlah available: 0
14:37:41.043 -> jumlah available: 30
14:37:43.038 -> jumlah available: 43
14:37:45.064 -> jumlah available: 54
14:37:47.057 -> jumlah available: 63
14:37:49.050 -> jumlah available: 63
14:37:51.042 -> jumlah available: 63
14:37:53.067 -> jumlah available: 63
14:37:55.058 -> jumlah available: 63
14:37:57.050 -> jumlah available: 63

Artinya jumlah data yang menunggu untuk dibaca oleh software adalah maksimum 63 karakter.

Referensi

Bagaimana mengatasi regulator Arduino yang panas?

Cara mengatasi regulator Arduino UNO ataupun Arduino Nano yang panas adalah dengan :

  • menggunakan tegangan pada power jack serendah mungkin. Tegangan paling kecil yang masih memungkinkan adalah 7 volt.
  • batasi pemakaian arus oleh prosesor
  • gunakan pendingin seperti kipas angin

Batasi Tegangan Power Jack dan VIN

Jika regulator Arduino panas, artinya ada disipasi daya pada regulator tersebut. Rangkaian regulator pada Arduino UNO adalah sebagai berikut

Rangkaian Catu Daya Arduino UNO
Rangkaian Regulator Arduino UNO

Tegangan dari power jack ataupun VIN dikecilkan menjadi 5 volt oleh regulator MC33269D-5.0 . Kelebihan tegangan ini dibuang menjadi panas. Makin besar perbedaan tegangan , maka daya yang dibuang makin besar. Daya makin besar, akibatnya regulator makin panas. Jadi salah satu cara mudah mengurangi panas pada regulator tersebut adalah dengan menggunakan tegangan power jack ataupun VIN di 7 volt saja.

Batasi Arus Mikroprosesor ATmega328

Arus maksimum pada terminal VCC prosesor adalah 200 mA. Arus ini akan menjadi beban juga bagi regulator.

Misal tegangan VIN 9 volt, dengan arus pada VCC ATmega328 adalah 200 mA. Maka akan ada pengurangan tegangan 4 volt pada regulator. Disipasi daya karena VCC sebesar P = V x I =4 volt x 200 mA = 800 mW

Misal penggunaan arus pada port ATmega328 dikurangi, sehingga total arus hanya 50 mA. Maka disipasi daya pada regulator menjadi P = VxI = 4 volt x 50 mA = 200 mW. Dengan demikian regulator tidak terlalu panas.

Gunakan Kipas

Regulator pada Arduino UNO tidak dilengkapi pendingin khusus seperti heat sink yang besar, sehingga panas sulit dibuang dengan baik. Pendinginan terutama melalui jalur tembaga di papan rangkaian (PCB) Untuk mempercepat pendinginan dapat dengan kipas angin kecil.

Secara teori cara ini dapat dipakai, namun dalam praktek sangat tidak praktis.

 

Arduino UNO R3
Arduino UNO R3

 

 

 

Cara Menghapus EEPROM Arduino

Cara menghapus EEPROM Arduino ada 2 cara:

  • Menghapus EEPROM menggunakan program yang diupload ke memori Flash dan kemudian dijalankan
  • Menggunakan fasilitas serial programming melalui ISP (In System Programming) di ATmega328
  • Menggunakan fasilitas parallel programming / high voltage programming pada ATmega328

Menghapus EEPROM Dengan Upload Program

Teknik ini dijelaskan di tutorial EEPROM Clear di https://www.arduino.cc/en/Tutorial/EEPROMClear

Prinsip dasarnya adalah menggunakan fungsi EEPROM.write() untuk menulis angka 0 ke semua lokasi EEPROM.

Berikut ini contoh program untuk menghapus semua isi data di EEPROM.

/*
 * EEPROM Write
 *
 * Stores values read from analog input 0 into the EEPROM.
 * These values will stay in the EEPROM when the board is
 * turned off and may be retrieved later by another sketch.
 */


#include <EEPROM.h>

/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/
int addr = 0;

void setup() {
  /** Empty setup. **/
}

void loop() {
  /***
    Need to divide by 4 because analog inputs range from
    0 to 1023 and each byte of the EEPROM can only hold a
    value from 0 to 255.
  ***/


  int val = analogRead(0) / 4;

  /***
    Write the value to the appropriate byte of the EEPROM.
    these values will remain there when the board is
    turned off.
  ***/


  EEPROM.write(addr, val);

  /***
    Advance to the next address, when at the end restart at the beginning.

    Larger AVR processors have larger EEPROM sizes, E.g:
    - Arduno Duemilanove: 512b EEPROM storage.
    - Arduino Uno:        1kb EEPROM storage.
    - Arduino Mega:       4kb EEPROM storage.

    Rather than hard-coding the length, you should use the pre-provided length function.
    This will make your code portable to all AVR processors.
  ***/

  addr = addr + 1;
  if (addr == EEPROM.length()) {
    addr = 0;
  }

  /***
    As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an
    EEPROM address is also doable by a bitwise and of the length - 1.

    ++addr &= EEPROM.length() - 1;
  ***/



  delay(100);
}

Menghapus EEPROM Dengan ISP (In System Programming)

Pada metode ini, diperlukan antar muka khusus ke port ISP di ATmega328 pada Arduino UNO. Contoh antar muka yang populer adalah USBasp (https://www.fischl.de/usbasp/)

Perangkat lunak yang diperlukan ada beberapa macam, misalnya:

 

Arduino UNO R3
Arduino UNO R3

 

 

Percobaan Interupsi Timer1 pada ATmega328

Pada percobaan ini akan dibuat interupsi timer 1 pada ATmega328 dengan frekuensi 1 kHz, dan kemudian dilakukan pengukuran frekuensi yang dihasilkan.

Konfigurasi Timer 1 sebagai berikut

  • Frekuensi 1 kHz, atau perioda 1 ms
  • menggunakan Timer1
  • Clock Source: System Clock
  • Clock Value: 250 kHz (prescaler 64)
  • Mode: CTC top=OCR1A
  • Out A: Disconnected
  • Out B: Disconnected
  • Interrupt on: Compare A Match
  • tidak ada output langsung ke pin mikrokontroler

Frekuensi clock adalah 16 Mhz. Dengan prescaler 64, dihasilkan clock ke Timer1 sebesar 250 kHz. Untuk membuat frekuensi 1 kHz, perlu pembagi sebesar 250 (0xFA), untuk itu diperlukan angka 249 (0xF9) di register OCR1A. Mode timer1 menggunakan CTC (Clear Timer on Compare), jadi ketika angka counter mencapai 249, otomatis berikutnya menjadi 0, dibarengi dengan munculnya interupsi timer 1. Dengan demikian sinyal clock timer 1 250 kHz akan menghasilkan interupsi timer dengan frekuensi 1 kHz.

Kode dibuat dengan menggunakan CodeWizard pada compiler CodevisionAVR versi Evaluation. Berikut ini tampilan setting pada code wizard untuk Timer 1:

Konfigurasi Timer 1
Konfigurasi Timer 1

 

Untuk menghasilkan sinyal output, digunakan port C sebagai output. Output pada port C dikomplemen setiap interupsi, sehingga akan timbul sinyal dengan frekuensi 500 Hz pada port C. Berikut kode ISR (interrupt service routine) untuk Timer 1:

interrupt [TIM1_COMPA] void timer1_compa_isr(void)

{

PORTC=~PORTC;

}




Berikut ini sinyal yang dihasilkan, diukur dengan menggunakan osiloskop. Screen capture diambil langsung dari osiloskop (bukan difoto).

 

Hasil pengukuran port C

Frekuensi yang terukur adalah 500,026 Hz, sehingga frekuensi interupsi sebenarnya adalah 2 x 500,026 = 1000,052 Hz. Tidak sama persis dengan seharusnya (1 kHz), kemungkinannya antara frekuensi kristal yang tidak tepat, atau clock pada osiloskop yang tidak tepat.

Pengukuran frekuensi dengan osiloskop GDS 1042
Pengukuran frekuensi dengan osiloskop GDS 1042
Pengukuran sinyal pada Arduino nano (ATmega328)
Pengukuran sinyal pada Arduino nano (ATmega328)

Percobaan Output PWM dari Timer 0 pada ATmega328

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:

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 2000.000 kHz
// Mode: Fast PWM top=0xFF
// OC0A output: Non-Inverted PWM
// OC0B output: Disconnected
// Timer Period: 0.128 ms
// Output Pulse(s):
// OC0A Period: 0.128 ms Width: 0.016063 ms
TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (1<<WGM01) | (1<<WGM00);
TCCR0B=(0<<WGM02) | (0<<CS02) | (1<<CS01) | (0<<CS00);
TCNT0=0x00;
OCR0A=0x20;
OCR0B=0x00;

Source code lengkap dapat dilihat di https://github.com/waskita/embedded/blob/master/cv-kendali/cv-kendali-usart.c

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.

Memori pada Sistem Mikroprosesor

Mikroprosesor memiliki berbagai macam memori dengan berbagai fungsi. Berikut ini uraian macam-macam memori pada komputer berdasarkan sifat baca tulis memori tersebut.

ROM : Read Only Memory

ROM atau Masked ROM adalah memori yang hanya dapat dibaca saja, dan isi memorinya sudah ditentukan di pabrik, tidak dapat diubah oleh pengguna. Memori ini harga satuannya (variable cost) murah, namun ongkos awalnya (fixed cost) besar, sehingga baru ekonomis kalau jumlah produksinya besar.

PROM: Programmable Read Only Memory

PROM adalah ROM yang dapat diprogram oleh user 1 kali saja. Memori jenis ini harga satuannya lebih mahal dibandingkan ROM, namun tidak perlu ongkos awal yang besar, sehingga cocok untuk produksi dalam jumlah kecil.

OTP : One Time Programmable

OTP adalah nama lain dari PROM.

Contoh komponen OTP adalah IC AT27C020 yang diproduksi oleh Microchip.

AT27C020
AT27C020

Referensi:

EPROM: Erasable Programmable Read Only Memory

EPROM adalah memori yang dapat ditulis, isinya tidak hilang ketika power supply dimatikan, namun dapat dihapus dengan menggunakan sinar ultra violet. Pada EPROM ini terdapat ‘jendela’ dari bahan kuarsa yang memungkinkan cahaya ultra violet mengenai chip silikon yang berisi transistor EPROM.

Berikut ini beberapa contoh EPROM.

EPROM Intel C1702A
EPROM Intel C1702A

ST Microelectronics M27C256B
ST Microelectronics M27C256B

EPROM NEC D8749
EPROM NEC D8749

EPROM NEC 02716
EPROM NEC 02716

EEPROM Electrically Erasable Programmable Read Only Memory

EEPROM adalah memori yang dapat dihapus dengan tegangan listrik tertentu.

Contohnya adalah Atmel AT24C512. Memori ini dihubungkan ke mikroprosesor dengan protokol Two Wire Serial Interface.

Atmel EEPROM AT 24C512
Atmel EEPROM AT 24C512

Beberapa mikrokontroler sudah dilengkapi dengan EEPROM di dalamnya, misalnya ATMega328 yang dipakai di Arduino sudah dilengkapi dengan EEPROM berkapasitas 1 kilobyte.

Datasheet: http://www.atmel.com/Images/doc1116.pdf

RAM: Random Access Memory

RAM adalah memori yang isinya dapat dibaca dan ditulis. Isi memori hilang kalau power supply dimatikan. RAM yang umum dipakai terbagi dua , yaitu static RAM dan dynamic RAM.

SRAM: Static RAM

SRAM adalah RAM yang dibuat dengan menggunakan transistor / flip-flop. Kecepatannya tinggi, namun harganya relatif mahal dibandingkan dengan dynamic RAM.

Rangkaian 1 bit static RAM
Rangkaian 1 bit static RAM (sumber)

Berikut ini komponen static RAM tipe 6264 yang berkapasitas 8 kilobyte. Komponen SRAM ini dulu favorit sebagai RAM untuk mikroprosesor Z80 dan mikrokontroler 8051.

SRAM tipe 6264
SRAM tipe 6264 (sumber)

DRAM: Dynamic RAM

DRAM adalah RAM yang dibuat dengan menggunakan kapasitor.

Keuntungannya lebih murah dibandingkan SRAM, namun isi tegangan di kapasitor akan hilang dalam beberapa milisekon, sehingga isi tegangan di kapasitor tersebut mesti diperbarui setiap beberapa milisekon.

RAM jenis ini adalah memori yang banyak dipakai untuk desktop dan laptop saat ini. Misalnya RAM tipe DDR berikut ini:

DDR4 SDRAM
DDR4 SDRAM berkapasitas 8 GB

Flash Memory

Memori yang isinya tidak hilang kalau power supply dimatikan, dan isinya juga dapat dihapus secara elektrik seperti EEPROM. Perbedaannya adalah pada flash memory penghapusan dan penulisan data mesti dilakukan pada suatu blok data, tidak dapat hanya 1 byte saja, sedangkan EEPROM dapat dihapus / ditulis pada setiap byte.

Mikrokontroler seperti ATMega328 dilengkapi dengan flash memory berkapasitas 32 kilobyte di dalamnya untuk diisi dengan program.

NVRAM : Non Volatile RAM

NVRAM adalah RAM yang diberi batere, sehingga ketika power supply rangkaian dimatikan, isi RAM di NVRAM ini tetap ada, tidak hilang.

NVRAM Dallas DS1225AD
NVRAM Dallas DS1225AD

NVRAM Dallas DS1225AD
NVRAM Dallas DS1225AD

Contoh lain komponen yang berisi NVRAM adalah real time clock (RTC) seperti DS3231 dan DS1307

Real Time Clock DS3231

DS1307 real time clock
DS1307 real time clock

Memori pada Arduino Nano

Dalam prakteknya, suatu sistem mikroprosesor pada umumnya menggunakan lebih dari 1 macam memori. Sebagai contoh, para Arduino Nano (ATmega328), memori di dalamnya adalah sebagai berikut:

  • Flash memory, untuk diisi program dan data yang permanen. Hanya dapat diubah dari luar dengan programmer atau dengan menggunakan bootloader.
  • SRAM ( Static RAM) sebagai memori untuk menyimpan variabel yang dapat diubah-ubah
  • EEPROM untuk menyimpan parameter yang dapat diubah oleh program dan tidak hilang ketika listrik dimatikan.

Selain memori tersebut di atas dapat juga ditambahkan memori lain menggunakan port serial atau pin-pin pada Arduino.

Referensi: