MENGENAL MIKROKONTROLER
AVR ATMega16
Abstrak
Perkembangan
teknologi robotik saat ini sedang mengalami fase kemajuan pesat. Robot
mengambil peran di hampir seluruh aspek kehidupan manusia. Konsistensi robot
dalam melakukan aktivitas dapat dikatakan tinggi sehingga mampu melakukan
berbagai aktivitas dalam jangka waktu yang lama. Pembuatan Robot RGB Color
Sorter ini bertujuan untuk mengelompokkan benda berdasarkan warna dengan
waktu respon RGB Color Sensor sebesar 200 milisekon dan tingkat akurasi
proses pengelompokan benda sebesar 100% sehingga dapat diimplementasikan dalam
berbagai jenis industri yang akan berdampak pada meningkatnya produktivitas.
Komponen - komponen yang digunakan mudah didapat sehingga masyarakat tidak
sulit untuk mempelajari cara pembuatan robot ini.
1 PENDAHULUAN
Perkembangan
teknologi robotik saat ini sedang mengalami fase kemajuan pesat. Robot
mengambil peran di hampir seluruh aspek kehidupan manusia. Seperti kegiatan
rumah tangga, kegiatan perkantoran, maupun kegiatan produksi di berbagai
industri. Diharapkan di masa depan robot dapat mengambil peran yang lebih besar
dalam membantu aktivitas manusia sehingga dapat memudahkan manusia dalam
melakukan berbagai kegiatan.
Konsistensi robot dalam melakukan
aktivitas juga dapat dikatakan tinggi sehingga mampu melakukan berbagai aktivitas
dalam jangka waktu yang lama. Saat ini banyak industri yang membutuhkan
konsistensi bekerja yang tinggi untuk melakukan berbagai macam pekerjaan, salah
satunya adalah aktivitas pengelompokan barang. Pengelompokan barang yang
dilakukan manual oleh manusia membutuhkan waktu yang lama, disamping itu
manusia tidak dapat melakukan suatu aktivitas secara terus-menerus dengan waktu
istirahat yang singkat, apabila manusia dipaksa melakukan hal itu maka
ketelitiannya akan berkurang secara otomatis dan mengakibatkan kekeliruan dalam
aktivitas tersebut. Untuk itu peran robot sangat dibutuhkan untuk melakukan
tugas ini. Berdasarkan hal tersebut maka penulis terdorong untuk membuat suatu
robot untuk mengelompokkan benda. Robot ini dapat mengelompokkan benda berdasarkan
warna benda sehingga proses pengelompokan dapat dilakukan dengan cepat dan
tepat.
AVR merupakan seri mikrokontroler CMOS 8-bit
buatan Atmel, berbasis arsitektur RISC (Reduced Instruction Set Computer).
Hampir semua instruksi dieksekusi dalam satu siklus clock. AVR
mempunyai32 register general-purpose, timer/counter fleksibel dengan mode compare,
interrupt internal dan eksternal, serial UART, programmable
Watchdog Timer, dan mode power saving, ADC dan PWM internal. AVR
juga mempunyai In-System Programmable Flash on-chip yang mengijinkan
memori program untuk diprogram ulang dalam sistem
menggunakan
hubungan serial SPI. ATMega16. ATMega16 mempunyai throughput mendekati 1
MIPS per MHz membuat disainer sistem untuk mengoptimasi konsumsi daya versus kecepatan
proses.
Beberapa
keistimewaan dari AVR ATMega16 antara lain:
1.
Advanced RISC Architecture
·
130 Powerful Instructions – Most
Single Clock Cycle Execution
·
32 x 8 General Purpose Fully Static
Operation
·
Up to 16 MIPS Throughput at 16 MHz
·
On-chip 2-cycle Multiplier
2.
Nonvolatile Program and Data Memories
·
8K Bytes of In-System
Self-Programmable Flash
·
Optional Boot Code Section with
Independent Lock Bits
·
512 Bytes EEPROM
·
512 Bytes Internal SRAM
·
Programming Lock for Software Security
3.
Peripheral Features
·
Two 8-bit Timer/Counters with Separate
Prescalers and Compare Mode
·
Two 8-bit Timer/Counters with Separate
Prescalers and Compare Modes
·
One 16-bit Timer/Counter with Separate
Prescaler, Compare
·
Mode, and Capture Mode
·
Real Time Counter with Separate
Oscillator
·
Four PWM Channels
·
8-channel, 10-bit ADC
·
Byte-oriented Two-wire Serial
Interface
·
Programmable Serial USART
4.
Special Microcontroller Features
·
Power-on Reset and Programmable
Brown-out Detection
·
Internal Calibrated RC Oscillator
·
External and Internal Interrupt
Sources
·
Six Sleep Modes: Idle, ADC Noise
Reduction, Power-save, Powerdown, Standby and Extended Standby
5.
I/O and Package
·
32 Programmable I/O Lines
·
40-pin PDIP, 44-lead TQFP, 44-lead PLCC, and 44-pad MLF
6.
Operating Voltages
·
2.7 - 5.5V for Atmega16L
·
4.5 - 5.5V for Atmega16
Gambar 1 Pin-pin ATMega16 kemasan 40-pin
Pin-pin
pada ATMega16 dengan kemasan 40-pin DIP (dual inline package)
ditunjukkan oleh gambar 1. Guna memaksimalkan performa, AVR menggunakan
arsitektur Harvard (dengan memori dan bus terpisah untuk program
dan data).
Port
sebagai input/output digital
ATMega16 mempunyai empat buah port yang
bernama PortA, PortB, PortC, dan PortD. Keempat port tersebut merupakan
jalur bidirectional dengan pilihan internal pull-up. Tiap port
mempunyai tiga buah register bit, yaitu DDxn, PORTxn, dan PINxn. Huruf
‘x’mewakili nama huruf dari port sedangkan huruf ‘n’ mewakili nomor bit.
Bit DDxn terdapat pada I/O address DDRx, bit PORTxn terdapat pada I/O
address PORTx, dan bit PINxn terdapat pada I/O address PINx. Bit DDxn dalam
register DDRx (Data Direction Register) menentukan arah pin. Bila DDxn
diset 1 maka Px berfungsi sebagai pin output. Bila DDxn diset 0 maka Px
berfungsi sebagai pin input.Bila PORTxn diset 1 pada saat pin terkonfigurasi
sebagai pin input, maka resistor pull-up akan diaktifkan. Untuk
mematikan resistor pull-up, PORTxn harus diset 0 atau pin dikonfigurasi
sebagai pin output. Pin port adalah tri-state setelah kondisi reset.
Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin output maka pin
port akan berlogika 1.
Dan
bila PORTxn diset 0 pada saat pin terkonfigurasi sebagai pin output maka pin
port akan berlogika 0. Saat mengubah kondisi port dari kondisi tri-state (DDxn=0,
PORTxn=0) ke kondisi output high (DDxn=1, PORTxn=1) maka harus ada
kondisi peralihan apakah itu kondisi pull-up enabled (DDxn=0, PORTxn=1)
atau kondisi output low (DDxn=1, PORTxn=0). Biasanya, kondisi pull-up
enabled dapat diterima sepenuhnya, selama lingkungan impedansi tinggi tidak
memperhatikan perbedaan antara sebuah strong high driver dengan sebuah pull-up.
Jika ini bukan suatu masalah, maka bit PUD pada register SFIOR dapat diset 1
untuk mematikan semua pull-up dalam semua port. Peralihan dari kondisi input
dengan pull-up ke kondisi output low juga menimbulkan masalah yang
sama. Kita harus menggunakan kondisi tri-state (DDxn=0, PORTxn=0) atau
kondisi output high (DDxn=1, PORTxn=0) sebagai kondisi transisi.
Tabel 1 Konfigurasi pin port
Bit
2 – PUD : Pull-up Disable Bila
bit diset bernilai 1 maka pull-up pada
port I/O akan dimatikan walaupun
register DDxn dan PORTxn
dikonfigurasikan untuk menyalakan pull-up
(DDxn=0, PORTxn=1).
Timer
Timer/counter
adalah fasilitas dari ATMega16 yang digunakan untuk perhitungan pewaktuan.
Beberapa fasilitas chanel dari timer counter antara lain: counter
channel tunggal, pengosongan data timer sesuai dengan data pembanding,
bebas -glitch, tahap yang tepat Pulse Width Modulation (PWM), pembangkit
frekuensi, event counter external..
Gambaran Umum
Gambar diagram block timer/counter 8 bit ditunjukan pada
gambar 2. Untuk penempatan pin I/O telah di jelaskan pada bagian I/O di atas.
CPU dapat diakses register I/O, termasuk dalam pin-pin I/O dan bit I/O. Device
khusus register I/O dan lokasi bit terdaftar pada deskripsi timer/counter 8
bit.
Gambar 2 Blok diagram timer/counter
Timing Diagram Timer/Counter
Timer/counter didesain sinkron clock timer (clkT0) oleh
karena itu ditunjukkan sebagai sinyal enable clock pada gambar 3. Gambar
ini termasuk informasi ketika flag interrupt dalam kondisi set. Data
timing digunakan sebagai dasar dari operasi timer/counter.
Gambar 3 Timing diagram timer/counter, tanpa
prescaling
Sesuai dengan gambar 4 timing diagram timer/counter dengan prescaling maksudnya adalah counter akan menambahkan data counter (TCNTn)
ketika terjadi pulsa clock telah mencapai 8 kali pulsa dan sinyal clock pembagi aktif clock
dan ketika telah mencapai nilai maksimal
maka nilai TCNTn akan kembali ke nol. Dan kondisi flag timer akan aktif ketika TCNTn maksimal.
Gambar 4 Timing diagram timer/counter, dengan prescaling
Sama halnya timing timer diatas, timing
timer/counter dengan seting OCFO timer mode ini memasukan data ORCn sebagai
data input timer. Ketika nilai ORCn sama dengan nilaiTCNTn maka pulsa flag
timer akan aktif. TCNTn akan bertambah nilainya ketika pulsa clock telah
mencapai 8 pulsa. Dan kondisi flag akan berbalik (komplemen) kondisi
ketika nilai TCNTn kembali kenilai 0 (overflow).
Gambar 5 Timing diagram timer/counter, menyeting OCFO,
dengan pescaler (fclk_I/O/8)
Ketika
nilai ORCn sama dengan nilai TCNTn maka pulsa flag timer akan aktif.
TCNTn akan bertambah nilainya ketika pulsa clock telah mencapai 8 pulsa.
Dan kondisi flag akan berbalik (komplemen) kondisi ketika nilai
TCNTn kembali kenilai 0 (overflow).
Gambar 6 Timing diagram timer/counter,
menyeting OCFO, pengosongan data timer sesuai dengan data pembanding,dengan
pescaler (fclk_I/O/8)
Deskripsi Register Timer/Counter
8 bit
Gambar 7 Regiter timer counter 8 bit
Bit 7 – FOCO : perbandingan kemampuan output
FOCO hanya akan aktif ketika spesifik-spesifik bit WGM00 tanpa PWM
mode. Adapun untuk meyakinkan terhadap kesesuaian dengan device-device yang
akan digunakan, bit ini harus diset nol ketika TCCRO ditulisi saat
mengoperasikan mode PWM. Ketika menulisi logika satu ke bit FOCO, dengan segera
dipaksakan untuk disesuaikan pada unit pembangkit bentuk gelombang. Output OCO diubah
disesuaikan pda COM01: bit 0 menentukan pengaruh daya pembanding.
Bit 6,3 – WGM01:0: Waveform Generation Mode
Bit ini mengontrol penghitungan yang teratur pada counter, sumber
untuk harga counter maksimal ( TOP )., dan tipe apa dari pembangkit bentuk gelombang
yang digunakan. Mode-mode operasi didukung oleh unit timer/counter sebagai
berikut : mode normal, pembersih timer pada mode penyesuaian dengan pembanding
( CTC ), dan dua tipe mode Pulse Width Modulation ( PWM ).
Tabel 2 Deskripsi Bit Mode Pembangkit Bentuk Gelombang
catatan: definisi nama-nama bit
CTC0 dan PWM0 sekarang tidak digunakan lagi. Gunakan WGM 01: 0 definisi.
Bagaimanapun lokasi dan fungsional dan lokasi dari masing-masing bit sesuai
dengan versi timer sebelumnya.
Bit 5:4 – COMO1:0 Penyesuaian Pembanding Mode Output
Bit ini mengontrol pin output compare (OCO), jika satu atau
kedua bit COM01:0 diset, output OC0 melebihi fungsional port normal I/O dan
keduanya terhubung juga. Bagaimanapun, catatan bahwa bit Direksi Data
Register (DDR) mencocokan ke pin OC0 yang mana harus diset dengan tujuan
mengaktifkan. Ketika OC0 dihubungkan ke pin, fungsi dari bit COM01:0 tergantung
dari pengesetan bit WGM01:0. Tabel di bawah menunjukkan COM fungsional ketika
bit-bt WGM01:0 diset ke normal atau mode CTC (non PWM).
Tabel 3 Mode Output Pembanding, tanpa PWM
Tabel
4 menunjukan bit COM01:0 fungsional ketika bit WGM01:0 diset ke mode fast PWM.
Tabel 4 Mode Output Pembanding, Mode fast PWM
Tabel 5
menunjukan bit COM01:0 fungsional ketika bit WGM01:0 diset ke mode phase
correct PWM.
Tabel 5 Mode Output Pembanding, Mode phase
correct PWM
Bit 2:0 – CS02:0 : Clock Select
Tiga
bit clock select sumber clock digunakan dengan timer/counter.
Jika mode pin eksternal digunakan untuk timer counter0, perpindahan dari
pin T0 akan memberi clock counter.
Tabel 6 Deskripsi bit clock select
Sesuai
dengan tabel diatas maka sumber clock dapat dibagi sehingga timer/counter
dapat disesuaikan dengan banyak data yang dihitung.
Register Timer/Counter TCNT0
Gambar 8 Register timer TCNT0
Register
timer/counter memberikan akses secara langsung, keduanya digunakan untuk
membaca dan menulis operasi, untuk penghitung unit 8-bit timer/counter. Menulis
ke blok-blok register TCNT0 (removes) disesuaikan dengan clock timer
berikutnya. Memodifikasi counter (TCNT0) ketika perhitungan berjalan,
memperkenalkan resiko kehilangan perbandingan antara TCNC0 dengan register
OCR0.
Register Timer/Counter OCR0
Gambar 9. Register timer OCR0
Register output pembanding berisi sebuah haraga 8 bit yang mana
secara terus-menerus dibandingkan dengan harga counter (TCNT0). Sebuah
penyesuaian dapat digunakan untuk membangkitkan output interrupt pembanding,
atau untuk membangkitkan sebuah output bentuk gelombang pada pin OC0.
Register Timer/Counter Interrupt Mask
Bit 1-OCIE0: output timer counter menyesuaikan dengan kesesuaian
interrupt yang aktif.
Ketika bit OCIE0 ditulis satu, dan 1-bit pada register status
dalam kondisi set (satu), membandingkan timer/counter pada interrupt yang
sesuai diaktifkan. Mencocokkan interrupt yang dijalankan kesesuaian
pembanding pada timer/counter0 terjadi, ketika bit OCF0 diset pada register penanda
timer/counter-TIFR.
Bit 0 – TOIE0: Timer/Counter 0 Overflow Interrupt Enable
Ketika bit TOIE0 ditulis satu, dan 1-bit pada register status
dalam kondisi set (satu), timer/counter melebihi interrupt diaktifkan.
Mencocokkan interrupt dijalankan jika kelebihan pada timer/counter0
terjadi, ketika bit TOV0 diset pada register penanda timer/counter- TIFR
Register Timer/Counter Register – TIFR
Gambar 10 Register timer TIFR
Bit 1 – OCF0: Output Compare Flag 0
OCF0 dalam kondisi set (satu) kesesuaian pembanding terjadi antara
timer/counter dan data pada OCRO – Register 0 keluaran pembanding. OCF0 diclear
oleh hardware ketika eksekusi pencocokan penanganan vector interrupt.
Dengan alternatif mengclearkan OCF0 dengan menuliskan logika satu pada flag.
Ketika I-bit pada SREG, OCIE0 (Timer/Counter0 penyesuaian pembanding interrupt
enable), dan OCF0 diset (satu), timer/counter pembanding kesesuaian interrupt
dijalankan.
Bit 0 – TOV0: Timer/Counter Overflow Flag
Bit TOV0 diset (satu) ketika kelebihan terjadi pada timer/counter0.
TOV0 diclearkan dengan hardware ketika penjalanan pencocokan penanganan vector
interrupt. Dengan alternatif, TOV0 diclearkan dengan jalan memberikan
logika satu pada flag. Ketika Ibit pada SREG, TOIE0 (Timer/Counter0 overflow
interrupt enable), dan TOV0 diset (satu ), timer/counter overflow interrupt
dijalankan. Pada tahap mode PWM yang tepat, bit ini di set ketika timer/counter
merubah bagian perhitungan pada $00.
Serial pada ATMega16
Universal synchronous dan asynchronous
pemancar dan penerima serial adalah suatu alat komunikasi serial sangat
fleksibel. Jenis yang utama adalah :
·
Operasi full duplex (register
penerima dan pengirim serial dapat berdiri sendiri)
·
Operasi Asychronous atau
synchronous
·
Master atau slave mendapat clock dengan operasi synchronous
·
Pembangkit baud rate dengan
resolusi tinggi
·
Dukung frames serial dengan
5, 6, 7, 8 atau 9 Data bit dan 1 atau 2 Stop bit
·
Tahap odd atau even
parity dan parity check didukung oleh hardware
·
Pendeteksian data overrun
·
Pendeteksi framing
error
·
Pemfilteran gangguan
(noise) meliputi pendeteksian bit false start dan pendeteksian low
pass filter digital
·
Tiga interrupt terdiri
dari TX complete, TX data register empty dan RX complete.
·
Mode komunikasi
multi-processor
·
Mode komunikasi double
speed asynchronous
Generator Clock
Logic generator clock menghasilkan
dasar clock untuk pengirim dan penerima. USART mendukung empat mode
operasi clock: Normal Asynchronous, Double Speed Asynchronous mode
Master Synchronous dan Slave Synchronous. Bit UMSEL pada USART
control dan status register C (UCSRC) memilih antara operasi Asychronous dan
Synchronous.
Double speed (hanya pada mode Asynchronou ) dikontrol oleh U2X
yang mana terdapat pada register UCSRA. Ketika mengunakan mode operasi synchronous
(UMSEL = 1) dan data direction register untuk pin XCk (DDR_XCK)
mengendalikan apakah sumber clock tersebut adalah internal (master mode)
atau eksternal (slave mode) pin-pin XCK hanya akan aktif ketika
menggunakan mode Synchronous.
Gambar 11 Blok diagram clock generator logic
Keterangan sinyal :
txclk : clock pengirim (internal
clock)
rxclk : clock dasar penerima (internal
clock)
xcki : input dari pin XCK (sinyal
internal). Digunakan untuk operasi slave synchronous.
xcko : clock output ke pin XCK
(sinyal internal). Digunakan untuk operasi master synchronous
fosc : frekuensi pin XTAL (system
clock)
Generator Internal Clock – Pembangkit
Baud rate
Generasi internal clock digunakan
untuk mode – mode operasi master asynchronous dan synchronous.
Register USART baud rate (UBRR) dan down-counter dikoneksikan
kepada fungsinya sebagai programmable prescaler atau pembangkit baud
rate. Down-counter, dijalankan pada system clock ( fosc),
dibebani dengan nilai UBRR setiap counter telah dihitung mundur ke nol atau
ketika register UBRRL ditulisi. Clock dibangkitkan setiap counter mencapai nol.
Clock ini adalah pembangkit baud rate clock output (fosc/( UBBR+1)).
Pemancar membagi baud rete generator clock output dengan 2, 8, atau
16 cara tergantung pada mode. Pembangkit output baud rate digunakan
secara langsung oleh penerima clock dan unit-unit pelindung data.
Unit-unit recovery menggunakan suatu mesin status yang menggunakan 2, 8,
atau 16 cara yang tergantung pada cara menyimpan status dari UMSEL,
bit-bit U2X dan DDR_XCK. Tabel di bawah menunjukan penyamaan perhitungan
baud rate dan nilai UBRR tiap mode operasi mengunakan sumber pembangkit clock
internal.
Tabel 7 Persamaan untuk menyeting perhitungan register baud rate
note: baud rate menunjukan
pengiriman rate bit tiap detik (bps)
BAUD
:baud rate ( pada bit-bit per detik,bps ) fosc frekuensi sistem clock
osilator
UBRR
: terdiri dari UBRRH dan UBBRL,( 0-4095 )
Eksternal Clock
Eksternal clock digunakan untuk
operasi mode slave synchronous. Eksternal clock masuk dari pin
XCK dicontohkan oleh suatu daftar sinkronisasi register untuk memperkecil
kesempatan meta-stabilitas. Keluaran dari sinkronisasi register kemudian harus menerobos
detector tepi sebelum digunakan oleh pengirim dan penerima. Proses ini
mengenalkan dua period delay clock CPU dan oleh
karena
itu maksimal frekuensi clock XCK eksternal dibatasi oleh persamaan
sebagai berikut
Fxck
< fosc/4 Keterangan: fosc tergantung pada stabilitas sistem sumber clock.
Operasi Synchronous
Clock
Ketika mode sinkron digunakan (UMSEL=1), pin XCK akan digunakan
sama seperti clock input (slave) atau clock output (master). Dengan
ketergantungan antara tepi clock dan data sampling atau perubahan data menjadi
sama. Prinsip dasarnya adalah data input (on RxD) dicontohkan pada clock XCK
berlawanan dari tepi data output (TxD) sehingga mengalami perubahan.
Gambar 12 Operasi synchronous Clock
UCPOL
bit UCRSC memilih tepi yang mana clock XCK digunakan untuk data sampling dan
yang mana digunakan untuk perubahan data. Seperti yang ditunjukan pada gambar
di atas, ketika UCPOL nol data akan diubah pada tepi kenaikan XCK dan
dicontohkan pada tepi XCK saat jatuh. Jika UCPOL dalam kondisi set, data akan
mengalami perubahan pada saat tepi XCK jatuh dan data akan dicontohkan pada
saat tepi XCK naik.
Inisialisasi USART
USART harus diinisialisasi sebelum komunikasi
manapun dapat berlangsung. Proses inisialisasi normalnya terdiri dari
pengesetan baud rate, penyetingan frame format dan pengaktifan
pengirim atau penerima tergantung pada pemakaian. Untuk interrupt menjalankan
operasi USART, global interrupt flag (penanda) sebaiknya dibersihkan
(dan interrupt global disable) ketika inisialisasi dilakukan. Sebelum
melakukan inisialisasi ulang dengan mengubah baud rate atau frame
format, untuk meyakinkan bahwa tidak ada transmisi berkelanjutan sepanjang
periode register yang diubah. Flag TXC dapat
digunakan
untuk mengecek bahwa pemancar telah melengkapi semua pengiriman, dan flag RXC
dapat digunakan untuk mengecek bahwa tidak ada data yang tidak terbaca pada
buffer penerima. Tercatat bahwa flag TXC harus dibersihkan sebelum tiap
transmisi (sebelum UDR ditulisi) jika itu semua digunakan untuk tujuan
tersebut.
Tidak ada komentar:
Posting Komentar