Sabtu, 22 Juni 2013

fisika komputasi

KEDUDUKAN FISIKA KOMPUTASI 1. Pendahuluan Fisika Komputasi merupakan bidang yang mengkaji masalah fisika berdasarkan hasil tinjauan komputasi numerik. Sebagai perbandingan, fisika teori melandaskan bidang kajian fisika berdasarkan analisis matematis analitik sedangkan fisika eksperimen melandaskannya pada interpretasi hasil-hasil pengukuran beberapa besaran fisis yang terkait
. Dengan perkembangan teknologi (khususnya komputer) batas antara fisika komputasi dan fisika teori menjadi semakin tidak nampak seiring dengan semakin tidak nampaknya perbedaan hasil yang diperoleh secara komputasi dan analitik. Ini merupakan salah satu alasan yang menyebabkan mengapa fisikawan teori dapat berperan sebagai fisikawan komputasi dan sebaliknya (contoh Feynman, Kenneth G Wilson, Steven Koonin dan sebagainya). Ramalan yang secara akurat dapat diperoleh dari hasil komputasi terhadap beberapa masalah fisika menunjukkan bahwa fisika komputasi tidak lagi hanya sekedar alat visualisasi atau simulasi proses fisis agar nampak sederhana. Penghargaan Nobel Fisika untuk K.G. Wilson dalam teori fenomena kritis (critical phenomena) dan Nobel Kimia untuk Pope dalam pengembangan teori fungsional kerapatan untuk molekul menunjukkan peranan fisika komputasi yang semakin mantap sebagai bentuk pendekatan ketiga (selain fisika teori dan fisika eksperimen) dalam mempelajari fisika. Fisikawan eksperimen perlu memiliki ketrampilan penanganan peralatan agar pengukuran besaran fisis yang dilakukannya dapat memberikan hasil. Pemahaman mengenai karakteristik alat yang dihadapi sangat membantu dalam melacak sumber-sumber kesalahan yang mungkin timbul atau bahkan dapat membantu melokalisir permasalahan. Fisikiwan teori perlu memiliki ketrampilan matematis agar dapat memperoleh penyelesaian terhadap persamaan matematis yang dihadapi. Disinipun diperlukan pemahaman yang mendalam tentang watak-watak fungsi dan operasi matematis agar mampu melalukan trik atau teknik tertentu untuk meyederhanakan persoalan matematis yang rumit. Hal yang semacam juga diperlukan dalam fisika komputasi. Fisikawan komputasi perlu memiliki ketrampilan untuk mengubah persamaan matematis atau hukum fisika ke dalam bentuk diskrit yang sesuai. Dalam hal ini diperlukan bentuk diskrit karena segala informasi fisis mengenai sistem nantinya akan tersaji dalam bentuk angka-angka atau nilai-nilai numerik. Metode pengubahan persamaan matematis ke bentuk diskrit beserta berbagai metode penyelesaiannya ini biasa disebut metode numerik. Pemahaman mengenai metode numerik itu saja belum mencukupi karena hasil nilai-nilai numerik yang diharapkan baru akan muncul setelah diproses oleh komputer. Dalam hal ini diperlukan bahasa komputer atau piranti tertentu (biasanya perangkat lunak berbentuk paket siap pakai) sehingga pemakai dapat berkomunikasi dengan komputer dan memerintahkannya untuk melakukan proses komputasi seperti yang diharapkan. Pemahaman tentang watak-watak alur langkah komputasi (algoritma) serta watak komputer itu sendiri tentunya sangat membantu dalam melakukan trik dan manipulasi untuk optimasi proses komputasi. Bidang fisika komputasi yang memerlukan tidak hanya pemahaman fisika tetapi juga metode numerik dan bahasa pemrograman menimbulkan kesan seolah-olah sebagai pengetahuan yang memerlukan multi disiplin ilmu. Untuk masa sekarang (paling tidak di Indonesia) kesan ini memang tidak salah. Seseorang yang belajar fisika di perguruan tinggi tidak otomatis mendapatkan kuliah metode atau analisis numerik dan bahasa pemograman. Keduanya biasanya diberikan di program studi lain seperti matematika atau ilmu komputer. Hal ini lain jika dibandingkan dengan kuliah fisika matematika (diperlukan dalam bidang fisika teori) dan praktikum/eksperimen fisika (diperlukan dalam bidang fisika eksperimen) yang tersedia dalam program studi fisika. Di masa depan keadaan ini mungkin akan berubah oleh beberapa sebab. Pertama karena komputer sudah memasyarakat dan user friendly sehingga interaksi dengan komputer baik melalui bahasa pemrograman atau piranti lain sudah dikuasai oleh setiap pengguna sejak dini. Kedua, metode numerik sendiri tidak terpisah lagi dengan fisika karena begitu intensif digunakan dalam banyak masalah fisika atau juga karena metode numerik itu sendiri dikembangkan melalui analogi proses fisika. 2. Beberapa aspek dasar Dalam bagian (1) telah disinggung bahwa inti dari proses komputasi adalah mengubah persamaan matematika ke dalam bentuk diskritnya sedemikian hingga perilaku sistem dan penyelesaiannya dapat diwakili oleh nilai-nilai numerik yang terlibat. *) Pemahaman persamaan dan arti fisisnya. Bagi pemula prinsip ini kadang digunakan secara tidak hati-hati : asalkan persamaan matematika yang menggambarkan sisten fisika sudah diubah ke bentuk diskrit maka nilai hasil keluaran yang diperoleh akan diterima apa adanya sebagai penyelesaian sistem tersebut. Perlu ditekankan bahwa meskipun fisika komputasi terlibat dengan angka-angka numerik, tapi bukan nilai angka-angka itu sendiri yang penting. Yang lebih penting adalah apakah nilai-nilai tersebut secara benar dapat menggambarkan sistem fisika yang ditinjau. Dengan kata lain fisika komputasi adalah bidang yang berhadapan dengan masalah fisika (seperti halnya fisika teori dan fisika eksperimen) dan bukan sekedar masalah angka/matematika. Pemahaman ini memberikan konsekuensi pada beberapa aspek dasar yang perlu diperhatikan, yang pada akhirnya akan berguna untuk mendapatkan informasi yang benar terhadap sistem yang ditinjau dan bahkan berguna dari sisi efisiensi dan ketelitian proses komputasi. Aspek yang perlu diperhatikan antara lain seperti yang diuraikan sebagai berikut. *) Satuan universal Berbagai besaran fisis di dalam fisika dapat dikaitkan dengan satuannya masing-masing. Mengetahui satuan yang digunakan untuk besaran fisis tertentu akan dapat diketahui keadaan sistem bagi besaran tersebut. Ketika besaran panjang dinyatakan dalam satuan angstrom dan besaran tenaga dalam satuan eV maka kira-kira sistem yang ditinjau adalah sistem mikroskopis non-relativistik. Sebaliknya ketika satuan panjang dinyatakan dalam meter dan tenaga dalam Joule maka yang terlintas adalah sistem makroskopis. Untuk penyelesaian analitis, pengambilan satuan sesuai dengan sistem fisisnya tersebut tidak begitu berarti pada perolehan hasil akhir karena selalu dapat dilakukan penyederhanaan pada langkah perhitungannya. Namun dalam komputasi pengambilan satuan yang sesuai tersebut sangat mempengaruhi hasil mengingat yang terlibat dalam komputasi hanyalah nilai-nilai numerik dan bukan simbol besaran fisis. Karena keterbatasan presisi komputer, suatu nilai yang sebenarnya tidak nol seperti nilai massa elektron m = 9.1 x 10-31 kg dapat diperlakukan sebagai nilai nol. Hal ini sangat berbahaya apabila muncul sebagai nilai pembagi pada pertengahan proses komputasi yang berakibat pada gagalnya proses komputasi. Cara lain untuk menjamin agar nilai yang terlibat dalam komputasi tidak terlalu besar atau terlalu kecil sesuai sistem fisisnya adalah dengan menormalisir persamaan matematik yang terlibat dengan cara mendefinisikan satuan universal bagi sistem sedemikian hingga semua besaran fisis yang terlibat menjadi tidak bersatuan. Keuntungan cara ini adalah selain persamaan yang terlibat menjadi berbentuk sederhana juga dimunkinkannya diperoleh ketelitian proses komputasi yang tinggi mengingat angka numerik yang terlibat berorde besar sesuai batas ketelitian komputer. Sumber diambil dari : Dr. Pekik Nurwantoro 21 Agustus 2000 BAB II. GALAT (KESALAHAN ) DALAM KOMPUTASI Perlu disadari bahwa komputasi numerik adalah komputasi yang mengikuti suatu algoritma pendekatan (aproksimasi) untuk menyelesaikan suatu persoalan. Dengan demikian bidang komputasi numerik memiliki kemungkinan kesalahan/galat sebagaimana terdapat di dunia eksperimen fisika. Beberapa sumber galat pada komputasi numerik adalah: 1. Round-off error : kesalahan akibat pembuatan angka 2. Truncation error : kesalahan akibat pemotongan suku pada deret aproksimasi, misalnya suatu rumus rumit diganti dengan rumus yang lebih sederhana. 3. Range error : kesalahan yang terjadi karena nilai hasil komputasi melampaui batas angka yang diperbolehkan oleh komputer, misalnya sangat kecil atau sangat besar. 1) Galat Pembulatan Pembulatan bilangan sering dilakukan dalam bidang komputasi numerik, misalnya mengurangi cacah digit pada suatu nilai hampiran dengan membuang/mengabaikan beberapa digit terakhir. Aturan pembulatan yang sering diterapkan adalah sebagai berikut: *) Bila digit yang dibulatkan kurang dari 5, digit depannya tidak berubah. *) Bila digit yang dibulatkan lebih dari atau sama dengan 5, digit depannya ditambah 1 nilainya. Contoh : dibulatkan menjadi 3.35 3.344 dibulatkan menjadi 3.34 Pengulangan pembulatan tidak disarankan dalam komputasi numerik karena akan memperbesar galat. Sebagai contoh, 3.3446 jika dibulatkan tiga angka dibelakang koma menjadi 3.345 dan jika dibulatkan lagi dua angka dibelakang koma menjadi 3.35. Galat pembulatan pertama sebesar 0.0004, galat pembulatan kedua sebesar 0.0054. Terlihat galat semakin besar sehingga pembulatan hanya boleh dilakkukan sekali. Kesalahan yang timbul akibat pembulatan pada digit ke-N di belakang koma, nilainya selalu  10-N / 2. Kesalahan pembulatan bisa terjadi karena komputasi terkait dengan angka-angka yang nilainya berbeda jauh, misalnya : hasil seharusnya 1, tetapi oleh komputer bisa jadi hasilnya   karena pembilang ataupun penyebut nilainya kecil sekali sehingga dianggap nol. 2) Galat Pemotongan Galat pemotongan terjadi ketika suatu rumus komputasi disederhanakan. Biasanya suatu rumus rumit diganti dengan deret Taylor, lalu deret dipotong hanya sampai pada suku tertentu, suku selanjutnya diabaikan. Contoh : Misal x=1.5, nilai eksak cos (1.5) = 0.070737 sedangkan jika dihitung sampai suku ke-4 saja dihasilkan nilai komputasi cos(1.5) = 1 - (1.5)2/2! + (1.5)4/4! - (1.5)6/6! = 0.070187. Dengan demikian terdapat galat pemotongan sebesar 0.000550. 3) Galat batasan angka Setiap komputer memiliki keterbatasan dalam jangkauan representasi angka, misalnya angka presisi-tunggal (single precision) sekitar 10+37 dan presisi ganda (double precision) sekitar 10+308 . Melampaui batas jangkauan presisi tunggal dalam komputasi fisis dapat terjadi dengan mudah, misalnya dalam komputasi jari-jari atom Bohr, sebagai berikut: Walaupun hasil akhir tidak melampui batas single precision, tetapi pembilang dan penyebut sudah jelas melampaui sehingga komputasi bisa mengalami round-off dan hasil akhirnya tidak tepat. Masalah serupa juga dijumpai ketika dilakukan komputasi pada nilai yang sangat besar, misalnya komputasi faktorial : n! = n(n-1)(n-2)(n-3)…1 ketika n besar, misalnya n=200, aka nilai 200! Dapat melampaui besaran presisi ganda (double precision) . Jalan keluar untuk mengatasi masalah ini adalah dengan mencari rumus pendekatan. Sebagai contoh, faktorial dengan n besar dapat diganti dengan komputasi logaritmik, di mana : log(n!) = log (n) + log (n-1) + log (n-2) + log (n-3) + … Referensi : Suarga, 2007, Fisika Komputasi solusi problema fisika dengan MATLAB, Andi Yogyakarta Sahid, 2005, Pengantar Komputasi numerik, Andi Yogyakarta. BAB III. TURUNAN NUMERIK Pada bab ini akan dijelaskan metode numerik untuk menaksir nilai turunan suatu fungsi. Suatu fungsi f, baik diketahui rumusnya secara eksplisit maupun dalam bentuk data titik-titik yang dilalui kurvanya, dapat dihampiri dengan sebuah fungsi lain yang lebih sederhana. Suatu polinomial p merupakan pilihan yang paling mudah sebagai hampiran suatu fungsi f karena setiap polinomial dapat dengan mudah diturunkan. Turunan polinomial p, yakni p’(x) digunakan sebagai hampiran untuk f’(x) untuk sembarang nilai x. Secara geometris hal ini ekivalen dengan menghampiri gradien garis singgung pada kurva f di x dengan gradien garis singgung pada kurva p di x. Rumus-rumus (metode-metode) turunan numerik bermanfaat di dalam pengembanagn algoritma untuk menyelesaikan masalah nilai awal pada persamaan diferensial biasa dan parsial. 1. Turunan tingkat satu *) Rumus selisih maju dua titik (beda maju) Misalkan f(x) adalah sebuah fungsi riil satu variabel, deret Taylor untuk f(x) disekitar x = x0 adalah: (1) dengan c adalah sebuah bilangan antara x dan x0. Misalkan x = x0+h, dengan h>0, maka persamaan (1) dapat diltulis ulang sebagai: untuk suatu c  [x0, x0+h] (2) Atau (3) Jika h mengecil, akan memberi taksiran untuk nilai f’(x0). Ini berarti : (4) disebut dengan rumus selisih maju dua titik (beda maju ) dengan galat sebesar O(h). Gambar 1 Perhatikan ruas kanan persamaan (4) adalah gradien tali busur yang melalui titik-titik (x0, f(x0)) dan (x0+h, f(x0+h)) sedangkan f’(x0) merupakan gradien garis singgung di titik (x0, f(x0)). Jadi gradien garis busur merupakan hampiran gradien garis singgung untuk nilai h yang cukup kecil sebagaimana ditunjukkan pada Gambar 1. Dengan simulasi dapat ditunjukkan bahwa gradien garis-garis bususr akan semakin menyamai gradien garis singgung jika h semakin kecil dan akhirnya gradien kedua garis sama apabila h 0. Agar lebih jelas lagi, perhatikan contoh berikut. Carilah turunan fungsi f(x)=ln x di x =1. Penyelesaian : Tabel berikut memberikan nilai-nilai turuan untuk beberapa nilai pilihan h. H ln(1+h) f’(1) 0.1 0.01 0.001 0.0001 0.00001 0.000001 0.0953101798043 0.00995033085317 0.000999500333083 0.0000999950000333 0.0000099999500004 0.0000009999994999 0.9531017980432 0.995033085317 0. 999500333083 0. 999950000333 0. 99999500004 0. 9999994999 Dari tabel terlihat bahwa semakin kecil nilai h yang digunakan (h mendekati nol), hampiran semakin mendekati nilai turunan yang sesungguhnya, yaitu = 1. 2. Rumus Selisih mundur dua titik (beda mundur) Rumus selisih maju menggunakan nilai fungsi di x0 dan x0 +h. Rumus serupa untuk mencari f’(x0) juga dapat diperoleh dengan menggunakan nilai-nilai fungsi di x0 dan x0-h, yakni : (5) disebut rumus selisih mundur dua titik dengan galat sebesar O(h). Visualisi selisih mundur dua titik untuk mendapatkan hampiran turunan fungsi di suatu titik diilustrasikan pada Gambar 2. Gambar2 3. Rumus Selisish pusat dua titik (beda pusat) Dari rumus selisih maju dua titik, diketahui : dan dari rumus selisih mundur dua titik, diketahui : Jika keduanya dijumlahkan diperoleh : Jadi, (6) disebut rumus selisih pusat dua titik dengan galat (O) h2 . Gambar3 Rumus selisih pusat dua titik menggunakan fakta bahwa gradien garis busur yang melalui titik-titik (x0-h, f(x0-h)) dan (x0+h, f(x0+h)) merupakan hampiran gradien garis singgung di x0 sebagaimana ditunjukkan pada Gambar 3. Dengan simulasi dapat ditunjukkan bahwa gradien garis busur semakin mendekati gradien garis singgung jika nilai h semakin kecil menuju nol. Rumus beda pusat memiliki galat yang lebih kecil dibandingkan rumus beda maju dan beda mundur. Ini dapat dibuktikan dengan contoh berikut : Contoh : Misalkan . Hitunglah hampiran f’(1) dengan menggunakan rumus beda pusat dan beda maju untuk nilai-nilai h =0.2 , 0.02 , 0.002, 0.0002. Penyelesaian : Untuk h=0.2 dengan menggunakan rumus beda maju diperoleh: dengan menggunakan rumus beda pusat diperoleh: Diketahui secara analitik , 2.71828182845905. Tabel berikut memuat hasil simulasi pencarian turunan dengan beda maju dan beda pusat untuk berbagai nilai h. h Beda maju Galat beda maju Beda pusat Galat beda pusat 0.2 0.02 0.002 0.0002 3.009175471388 2.745646775263 2.721001923382 2.718553674765 0.290893642928 0.027364946803 0.002720094922 0.000271846306 2.73643998561 2.71846305087 2.71828364064 2.71828184658 0.018158157151 0.000181222412 0.000001812188 0.000000018121 Dari tabel di atas tampak jelas bahwa galat metode beda pusat memberikan hasil yang lebih baik. BAB IV. PENCARIAN AKAR-AKAR FUNGSI NON LINIER, f(x) = 0 Banyak masalah-masalah fisika yang melibatkan fungsi/persamaan kontinu yang tidak linier. Persamaan non linier adalah persamaan di mana variabel di dalamnya pada umumnya tidak linier, misalnya dalam bentuk polinomial atau dalam bentuk perkalian atau pembagian beberapa variabel. Pada persamaan non linier dengan satu variabel, tujuan analisis pencarian akar –akar adalah mencari nilai variabel, mencari nilai x agar f(x)=0. Pada sistem persamaan non linier akan dijumpai lebih dari satu variabel yang terkait secara non linier dalam beberapa persamaan, kemudian akan dicari nilai dari masing-masing variabel yang membuat semua persamaan non linier bernilai nol. Terdapat banyak cara untuk menyelesaikan persamaan non linier seperti metode bagi dua (bisection), pisisi palsu (regula false) dan Newton Raphson. Pada bab ini akan dibahas metode Bagi dua dan metode Newton Raphson, karena dua metode ini merupakan metode fundamenal pada kasus pencarian akar-akar fungsi. non linier. *) Metode Bagi dua (bisection) Suatu fungsi kontinu pada interval tertutup [a b] sedemikian hingga f(a) dan f(b) berlawanan tanda, maka terdapat suatu akar persamaan f(x) = 0 pada interval [a b]. Akan dicari akar r  (a,b) yang memenuhi f(r) = 0. Dari fakta ini muncullah metode pengapitan akar, berusaha mendapatkan interval kecil yang memuat suatu akar. Salah satu metode pengapitan akar adalah metode bagi dua. Metode bagi dua menggunakan konsep : Interval yang memuat akar dibagi menjadi dua subinterval sama panjang, kemudian dipilih subinterval mana yang memuat akar, dan selanjutnya sub interval ini dibagi dua lagi. Demikian seterusnya sampai diperoleh sebuah subinterval yang memuat akar yang dicari dan interval ini memiliki lebar tidak lebih dari nilai tertentu (sangat kecil mendekati nol). ALGORITMA BAGI DUA 1. Pilih dua titik a dan b sehingga f(a)*f(b)<0 2. Tetapkan toleransi error TOL dan maximum langkah iterasi N. 3. for i =1 sampaidengan N d = a+ (b-a)/2 cetak hasil (‘akar = “, d) if (f(p)=0) or ((b-a)/2 TOL then a = d else b=d 4. selesai *) Metode Newton Raphson Metode diperoleh dari ekspansi deret Taylor di sekitar x. Andaikan pada awalnya diberikan nilai x1 sehingga terjadi simpangan h = (x1 - x) dari akar yang dicari, nilai x dapat ditulis sebagai : x =x1-h. Ekspansi deret Taylor di sekitar x memberikan : karena nilai fungsi di titik akar x adalah f(x)=0, maka: atau dengan O(h2) adalah galat komputasi. Karena h = x1-x maka jadi . Jika ditulis dalam bentuk iteratifnya : Disebut dengan metode newton rapson untuk mencari akar-akar persamaan non-linier. Jika dipenuhi (telah konvergen, ) maka jelaslah bahwa akar x telah diperoleh sebesar xi+1. ALGORITMA NEWTON RAPHSON 1. Tetapkan nilai awal x0 2. Tetapkan besar toleransi error TOL dan maximum langkah iterasi N. 3. for i =1: N a. hitung f(x0) dan f’(x0) b. hitung delta = f(x0) / f’(x0) c. hitung x = x0 - delta d. if ( delta < TOL) tulis (‘akar yang di cari =’, x) break end if else x0=x e. if (i >= maximum langkah) tulis (‘gagal mencari akar’) end if Keunggulan metode Newton Raphson dibandingkan metode lain : Hanya dibutuhkan satu nilai coba awal, sedangkan metode bagi dua membutuhkan dua nilai coba yang harus mengapit akar yang dicari. Kelemahan : metode Newton Raphson membutuhkan informasi turunan pertama fungsi f’(x). Hal ini akan menjadi masalah jika fungsi terlalu kompleks sehingga turunan pertama fungsi tersebut sulit dicari. Contoh kasus: Sebuah bola pejal homogen terbuat dari suatu bahan dengan kerapatan  seragam. Bola tersebut terbenam sebagian dalam air setinggi d. Berdasarkan hukum Archimedes : berat bola sebanding dengan gaya angkat Fa : Massa bola : Hukum Archimedes : Volume bola yang terbenam di air setinggi d = Va, dapat dicari dengan kaedah volume benda putar (ingat kalkulus integral), sedemikian sehingga : dimana ρ = ρb ; Nilai d dapat dicari secara analitik dengan konsep pencarian akar-akar fungsi f(d) =0 ; Masalah ini dapat juga diselesaikan secara komputasi . Nilai d dapat dicari dengan konsep pencarian akar-akar fungsi f(d) =0 dengan berbagai metode, diantaranya adalah metode bagi dua. Jika diandaikan ρa = 1; ρb = ρ = 0.638; r =10 cm, d = …? Untuk mendapatkan nilai coba yang tepat, perlu dilihat bentuk fungsi nonlinier dari masalah ini. Hal ini dapat dibantu dengan melukis fungsi nonliniernya yakni : dengan memasukkan ρa = 1; ρb = ρ = 0.638; r =10 cm, diketahui bentuk fungsi matematisnya seperti tampak pada gambar (tampak bahwa nilai d terletak di sekitar 10 < d < 20). *) Berikut ini adalah metode bagi dua untuk menyelesaikan masalah ini ( mendapatkan nilai d) dengan bahasa MATLAB. Nilai coba pengapit akar adalah [a b] = [10 15]. clc;clear; r=10; rho=0.638; % nilai coba [a b] a=10; b=15; % batas toleransi tol=0.00001; % banyaknya langkah N=50; hasil=[]; % kontrol loop for i=1:N d=a+(b-a)/2; % metode bagi dua fd=pi*(d^3-3*d^2*r+4*r^3*rho)/3; % substitusi nilai d ke persamaan nonlinier fa=pi*(a^3-3*a^2*r+4*r^3*rho)/3; % substitusi nilai a(batas kiri) ke persamaan nonlinier hasil=[hasil;i a b d fd]; if (fd==0)||((b-a)=maxstep fprintf('gagal mencapai akar hingga iterasi ke-%g', i); disp('gagal dalam %g langkah', maxstep); end -------------------------------------------------------------------------------------------------------------------- Definisi fungsi ditulis dalam M-File terpisah bernama FNEWTRAPHSON(x) -------------------------------------------------------------------------------------------------------------------- function [fx,f1x]=FNEWTRAPHSON(x,r,rho) % definisi fungsi non-linier dan turunan pertamanya r=10; rho=0.638; fx=pi*(x^3-3*x^2*r+4*r^3*rho)/3; f1x=pi*(3*x^2-6*x*r)/3; return ------------------------------------------------------------------------------------------------------------------- Hasil running program newton_raphson.m taksiran awal x0=5 step x0 x delta 1 5.000000 13.564444 -8.564444 2 13.564444 11.761945 1.802499 3 11.761945 11.861318 -0.099373 4 11.861318 11.861502 -0.000184 5 11.861502 11.861502 -0.000000 akar x= 11.8615 pada iterasi ke-5 Berikut adalah penyelesaian masalah di atas dengan menggunakan bahasa Java. import java.io.*; public class akar { public static final double PHI=3.14; public static void main(String arg[])throws IOException{ int i,N; double x0,x,dx,fx,ftx,tol,tol2,r,rho,delta,delta2; // inisialisasi x0=0.0; // inputkan nilai coba BufferedReader inputan = new BufferedReader(new InputStreamReader(System.in)); inputan = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.print("masukkan nilai coba x0 ="); x0=Double.parseDouble(inputan.readLine());} catch(Exception e){} // batas iterasi dan toleransi yang diinginkan N=100; tol=0.00001; tol2=tol*tol; r=10.0; rho=0.638; dx=0.01; // pencarian akar dimulai dengan loop WHILE i=0; while (iN){ System.out.println("gagal mencari nilai akar "); } } } public static float abs(float delta){ return delta; } public static double fgs_x(double x, double r,double rho) { return (PHI*(x*x*x-3*x*x*r+4*r*r*r*rho)/3); // definisi fungsi } /* turunan fungsi diperoleh dari turunan numerik */ public static double fgs_dpn(double x, double r,double rho,double dx) { return (PHI*((x+dx)*(x+dx)*(x+dx)-3*(x+dx)*(x+dx)*r+4*r*r*r*rho)/3); } public static double fgs_blk(double x, double r,double rho,double dx) { return (PHI*((x-dx)*(x-dx)*(x-dx)-3*(x-dx)*(x-dx)*r+4*r*r*r*rho)/3); } } =========================================================== Hasil running program newtonrapson.java Kesimpulan : Dari dua metode yang telah digunakan, terbukti bahwa metode Newton Raphson memberikan hasil yang lebih cepat dibanding metode bagi dua. BAB V. INTEGRASI NUMERIK (satu dimensi) Integrasi numerik disebut juga sebagai quadrature merupakan alat utama bagi para insinyur dan saintis untuk mendapatkan perkiraan jawaban suatu masalah fisis yang terkait dengan integral dan secara analitik sangat sulit diselesaikan. Quadrature satu dimensi pada prinsipnya memiliki konsep yang sederhana, yaitu bagaimana mengevaluasi integral suatu fungsi: (1) jika dipandang dari sudut persamaan diferensial aka mencari nilai integral I adalah sama dengan menyelesaikan persamaan diferensial dengan syarat batas y(a) = 0. Metode yang umum digunakan dalam menghitung integral numerik adalah Newton-Cotes Formula, dimana batas antara a dan b dibagi ke dalam bagian yang lebih kecil (lebar langkah h) sedemikian rupa sehingga notasi integral dapat diganti dengan notasi penjumlahan(sigma), yaitu : untuk loop tertutup untuk loop terbuka dimana fungsi f(x) adalah fungsi yang terintegralkan (kontinu) seperti Gambar berikut. Ada dua cara dasar yang populer pada formula Newton-Cotes, yaitu Trapezoida-rule dan Simpson rule. *) Aturan Trapezoid Sesuai dengan namanya, integrasi numerik dengan aturan trapesium menggunakan cara menjumlahkan trapesium-trapesium kecil sebanyak N buah. Hampiran penyelesaian integrasi numerik aturan trapesium dilakukan dengan langkah-langkah berikut: 1. Partisi interval [a, b] menjadi N subinterval berbentuk [xi, xi+1] sedemikian hingga . 2. Buat trapesium [xi, xi+1] dengan sisi-sisi yang sejajar f(xi), dan f(xi+1). Misalkan lebar subinterval adalah xi = xi+1 - xi. Maka luas trapesium yang terbentuk adalah (f(xi+ f(xi+1)) xi/2. 3. Jumlah luas trapesium-trapesium tersebut merupakan hampiran integral yang diinginkan, yakni: (2) Jika subinterval tersebut memiliki lebar sama, misalkan h, perhitungan di atas akan lebih mudah, dapt ditulis ulang sebagai: (3) dengan h =(b-a)/n, x0 = a, xn = b, xi+1 = xi +h , fi =f(xi) *) Aturan Simpson Selain metode trapesoid, metode fundamental pada integrasi numerik adalah menggunakan aturan Simpson. Aturan Simpson memiliki formula: (4) dengan n bilangan genap, h =(b-a)/n, x0 = a, xn = b, xi+1 = xi +h , fi =f(xi) dan 0  i  n-1. Contoh: Carilah nilai integral berikut : Secara analitik hasilnya adalah : Berikut ini diberikan dua implementasi atruran trapezoid dan aturan Simpson dengan bahasa MATLAB. --------------------------------------------------------------------------------------------------------------------- % trapesium.m % untuk mencari nilai integral clc;clear;help trapesium; a=1; h=0.25; b=9; n=(b-a)/h; s=0; for i=1:n-1 x=a+i*h; s=s+f(x); end I_trap=h*(f(a)+f(b))/2+h*s --------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------- % simpson.m % untuk mencari nilai integral clc;clear;help simpson1; a=1; N=100; b=9; h=(b-a)/(2*N); s1=0; s2=0; for i=1:N x=a+h*(2*i-1); s1=s1+f(x); end for i=1:N-1 x=a+h*2*i; s2=s2+f(x); end I_simp=h*(f(a)+f(b)+4*s1+2*s2)/3 --------------------------------------------------------------------------------------------------------------------- Fungsi f(x) ditulis terpisah, yakni di Mfile f.m sebagai berikut: ------------------------------------------------------------------ function y = f(x) y=1/x; ------------------------------------------------------------------ Jika file trapesium.m dikompile hasilnya : trapesium.m untuk mencari nilai integral I_trap = 2.1972 Sedangkan file simpson.m dikompile hasilnya : simpson.m untuk mencari nilai integral I_simp = 2.1972 Berikut ini contoh penyelesaian metode trapesium dan simpson dengan bahasa pemrograman Java. ================================================================ /*INTEGRASI NUMERIK DENGAN METODE TRAPESIUM */ public class trapesium { public static void main(String args[]){ int i,N; float a,h,b,s,x,fx,fa,fb,Trpsm; N=100; // banyaknya segmen integrasi a=1; // batas bawah integrasi b=9; // batas atas integrasi h=(b-a)/N; // lebar segmen s=0; // inisiasi penjumlahan fa=fs_x(a); fb=fs_x(b); // nilai fungsi pada batas // hitung nilai fungsi tiap segmen for(i=1;i<=N-1;i++){ x=a+i*h; fx=fs_x(x); // panggil nama fungsi s=s+fx; } Trpsm=h*(fa+fb)/2+s*h; // RUMUS TRAPESIUM System.out.println(" hasil integral f(x) dengan metode trapesium = "+Trpsm); } // definisi fungsi public static float fs_x(float x){ return 1/x; // definisi fungsi yg hendak diintegralkan } } ================================================================ Hasil running program trapesium.java run: hasil integral f(x) dengan metode trapesium = 2.197751 BUILD SUCCESSFUL (total time: 0 seconds) ================================================================ /*INTEGRASI NUMERIK DENGAN METODE SIMPSON */ public class simpson { public static void main(String arg[]){ int i,N; float a,h,b,s,s1,s2,x,fx,fa,fb,spm; N=100; // banyaknya segmen integrasi a=1; // batas bawah integrasi b=9; // batas atas integrasi h=(b-a)/(2*N); // lebar segmen s1=0; // inisiasi penjumlahan bagian ganjil s2=0; // inisiasi penjumlahan bagian genap fa=fs_x(a); fb=fs_x(b); // nilai fungsi batas bawah dan batas atas /* hitung nilai-nilai bagian ganjil */ for(i=1;i<=N;i++){ x=a+h*(2*i-1); fx=fs_x(x); s1=s1+fx; } /* hitung nilai-nilai bagian genap */ for (i=1;i<=N-1;i++){ x=a+h*2*i; fx=fs_x(x); s2=s2+fx; } spm=h*(fa+fb+4*s1+2*s2)/3; // rumus simpson System.out.println(" hasil integral 3x dengan metode simpson = "+spm); } /* definisi fungsi */ public static float fs_x(float x){ return 1/x; } ================================================================ Hasil running program simpson.java run: hasil integral 3x dengan metode simpson = 2.1972246 BUILD SUCCESSFUL (total time: 1 second) BAB VI. PERSAMAAN DIFERENSIAL BIASA Sebagian besar masalah fisis (fisika) menyangkut kajian suatu sistem selama periode waktu tertentu. Hal ini berarti masalah yang ditinjau menggunakan bentuk persamaan diferensial dengan waktu sebagai variabel bebas. Bagi orang matematika, kajian persamaan diferensial merupakan salah satu bagian tercantik, karena kajian ini dapat diaplikasikan di fisika, kimia, teknik, biologi dan ekonomi. Sebagai contohnya: masalah-masalah sistem pegas, rangkaian induktansi resistor-kapasitor, pemuaian lempeng logam , reaksi kimia, ayunan pendulum, gerak putar massa mengitari benda lain, pertumbuhan bakteri, dan lain-lain dapat dimodelkan dalam bentuk persamaan diferensial. Pada bab ini akan dibahas beberapa meto de fundamental untuk menyelesaikan persamaan diferensial biasa (Ordinary differential equations/ ODE) yaitu metode Euler dan metode Runge Kutta 4. Dua metode tersebut nantinya akan diterapkan pada contoh penyelesaikan masalah gerak jatuh bebas yang menyertakan gaya hambatan udara. Suatu masalah yang terkait dengan persamaan diferensial orde satu dapat ditulis sebagai: (1) dimana f(x,y) adalah fungsi yang diberikan oleh masalah yang bersangkutan. Selanjutnya hendak dicari bentuk eksplisit dari y(x). Untuk mendapatkan bentuk ekslisit y(x) dibutuhkan informasi awal y(0) sehingga kajian ini juga disebut sebagai masalah syarat awal. Dari informasi awal y(0) dan f(x,y) selanjutnya dapat dicari nilai y(x) secara komputasi dengan metode Euler dan metode Runge-Kutta4. *) Metode Euler Konsep metode Euler berasal dari pemotongan deret Taylor hingga suku orde pertama : (2) Jika syarat awal f(x) diketahui dan turunan pertama fungsi f’(x) juga diketahui maka nilai hampiran f(x+x) berikutnya dapat dicari. Dengan metode Euler, persamaan (2) dapat dirumuskan sebagai: i = 0,1,2,... (3) dengan , dan lebar langkah . Dari informasi awal y(0) dan f(x,y) selanjutnya dapat dicari nilai y(x). Ini berarti nilai y(x) sudah berhasil diperoleh untuk sebarang nilai x yang kita tentukan. Metode Euler disebut juga metode satu langkah karena informasi satu langkah sebelumnya digunakan untuk menghitung hampiran sekarang. Dilihat dari pemotongan deret Taylor tampak bahwa galat metode Euler sebesar O(h). *) Metode Rungge Kutta4 Oleh karena metode Euler memiliki galat sebesar O(h) maka diperlukan metode lain yang memberikan galat yang lebih baik. Pada bagian ini akan ditunjukkan metode Rungge Kutta4. Namun sebelumnya akan ditinjau sekilas metode RungeKutta2 (metode Heun). Ide metode Runge Kutta adalah menghitung nilai f(x,y) pada beberapa titik di dekat kurva penyelesaian yang dipilih dengan metode tertentu di dalam interval (xi , xi +h) dan mengkombinasikann nilai-nilai ini sedemikian sehingga diperoleh keakuratan yang lebih baik pada hampiran berikutnya, yi+1. Pada metode RungeKutta2 nilai yi+1 dihitung dengan langkah : (4) untuk i = 0, 1, 2,3,...dan syarat awal (x0, y0) diketahui. Jika metode RungeKutta2 menggunakan dua langkah perhitungan, maka metode RungeKutta4 menggunakan 4langkah perhitungan untuk memperoleh hampiran nilai selanjutnya, yaitu : (5) *) Contoh kasus fisika yang dapat diselesaikan dengan metode Euler dan RunggeKutta4: Pada mata kuliah mekanika, telah ditinjau kasus gerak jatuh bebas yang menyertakan pengaruh gaya hambatan udara. Penyelesaian analitik yang telah ada nantinya dapat digunakan sebagai pembanding penyelesaian secara komputasi. Dua metode komputasi (metode Euler dan metode Rungge Kutta4) akan dipakai untuk mencari solusi masalah tersebut. Pada kondisi riil, suatu partikel bermassa m yang jatuh bebas di udara akan mengalami gaya tarik gravitasi sehinga bergerak dipercepat menuju tanah. Jika hambatan udara cukup besar (misalnya pada kasus penerjun payung) maka pada suatu saat kecepatan partikel tersebut akan konstan (gaya hambat udara seimbang dengan gaya berat). Pada kasus ini gaya hambat tersebut biasanya dinyatakan dengan suatu fungsi linier yang gayut kecepatan f(v) sebagai berikut : F = mg – f(v) (6) F = mg – bv (7) Dimana b adalah koefisien hambatan. Dari persamaan (7) diperoleh : (8) (9) Persamaan diferensial orde dua tersebut (9) dapat dipecah menjadi dua persamaan differensial orde satu dalam bentuk : (10) (11) Dengan syarat awal v = 0 saat t = 0, penyelesaian analitik untuk kecepatan v dari persamaan (10) di atas, adalah : (12) Penyelesaian analitik untuk kasus ini nanti akan digunakan sebagai pembanding metode komputasi (Euler dan Rungke kutta4). Pada kasus ini hanya akan dicari penyelesaian kecepatan gerak saja, jadi hanya akan digunakan persamaan (10), sementara penyelesaian posisi gerak (persamaan (11)) tidak disinggung. a) Metode Euler : Persamaan (10) dapat dinyatakan sebagai : dimana g dan c = b/m adalah suatu konstanta. Menggunakan metode Euler, Dengan syarat awal v(0) = 0 ; ukuran langkah h = ti+1 – ti; dimana n=0,1,2,…,N akan dicari vi = v(ti). Misal: ingin dicari kecepatan gerak selama 5 sekon dengan jumlah langkah komputasi N=20. Jika massa benda, m =1 kg, konstanta gaya hambat, b= 1, percepatan gravitasi bumi, g = 9,8 m/s2. Dengan diketahi syarat awal v(0) = 0, implementasi kasus ini dengan MATLAB ditulis sebagai berikut : ----------------------------------------------------------------------------------------------------------- %komp_uin.m clc; clear; help komp_uin; % input m=1; b=1; g=9.8; gamma=b/m; v0=0; N=20; t0=0; tn=5; h=(tn-t0)/N; for i=1:N t(i)=t0; v(i)=v0; t(i+1)=t(i)+h; v(i+1)=v(i)+h*(g-gamma*v(i)); %set menjadi nilai awal t0=t(i+1); v0=v(i+1); %analitik v_anltk(i+1)=(m/b)*g*(1-exp(-gamma*t(i+1))); end disp('[t v v_anltk]') disp([t' v' v_anltk']) plot(t,v,'o',t,v_anltk,'*') xlabel('waktu t');ylabel('kecepatan'); title('kecepatan gerak jatuh bebas dengan gaya hambat') ------------------------------------------------------------------------ Hasil running program : [t v v_anltk] 0 0 0 0.2500 2.4500 2.1678 0.5000 4.2875 3.8560 0.7500 5.6656 5.1708 1.0000 6.6992 6.1948 1.2500 7.4744 6.9923 1.5000 8.0558 7.6133 1.7500 8.4919 8.0970 2.0000 8.8189 8.4737 2.2500 9.0642 8.7671 2.5000 9.2481 8.9956 2.7500 9.3861 9.1735 3.0000 9.4896 9.3121 3.2500 9.5672 9.4200 3.5000 9.6254 9.5041 3.7500 9.6690 9.5695 4.0000 9.7018 9.6205 4.2500 9.7263 9.6602 4.5000 9.7448 9.6911 4.7500 9.7586 9.7152 5.0000 9.7689 9.7340 b) Metode Rungge Kutta4 Dari persamaan (10) diketahui turunan orde pertama : dimana g dan c = b/m adalah suatu konstanta. Metode Runge-Kutta4 untuk mencai nilai kecepatan digunakan langkah-langkah: v(i)=0; %komp_rk4.m clc; clear; help komp_uin_rk4; % input m=1; b=1; g=9.8; gamma=b/m; v0=0; N=20; t0=0; tn=5; h=(tn-t0)/N; for i=1:N t(i)=t0; v(i)=v0; % kecepatan t(i+1)=t(i)+h; v_1(i)=g-gamma*v(i); v_2(i)=g-gamma*(v(i)+(h/2)*v_1(i)); v_3(i)=g-gamma*(v(i)+(h/2)*v_2(i)); v_4(i)=g-gamma*(v(i)+h*v_3(i)); v(i+1)=v(i)+(h/6)*(v_1(i)+2*v_2(i)+2*v_3(i)+v_4(i)); %set menjadi nilai awal t0=t(i+1); v0=v(i+1); %analitik v_anltk(i+1)=(m/b)*g*(1-exp(-gamma*t(i+1))); end disp('[t v v_anltk]') disp([t' v' v_anltk']) plot(t,v,'o',t,v_anltk,'*') xlabel('waktu t');ylabel('kecepatan'); title('kecepatan gerak jatuh bebas dengan gaya hambat') Hasil running program : komp_rk4.m [t v v_anltk] 0 0 0 0.2500 2.1677 2.1678 0.5000 3.8559 3.8560 0.7500 5.1707 5.1708 1.0000 6.1946 6.1948 1.2500 6.9921 6.9923 1.5000 7.6132 7.6133 1.7500 8.0969 8.0970 2.0000 8.4736 8.4737 2.2500 8.7670 8.7671 2.5000 8.9955 8.9956 2.7500 9.1734 9.1735 3.0000 9.3120 9.3121 3.2500 9.4200 9.4200 3.5000 9.5040 9.5041 3.7500 9.5695 9.5695 4.0000 9.6205 9.6205 4.2500 9.6602 9.6602 4.5000 9.6911 9.6911 4.7500 9.7152 9.7152 5.0000 9.7340 9.7340 Dari dua metode di atas, tampak bahwa metode Runge-Kutta4 hasilnya jauh lebih baik dan sesuai dengan hasil analitik (paling tidak untuk ketelitian empat angka di belakang koma).

Jumat, 25 Mei 2012

mikrokomputer dan antar muka

DAFTAR ISI


BAB I.  Dasar Antarmuka................................................................................. 1
BAB II. Pengkondisi Sinyal............................................................................... 5
BAB III. ADC DAC........................................................................................... 10
BAB IV. Dasar Mikrokontroler......................................................................... 15mikrokomputer dan antar muka
BAB V. Teknik Perantaraan Mikrokontroler LED............................................. 21
BAB VI. Antar Muka Sensor dengan Mikrokontroler........................................ 23
BAB VII. Dasar I-O Komputer.......................................................................... 25
BAB VIII. Jenis Instruksi dan Bahasa Pemograman Delphi............................... 30
BAB IX. Dasar Komunikasi Port Paralel........................................................... 38
BAB X. Antar Muka dengan Port  Paralel.......................................................... 41
BAB XI. Antar Muka ADC dengan Paralel Port................................................ 45
BAB XII. Antar Muka ADC dengan DAC Paralel Port...................................... 49
BAB XIII. Antar Muka LED dengan Serial........................................................ 53
BAB XIV. Antarmuka Terapan......................................................................... 59

Modul 1          : Dasar antarmuka
Tujuan           :
Menjelaskan prinsip dasar antarmuka sensor/tranduser
Materi             :
Antarmuka (interface) dapat diartikan sebuah bagian atau sirkuit di beberapa subsistem yang mengirim atau menerima sinyal ke atau dari subsistem lainnya. Secara sederhana bisa digambarkan dengan blok diagram berikut : 




Gambar 1. Blok diagram interface
Sensor merespon besaran fisik yang ada di lingkungan dan kemudian mengubahnya dalam bentuk besaran elektrik (arus atau tegangan).  Keluaran dari sensor tersebut tidak bisa langsung digunakan untuk mengendalikan sistem yang lain (beban) mengingat besar sinyal yang dihasilkan masih lemah, bentuk sinyal yang berbeda serta terkadang masih mengandung gangguan-gangguan (noise) yang tidak diinginkan. Oleh karena itu di perlukan bagian antarmuka yang menjembatani (menyesuaian) antara keluaran sensor/tranduser dengan perangkat beban.
Sebagai contoh, sebuah ruangan dilengkapi dengan alat pengendali suhu dengan beban berupa AC dan heater. Sensor suhu dari alat tersebut  akan mendeteksi besaran suhu yang ada di ruangan tersebut. Sensor akan merespon kenaikan suhu ruangan tersebut menjadi kenaikan tegangan yang dihasilkan. Tegangan dari sensor ini tidak akan mungkin digunakan untuk mengendalikan AC atau heater secara langsung, karena masih lemah . Oleh karenanya perlu ada perangkat antarmuka yang menjembatani sensor dengan komponen pengolah (computer, mikroprosesor, mikrokontroler) yang akan mengolah keluaran dari sensor tersebut sehingga mampu menggerakkan AC dan heater. 
Blok diagram yang lebih lengkap tentang antarmuka ditunjukkan dalam berikut.





Gambar 2. Blok diagram perangkat antarmuka
Gambar di atas menunjukkan bagian-bagian dari sebuah sistem yang meliputi antarmuka didalamnya dalam sebuah loop tertutup. Penjelasan singkat dari masing-masing blok yaitu :
·         External System
Sistem luar berupa lingkungan dari perangkat yang dimaksud. Sistem luar ini memiliki besaran-besaran fisis yang bisa dipantau/diukur besarnya, seperti suhu, kelembaban, tekanan, dll
·         Energy Convertion
Pada bagian ini terjadi pengubahan energi dari bentuk fisis dari sistem luar menjadi tegangan analog. Tegangan yang diperoleh dari proses pengubahan ini relative masih kecil. Besarnya nilai tegangan sebanding dengan bearan fisis yang direspon oleh sensor.
·         Isolation
Isolation berfungsi untuk mengisolasi bagian luar dengan perangkat antarmuka dan seterusnya.
·         Scalling / Amplification
Rangkaian ini berfungsi untuk menyesuaikan sinyal keluaran dari sensor dengan sinyal yang diperlukan untuk diproses. Penyesuaian dapat berupa penguatan/pelemahan atau penyesuaian bentuk sinyal.
·         Protection
Rangkaian ini berfungsi sebagai pengaman, pelindung rangkaian utama (computer) dari kesalahan-kesalahan bagian sebelumnya.
·         ADC
Untuk bisa diproses oleh computer maka sinyal analog dari sensor yang telah dikuatkan tersebut perlu diubah ke bentuk digital yang sebanding. Pengubahan bentuk ini dilakukan oleh ADC (analog to digital converter).
·         Computer
Computer merupakan perangkat pengolah data digital. Program dalam computer ini akan menentukan apa yang perlu dilakukan oleh sistem terkait sinyal yang diperoleh sensor dari lingkungan luar.
·         DAC
DAC (digital to analog converter) mengubah data digital hasil pengolahan computer menjadi tegangan analog. Hal ini diperlukan mengingat untuk menjalankan actuator (beban) seperti motor dan lainnya, yang diperlukan adalah tegangan analog, bukan digital.
·         Scalling / Amplification
Tegangan analog hasil pengubahan DAC relative masih kecil sehingga tidak bisa secara langsung digunakan untuk mengendalikan actuator. Oleh karena itu diperlukan rangkaian penguat atau penyesuai sinyal.
·         Isolation
Isolasi diperlukan untuk mengisolasi bagian antarmuka dengan lingkungan luar.
·         Energy Convertion
Bagian ini merupakan bagain yang mengubah tegangan analog menjadi besaran fisik lain melalui actuator. Actuator merupakan perangkat yang dikendalikan. Contoh actuator yaitu motor yang mengubah tegangan analog menjadi gerakan/putaran.

Sumber           :
o    Fraden, Jacob. 2003. Handbook Of Modern Sensors : Physics, Designs, And Applications, USA : Springer
o    Toncich, 1994 Computer Architecture and Interfacing to Mechatronic Systems,  Australia : Chrystobel Engineering


 
Modul 2          : Pengkondisi Sinyal
Tujuan           :
Menjelaskan prinsip pengkondisi sinyal : pengoreksi bentuk gelombang, penyesuai/penguat sinyal dan rangkaian filter.

Materi             :
Rangkaian pengkondisi sinyal secara umum dapat dibagi menjadi beberapa kelompok tergantung pada sinyal yang dimasukkan dan sinyal keluaran yang diharapkan. Kelompok tersebut mencakup :
1.      Waveform Correction Circuit
Fungsi dari rangkaian pengoreksi gelombang adalah untuk memperbaiki bentuk gelombang input menjadi gelombang keluaran (khususnya digital) menjadi mendekati bentuk ideal. Dalam aplikasi digital hal tersebut dapat diperoleh dengan dua macam, yakni :
a.       Schmitt Trigger
Rangkaian ini bekerja atas dua batas amplitudo sinyal, upper trip point (UTP) dan lower trip point (LTP). Jika sinyal input pada kondisi tertentu melebihi batas UTP maka dia akan naik secara tajam sampai maksimal (dalam digital disebut logika high) dan jika sinyal masukan kurang dari LTP maka akan turun tajam sampai minimal (dalam digital disebut logika low). Simbol schmit trigger dan proses pembentukan gelombang ditunjukkan dalam gambar berikut.






Gambar 1. Simbol Schmitt Trigger













Gambar 2. Proses pembentukan gelombang kotak dengan Schmitt Trigger

b.      Debouncing circuit
Rangkaian ’debounce’ diperlukan dalam aplikasi digital khususnya untuk menangani saklar-saklar mekanik. Ketika saklar ditekan kemudian dilepaskan maka selama waktu tertentu saklar tersebut mengalami osilasi yang berakibat kondisi belum stabil (tidak menentu antara off dan on). Untuk mengatasi hal tersebut diperlukan penundaan waktu selama beberapa saat sebelum data dari saklar tersebut dibaca. Fungsi inilah yang dilakukan oleh rangkaian debouncing.
Gambar 3. Rangkaian Debouncing dengan RS Flip Flop






2.      Scalling Circuit
Pengkondisi sinyal yang paling umum digunakan adalah penyesuaian tegangan sinyal (scalling). Penyesuaian ini dapat dilakukan dengan dua cara, yaitu :
·         Penguatan (amplification)
Fungsi penguatan sinyal dilakukan oleh rangkaian amplifier (penguat). Dalam aplikasi analog, rangkaian penguat bisa berupa transistor atau yang lebih banyak digunakan adalah chip operational amplifier (op amp).


 












Gambar 4a. Inverting Op amp
4b. Non Inverting Op Amp

Dalam aplikasi digital, rangkaian penguat dapat diwujudkan dengan rangkaian pulse width modulation (PWM). Konsep PWM dapat ditunjukkan oleh gambar 5.
Dalam PWM hanya ada dua nilai tegangan yakni saat on (nilai maksimal) dan saat off (nilai minimal). Tegangan keluaran diperoleh dari rata-rata tegangan on dan off. Penentu besar tegangan yaitu perbandingan waktu on terhadap waktu off atau yang dikenal dengan dutycycle(D).  D = (waktu on / (waktu on + waktu off) ) x 100 %. PWM biasa digunakan dalam aplikasi saklar-saklar digital, power suplly dan komputer.












Gambar 5. Proses PWM

·         Transformasi (transformation)
Fungsi penyesuaian sinyal ini dilakukan dengan transformator. Menggunakan transformator sinyal masukan dapat disesuaiakan dengan sinyal keluaran yang dikehendaki. Komponen ini merupakan komponen pasif. Penggunaan transformator memungkinkan adanya kerugian arus dan respon frekuensi yang terbatas dibanding dengan rangkaian amplifier.
3.      Filtering Circuit
Fungsi dari rangkaian ini adalah untuk membuang/menghilangkan sinyal-sinyal gangguan yang tidak diinginkan. Dalam aplikasi sinyal analog filter dapat berupa :
a)      LPF (Low Pass Filter)
Low pass filter (LPF) berfungsi meneruskan sinyal input yang frekuensinya berada dibawah frekuensi tertentu, diatas frekuensi tersebut (frekuensi cut off) sinyal akan diredam.


b)      HPF (High Pass Filter)
High pass filter (HPF) berfungsi meneruskan sinyal di atas frekuensi cut off sedangkan yang berada dibawah frekuensi cut off diredam.
c)      BPF (Band Pass Filter)
Band pass filter (BPF) berfungsi meneruskan sinyal input yang berada diantara dua frekuensi tertentu saja.
d)     BSF/BRF (Band Stop Filter/Band Reject Filter)
Band stop filter (BSF) atau band reject filter (BRF) adalah kebalikan dari band pass filter yaitu menghilangkan frekuensi yang ada diantara dua buah frekuensi tertentu



 


















Gambar 6. Respon frekuensi macam-macam filter



Sumber           :
o    Budiharto, Widodo. 2004, Interfacing Komputer dan Mikrokontroler, Jakarta : Elex Media Komputindo
o    Toncich, 1994 Computer Architecture and Interfacing to Mechatronic Systems,  Australia : Chrystobel Engineering


DAC merupakan piranti yang mampu menghasilkan tegangan sebuah analog yang setara dengan data digital yang diberikan kepadanya. DAC sederhana dapat dibuat dari tangga R-2R seperti gambar berikut :

Gambar 1. DAC dari susunan tangga R-2R

Susunan tangga R-2R 8 bit akan membagi nilai tegangan 0-5 Volt dalam 255 tingkatan, sehingga satu tingkatan akan bernilai 5/255 Volt (19,5 mV). Maka jika data 31H (51 desimal) tegangan yang dihasilkan adalah 51 x 19,5 = 994,5mV = mendekati 1 volt.
Penggunaan IC DAC 0808 akan lebih memudahkan dalam memperoleh tegangan analog dari data digital yang ada. Konfigurasi pin DAC 0808 sebagai berikut :






 











Gambar 2. Konfigurasi pin DAC 0808

Contoh rangkaian DAC dengan memanfaatkan DAC 0808 diperlihatkan pada gambar berikut :
Gambar 3. Rangkaian DAC dengan DAC 0808

Pada gambar tersebut, R5MW dihubungkan dari Vref ke Vcc, ini berarti arus maksimal yang mengalir 5V/5 MW = 1 mA. Tegangan keluaran diperoleh dari pengalian arus ini dengan resistansi umpan balik op amp sehingga 1mAx5MW = 5 Volt. Oleh karena DAC memiliki lebar data 8 bit maka bilangan maksimalnya 255 (0FFH). Dengan demikian jika ada data 100 maka hasilnya adalah 100x5/255=1,96V
ADC adalah piranti yang mampu menghasilkan data digital dari sebuah tegangan analog. ADC dapat dibuat dari susunan paralel beberapa komparator (tegantung lebar data yang diinginkan), namun pemrosesannya tidak sesederhana pada DAC. Berikut ini adalah contoh DAC 3 bit. 


Gambar 4. Rangkaian ADC 3 bit dengan komparator paralel

Penggunaan IC ADC 0804 mempermudah aplikasi ADC. Berikut ini gambar susunan pin ADC0804.


Gambar 5. Susunan pin ADC0804

Deskripsi singkat pin-pin ADC0804 adalah sebagai berikut :
·        CS                   : chip select
·        RD                  : read
·        WR        : write
·        CLK IN  : clock
·        INTR     : interupt
·        Vin (-)    : tegangan masukan analog (-)
·        Vin (+)   : tegangan masukan analog (+)
·        AGND   : Ground analog
·        Vref/2    : Tegangan referensi yang lain (±)
·        DGND   : Digital Ground
·        DB0...DB7: Data keluaran bit 0 ... bit 7
·        CLK R   : sambungan R eksternal untuk clock
·        Vref       : tegangan catu, tegangan referensi primer

Dalam penerapannya ADC0804 dapat di konfigurasi dalam beberapa macam, yang paling biasa digunakan adalah mode free running. Mode tersebut ditunjukkan dalam gambar berikut ini.


Gambar 6. Konfigurasi fre running ADC 0804

Untuk menguji kerja ADC0804 perlu dibuat rangkaian sederhana seperti di bawah ini.
Gambar 7. Rangkaian uji ADC 0804



Modul 4          : Dasar Mikrokontroler
Tujuan           :
a.       Menjelaskan prinsip dasar mikrokontroler
b.      Menjelaskan cara kerja mikrokontroler

Materi             :
Mikrokontroler merupakan chip IC (Integrated Circuit) yang dibuat untuk keperluan khusus terkait dengan pengendalian/kontrol. Berbeda  dengan mikrokprosesor yang hanya merupakan chip pemroses data, mikrokontroler sudah dilengkapi dengan berbagai komponen pendukung seperi ROM, RAM, port I/O dan fungsi lain seperti timer.
Mikrokontroler AT89S51 merupakan mikrokontroler dari keluarga MCS-51. Mikrokontroler ini dapat bekerja dengan tegangan catu 4,0 Volt – 5,5 Volt. Beberapa fitur mikrokontroler adalah :
a.       Flash memory 8 Kb yang dapat dihapus dan ditulis ulang sebanyak 1000 kali
b.      RAM internal 128 x 8 bit
c.       Jalur I/O yang dapat deprogram sebanyak 32 jalur
d.      Sumber interupsi sebanyak 6 buah
e.       Memiliki 2 timer/counter 16 bit
f.       Sebuah port serial UART full duplex








Gambar 2. Pin-pin AT89S51
Mikrokontroler AT89S51 memiliki 40 pin dengan kemasan DIP (Dual In line Package). Susunan pin pada Mikrokontroler AT89S51 ditunjukkan gambar di atas. Masing-masing pin pada Mikrokontroler AT89S51 memiliki fungsi sebagai berikut :
a.       Pin 1 – 8 (Port 1)
Pin 1 sampai pin 8 merupakan port 1 dari AT89S52. yakni port masukan keluaran 8 bit yang dapat bekerja dua arah (bidirecional) dengan pull up internal.
b.      Pin 9 (RST/Reset)
Pin RST atau reset berfungsi untuk mereset CPU. Proses reset terjadi manakala pin RST tersebut diberikan masukan tegangan logika tinggi selama minmal 2 siklus mesin.
c.       Pin 10 – 17 (Port 3)
Pin 10 – 17 merupakan port 3 AT89S51 yakni port masukan keluaran 8 bit dua arah (bidirectional)pull up  internal. Beberapa pin diport 3 memiliki fungsi alternatif seperti ditunjukkan tabel. dengan resistor
d.      Pin 18 (XTAL 2)
Pin 18 merupakan pin XTAL 2 yang digunakan sebagai masukan resonator rangkaian clock  internal. Pin 18 ini tidak digunakan keika mikrokonroler menggunakan clock  eksternal.
e.       Pin 19 (XTAL 1)
Pin 19 merupakan pin XTAL 1 yang digunakan sebagai masukan resonator rangkaian  clock  internal bersama dengan pin 18. Rangkaian resonator yang digunakan berupa sebuah kristal 3 – 24 MHz. dan 2 buah kapasitor masing-masing besarnya 30 pF. Pin 19 ini menjadu saluran masukan ketika mikrokontroler menggunakan clock  eksternal.
f.       Pin 20 (GND)
Pin 20 merupakan pin GND yang selalu terhubung dengan ground  dari catu daya.
g.      Pin 21 – 28 (Port 2)
Pin 21 – 28 merupakan port 2 dari AT89S52 yakni port masukan keluaran 8 bit dua arah dengan resistor pull up  internal.
h.      Pin 29 (PSEN)
Pin 29 merupakan pin PSEN (Program Strobe Enable) yakni pin yang berfungsi sebagai sinyal pengontrol untuk eksekusi program dari luar masuk ke bus selama proses pemberian/pengambilan instruksi.
i.        Pin 30 (ALE/)
Pin 30 merupakan pin yang berfungsi sebagai ALE dan PROG. ALE (Address Lacth Enale) digunakan untuk mengancing bit rendah (low bit) alamat selama mengakses memori dari luar. PROG (the program pulse input) digunakan sebagai masukan program selama dilakukan pemrograman flash.
j.        Pin 31 (EA/Vpp)
Pin 31 merupakan pin yang berfungsi sebagai EA dan VPP. EA (External Access Enable) digunakan untuk mengeksekusi program. Pin ini perlu dihubungkan ke ground  jika menginginkan mikrokontroler dapat mengeksekusi program dari luar. Pin ini dihubungkan ke Vcc jika menginginkan mikrokontroler dapat mengakses program secara internal. Pin ini berfungsi juga seagai Vpp yang selalu dihubungkan ke sumber tegangan 12 V ketika melakukan pemrograman flash.
k.      Pin 32 – 39 (Port 0)
Pin 32 – 39 merupakan port 0 yang berupa port masukan keluaran 8 bit dua arah dengan resistor pull up  internal.
l.        Pin 40 (Vcc)
Pin 40 merupakan pin Vcc yang harus selalu dihubungkan dengan sumber catu +5 V agar mikrokontroler dapat bekerja.

Mikrokontroler dapat bekerja setelah di dalamnya diberikan serangkaian instruksi yang disusun dalam sebuah program. Instruksi-instruksi tersebut dapat berupa bahasa mesin yang berisikan kode-kode biner. Salah satu bahasa yang dapat digunakan untuk memudahkan dalam memfungsikan mikrokontroler melalui sebuah program  adalah bahasa Assembly. Bahasa Assembly memuat banyak instruksi bagi mikrokontroler. Instruksi-instruksi tersebut antara lain :
a.       Penyalinan Data
Instruksi untuk menyalin data adalah MOV. Contoh instruksi menyalin data yaitu :
MOV A,30h          : salin isi lokasi memori 30H ke akumulator
MOV A,P2           : salin isi Port 2 ke akumulator
MOV P1,A           : salin isi akumulator ke Port 1
b.      Aritmatika
Insruksi arimatika merupakan instruksi yang terkait dengan perhitungan-perhitungan yang biasanya melibatkan akumulator. Beberapa instruksi yang termasuk dalam instruksi aritmatika yaitu :
1.      DEC
Insruksi DEC (Decrement) digunakan untuk menurunkan nilai akumulator atau regiser atau nilai langsung atau nilai tak langsung dengan besar penurunan 1. Contoh instruksi DEC tersebut adalah :
DEC A                        : berarti isi Akumulator dikurangi 1 (A-1)
DEC #30H      : berarti 30Hdikurangi 1 sama dengan 2FH
2.      INC
Insruksi INC (Increment) digunakan untuk menaikkan nilai akumulator atau regiser atau nilai langsung atau nilai tak langsung dengan besar penaikan 1. Contoh instruksi INC tersebut adalah :
INC A             : berarti isi Akumulator dinaikkan 1 (A+1)
INC #30H       : berarti 30H ditambah 1 sama dengan 31H
c.       Pengalamatan
Pengalamatan merupakan cara untuk mengisi lokasi memori tertentu. Contoh mode pengalamatan yaitu :
·         Pengalamatan segera
Pengalamatan segera (immediate addressing) digunaikan untuk mengisi lokasi memori yang dituju dengan nilai konstanta tertentu yang sudah disebukan dalam instruksinya. Contoh instruksi pengalamatan segera yaitu
MOV A,#01H : mengisi Akumulator dengan nilai 1 H
·         Pengalamatan langsung
Pengalamatan langsung (direct addressing) merupakan cara mengisi memori dengan nilai tertentu yangberada dalam lokasi memori tertentu. Contoh instruksi pengalamatan langsung :
MOV A,35H   : berarti bahwa mikrokonroler akan membaca RAM internal dengan alama 35H dan menyimpan isinya ke dalam Akumulator.
d.      Percabangan / Lompatan
Instruksi percabangan atau lompatan (jump) merupakan instruksi yang digunakan untuk melompat dari satu alamat ke alamat yang lain. Instruksi ini dibagi dalam dua macam yaitu lompatan tak bersyarat (unconditional jump) dan lompatan bersyarat (conditional jump). Contoh lompatan tak bersyarat  adalah Sjmp (short jump) dan Ljmp (Long jump). Contoh lompatan bersyarat yaitu JZ (Jump Zero)(Jump not Zero), JB (Jump Bit) dan JNB (Jump not Bit), CJNE (Compare and Jump not Equal) dan DJNZ (Decreace and Jump not Zero). dan JNZ
1)      Instruksi JB berarti jika nilai pada bit yang ditunjuk adalah ‘1’ maka program akan melompat ke alamat yang ditunjukkan.
Contoh :
JB        P2.0,ulang             : berarti jika nilai P2.0 adalah ‘1’ maka program akan melompat ke alamat ULANG
2)      Instruksi CJNE  berarti membandingkan nilai, jika nilai pada bit yang ditunjuk adalah tidak sama dengan nilai yang dimaksud maka program akan melompat ke alamat yang ditunjukkan.
Contoh :
CJNE  A,#08, ulang  : berarti jika nilai A tidak sama dengan 08H maka program akan melompat ke alamat ULANG
3)      Instruksi DJNZ berarti mengurangi nilai sebuah register dengan satu dan jika nilai yang dikurangi tersebut belum mencapai nol maka program akan melompat ke alamat yang ditunjukkan.

Contoh :
DJNZ  R3,ulang    : berarti jika nilai dalam register R3 belum ‘0’ maka program akan melompat ke alamat ULANG
e.       Pemanggilan
Intruksi pemanggilan digunakan untuk masuk ke dalam program sub rutin. Sub rutin merupakan kelompok dari instruksi program yang akan dieksekusi secara berulang manakala ia dipanggil. Sub rutin ini diadakan untuk mempermudah dalam pembuatan program. Contoh intruksi pemanggilan ini adalah CALL.
CALL       TUNDA          : berarti mikrokontroler diminta untuk memanggil dan mengerjakan program sub rutin TUNDA.
Untuk kembali dari sub rutin digunakan instruksi RET.

Sumber           :
·         Agfianto. 2006, Belajar Mikrokontroler AT89C51/52/55 (Teori dan Aplikasi), Yogyakarta : Gava Media
·         www.atmel.com


Modul 5          : Teknik perantaraan dengan mikrokontroler
Tujuan           :
Menjelaskan teknik perantaraan dengan mikrokontroler AT89s51

Materi             :
Mikrokontroler AT89S51 mempunyai 4 (empat) buah port yang biasa digunakan untuk pengantarmuka dengan perangkat eksernal. Port tersebut diberi nama Port 0 (P0), Port 1 (P1), Port 2 (P2) dan Port 3 (P3). Masing-masing port memiliki 8 bit saluran port yang di beri indeks nama 0 – 7 , misalnya P0.0, P0.1, P0.2 ... P0.7. Letak masing-masing port tersebut di tunjukkan gambar berikut :


 










Gambar 1. Letak port-port AT89S51

Keempat port tersebut merupakan port bidirectional (dua arah) yakni bisa berfungsi sebagai input maupun output (port I/O).  Masing-masing port memiliki pengunci (lacth), penggerak keluaran (output driver) dan penyangga masukan (input buffer).

Port paralel dalam AT89S51 dapat difungsikan sebagai input atau ouput dengan cara berikut :

Port paralel sebagai input, yaitu menerima masukan sinyal digital dari luar mikrokontroler memiliki dua macam cara dalam menggunakannya :
a)      Port membaca data digital pada seluruh bit nya (bit 0 – bit 7) kemudian disimpan dalam akumulator. Contoh instruksi : MOV A,P3
b)      Port membaca data digital pada salah satu bit nya kemudian disimpan dalam akumulator. Contoh instruksi : JNB P1.3,$

Port paralel sebagai ouput, yaitu mengeluarkan data digital dari mikrokontroler juga memiliki dua macam cara dalam menggunakannya :
a)      Port mengeluarkan data melalui seluruh bit nya (bit 0 - bit 7) dengan cara memberikan instruksi ke keseluruhan port. Misal : MOV P0,#FFH
b)      Port mengeluarkan data melalui salah satu bit nya (bit 0) dengan cara memberikan instruksi ke bit port yang bersangkutan. Misal : SETB P0.3

Berikut contoh antarmuka mikrokontroler dengan LED display :





















Sumber           :
Agfianto. 2006, Belajar Mikrokontroler AT89C51/52/55 (Teori dan Aplikasi), Yogyakarta : Gava Media

Modul 6          : Antarmuka Sensor Dengan Mikrokontroler
Tujuan           :
Membuat contoh aplikasi perantaraan sensor suhu dengan mikrokontroler

Materi             :


Gambar 1. Skema prototipe sistem pengendali berbasis A89S51

Listing program untuk flow chart di atas dengan bahasa assembly seperti berikut ini :
org   00h

      ;out_heater = p0.0            output pemanas
      ;out_blower = p0.1            output ac
      ;adc_intr   = p1.0            pembacaan ADC

mulai:                             
                        ;data suhu
      mov   40h,#10h    ;set suhu batas bawah
      mov   41h,#16h    ;set suhu batas atas
      clr   p1.0        ;mulai konversi
      nop               ;tunda sesaat
      nop
      setb  p1.0
      call  tunda       ;menunggu proses konversi selesai (100uS)

baca_suhu:
      mov   a,p2        ;baca data hasil konversi
      subb  a,40h       ;bandingkan dengan batas bawah

ac_on:
                        ;suhu < data ==> c=1
      jnc   heater_on   ;jika suhu > batas bawah,cek batas atas
      setb  p0.0        ;jika suhu < batas bawah matikan ac
      clr   p0.1        ;hidupkan heater 
      call  tunggu            ;menunggu respon relay
      jmp   baca_suhu   ;kembali baca suhu

heater_on:
      jc    baca_suhu   ;jika suhu < batas atas,cek suhu lagi    
      clr   p0.0        ;jika suhu > batas atas hidupkan ac
      setb  p0.1        ;matikan heater
      call  tunggu            ;menunggu respon relay
      jmp   baca_suhu   ;kembali baca suhu

tunggu:
      mov   r2,#25           
ulang2:
      mov   r1,#200          
ulang1:
      mov   r0,#200          
ulang:
      call  tunda
      djnz  r0,ulang
      djnz  r1,ulang1
      djnz  r2,ulang2
      ret