Inkubator Dengan Fuzzy Logic

Thursday, December 8th, 2016 - Aplikasi Mikrokontroler

Inkubator dengan Fuzzy Logic, diharapkan dengan metode fuzzy dapat diperoleh kontrol lebih halus dari pada sistem kontrol ON/OFF. Inkubator ini memakai lampu sebagai pemanas dan sebuah kipas untuk menurunkan suhu ruangan di dalam inkubator.

Inkubator Dengan Fuzzy Logic

Inkubator adalah suatu alat yang digunakan sebagai pemanas suatu tempat agar dapat menghasilkan suhu yang stabil dan sesuai dengan kebutuhan. Misalnya inkubator yang dipergunakan untuk penetas telur membutuhkan suhu yang stabil antara 36°C sampai 37°C, lain lagi dengan inkubator bayi dibutuhkan suhu 40°C sampai 42°C, suhu ini disesuaikan dengan suhu dalam perut ibunya yang berkisar pada suhu tersebut.

Inkubator ini dikendalikan dengan MC68HC11 yang difungsikan sebagai fuzzy controller. Keuntungan dari penggunaan fuzzy logic dalam pembuatan inkubator adalah sistem akan menjadi lebih stabil, ini terlihat pada respon dari output yang dihasilkan dan juga ketahanan sisitem terhadap gangguan. Dengan fuzzy logic sistem lebih mudah untuk disesuaikan dengan berbagai kondisi agar menghasikan sistem yang stabil, seperti misal besar ruangan dalam inkubator, suhu sekitar dan juga bahan yang digunakan dalam pembuatan inkubator.

Blok Digram Rangkaian Inkubator

Gambar 1. Blok Digram Rangkaian Inkubator

Blok diagram rangkaian inkubator yang dibuat terlihat pada Gambar 1. Sensor suhu berupa LM 35 dipakai untuk mengukur nilai suhu dalam inkubator Tombol push button yang berjumlah dua buah digunakan sebagai pengatur suhu atau suhu dalam inkubator yang dibutuhkan, untuk tampilannya digunakan LCD (Liquid Crystal Display) 2´16, yang berarti setiap line dapat berisi 16 karakter. LCD ini digunakan untuk menampilkan suhu sekarang dalam inkubator, suhu yang dibutuhkan, tingkat intensitas lampu yang digunakan sebagai pemanas dan juga tingkat kecepatan dari kipas.

Untuk mengatur intensitas dari lampu yang menggunakan tegangan AC digunakan sistem phase control dan untuk mengatur kecepatan kipas yang menggunakan motor DC digunakan sistem PWM (Pulse Width Modulation)

FUDGE(Fuzzy Development and Generation Environment)

Cara kerja dari inkubator ini berdasarkan suatu sistem yang berbasiskan fuzzy. Blok diagram sistem berbasis fuzzy tampak seperti gambar 2. Dalam membangun sistem berbasis fuzzy pada sebuah general purpose mikrokontroler, maka dibutuhkan data yang berisi fungsi keanggotaan input dan output, beserta rule fuzzy-nya. Untuk itu maka digunakan FUDGE (Fuzzy Development and Generation Environment) dan fuzzy kernel FUZZ11B3 dari Motorolla. Data-data fungsi keanggotaan input, output dan rule fuzzy-nya selanjutnya disimpan dalam suatu tabel memori. Tabel memori tersebut kemudian diproses dalam fuzzy kernel. Fuzzy kernel FUZZ11B3 pada penerapannya dibatasi fungsi keanggotaan input berbentuk trapesoid, fungsi keanggotaan output berbentuk singletone. Adapun jumlah input maksimal adalah delapan dan jumlah output maksimal adalah empat.

Blok Diagram Sistem Berbasis Fuzzy,inkubator dengan fuzzy logic,membuat inkubator dengan fuzzy logic,komponen inkubator dengan fuzzy logic,cara membuat inkubator dengan fuzzy logic,inkubator dengan fuzzy logic berbasis mikrokontroler,jual inkubator dengan fuzzy logic,beli inkubator dengan fuzzy logic,spare part inkubator dengan fuzzy logic,harga inkubator dengan fuzzy logic,program inkubator dengan fuzzy logic,inkubator dengan fuzzy logic murah

Gambar 2. Blok Diagram Sistem Berbasis Fuzzy

Pada fuzzy kernel terjadi tiga proses dasar pada sistem kontrol fuzzy yaitu: fuzzifikasi, evaluasi rule dan defuzzifikasi. Pada inkubator ini input crispnya berupa selisih suhu antara suhu dalam inkubator dengan suhu setting, input tersebut kemudian akan difuzzifikasikan bersama dengan fungsi keanggotaan input yang telah dihasilkan oleh FUDGE. Kemudian selanjutnya akan melewati proses evaluasi rule dan defuzzifikasi. Hasil defuzzifikasi tersebut akan menunjukkan tabel output kipas maupun lampu, dan kemudian dipakai sebagai output dari sistem fuzzy. Sementara itu program utama berfungsi untuk memanggil fuzzy kernel.

Potongan Program 1 – Program Utama Inkubator Dengan Fuzzy Logic

1: ULANG:    
2:       JSR  Prn_suhu_setting  ;tampilkan suhu setting
3:       JSR  Prn_suhu_sekarang ;tampilkan suhu dlm inkubator – read A/DC
4:       JSR  Prn_fan_light     ;tampilkan keadaan kipas dan lampu
5:       BSR  set_suhu          ;check ada perubahan suhu setting?
6:       BSR  fuzzy             ;siapkan inputcrisp,eksekusi Fuzzy kernel
7:                              ;outputcrisp hasil defuzzifikasi,output bekerja
8:       BRA  ulang             ;kembali ke ulang

Potongan Program 2 – Eksekusi Fuzzy Kernel

1: FUZZY:
2:      LDAA  SUHU_SETTING   ;ambil nilai suhu_setting
3:      LDAB  SUHU_SEKARANG  ;ambil nilai suhu_sekarang    
4:      SBA                  ;a=a-b
5:      ADDA  #20            ;a=a+20
6:      CMPA  #40        
7:      BGE   SET_MAX        ;jika sama atau lebih set $FF
8:      CMPA  #0             ;jika sama atau kurang set $00
9:      BLE   SET_MIN
10:     LDAB  #64
11:     MUL                  ;a*64
12:     LDX   #10            ;/10
13:     IDIV  X              ;X=D/X
14:     XGDX                 ;D=X
15:     BRA   NEXT
16:  
17: SET_MIN:    
18:     LDAB  #$0
19:     BRA   NEXT    
20: SET_MAX:    
21:     LDAB  #$FF
22:  
23: NEXT:
24:     LDX   #CURRENT_INS    
25:     STAB  X              ;crisp input disimpan dalam current_ins
26:     JSR   FUZZIFY        ;eksekusi kernel fuzzy FUZZ11B3
27:     LDY   #COG_OUTS      ;hasil proses defuzzifikasi
28:     LDAB  Y              ;ambil nilai COG_out
29:     BSR   KONVERT        ;konversi ke tingkat kecepatan kipas
30:     STAB  KIPAS_PTR      ;pointer tabel kecepatan kipas
31:     INY                  ;increment COG_out
32:     LDAB  Y              ;ambil nilai COG_out berikutnya
33:     BSR   KONVERT        ;konversi ke tingkat intensitas lampu
34:     STAB  LAMPU_PTR      ;pointer tabel intensitas lampu
35:     JSR   CHANGE_KIPAS   ;update kecepatan kipas
36:     JSR   CHANGE_LAMPU   ;update intensitas kipas
37:     RTS

Potongan program di atas dapat dijelaskan sebagai berikut: ambil nilai suhu dalam inkubator dengan membaca nilai A/D Converter kemudian tampilkan, ambil nilai suhu setting kemudian tampilkan, ambil nilai keadaan kipas kemudian tampilkan. Tiga instruksi diatas (baris 2,3,4) hanyalah berguna sebagi tampilan pada LCD sehingga dapat diketahui perkembangan atau perubahan suhu, lampu dan kipas. Baris 5 berguna untuk menunggu apakah ada penekanan tombol dari PA1 dan PA2, atau dengan kata lain diubahnya suhu setting. Proses fuzzy sebenarnya terjadi pada baris 6, pada sub-rutin ini akan diambil selisih suhu antara suhu setting dengan suhu dalam inkubator, kemudian hasilnya dijadikan input crisp. Input crisp yang telah tersimpan pada current_ins ini digunakan untuk proses fuzzifikasi bersama dengan fungsi keanggotaan input yang telah dihasilkan oleh FUDGE, dan selanjutnya akan melewati tahap evaluasi rule dan deffuzifikasi pada fuzzy kernel. Hasil defuzzifikasi kemudian diambil pada COG_Out dan dijadikan output bagi lampu dan kipas.

Window Pengisian Crisp Input dan Output

Gambar 3. Window Pengisian Crisp Input dan Output

Pembuatan dan penentuan input dan output crisp, fungsi keanggotaan input dan output, beserta rule fuzzy-nya tergantung pada kebutuhan. Pada inkubator ini yang memiliki ukuran 40cm ´ 28cm ´ 25cm dan sisi-sisinya terbuat dari kayu kecuali sisi depan terbuat dari kaca, terutama digunakan untuk memanaskan suhu antara 40°C – 42°C, pembuatan input dan output crisp, fungsi keanggotaan input dan output, beserta rule fuzzy-nya dengan FUDGE adalah sebagai   berikut:

Window Pembuatan Fungsi keanggotaan input

Gambar 4. Window Pembuatan Fungsi keanggotaan input

Window Pembuatan Fungsi keanggotaan output

Gambar 5. Window Pembuatan Fungsi keanggotaan output

Pada inkubator ini rule fuzzy-nya ada 7 yaitu:

If delta is neglarge then
     Kipas is cepat sekali and Lampu is taknyala
If delta is negmed then
     Kipas is cepat and Lampu is taknyala
If delta is negsmal then
     Kipas is sedang and Lampu is redup
If delta is pas then
     Kipas is mati and Lampu is redup
If delta is possmal then
     Kipas is mati and Lampu is sedang
If delta is posmed then
     Kipas is mati and Lampu is terang
If delta is poslarge then
     Kipas is mati and Lampu is terangsekali

Setelah dilakukan generate code 68HC11 maka data-data tersebut disimpan dalam byte-byte memori seperti dibawah ini. Karena fungsi keanggotaan input trapesoid maka membutuhkan empat byte memori, fungsi keanggotaan output hanya membutuhkan satu byte memory karena fungsi singletone. Sedangkan rule fuzzy-nya yang memiliki MSB = 0 adalah antecendent atau bagian input sedangkan yang memiliki MSB = 1 adalah consequent atau bagian outputnya.

Tabel Data Memori hasil Ganerate Code 68HC11

1: INPUT_MFS     EQU    *                ; Input Membership Functions
2: IN0MF         EQU    *                ; delta
3:               FCB    $00,$00,$33,$08  ; neglarge
4:               FCB    $33,$08,$53,$0a  ; negmed
5:               FCB    $60,$14,$6c,$0d  ; negsmal
6:               FCB    $79,$28,$80,$28  ; pas
7:               FCB    $80,$0d,$93,$14  ; possmal
8:               FCB    $93,$0a,$ac,$0d  ; posmed
9:               FCB    $ac,$08,$ff,$00  ; poslarge
10:              FCB    $00,$00,$00,$00  ; ~
11: SGLTN_POS    EQU    *                ; Output Membership Functions
12: OUT0MF       EQU    *                ; kipas
13:              FCB    $00              ; mati
14:              FCB    $40              ; pelan
15:              FCB    $80              ; sedang
16:              FCB    $bf              ; cepat
17:              FCB    $ff              ; cepatsekali
18:              FCB    $00              ; ~
19:              FCB    $00              ; ~
20:              FCB    $00              ; ~
21: OUT1MF       EQU    *                ; lampu
22:              FCB    $00              ; taknyala
23:              FCB    $40              ; redup
24:              FCB    $80              ; sedang
25:              FCB    $bf              ; terang
26:              FCB    $ff              ; terangsekali
27:              FCB    $00              ; ~
28:              FCB    $00              ; ~
29:              FCB    $00              ; ~
30: RULE_START   EQU    *                ; Rules follow:
31:              FCB    $00
32:              FCB    $84
33:              FCB    $88
34:              FCB    $03
35:              FCB    $80
36:              FCB    $89
37:              FCB    $04
38:              FCB    $80
39:              FCB    $8a
40:              FCB    $05
41:              FCB    $80
42:              FCB    $8b
43:              FCB    $06
44:              FCB    $80
45:              FCB    $8c
46:              FCB    $01
47:              FCB    $83
48:              FCB    $88
49:              FCB    $02
50:              FCB    $82
51:              FCB    $89
52: END_OF_RULE  FCB    $ff

Modul LCD 2´16

Untuk menampilkan suhu sekarang, suhu setting, tingkat kecepatan kipas, dan juga intensitas lampu maka digunakan M124A yang merupakan modul LCD 16´2. LCD ini memiliki built-in kontroler yang didalamnya sudah terdapat karakter generator ROM/RAM dan display data RAM. Semua fungsi display dikontrol lewat instruksi, dan modul ini sudah siap diinterfacekan dengan MPU.Tabel 1 menunjukkan fungsi pin modul LCD M124A. Interface modul dengan MCU MC68HC11 ditunjukkan pada gambar 3. Adapun pada interface tersebut, modul LCD diakses melalui address $0400-$0401.

Fungsi Pin Modul LCD M124A

Tabel 1. Fungsi Pin Modul LCD M124A

Pada kontroler LCD terdapat dua buah 8-bit register, yaitu instruction register (IR) dan data register (DR). kedua register ini dipilih melalui sinyal pada pin RS (Register Select) seperti telah ditunjukkan pada tabel 1. Penulisan pada IR menyebabkan dilakukannya suatu instruksi tertentu. Tabel 2 menunjukkan instruksi-instruksi yang dapat dilakukan melalui penulisan pada IR.

Penulisan atau pembacaan pada data register menyebabkan tersimpannya atau terbacanya data pada DD RAM maupun CG RAM. DD RAM adalah memori yang digunakan untuk menyimpan data yang didisplaykan ke LCD, sedangkan CG RAM adalah memori yang dapat digunakan oleh software untuk membuat sebuah karakter

Berikut ini adalah software pengendali yang digunakan untuk menulis data maupun instruksi pada modul LCD. Untuk perintah LCD digunakan rutin Out_Ctrl. Untuk menulis pada LCD, digunakan rutin Out_char.

Potongan Program 3 – Out_Ctrl

1: LCD_CTRL  EQU    $0400
2: LCD_DATA  EQU    $0401
3: ————————-
4: OUT_CTRL:    
5:            STAB   LCD_CTRL    ;out B to IR
6:            BRA    WAIT_BIT7   ;wait busy
7: OUT_CHAR:
8:            STAB   LCD_DATA    ;out B to DD RAM or CG RAM
9: WAIT_BIT7: LDAB   LCD_CTRL    ;wait busy flag
10:           BMI    WAIT_BIT7
11:           RTS

Interface modul M124A dengan MCU

Gambar 6. Interface modul M124A dengan MCU

Sebelum digunakan, LCD tersebut terlebih dahulu harus diinisialisasikan. Berikut ini adalah program inisialisai LCD.

Potongan Program 4 – Init LCD

1: INIT_LCD_SEQ
2:                DB $38,$0C,$06,0   ;Function set,Display
3:                                   ;On,Entry Mode Set
4:                BSR  L_DELAY       ;15ms more delay after VDD=4.5V
5:                LDAB #$38          ;FUNCTION SET
6:                STAB LCD_CTRL
7:                BSR  DELAY         ;4.1ms more
8:                LDAB #$38          ;FUNCTION SET
9:                STAB LCD_CTRL
10:               BSR  DELAY         ;100us more
11:               LDAB #$38          ;FUNCTION SET
12:               STAB LCD_CTRL
13:               LDY  #INIT_LCD_SEQ ;diisi function set, display
14: LOOP_INIT_LCD:
15:               LDAB Y             ;on/off,entry mode
16:               BEQ  X_INIT_LCD
17:               BSR  OUT_CTRL
18:               INY                ;Increment alamat
19:               BRA LOOP_INIT_LCD
20: X_INIT_LCD:
21:               RTS

Daftar Instruksi Modul LCD

Tabel 2. Daftar Instruksi Modul LCD

Sensor Suhu

Untuk mendeteksi suhu dalam inkubator digunakanlah sebuah sensor suhu LM 35 yang dapat dikalibrasikan langsung dalam °C, LM 35 ini difungsikan sebagai basic temperature sensor seperti pada gambar 4.

LM 35 basic temperature sensor

Gambar 7. LM 35 basic temperature sensor

Vout dari LM 35 ini dihubungkan dengan Port E dari MC68HC11 untuk dijadikan input analog A/DC. Pada A/D Converter 8 bit yang dimiliki MC68HC11 memiliki tegangan referensi yang berguna sebagai referensi pada proses konversi. VRH = 2,56V dan VRL = 0 ini diberikan supaya setiap kenaikan satu bit maka terjadi kenaikan suhu sebesar 1°C. Untuk dapat memakai A/D Converter maka A/D Converter dari MC68HC11 harus diaktifkan dahulu ini hanya perlu dilakukan sekali pada inisialisasi awal, setelah itu dipilih mode-mode pengkonversiannya pada register ADCTL, pada inkubator ini register ADCTL diisi dengan $02 karena dipilih mode single channel, pengkonversian yang continue serta channel signal adalah PE2. Dan hasilnya dapat dibaca pada salah satu ADR1,2,3 atau 4 karena menggunakan single channel.

Potongan Program 5 – Read A/DC

1: ————————————-
2:     ;Init ADC – Powered up
3: ————————————-
4:      BSET    OPTION,X,ADPU  ;A/D System powered up
5: ————————————-
6:     ;Read ADC
7: ————————————-
8:      LDX     #$1000         ;alamat base register
9:      LDAB    #%00000010     ;startconversion,modesingle channel,convert
10:     STAB    ADCTL          ;continously,AD2 port E bit 2
11:     BRCLR   ADCTL,X,CCF,*  ;wait conversion    
12:     LDAB    ADR1           ;get result

Rangkaian Triac

Gambar 8. Rangkaian Triac

Pengendalian Output

Setelah membentuk sub-rutin tampilan dan pembacaan suhu, sekarang masalahnya adalah bagaimana agar dapat mengendalikan tingkat intensitas lampu dan kecepatan kipas berdasarkan output hasil defuzzifikasi pada sistem software fuzzy.

Pengaturan Intensitas Lampu Pada Inkubator Dengan Fuzzy Logic

Phase control adalah suatu sistem yang digunakan untuk dapat menghasilkan fase tegangan bolak-balik yang berbeda-beda sehingga daya yang diterima oleh beban menjadi bervariasi. Rangkaian triac yang digunakan untuk memadamkan dan menyalakan lampu terlihat pada gambar 5.

Saat input high dari PA5/OC3 masuk maka akan mengaktifkan transistor 2N2222, kaki kolektor dan emiternya akan terhubung dengan ground, ini mengakibatkan adanya beda tegangan sehingga ada arus yang mengalir ke MOC2030, karena MOC2030 inputnya berkisar antara 10mA sampai 30mA maka digunakan resistor 220W untuk membatasi arus yang masuk ke MOC2030. Jika arus yang masuk kurang dari 10mA maka tidak akan dapat membias diac, tetapi jika arus yang masuk melebihi 30mA maka MOC2030 akan rusak. Dari pemasangan resistor sebesar 220W maka arus yang masuk sekitar 20mA. Kemudian kaki gate dari Triac mendapatkan supply arus yang kemudian mengakibatkan Triac on atau kaki MT2 dan MT1 terhubung sehingga ada tegangan yang masuk ke lampu. Jika pemberian pulsa high tersebut dapat diatur maka akan didapatkan fase tegangan yang berbeda dan daya yang diterima lampu akan bervariasi. Potongan program untuk menyalakan lampu terlihat seperti dibawah ini

Potongan Program 6 – Interrupt OC3

1: OC3:    
2:    BSET  PORTA,X,PA5       ;nyalakan lampu
3:    BCLR  TFLG1,X,#OC3_Flg  ;clear OC3F        
4:    RTI                     ;keluar dari interrupt

Zero Crossing Detector

Gambar 9. Zero Crossing Detector

Setelah membentuk rutin OC3 untuk menyalakan lampu maka persoalan berikutnya adalah bagaimana dan kapan diberikan pulsa high ke PA5 supaya daya yang diterima lampu menjadi bervariasi. Rangkaian pendukung untuk itu adalah rangkaian zero crossing detector disebut demikian karena rangkaian ini dapat menghasilkan pulsa saat tegangan bolak-balik pada kondisi zero, dengan demikian   diketahui saat dimana tegangan AC mencapai kondisi zero dan ini dapat digunakan sebagai awal pemberian delay

Rangkaian zero crossing detector tampak pada gambar 6.Input tegangan bolak-balik yang memiliki fase negatif setelah masuk dioda bridge akan memliki fase positif saja, dan arusnya dibatasi oleh R 39K/2W, kemudian arus akan masuk ke IC A4N25, ketika tidak ada arus yang masuk ke IC A4N25 tersebut atau dengan kata lain saat tegangan zero maka sesaat tegangan akan masuk ke PA0/IC3. Jika diketahui saat tegangan pada kondisi zero maka dapat diatur besarnya delay yang diberikan, lamanya delay tersebut dapat diproses secara software dengan berawal saat timbul transisi naik pada IC3. Setelah dilakukan delay maka input high diberikan ke PA5 sehingga akan didapatkan tingkat intensitas lampu yang bervariasi tergantung lamanya delay yang diberikan selama setengah periode tegangan bolak-balik jika delay semakin lama maka intensitasnya akan semakin berkurang.

Potongan Program 7 – Interrupt IC3

1: ———————————————-
2: ;Init interrupt IC3 – positif going edge
3: ———————————————-
4:       BSET    TCTL2,X,EDG3A  ;setting IC3 for positive going edge
5:       BSET    TMSK1,X,IC3I   ;un-masked IC3
6: ————————————–
7: ; IC3 interrupt routine
8: ———————————————-
9: IC3:
10:      LDD     REDUP          ;delay tingkat keredupan
11:      BCLR    PORTA,X,LAMPU  ;matikan lampu     
12:      ADDD    TCNT           ;tambahkan dgn nilai TCNT
13:      STD     TOC3           ;simpan pada TOC3
14:      BCLR    TFLG1,X,#$FE   ;clear flag IC3
15:      RTI                    ;kembali dari interrupt

Pada potongan program diatas terlihat bahwa interrupt IC3 dan OC3 saling berhubungan, pertama-tama ketika terjadi transisi naik pada PA0 maka interrupt IC3 akan bekerja, rutin interrupt IC3 mengambil besarnya nilai delay yang diberikan redup kemudian nilainya ditambahkan dengan TCNT dan disimpan pada TOC3, TCNT(The Free-Running Counter) sendiri adalah timer 16 bit yang dimiliki oleh MC68HC11, saat nilai TCNT=TOCx maka akan terjadi interrupt, dalam hal ini interrupt OC3 dan rutin interrupt OC3 akan menyalakan lampu.

PWM (Pulse Width Modulation)

PWM (Pulse Width Modulation) adalah suatu sistem pengaturan lebar pulsa high dan lownya pada gelombang kotak. Gelombang kotak tersebut sangat mudah dibangkitkan, hanya dengan menkonfigurasikan output compare untuk toggle setiap setengah periode. Sinyal PWM ini memiliki frekuensi yang sama, yang berubah hanyalah duty cycle nya, duty cycle adalah persentase antara sinyal high dengan sinyal satu periodanya. Gambar rangkaian driver motor tampak seperti gambar 7. Saat ada pulsa high masuk maka kedua transistor yang dirangkai secara Darlington akan aktif sehinggga timbul arus pada motor, dan motor berputar. Pengaturan lebar pulsa high dan low-nya akan dilakukan secara software, semakin besar lebar pulsa highnya maka semakin besar kecepatan motor tersebut dan semakin sempit lebar pulsanya maka kecepatan motor akan semakin menurun.

Rangkaian Driver Motor

Gambar 10. Rangkaian Driver Motor

Potongan Program 8 – interrupt OC4 /PWM

1:  ————————————-
2:          ;init OC4 for PWM
3:  ————————————-
4:        LDD     TCNT                  ;ambil nilai TCNT
5:        STD     TOC4                  ;store ke TOC4
6:        BSET    TCTL1,X,OM4+OL4       ;setting OC4,OC4 set
7:        BCLR    TFLG1,#$EF            ;clear OC4 flag    
8:        BSET    TMSK1,X,OC4I          ;un-masked OC4
9:  ————————————-
10:      ;OC4 interrupt routine
11:      ;OC4HI+OC4LO = 10000
12:      ;parameter untuk 1 periode
13: ————————————-
14: OC4:        
15:       BRCLR   TCTL1,X,OL4,GETOC4LO  ;apakah pulsa low
16:       LDD     OC4HI                 ;tidak, load OC4HI
17:       BRA     NEWTOC4
18: GETOC4LO:    
19:       LDD     OC4LO                 ;ya, load OC4LO
20: NEWTOC4:                            ;update TOC4,perbarui nilai TOC4
21:       ADDD    TOC4
22:       STD     TOC4
23:       LDAA    TCTL1                
24:       EORA    #OL4                  ;invert OL4 to toggle
25:       STAA    TCTL1                
26:       BCLR    TFLG1,X,#$EF          ;clear flag OC4F            
27:       RTI                           ;return from service

Potongan program diatas dapat dijelaskan sebagai berikut: Pertama-tama mengambil nilai TCNT dan dimasukkan ke TOC4 (Timer Output Compare 4), ini berguna untuk membangkitkan interrupt karena jika nilai TCNT sama dengan nilai TOC4 maka Flag OC4F akan set dan bersama-sama dengan OC4I ( Output Compare 4 Interrupt enable) akan membangkitkan interrupt OC4. Kondisi awalnya pulsa dibuat high dengan set OC4 pada register TCTL1, kemudian dipastikan bahwa OC4F clear dan setelah itu interrupt enable dari OC4 di set pada TMSK1.

Saat masuk pada rutin interrupt OC4 inisialisasi awal dari keadaan sinyal adalah high, kemudian dilihat apakah pulsa low jika tidak maka ambil nilai OC4HI (lebar pulsa high menurut variasi kecepatan) jika low maka ambil nilai OC4LO (lebar pulsa low menuurut variasi kecepatan), kemudian selalu perbarui nilai TOC4 dengan menambahkan nilai dari OC4HI atau OC4LO dengan TOC4 dan kemudian hasilnya dianggap sebagai nilai TOC4 yang baru. Pulsa kemudian kita toggle agar berubah dari high ke low atau dari low ke high, dan terakhir flag OC4F harus di clear untuk menandai selesainya proses interrupt.

Selamat mencoba, semoga informasi tentang “Inkubator Dengan Fuzzy Logic” diatas mudah dipahami.

Title : Inkubator Dengan Fuzzy Logic
Archive : Aplikasi Mikrokontroler

You may also like, related Inkubator Dengan Fuzzy Logic