Pemrograman Mikrokontroler Bagian II

5
SIMULASI February 10, 2011 Sistem Mikrokontroler – Instrumentasi Meteorologi 2011 Halaman 1 Simulasi Program Mikrokontroler Oleh: Zainal Abidin Sebagian besar programmer pemula biasanya sulit membuat sebuah algoritma program yang cukup rumit. Programmer pemula lebih senang merancang dan menyimpan algoritma di pikirannya yang kemudian langsung diterapkan menjadi beberapa script program. Metode ini cukup efektif untuk program-program yang memiliki struktur sederhana. Namun demikian, hasil eksekusi dari beberapa script tersebut biasanya tidak sesuai dengan yang diinginkan ketika berhadapan dengan permasalahan yang rumit. Simulasi merupakan salah satu metode yang dapat digunakan untuk memecahkan masalah tersebut. Sasaran dari simulasi ini adalah rekonstruksi script-script yang sudah dibuat sebelumnya, sehingga tercipta sebuah program yang sesuai dengan keinginan sang programmer. Program Yang Diinginkan: Program akan menghitung jumlah pulsa yang masuk ke mikrokontroler (μC) dan menyimpannya pada memori permanen 1 . Ada tiga kondisi pulsa yang akan diterima oleh μC, yaitu: pulsa diam, pulsa naik dan pulsa turun. Pulsa diam tidak akan mengubah nilai dari jumlah pulsa (jumlah pulsa tetap). Pulsa naik akan mengurangi jumlah pulsa dan pulsa turun akan menambah jumlah pulsa. Sistem Mikrokontroler: Mikrokontroler akan menganggap setiap perubahan logika sebagai sebuah pulsa, yaitu: dari high ke low (falling edge) dan dari low ke high (rising edge). Setiap pulsa yang terdeteksi oleh μC ditampung pada register TCNT0. Setiap register pada μC berjenis unsigned char yang memiliki rentang nilai dari 0 hingga 255. Sehingga TCNT0 akan bernilai 0 pada pulsa ke- 256 dan bernilai 1 pada pulsa ke-257. Masalah ini dapat diatasi dengan mengaktifkan fungsi timer 0 overflow interrupt, yaitu: menambah nilai dari suatu variabel penanda setiap TCNT0 melampaui jangkauan maksimalnya (=255). Misalkan i adalah variabel penandanya, maka formula penghitungan pulsa adalah sebagai berikut: int i; // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { i++; } void main(void) { int pulsa=0; 1 Memori permanen yang dimaksud adalah EEPROM µC. Data yang tersimpan pada memori tersebut tidak akan terhapus walaupun catu daya mati. Penyimpanan jumlah pulsa pada EEPROM merupakan antisipasi terhadap habisnya daya listrik selama pengukuran.

Transcript of Pemrograman Mikrokontroler Bagian II

Page 1: Pemrograman Mikrokontroler Bagian II

SIMULASI February 10,

2011

Sistem Mikrokontroler – Instrumentasi Meteorologi 2011 Halaman 1

Simulasi Program Mikrokontroler Oleh: Zainal Abidin

Sebagian besar programmer pemula biasanya sulit membuat sebuah algoritma program yang cukup rumit. Programmer pemula lebih senang merancang dan menyimpan algoritma di pikirannya yang kemudian langsung diterapkan menjadi beberapa script program. Metode ini cukup efektif untuk program-program yang memiliki struktur sederhana. Namun demikian, hasil eksekusi dari beberapa script tersebut biasanya tidak sesuai dengan yang diinginkan ketika berhadapan dengan permasalahan yang rumit. Simulasi merupakan salah satu metode yang dapat digunakan untuk memecahkan masalah tersebut. Sasaran dari simulasi ini adalah rekonstruksi script-script yang sudah dibuat sebelumnya, sehingga tercipta sebuah program yang sesuai dengan keinginan sang programmer. Program Yang Diinginkan: Program akan menghitung jumlah pulsa yang masuk ke mikrokontroler (µC) dan menyimpannya pada memori permanen1. Ada tiga kondisi pulsa yang akan diterima oleh µC, yaitu: pulsa diam, pulsa naik dan pulsa turun. Pulsa diam tidak akan mengubah nilai dari jumlah pulsa (jumlah pulsa tetap). Pulsa naik akan mengurangi jumlah pulsa dan pulsa turun akan menambah jumlah pulsa. Sistem Mikrokontroler: Mikrokontroler akan menganggap setiap perubahan logika sebagai sebuah pulsa, yaitu: dari high ke low (falling edge) dan dari low ke high (rising edge). Setiap pulsa yang terdeteksi oleh µC ditampung pada register TCNT0. Setiap register pada µC berjenis unsigned char yang memiliki rentang nilai dari 0 hingga 255. Sehingga TCNT0 akan bernilai 0 pada pulsa ke- 256 dan bernilai 1 pada pulsa ke-257. Masalah ini dapat diatasi dengan mengaktifkan fungsi timer 0 overflow interrupt, yaitu: menambah nilai dari suatu variabel penanda setiap TCNT0 melampaui jangkauan maksimalnya (=255). Misalkan i adalah variabel penandanya, maka formula penghitungan pulsa adalah sebagai berikut: int i; // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { i++; } void main(void) { int pulsa=0;

1 Memori permanen yang dimaksud adalah EEPROM µC. Data yang tersimpan pada memori tersebut tidak

akan terhapus walaupun catu daya mati. Penyimpanan jumlah pulsa pada EEPROM merupakan antisipasi

terhadap habisnya daya listrik selama pengukuran.

Page 2: Pemrograman Mikrokontroler Bagian II

SIMULASI February 10,

2011

Sistem Mikrokontroler – Instrumentasi Meteorologi 2011 Halaman 2

// Global enable interrupts #asm("sei") while (1) { pulsa=(i*256)+TCNT0; }; }

1. Program A

Program A ini merupakan program pertama untuk merealisasikan harapan di atas. Konsep selektor dapat digunakan pada bagian hardware. Pada bagian program, selektor tersebut akan mengatur nilai dari input digital µC. Input digital diatur supaya aktif ketika kondisi high, yaitu: saat selektor menghubungkan pin µC ke VCC. Digunakan tiga buah pin, yaitu: PD.4 (pulsa diam), PD.5 (pulsa turun) dan PD.6 (pulsa naik). Variabel pulsa akan berubah sesuai dengan perubahan nilai input digital. Jika PD.5=1, maka pulsa harus bernilai positif agar jumlah pulsa bertambah. Ketika PD.6=1, pulsa harus bernilai negatif agar jumlah pulsa berkurang. Dan saat PD.4=1, pulsa harus bernilai nol agar jumlah pulsa tetap. Karena setiap deklarasi variabel pada µC akan memberikan nilai 0 pada setiap awal eksekusi program, maka posisi selektor diarahkan agar PD.4=1 (posisi pulsa diam). Realisasi program A adalah pembuatan formula dan skrip untuk variabel jumlah pulsa, EEPROM dan fungsi selektor. Jumlah pulsa yang diwakili oleh variabel npulsa memiliki formula sebagai berikut:

npulsa = epulsa + pulsa; Semua variabel memiliki nilai awal nol. Variabel epulsa adalah jumlah pulsa sebelumnya yang tersimpan pada EEPROM. Variabel epulsa dan pulsa memiliki formula sebagai berikut:

epulsa = npulsa; pulsa = j*((i*256)+ TCNT0);

Variabel j akan bernilai nol pada awal program dan ketika PD.4=1 (posisi pulsa diam), bernilai 1 ketika PD.5=1 (posisi pulsa turun) dan bernilai -1 ketika PD.6=1 (posisi pulsa naik). 1. Skrip Program

1. eeprom int epulsa=0; 2. int i; 3. // Timer 0 overflow interrupt service routine 4. interrupt [TIM0_OVF] void timer0_ovf_isr(void) 5. { 6. i++; 7. }

Page 3: Pemrograman Mikrokontroler Bagian II

SIMULASI February 10,

2011

Sistem Mikrokontroler – Instrumentasi Meteorologi 2011 Halaman 3

8. void main(void) 9. { 10. int pulsa=0; 11. int j=0; 12. // Global enable interrupts 13. #asm("sei") 14. 15. while (1) 16. { 17. if (PIND.4= =1) 18. { 19. j=0; 20. } 21. else if (PIND.5= =1) 22. { 23. j=1; 24. } 25. else if (PIND.6= =1) 26. { 27. j=-1; 28. } 29. else 30. { 31. j=0; 32. }; 33. pulsa=j*((i*256)+TCNT0); 34. npulsa=epulsa+pulsa; 35. epulsa=npulsa 36. }; 37. }

2. Analisis Program Skrip program yang dibuat di atas merupakan skrip awal yang masih memiliki kemungkinan kesalahan. Setiap programmer mempunyai kemampuan yang berbeda, semakin berpengalaman semakin rumit skrip awal yang bisa dibuat. Analisis program ini bertujuan untuk menguji skrip dan memperbaikinya. Variabel utama dari program di atas adalah npulsa yang akan ditampilkan pada Layar LCD Alphanumerik. Nilai npulsa ditentukan oleh dua variabel, yaitu: epulsa dan pulsa. Variabel pulsa mempunyai tiga variasi nilai, yaitu: 0, 1 dan -1. Variasi nilai tersebut ditentukan oleh nilai variabel j. Nilai j ditentukan oleh nilai input digital dari PD.4, PD.5 atau PD.6. � Variabel j bernilai 1 selama PD.5 berada pada kondisi high.

Page 4: Pemrograman Mikrokontroler Bagian II

SIMULASI February 10,

2011

Sistem Mikrokontroler – Instrumentasi Meteorologi 2011 Halaman 4

� Variabel j bernilai -1 selama PD.6 berada pada kondisi high. � Variabel j bernilai 0, jika:

� PD.4 berada pada kondisi high. � PD.4 berada pada kondisi low. � PD.5 berada pada kondisi low. � PD.6 berada pada kondisi low.

Variabel pulsa pada program di atas merupakan penunjuk jarak pergeseran pulsa dari titik acuan, yaitu: titik sebelum ada perubahan nilai j. Register TCNT0 selalu bertambah nilainya setiap ada pulsa yang terdeteksi, sehingga program di atas perlu mereset nilai TCNT0 menjadi nol setiap ada perubahan nilai j. Sehingga skrip program di atas menjadi seperti gambar di samping. Variabel k merupakan variabel pendeteksi perubahan nilai dari variabel j. Variabel k memiliki nilai awal nol dan bertipe int. Hasil eksekusi program di samping menunjukkan bahwa: � Pulsa bernilai nol, jika PD.4, PD.5 dan PD.6

berada pada kondisi low (tidak ditekan/di-select)

� Pulsa bertambah jika PD.5 ditekan dan berkurang jika PD.6 ditekan. Nilai acuan adalah nilai awal pulsa, yaitu: =0;

� Jika PD.5 dan PD.6 sama-sama ditekan, maka yang tereksekusi adalah baris program yang teratas, yaitu: j=1;

Setelah menyelesaikan masalah pulsa, mari kita solusi untuk variabel npulsa. Selain ditentukan oleh pulsa, variabel npulsa bergantung pada nilai epulsa. Variabel epulsa adalah data npulsa yang tersimpan pada EEPROM. Variabel epulsa harus menyimpan nilai npulsa terbaru (update).Oleh karena skrip program dieksekusi terus-menerus dalam suatu looping, maka perlu diperhatikan bahwa epulsa hanya menyimpan jika ada perubahan nilai pada register TCNT0. Teknik yang digunakan dalam mengatur nilai variabel j dapat diadopsi di sini. Dengan menambahkan variabel n yang berperan sebagai variabel k pada skrip di atas, maka program akan mendapatkan tambahan skrip seperti di bawah ini:

Page 5: Pemrograman Mikrokontroler Bagian II

SIMULASI February 10,

2011

Sistem Mikrokontroler – Instrumentasi Meteorologi 2011 Halaman 5

3. Skema Simulasi Program 4. Hasil Simulasi Program 5. Hasil Eksekusi Program

2. Program B 3. Program C

KESIMPULAN � Simulasi masih belum diperlukan untuk menyelesaikan masalah pemrograman pulsa

dengan tiga mode, masalah dapat diselesaikan dengan menganalisis pada setiap tahap perkembangan logika programmer-nya.