Makalah Mikrokontroller [PDF]

  • 0 0 0
  • Suka dengan makalah ini dan mengunduhnya? Anda bisa menerbitkan file PDF Anda sendiri secara online secara gratis dalam beberapa menit saja! Sign Up
File loading please wait...
Citation preview

NAMA NMP



: AHKMAD ARDIAN SYAH : 10414527



KELAS : 2IB02



DAFTAR ISI



KATA PENGANTAR …………………………………………………………………



1.INTERUPTS EKSTERNAL 0 DAN 1 2.INTERUPTS TIMER O DAN 1 3.INTERUPS SERIAL 4.JELASKAN MIKROKONTROLLER AVR ATMEGA(konfig.piil,blog diagram,arsitektur,peta memori,register-register)



KATA PENGATAR



Puji syukur saya ucapkan atas kehadirat Allah SWT, karena dengan rahmat dan karunia-Nya saya masih diberi kesempatan untuk menyelesaikan makalah ini. Tidak



lupa saya ucapkan kepada dosen pembimbing dan teman-teman yang telah memberikan dukungan dalam menyelesaikan makalah ini. Penulis menyadari bahwa dalam penulisan makalah ini masih banyak kekurangan, oleh sebab itu penulis sangat mengharapkan kritik dan saran yang membangun. Dan semoga dengan selesainya makalah ini dapat bermanfaat bagi pembaca dan teman-teman. Amin…



1. INTERUPTS EKSTERNAL 0 DAN 1 Interupsi Eksternal d engan Mode Falling



Pada percobaan kali ini akan dibuat program untuk memahami penggunaan interupsi eksternal den gan mode falling. Dua buah switch akan dih ubungkan pada pin interupsi eksternal 0 (INT0) dan interupsi eksternal 1 (INT1). Pen ekananswitch akan menginterupsi program utama (yang berada pada fungsi loop) d an memaksa untuk menjalankan rutin interupsi yang telah dideskripsikan pada program.



berikut adalah step2 nya :



Tuliskan Syntax dbawah ini pada software Arduino , lalu di compile : #include LiquidCrystal lcd(A0,A1,A2,A3,A4,A5); unsigned int countLoop = 0; void setup() { lcd.begin(16,2); lcd.clear(); attachInterrupt(0, rutinInterupsi0, FALLING); attachInterrupt(1, rutinInterupsi1, FALLING); } void loop() { lcd.setCursor(0,0); lcd.print("Main Program"); lcd.setCursor(0,1); lcd.print("Count Loop"); lcd.print(countLoop); countLoop++; delay(1000); } void rutinInterupsi0() {



lcd.setCursor(0,0); lcd.print("Int0 Program"); lcd.setCursor(0,1); lcd.print("Intterupt INT0"); delay(2000); } void rutinInterupsi1() { lcd.setCursor(0,0); lcd.print("Int1 Program"); lcd.setCursor(0,1); lcd.print("Interrupt INT1"); delay(2000); }



setelah itu rangkai Komponen ini pada ISIS



Setelah itu copy baris kedua dari bawah pada software arduino dan pastekan ke dalam simulasi ISIS , Apabila percobaan berhasil maka akan muncul sperti dibawah ini



Kondisi Awal (high)



saat switch ditekan



Interupsi Eksternal d engan Mode Rising



Dua buah switch akan dihubungkan pada pin INT0 dan I NT1 sama seperti Percobaan diatas Peneka nan switch akan menginterupsi program utama (yang berada pada fungsi loop) da n memaksa untuk menjalankan rutin in terupsi yang telah dideskripsikan pada program. Pada Percobaan mode interupsi yan g digunakan adalah rising.



Tuliskan syntax dibawah ini pada program arduino kamu #include LiquidCrystal lcd(A0,A1,A2,A3,A4,A5); unsigned int countLoop = 0; void setup() { lcd.begin(16,2); lcd.clear();



attachInterrupt(0, rutinInterupsi0, RISING); attachInterrupt(1, rutinInterupsi1, RISING); } void loop() { lcd.setCursor(0,0); lcd.print("Main Program"); lcd.setCursor(0,1); lcd.print("Count Loop"); lcd.print(countLoop); countLoop++; delay(1000); } void rutinInterupsi0() { lcd.setCursor(0,0); lcd.print("Int0 Program"); lcd.setCursor(0,1); lcd.print("Intterupt INT0"); delay(2000); } void rutinInterupsi1() { lcd.setCursor(0,0); lcd.print("Int1 Program"); lcd.setCursor(0,1); lcd.print("Interrupt INT1"); delay(2000);



Rangkailah komponen pada simulasi ISIS



Apabila simulasi telah berhasil maka akan tampak seperti gambar dibawah ini :



Interupsi Eksternal dengan Mode Any Change



Pada Percobaan mode interupsi yang digunakan adalah any change. Dua buahswitch akan dihubungkan pada pin INT0 dan INT1. Penekanan switch akan membuat program utama pada fungsi loop terhenti dan mengeksekusi rutin int erupsi.



Masukan syntax dbawah ini pada program arduino anda



#include LiquidCrystal lcd(A0,A1,A2,A3,A4,A5); unsigned int countLoop = 0; void setup() { lcd.begin(16,2); lcd.clear(); attachInterrupt(0, rutinInterupsi0, CHANGE); attachInterrupt(1, rutinInterupsi1, CHANGE); } void loop() { lcd.setCursor(0,0); lcd.print("Main Program"); lcd.setCursor(0,1); lcd.print("Count Loop"); lcd.print(countLoop); countLoop++; delay(1000); } void rutinInterupsi0() { lcd.setCursor(0,0); lcd.print("Int0 Program"); lcd.setCursor(0,1); lcd.print("Intterupt INT0"); delay(2000); } void rutinInterupsi1() { lcd.setCursor(0,0); lcd.print("Int1 Program"); lcd.setCursor(0,1); lcd.print("Interrupt INT1"); delay(2000); }



Kemudian rangkailah program pada simulasi ISIS



Setelah itu compile dan satukan program arduino dan simulasi isis jika sudah berhasil maka akan tampak seperti gambar dibawah ini :



2. INTERUPT TIMER 0 DAN 1 Bila Anda ingin sesuatu terjadi pada interval waktu yang teratur, dapat mudah untuk pergi untuk fungsi delay (). Tapi ini hanya berhenti program untuk jangka waktu



tertentu yang boros terutama jika Anda perlu untuk melakukan pengolahan lain untuk sementara. Di sinilah timer dan interupsi datang untuk bermain. Arduino UNO memiliki tiga timer Timer0 - Timer 8 bit yang digunakan oleh Arduino fungsi delay (), millis () dan mikro (). Timer1 - Sebuah timer 16 bit yang digunakan oleh Servo () perpustakaan Timer2 - Timer 8 bit yang digunakan oleh Tone yang () perpustakaan Papan mega memiliki Timers 3,4,5 yang dapat digunakan sebagai pengganti Dalam contoh berikut, kita akan menggunakan Timer1 untuk interrupt kami. Jelas, jika Anda menggunakan Perpustakaan Servo akan ada konflik, sehingga Anda harus memilih waktu lain. Berikut adalah dasar-dasar program interrupt driven. Ini adalah program flash dasar LED, tapi sekarang bukan menggunakan penundaan menggunakan interupsi setiap babak kedua untuk menghidupkan LED dan kemudian pergi, sehingga membuat LED flash sekali per detik.



/ * Misalnya Timer1 Interrupt LED flash setiap detik * /



#define ledPin 13 int timer1_counter; kekosongan setup () { pinMode (ledPin, OUTPUT); // Inisialisasi timer1 noInterrupts (); 0; TCCR1B = 0;



// Menonaktifkan semua interupsi TCCR1A =



// Set timer1_counter ke nilai yang benar untuk interval interupsi kami // timer1_counter = 64911; // Preload waktu 65536-16MHz / 256 / 100Hz // timer1_counter = 64286; timer1_counter = 34286;



// Preload waktu 65536-16MHz / 256 / 50Hz // Preload waktu 65536-16MHz / 256 / 2Hz



TCNT1 = timer1_counter; // Preload waktu TCCR1B | = (1