2
BAB I
KONSTRUKSI DASAR ATMEGA16
PENDAHULUAN
Sering kita mendengar istilah mikrokomputer, mikroprosesor, dan
mikrokontroler. Mikroprosesor adalah bagian CPU (central processing
unit) dari sebuah komputer, tanpa memori, I/O, dan periferal yang
dibutuhkan oleh suatu sistem lengkap. Supaya dapat bekerja,
mikroprosesor memerlukan perangkat pendukung seperti RAM, ROM dan
I/O.
Bila sebuah miroprosesor dikombinasi dengan I/O dan memori
(RAM/ROM) akan dihasilkan sebuah mikrokomputer. Sebagai terobosan
mikrokomputer ini dapat juga dibuat dalam bentuk single chip yaitu
Single Chip Microcomputer (SC M) yang selanjutnya disebut sebagai
mikrokontroler.
Perbedaan yang menonjol antara mikrokomputer dengan
mikrokontroler (SCM) adalah pada penggunaan perangkat I/O dan media
penyimpan program. Bila mikrokomputer menggunakan disket atau
harddrive lainnya maka mikrokontroler menggunakan EPROM sebagai
penyimpan programnya. Sedangkan keuntungan mikrokontroler
dibandingkan dengan mikroprosesor adalah pada mikrokontroler sudah
terdapat RAM dan peralatan I/O pendukung sehingga tidak perlu
menambahkannya.
PERLENGKAPAN DASAR MIKROKONTROLER
1.2.1. CPU
Unit pengolah pusat (CPU) terdiri atas dua bagian yaitu unit
pengendali (CU) serta unit aritmatika dan logika (ALU). Fungsi
utama unit pengendali adalah untuk mengambil, mengkode, dan
melaksanakan urutan instruksi sebuah program yang tersimpan dalam
memori. Sedangkan unit aritmatika dan perhitungan bertugas untuk
menangani operasi perhitungan maupun bolean dalam program.
1.2.2. ALAMAT
Pada mikroprosesor/mikrokontroler, apabila suatu alat
dihubungkan dengan mikrokontroler maka harus ditetapkan terlebih
dahulu alamat (address) dari alat tersebut. Untuk menghindari
terjadinya dua alat bekerja secara bersamaan yang mungkin akan
meyebabkan kerusakan.
1.2.3. DATA
Mikrokontroler ATmega16 mempunyai lebar bus data 8 bit.
Merupakan mikrokontroler CMOS 8-bit daya-rendah berbasis arsitektur
RISC yang ditingkatkan.
1.2.4. PENGENDALI
Selain bus alamat dan bus data mikroprosesor/mikrokontroler
dilengkapi juga dengan bus pengendali (control bus), yang fungsinya
untuk menyerempakkan operasi mikroprosesor/mikrokontroler dengan
operasi rangkaian luar.
1.2.5. MEMORI
Mikroprosesor/mikrokontroler memerlukan memori untuk menyimpan
program/data. Ada beberapa tingkatan memori,diantaranya register
internal, memori utama, dan memori massal. Sesuai dengan urutan
tersebut waktu aksesnya dari yang lebih cepat ke yang lebih
lambat.
1.2.6. RAM
RAM (Random Acces Memory) adalah memori yang dapat dibaca atau
ditulisi. Data dalam RAM akan terhapus bila catu daya dihilangkan.
Oleh karena itu program mikrokontroller tidak disimpan dalam RAM.
Ada dua teknologi yang dipakai untuk membuat RAM, yaitu RAM static
dan RAM dynamic.
1.2.7. ROM
ROM (Read Only Memory) merupakan memori yang hanya dapat dibaca.
Data dalam ROM tidak akan terhapus meskipun catu daya dimatikan.
Oleh karena itu ROM dapat digunakan untuk menyimpan program. Ada
beberapa jenis ROM antara lain ROM murni, PROM, EPROM, EAPROM. ROM
adalah memori yang sudah diprogram oleh pabrik, PROM dapat
diprogram oleh pemakai sekali saja. Sedangkan EPROM merupakan PROM
yang dapat diprogram ulang.
1.2.8. INPUT / OUTPUT
I/O dibutuhkan untuk melakukan hubungan dengan piranti di luar
sistem. I/O dapat menerima data dari alat lain dan dapat pula
mengirim data ke alat lain. Ada dua perantara I/O yang dipakai,
yaitu piranti untuk hubungan serial (UART) dan piranti untuk
hubungan paralel (PIO).
1.2.9. MIKROKONTROLER AVR ATMEGA 16
AVR merupakan seri mikrokontroler CMOS 8-bit buatan Atmel,
berbasis arsitektur RISC (Reduced Instruction Set Computer) yang
ditingkatkan. Hampir semua instruksi dieksekusi dalam satu siklus
clock. AVR mempunyai 32 register generalpurpose, timer/counter
fleksibel dengan mode compare, interrupt internal dan eksternal,
serial UART, programmable Watchdog Timer, dan mode power saving.
Mempunyai ADC dan PWM internal. AVR juga mempunyai In-System
Programmable Flash onchip yang mengijinkan memori program untuk
diprogram ulang dalam sistem menggunakan hubungan serial SPI.
ATmega16 adalah mikrokontroler CMOS 8-bit daya-rendah berbasis
arsitektur RISC yang ditingkatkan. Untuk lebih jelas tentang
arsitektur dari ATmega16 ditunjukan pada gambar 1.1 ATmega16
mempunyai throughput mendekati 1 MIPS per MHz membuat disainer
sistem untuk mengoptimasi komsumsi daya versus kecepatan
proses.
Beberapa keistimewaan dari AVR ATmega16 antara lain:
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
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
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
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,
Power-down, 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
Operating Voltages
2.7 - 5.5V for ATmega16L
4.5 - 5.5V for Atmega16
Gambar 1.1. Blok Diagram Arsitektur ATmega16
KONFIGURASI PIN AVR ATMEGA 16
Pin-pin pada ATmega16 dengan kemasan 40-pin DIP (dual inline
package) ditunjukkan oleh gambar 1.2 Kemasan pin tersebut terdiri
dari 4 Port yaitu Port A, Port B, Port C,Port D yang masing masing
Port terdiri dari 8 buah pin. Selain itu juga terdapat RESET, VCC,
GND 2 buah, VCC, AVCC, XTAL1, XTAL2 dan AREF.
Gambar 1.2. Pin -pin ATmega16 kemasan 40 -pin
Diskripsi dari pin-pin ATmega 16L adalah sebagai berikut :
1. VCC : Supply tegangan digital.
2. GND : Ground
3. Port A : Port A sebagai input analog ke A/D konverter. Port A
juga sebagai 8-bit bi-directional port I/O, jika A/D konverter
tidak digunakan. Pin-pin port dapat menyediakan resistor-resistor
internal pull-up. Ketika port A digunakan sebagai input dan pull
eksternal yang rendah akan menjadi sumber arus jika
resistorresistor pull-up diaktifkan. Pin-pin port A adalah tristate
ketika kondisi reset menjadi aktif sekalipun clock tidak aktif.
4. Port B : Port B adalah port I/O 8-bit bi-directional dengan
resistor-resistor internal pull-up. Buffer output port B mempunyai
karaketristik drive yang simetris dengan kemampuan keduanya sink
dan source yang tinggi. Sebagai input, port B yang mempunyai pull
eksternal yang rendah akan menjadi sumber arus jika
resistorresistor pull-up diaktifkan. Pin-pin port B adalah tristate
ketika kondisi reset menjadi aktif sekalipun clock tidak aktif.
5. Port C : Port C adalah port I/O 8-bit bi-directional dengan
resistor-resistor internal pull-up. Buffer output port C mempunyai
karaketristik drive yang simetris dengan kemampuan keduanya sink
dan source yang tinggi. Sebagai input, port C yang mempunyai pull
eksternal yang rendah akan menjadi sumber arus jika
resistorresistor pull-up diaktifkan. Pin-pin port C adalah tristate
ketika kondisi reset menjadi aktif seklipun clock tidak aktif. Jika
antarmuka JTAG enable, resistor resistor pull-up pada pin-pin
PC5(TDI), PC3(TMS), PC2(TCK) akan diktifkan sekalipun terjadi
reset.
6. Port D : Port D adalah port I/O 8-bit bi-directional dengan
resistor-resistor internal pull-up. Buffer output port D mempunyai
karaketristik drive yang simetris dengan kemampuan keduanya sink
dan source yang tinggi. Sebagai input, port D yang mempunyai pull
eksternal yang rendah akan menjadi sumber arus jika
resistorresistor pull-up diaktifkan. Pin-pin port D adalah tristate
ketika kondisi reset menjadi aktif seklipun clock tidak aktif.
7. Reset :Sebuah low level pulsa yang lebih lama daripada lebar
pulsa minimum pada pin ini akan menghasilkan reset meskipun clock
tidak berjalan.
8. XTAL1:Input inverting penguat Oscilator dan input intenal
clock operasi rangkaian.
9. XTAL2 :Output dari inverting penguat Oscilator.
10. AVCC :Pin supply tegangan untuk PortA dan A/D converter.
Sebaiknya eksternalnya dihubungkan ke VCC meskipun ADC tidak
digunakan. Jika ADCdigunakan seharusnya dihubungkan ke VCC melalui
low pas filter.
11. AREF : Pin referensi analog untuk A/D konverter.
STRUKTUR MEMORI
Untuk memaksimalkan performa dan paralelisme, AVR menggunakan
arsitektur Harvard (dengan memori dan bus terpisah untuk program
dan data). Instruksi pada memori program dieksekusi dengan
pipelining single level. Selagi sebuah instruksi sedang dikerjakan,
instruksi berikutnya diambil dari memori program.
1.4.1. FLASH MEMORI
ATmega16 memiliki 16K byte flash memori dengan lebar 16 atau 32
bit. Kapasitas memori itu sendiri terbagi manjadi dua bagian yaitu
bagian boot program dan bagian aplikasi program. Flash memori
memiliki kemampuan mencapai 10.000 write dan erase.
Gambar 1.3. Peta Memori Flash
1.4.2. MEMORI SRAM
Penempatan memori data yang lebih rendah dari 1120 menunjukkan
register, I/O memori, dan data internal SRAM. 96 alamatmemori
pertama untuk file register dan memori I/O, dan 1024 alamat memori
berikutnya untuk data internal SRAM. Lima mode pengalamatan yang
berbeda pada data memori yaitu direct, indirect, indirect
dis-placement, indirect pre-decreament dan indirect post-increament
.Pada file register, mode indirect mulai dari register R26-R31.
Pengalamatan mode direct mencapai keseuruhan kapasitas data.
Pengalamatan mode indirect displacement mencapai 63 alamat memori
dari register X atau Y. Ketika meggunakan mode pengalamatan
indirect dengan predecrement dan post increment register X, Y, dan
Z akan didicrement-kan atau di-increment-kan. Pada ATmega16
memiliki 32 register, 64 register I/O dan 1024 data internal SRAM
yang dapat mengakses semua mode-mode pengalamatan.
Gambar 1.4. Peta Memori SRAM
1.4.3. MEMORI EEPROM
Pada EEPROM ATmega16 memiliki memori sebesar 512 byte engan daya
tahan 100.000 siklus write/read.
Register-register pada memori EEPROM :
Bit 159 Res:reserved bits
Bit ini sebagai bit-bit bank pada ATmega16 dan akan selalu
membaca
Bit 8..0 EEAR8..0:EEPROM address
Bit-bit ini sebagai alamat EEPROM.
Bit 7..0 EEDR7..0:EEPROM data
Bit-bit ini sebagai data EEPROM.
Gambar 1.5. Register data EEPROM Bit Bit 70
Bit 7..4 Res:reserved bits
Bit-bit ini terdapat pada register kontrol.
Bit ini sebagai Enable Interupt Ready pada EEPROM.
Gambar 1.6. Register kontrol EEPROM Bit Bit 70
Bit 2 Bit ini sebagai Enable Interupt Master pada EEPROM.
Bit 1 Bit ini sebagai write enable pada EEPROM.
Bit 0 Bit ini sebagai read enable pada EEPROM.
INTERUPT
Tabel 1.1 Interrupt vektor
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
xmewakili 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 regiter 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 pullup 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.
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).
PORT SEBAGAI ANALAG DIGITAL CONVERTER (ADC)
ATmega16 mempunyai ADC (Analog to Digital Converter) internal
dengan fitur sebagai berikut (untuk lebih detil dapat mengacu pada
datasheet) :
10-bit Resolution
65 - 260 s Conversion Time
Up to 15 kSPS at Maximum Resolution
8 Multiplexed Single Ended Input Channels
Optional Left Adjustment for ADC Result Readout
0 - VCC ADC Input Voltage Range
Selectable 2.56V ADC Reference Voltage
Free Running or Single Conversion Mode ~ ADC Start Conversion by
Auto Triggering on Interrupt 9Ibit ha l 49 Sources
Interrupt on ADC Conversion Complete
Sleep Mode Noise Canceler
Dibawah ini gambar timing diagram untuk mode single convertion
maksudnya hanya satu input chanel saja yang dikonversi.
Gambar 1.7. Timing diagram mode single conversion
Register-register yang dipakai untuk mengakses ADC adalah:
1.7.1. ADMUX ADC MULTIPLEXER SELECTION REGISTER
Gambar 1.8. Register ADMUX
Bit 7:6 REFS 1:0 : Bit Pemilih tegangan referensi Bit ini
berfungsi untuk memilih tegangan referensi ADC untuk lebih jelasnya
terdapat pada tabel dibawah ini.
Tabel 1.2 Bit pemilih tegangan ref12
~ Bit 5 ADLAR : ADC Left Adjust Result
Bit 4:0 MUX4:0 : Bit pemilih Analog Channel dan Gain
1.7.2. ADCSRA ADC CONTROL AND STATUS REGISTER
Gambar 1.9. Register ADCSRA13
Bit 7 ADEN : ADC Enable
Diisi 1 untuk mengaktifkan ADC, diisi 0 untuk mematikan ADC
sekaligus memberhentikan konversi yang sedang berlangsung.
Bit 6 ADSC : ADC Start Conversion
Pada mode single-conversion, set bit ini untuk memulai tiap
konversi. Pada mode free-running, set bit ini untuk konversi
pertama kalinya. Bit ADSC bila dibaca akan bernilai 1 selama proses
konversi, dan bernilai 0 bila konversi selesai. Mengisi bit ini
dengan nilai 0 tidak akan mempunyai dampak.
Bit 5 ADATE : ADC Auto Trigger Enable
Bila bit ini diisi 1 maka auto trigger ADC akan diaktifkan. ADC
akan memulai konversi pada saat tepi positif dari sumber sinyal
trigger yang dipilih. Sumber sinyal trigger ditentukan dengan
menseting bit ADTS pada register SFIOR.
Bit 4 ADIF : ADC Interrupt Flag
Bit ini akan bernilai 1 pada saat ADC selesai mengkonversi dan
Data register telah diupdate. ADC Conversion Complete Interrupt
akan dijalankan bila bit ADIE dan bit-I pada register SREG diset 1.
ADIF akan di-clear secara hardware bila mengerjakan penanganan
vektor interrupt yang bersesuaian.
Alternatifnya, ADIF dapat di-clear dengan menuliskan 1. Hatihati
bila bekerja dengan Read-Modify-Write pada ADCSRA, interrupt yang
tertunda dapat dinonaktifkan/batal. Hal ini juga berakibat sama
bila instruksi SBI dan CBI digunakan.
Bit 3 ADIE : ADC Interrupt Enable
Mengisi bit ini dan bit-I pada register SREG menjadi 1 akan
mengaktifkan ADC Conversion Complete Interrupt.
Bit 2:0 ADPS2:0 Bit pemilih ADC Prescaler
Menentukan bilangan pembagi antara sumber clock XTAL ke clock
ADC.
1.7.3. ADCL, ADCH ADC data register
Bila ADLAR = 0
Gambar 1.10. Register ADCLAR = 0
Gambar 1.11. Register ADCLAR = 1
Setelah ADC selesai melakukan konversi kedua register ini berisi
hasil konversi. Bila channel differensial dipilih maka hasilnya
dalam format 2s complement. Saat ADCL dibaca, data register tidak
akan meng-update data sampai ADCH dibaca. Jika hasilnya dirata kiri
(left adjust) dan hanya butuh 8-bit maka cukuplah dengan membaca
ADCH. Jika butuh 10-bit, baca ADCL dahulu kemudian ADCH. Register
SFIOR berfungsi untuk sumber auto triger. Dimana kita dapat memilih
beberapa mode untuk konversi.
Gambar 1.12. Register SFIOR16
Dengan konfigurasi seperti dibawah maka dapat memilih mode start
ADC, ADC akan konversi ketika berdasarkan mode yang dipilih.
Tabel 1.3 Pemilihan scaning ADC17
ADTS2ADTS1ADTS0Trigger source
000Free Running mode
001Analog Comparator
010External Interupt Request 0
011TimerCounter0 Compare Match
100TimerCounter0 Overflow
101TimerCounter1 Compare Match 8
110TimerCounter1 Overflow
111TimerCounter1 Capture Event
Bit 7:5 ADTS2:0 : ADC Auto Trigger Source
Bila ADATE dalam register ADCSRA diset 1, maka nilai dalam
bit-bit ini akan menentukan sumber mana yang akan mentrigger
konversi ADC. Bila bit ADATE bernilai 0, maka bit-bit ini tidak
akan mempunyai efek. Sebuah konversi ditrigger oleh sinyal
rising-edge dari interrupt flag yang dipilih. Perlu diingat bahwa
memindah sumber trigger yang di-clear ke sumber trigger lain yang
di-set akan menyebabkan positive-edge pada sinyal trigger. Bila
ADEN dalam register ADCSRA diset, juga akan memulai konversi.
Memindah mode ke mode freerunning tidak akan menyebabkan pulsa
trigger, meskipun bila flag interrupt ADC diset.
Bit 4 RES : Reserved bit
Bit cadangan, bila dibaca hasilnya nol.
TIMER
Timer/couter adalah tujuan umum single channel, module 8 bit
timer/counter. 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 Modulator (PWM)
Pembangkit frekuensi
Event counter external
Gambar 1.13. Blok diagram timer counter
Gambar diagram block timer/counter 8 bit ditunjukan pada gambar
di bawah ini. Untuk penempatan pin I/O telah di jelaskan Ibit hal
67 pada bagian I/O di atas. CPU dapat diakses register I/O,
termasuk dalam pinpin I/O dan bit I/O. Device khusus register I/O
dan lokasi bit terdaftar pada deskripsi timer/counter 8 bit pada
gambar 1.13
1.8.1. TIMING DIAGRAM TIMER/COUNTER
Timer/counter disain sinkron clock timer (clkT0) oleh karena itu
ditunjukan sebagai sinyal enable clock pada gambar berikut. Gambar
ini termasuk informasi ketika flag interrupt dalam kondisi set.
Data timing digunakan sebagai dasar dari operasi timer/counter.
Gambar 1.14. Timing diagram timer/counter, tanpa prescaling
Sesuai dengan gambar dibawah 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 1.15. 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 ke nilai 0 (overflow).
Gambar 1.16. Timing diagram timer/counter, 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 kembalimkenilai 0 (overflow).
Gambar 1.17. Timing diagram timer/counter, ,dengan pescaler
(fclk_I/O/8)
1.8.2. DESKRIPSI REGISTER TIMER/COUNTER 8 BIT
Gambar 1.18. 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 di paksakan untuk disesuaikan pada
unit pembangkit bentuk gelombang. Output OCO diubah disesuaikan pda
COM01: bit 0 menentukan pengaruh daya pembanding. Sebuah FOC0 stobe
tidak akan membangkitkan beberepa interrupt, juga tidak akan
membersihkan timer pada mode CTC mengunakan OCR0 sebagai puncak.
FOC0 selalu dibaca nol.
~ Bit 6,3 WGM01:0: Waveform Generation Mode.
Tabel 1.4 Deskripsi bit clock select
Jika mode pin eksternal digunakan untuk timer counter0,
perpindahan dati pin T0 akan memberi clock counter dengan tetap
jika pin digunakan sebagai output. Dalam hal ini software diijinkan
untuk mengontrol perhitungan.
1.8.3. REGISTER TIMER/COUNTER TCNT0
Gambar 1.19. Register timer TCNT0
Register timer/counter memberikan akses secara langsung,
keduanya dugunakan 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.
1.8.4. REGISTER TIMER/COUNTER OCR0
Gambar 1.20. Register timer OCR030
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
intrrupt pembanding, atau untuk membangkitakan sebuah output bentuk
gelombang pada pin OC0.
1.8.5. REGISTER TIMER/COUNTER INTERRUPT MASK
Bit 1 OCIE0: output timer counter menyesuaikan dengan kesesuaian
interrupt yang aktif. Ketika bit OCIE0 ditulis satu, dan I-bit pada
register status dalam kondisi set (satu), membandingkan
timer/counter pada interrupt yang sesuai diaktifkan. Mencocokkan
interrupt yang dijalankan kesesuaianpembanding 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 I-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.
1.8.6. REGISTER TIMER/COUNTER REGISTER TIFR
Gambar 1.21. Register timer TIFR
Bit 1 OCF0: Output Compare Flag0.
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
penangan 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 di ser ( 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
I-bit 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 boud 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
1.9.1. GENERASI CLOCK
Logic generasi 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 Asynchronous) 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 active ketika menggunakan mode Synchronou
Gambar 1.22. Block diagram clock generasi 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 oin XCK ( sinyal internal ).Digunakan
untuk operasi master synchronous
Fosc : frekuensi pin XTAL ( system clock )
1.9.2. GENERASI INTERNAL CLOCK
Generasi internal clock digunakan untuk mode-mode operasi master
asynchronous dan synchronous. Register USART boud rate (UBRR) dan
down-counter dikoneksikan kepada fungsinya sebagai programmable
prescaler atau pembangkit boud 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 boud rate clock output (fosc/( UBBR+1)). Pemancar
membagi boud rete generator clock output dengan 2, 8, atau 16 cara
tergantung pada mode. Pembnagkit output boud rate digunakan secara
langsung oleh penerima suatu mesin status yang menggunakan 2, 8,
atau 16 negara yang tergantung pada cara menyimpan status dari
UMSEL, bit-bit U2X dan DDR_XCK. Table di bawah menunjukan penyamaan
perhitungan boud rate dan nilai UBRR tiap mode operasi mengunakan
sumber pembangkit clock internal.
Tabel 1.5 Operasi mode
Catatan : boud rate menunjukan pengiriman rate bit tiap detik
(bps)
BAUD: boud rate (pada bit-bit per detik,bps) fosc frekuensi
33Ibit hal 140system clock osilator
UBRR : terdiri dari UBRRH dan UBBRL,(0-4095)
1.9.3. 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 metastabilitas.
Keluaran dari sinkronisasi register kemudian harus menerobos
detector tepi sebelum digunakan oleh pengirim dan penerima. Proses
ini mengenalkan dua period delay clock CPU danoleh karena itu
maksimal frekuensi clock XCK eksternal dibatasi oleh persamaan
sebagai berikut :
(1)
Keterangan : bahwa fosc tergantung pada stabilitas system sumber
clock. Oleh karena derekomendasikan untuk menambahkan beberapa
garis tepi untuk menghindari hilangnya mungkin data dalam kaitan
dengan variasi frekwensi.
1.9.4. 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 tepi dari tepi data output
(TxD) sehingga mengalami perubahan.
Gambar 1.23. Operasi synchronous Clock
UCPOL bit UCRSC memilih yang mana tepi 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
berlansung. Proses inisialisasi normalnyaterdiri daripengesetan
boud rate, penyetingan frame format dan pengaktifan pengirim atau
penerimatergantung 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
boud rate atau frame format, untuk meyakinkan bahwa tidak ada
transmisi berkelanjutan sepanjang peiode 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. USART sederhana inisialisasi kode contoh berikut
menunjukan fungsi satu assembly dan satu C itu mempunyai kesamaan
dalam kemampuan. Pada contoh tersebit mengasumsikan bahwa operasi
asinkron menggunakan metode poling ( tidak ada interrupt enable )
frame format yang tetap. Boud rate diberikan sebagai fungsi
parameter.
Untuk kode assembly, parameter boud rate diasumsikan untuk di
simpan pada register r16, r17. Ketika menulis fungsi pada register
UCSRC, bit URSEL (MSB) harus diset dalam kaitan dengan pembagian
penempatan I/O oleh UBRRH dan UCSRC. Lebih mengedepankan
inisialisasi rutin dapat dibuat seperti itu meliputi frame format
sebagai parameter, disable interrupt dan lain-lain. Bagai manapun
juga banyak aplikasi menggunakan seting tetap boud dan register
control, dan untuk aplikasi jenis ini dapat ditempatkan secara
langsung pada keseluruhan routine, atau dikombinasikan dengan
inisialisasi kode untuk modul I/O yang lain.1