Thursday, July 7, 2011

Atmega16 untuk Blink LED

Komponen yang diperlukan: Sirkuit Terpadu / Chips: ATmega-16 Komponen Pasif: LED, switch
TeoriSebuah PDIP yang normal Mikrokontroler AVR ATmega16 terdiri dari empat port dicap sebagai PA, PB, PC dan PD. Mereka account untuk 32 dari 40 pin dari mikrokontroler, masing-masing terdiri dari delapan pin. Selain melayani sebagai input / output (I / O), port masing-masing di samping memiliki fungsi alternatif seperti output untuk Timer / counter, Serial Peripheral Interface (SPI), USART, dua antarmuka kawat (TWI), konverter analog ke digital ( ADC), antarmuka JTAG, dll (Lihat datasheet untuk lebih detail). Register kontrol berikut tersedia untuk mengkonfigurasi fungsi masing-masing port:
DDRX mengendalikan arah I / O PX. Sebagai contoh, untuk DDRA = 0b00101110: pin 1, 2, 3 dan 5 ditetapkan sebagai output sedangkan pin RENDAH 0, 4, 6 dan 7 yang dibuat sebagai masukan. (Awal "0b" mendefinisikan urutan biner, jika kita ingin urutan heksadesimal, menulis "0x" diikuti dengan nilai HEX diperlukan.)
            
PORTX: kontrol status output dari pin port. Jika sekarang port seluruh atau beberapa pin dari port didefinisikan sebagai pin output (seperti dalam contoh sebelumnya), dan jika kita menulis PORTA = 0b00101110, maka nilai dari pin 1, 2, 3 dan 5 diatur TINGGI sedangkan sisanya dari pin akan di TINGGI-Z (impedansi tinggi) negara sebagai mereka dikonfigurasi sebagai pin input. Jika sekarang seluruh port dikonfigurasi sebagai port input, misalnya DDRA = 0b00000000 dan kita menulis Porta = 0b00101110 maka internal pull-up resistor diaktifkan pada pin 0, 4, 6 dan 7. PINX: membaca status input dari pin port. Jika sekarang seluruh port didefinisikan sebagai port input: DDRA = 0b00000000, dan jika kita menulis: uint8_t status; / * Tentukan variabel integer 8 bit * /
 
status = PINA; Kemudian 'status' yang 8-bit integer variabel diberi nilai yang diperoleh dengan membaca nilai pada setiap pin dari port A.
ATmega 16 memiliki 3 Timer independen / counter: 2 dari mereka adalah 8 bit dan satu 16 bit. Mode yang umum digunakan adalah PWM (pulsa modulasi lebar) dan timer yang jelas tentang membandingkan pertandingan (CTC). Para SFRs yang mengendalikan operasi timer: TCCR (Timer / Register kontrol counter), TCNT (adalah kontra waktu sebenarnya), OCR (output bandingkan mendaftar). Selain itu ada TIFR (timer / mendaftar bendera kontra) dan TIMSK (timer interrupt mask). Dalam modus CTC OCR yang sarat dengan nilai dan TCNT dibuat untuk kenaikan sampai nilainya sama dengan yang dari OCR, setelah bendera dinaikkan dan TCNT reloaded ke 0. Sebuah peristiwa dapat beralih membandingkan suatu OC khusus (output bandingkan pertandingan) pin output pada ATmega, atau peluncuran layanan mengganggu rutinitas-ISR.
Sela permintaan eksternal untuk microC untuk menjalankan layanan rutin-ISR (bagian tertentu dari kode). Mereka dihasilkan eksternal tanpa pertimbangan eksekusi kode sistem. Setiap kali interrupt diterima, MicroC diharapkan untuk menghentikan tugas saat ini dan hadir untuk mengganggu pertama. Untuk ATmega-16 mereka mungkin dihasilkan sebagai akibat dari perubahan tingkat / tepi pada beberapa pin atau timer / ADC / peristiwa komunikasi serial. (Lihat halaman 45 dari Datasheet). Setiap interupsi memiliki prioritas: interupsi prioritas tinggi dan prioritas rendah interrupt terjadi pada saat yang sama akan menyebabkan prioritas ISR tinggi untuk mengambil tempat pertama.
Circuit Diagram:
 



Pencegahan:
1) Masukkan chip di slot yang benar: meletakkan itu sisi-bawah, atau slot jauhnya dapat meledakkan chip. 2) Gunakan pinset saat mengeluarkan chip dari papan tempat memotong roti, pin mungkin akan rusak. 3) Jika kode ini tidak bekerja, meskipun telah disimulasikan dengan benar dan programmer telah berhasil membakar kode, periksa opsi konfigurasi di programmer. Sangat mungkin bahwa pilihan osilator atau bit seperti JTAG memungkinkan adalah salah ditetapkan.
  
 
Perangkat Lunak pemanfaatan:
a) Buat proyek baru di AVR studio, memilih mode kompilator (AVR gcc), direktori di mana  anda ingin membuat proyek dan jenis mikro-kontroler. b) Membuat atau menambahkan file sumber Anda (jendela kiri). c) Mengatur opsi konfigurasi proyek dan membangun (menghasilkan file hex) d) Debug kode untuk mengamati port dan SFRs e) Pergi ke folder debug di direktori proyek Anda dan memeriksa bahwa file hex dibuat. f) Untuk membakar kode: klik waccess.exe → Chip daftar vendor terbuka → pilih ATMEL → pilih MPU / MCU → pilih ATmega 16 dari daftar. Sekarang load file hex proyek Anda ke dalam buffer programmer: File → beban → penyangga programmer menelusuri hex file. Klik pada 'config' dan membaca pilihan dan memeriksa apakah mereka benar mengatur. Kemudian klik pada 'Otomatis' dan pilih menghapus, program dan memverifikasi.
 
Contoh kode: Kode 1: Berkedip LED dengan delay loop menunggu
# Include <avr/io.h> / / standar termasuk untuk ATmega16
void main (void) { unsigned int i = 0; DDRB = 0xff; / / PORTB sebagai OUTPUT PORTB = PORTB & 0x00; / / Semua pin dari PORTB RENDAH sementara (1) / loop / Tak Terbatas {For (i = 0; i <32767; i + +); / / tunggu for (i = 0; i <32767; i + +); / / tunggu PORTB = 0x01 ^; / / di sini Toggling berlangsung } }
Kode 2: Kode Sama menggunakan timer-interupsi dalam Bersihkan Timer / Counter Mode Bandingkan pertandingan.

/ * _BV (A) adalah makro yang mengembalikan nilai dalam hex yang sesuai dengan 2 pangkat 'a'. Jadi _BV (PX3) akan 0x08 atau 0b00001000 * /
 
# Include <avr/io.h> # Include <avr/interrupt.h>
timer1_init kekosongan (void) / / Timer menginisialisasi { TCCR1B = _BV (WGM12) | _BV (CS11); / / CTC, prescaler = 8 OCR1A = 31249; / / 250ms * 1MHz per / 8 - 1 TIMSK = _BV (OCIE1A); / / set o / p membandingkan Sebuah interupsi pertandingan mengaktifkan }
ISR (TIMER1_COMPA_vect) / rutin layanan / interupsi { PORTB ^ = _BV (PB0); / / beralih PB0 }
int main (void) { DDRB = _BV (PB0); timer1_init (); sei (); / / interrupt global yang memungkinkan
sementara (1) {} / * Sekarang Anda dapat beralih LED tanpa apa-apa dalam loop sementara Anda! * / return 0;
Percobaan:
A) kode-1 Contoh berkedip LED terhubung ke PB0. Memodifikasi kode untuk LED berkedip hanya bila saklar terhubung ke PB7 didorong. Berkedip harus berhenti ketika saklar OFF. B) Gunakan interupsi timer dalam 'membandingkan timer dan sesuai jelas' (CTC) modus, bukan while loop, berkedip LED (lihat kode 2). Membuat setengah frekuensi ketika saklar ditekan. C) Bermain dengan port, timer dan interupsi dan datang dengan sesuatu yang menarik!


Referensi:
1) Datasheet untuk ATmega 16
     
2) http://iamsuhasm.wordpress.com/tutsproj/avr-gcc-tutorial/


by : Siagian.P




Reff :  

David Hoey and Festo Staff. 2004. Fundamentalls of Machatronics.Victoria : FESTO Pty Ltd.

David Hoey and Festo Staff. 2004. Fundamentalls of Machatronics.Victoria : FESTO Pty Ltd.

Hall, Douglas V. 1989. Microprocessors and Interfacing Programming and Hardware. New York : Mc Graw Hill Book Company.

No comments:

Post a Comment