TUGAS AKHIR
IMPLEMENTASI CPU PLC (PROGRAMMABLE LOGIC
CONTROL) MENGGUNAKAN MIKROKONTROLLER
ATMEGA32
Diajukan untuk memenuhi salah satu syarat
untuk memperoleh gelar Sarjana Teknik pada
Program Studi Teknik Elektro
Fakultas Sains dan Teknologi Universitas Sanata Dharma
Disusun oleh:
EDI GUNAWAN
045114070
PROGRAM STUDI TEKNIK ELEKTRO
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
2009
i
FINAL PROJECT
IMPLEMENTATION CPU PLC (PROGRAMMABLE LOGIC
CONTROL) USED MICROCONTROLLER ATMEGA32
In partial fulfilment of the requirements
For the degree of Sarjana Teknik Electrical Engineering Study Program Electrical Engineering Departement
Science and Technology Faculty Sanata Dharma University
By :
EDI GUNAWAN 045114070
ELECTRICAL ENGINEERING STUDY PROGRAM ELECTRICAL ENGINEERING DEPARTEMENT
SCIENCE AND TECHNOLOGY FACULTY SANATA DHARMA UNIVERSITY
YOGYAKARTA 2009
ii
HALAMAN PERSEMBAHAN DAN MOTTO HIDUP
Karya ini ku persembahkan kepada :
Ku ucapkan syukur kepada Tuhan Yang Maha Esa.
Kedua orang tuaku yang sudah memberikan kepercayaan untuk
melanjutkan studi di Yogyakarta.
Mbak Rinawati yang selalu memberikan semangat untuk segera
menyelesaikan skripsi ini dan aku mensyukuri keberadaan mu di sisi ku.
Teman-teman yang sudah membantu.
Hidup itu tidak semudah membalikkan telapak tangan.
Ada kemauan pasti ada jalan
Terus berjuang tiada henti.
vi
INTISARI
CPU PLC (controll processing unit PLC) adalah alat yang digunakan untuk menyimpan, menjalankan program PLC yang dikirim oleh konsol atau PC. Pada CPU PLC data kiriman akan diolah dan dieksekusi hingga didapatkan output dari CPU PLC.
CPU PLC ini bekerja setelah mendapatkan kode kiriman dan, kode kiriman berupa intruksi-intruksi PLC. Kode kiriman akan dieksekusi dan dibandingkan dengan kode yang tersimpan di dalam CPU PLC. Pengkodean intruksi-intruksi logika PLC dalam bentuk biner dan heksa. Kode kiriman yang diterima akan diproses oleh CPU PLC dan CPU PLC dari memori mikrokontroler ATmega32.
Dari hasil penelitian dan percobaan, CPU PLC ini telah bekerja sesuai dengan perancangan. Hal ini dapat dibuktikan dari hasil pengujian kode kiriman dari konsol atapun dari PC berupa bahasa mnemonic LD 001 AND 002 OUT 101, LD 001 OR 002 ANDNOT 003 OUT 101, LD 001 TIM #100 LD TIM 001 OUT 101, LD 001 OR 002 OUT 101, LD 001 CNT #05 LD CNT 001 OUT 101, LD 005 OUT NOT 105. Program TIM mencacah 100 detik dan program CNT mencacah dari luar sebanyak 5 kali. Untuk semua modul input dan output dapat berfungsi sesuai dengan perancangan. Kegagalan komunikasi dikarenakan penerimaan data komunikasi masih belum sempurna, sehingga CPU PLC mengalami kegagalan pengiriman data.
Kata kunci: Bahasa Mnemonik, CPU PLC, Intruksi-intruksi PLC.
viii
ABSTRACT
CPU PLC (controll processing of unit PLC) is device used for save, running program sent by console or PC. From the CPU PLC sent code will be processed and executed is until get by output from CPU PLC.
This CPU PLC work after getting of consignment code, and consignment code in the form of instrucsion-instrucsion PLC. Consignment code will be executed and compared file code save in CPU PLC. Code Intruksion-Intruksion logic PLC form of binary and heksa. Consignment code accepted will be processed CPU PLC and CPU PLC from memory microcontroller ATMEGA32.
From result of research and this attempt, CPU PLC have worked as according to plane. This matter can be provable from result of examination of consignment code from console and PC form of programe and mnemonic language LD 001 AND 002 OUT 101, LD 001 OR 002 AND NOT 003 OUT 101, LD 001 TIM # 100 LD TIM 001 OUT 101, LD 001 OR 002 OUT 101, LD 001 CNT # 05 LD CNT 001 OUT 101, LD 005 OUT NOT 105. Programe of count TIM start 100 second and programe the CNT count from outside as much 5 rivers. For all module of input and output can function agree with of scheme. Communications failure because of acceptance of communications date not yet complete, so that CPU PLC experience of the failure of date delivery. Keyword: Mnemonic Language, CPU PLC, Instrucsion-Instrucsion PLC.
ix
KATA PENGANTAR
Puji dan syukur penulis panjatkan kepada Tuhan Yang Maha Esa atas berkat
dan rahmat-Nya sehingga penulis dapat menyelesaikan karya tulis berjudul
“Implementasi CPU PLC (POGRAMMABLE LOGIC CONTROL) Menggunakan
mikrokontroler ATMEGA32”.
Karya tulis ini merupakan salah satu syarat untuk memperoleh gelar Sarjana
Teknik pada Program Studi Teknik Elektro Universitas Sanata Dharma. Penulisan
skripsi ini didasarkan pada hasil-hasil yang penulis dapatkan selama tahap
perancangan, pembuatan dan pengujian alat.
Penulisan skripsi ini tidak terlepas dari bantuan berbagai pihak. Untuk itu,
penulis mengucapkan terima kasih kepada:
1. Yosef Agung Cahyanta, S.T.,M.T.. Selaku Dekan Fakultas Sains dan
Teknologi Universitas Sanata Dharma Yogyakarta.
2. B. Wuri Harini, S.T.,M.T.. selaku Ketua Jurusan Teknik Elektro
Universitas Sanata Dharma Yogyakarta.
3. Bapak Martanto, S.T., M.T., selaku dosen pembimbing I karya tulis
yang telah meluangkan waktu, tenaga, dan pikirannya untuk
membimbing penulis.
4. Ibu Wiwien Widyastuti, S.T., M.T., selaku dosen pembimbing II karya
tulis yang telah meluangkan waktu, tenaga, dan pikirannya untuk
membimbing penulis.
5. Segenap karyawan sekretariat Fakultas Sains dan Teknologi.
6. Segenap dosen dan laboran Teknik Elektro Universitas Sanata
Dharma.
x
DAFTAR ISI
Halaman Sampul (Bahasa Indonesia) ............................................................. i
Halaman Sampul (Bahasa Inggris) ................................................................. ii
Halaman Pengesahan oleh Pembimbing ......................................................... iii
Halaman Pengesahan oleh Penguji ................................................................. iv
Halaman Pernyataan Keaslian Karya ............................................................ v
Halaman Persembahan dan Moto Hidup ....................................................... vi
Halaman Pernyataan Persetujuan Publikasi Karya Ilmiah Untuk .............
Kepentingan Akademis..................................................................................... vii
Intisari ................................................................................................................ viii
Abstract ............................................................................................................... ix
Kata Pengantar ................................................................................................. x
Daftar Isi ........................................................................................................... xii
Daftar Gambar ................................................................................................. xviii
Daftar Tabel ...................................................................................................... xxv
Daftar Lampiran .............................................................................................. xxvi
BAB I PENDAHULUAN ................................................................................. 1
1.1 Judul ............................................................................................................. 1
1.2 Latar Belakang Masalah ............................................................................... 1
1.3 Tujuan dan Manfaat Penelitian .................................................................... 2
1.4 Batasan Masalah .......................................................................................... 2
1.5 Metodologi Penelitian .................................................................................. 3
1.6 Sistematika Penulisan .................................................................................. 4
xii
xiii
BAB II DASAR TEORI ................................................................................... 5
2.1 PLC .............................................................................................................. 5
2.1.1 Diagram Ladder ..................................................................................... 8
2.1.1.1 Normally Open ................................................................................. 8
2.1.1.2 Normally Close ................................................................................ 9
2.1.1.3 Keluaran (Output) ............................................................................ 9
2.1.2 Instruksi-instruksi Logika dalam PLC .................................................. 9
2.1.2.1 Instruksi LOAD (LD) dan LOAD Not (LDNOT) ........................... 10
2.1.2.2 Instruksi AND dan AND NOT ........................................................ 10
2.1.2.3 Instruksi OR dan ORNOT ................................................................ 12
2.1.2.4 Instruksi END .................................................................................. 14
2.2 Mnemonic .................................................................................................... 15
2.3 Mikrokontroller ATmega32 ......................................................................... 16
2.3.1 Fitur ATmega32 ..................................................................................... 17
2.3.2 Organisasi Memori ................................................................................. 20
2.3.2.1 Memori Program .............................................................................. 21
2.3.2.2 Memori Data .................................................................................... 21
2.3.2.3 EEPROM ......................................................................................... 22
2.3.2.3.1 Register EEARH and EEARL ................................................... 22
2.3.2.3.2 Register EEDR ........................................................................... 23
2.3.2.3.3 Register EECR ........................................................................... 23
2.3.3 Register Serbaguna ................................................................................ 24
2.3.4 Stack Pointer .......................................................................................... 26
xiv
2.3.5 Register I/O dan Port I/O ....................................................................... 26
2.3.6 Timer/Counter ........................................................................................ 29
2.3.6.1 TIMSK (Timer/Counter Interrupt Mask Register) ........................... 30
2.3.6.2 TIFR ................................................................................................. 31
2.3.6.3 Special Function Register I/O .......................................................... 31
2.3.7 SPI (Serial Peripheral Interface) ............................................................ 32
2.3.8 USART ................................................................................................... 33
2.4 Komunikasi Serial ........................................................................................ 37
2.5 Relay ............................................................................................................ 40
2.6 Driver Relay.................................................................................................. 41
BAB III PERANCANGAN PENELITIAN .................................................... 42
3.1 Diagram Blok Perancangan CPU PLC ........................................................ 42
3.2 Perancangan Perangkat Keras ...................................................................... 43
3.2.1 Rangkaian Mikrokontroller .................................................................... 43
3.2.1.1 Konstruksi Rangkaian Mikrokontroller ........................................... 43
3.2.1.2 Rangkaian Reset ............................................................................... 44
3.2.1.3 Rangkaian Osilator ........................................................................... 44
3.2.1.4 Indikator LED .................................................................................. 45
3.2.1.4.1 Indikator Error ............................................................................ 46
3.2.1.4.2 Indikator Komunikasi Serial RS-232 ......................................... 46
3.2.1.4.3 Indikator Supplay CPU PLC ...................................................... 47
3.2.1.4.4 Indikator Input ............................................................................ 48
3.2.1.4.5 Indikator Output dan Relay ........................................................ 49
xv
3.2.2 Komunikasi Serial RS-232 ..................................................................... 52
3.3 Perancangan Perangkat Lunak ..................................................................... 53
3.3.1 Komunikasi Serial .................................................................................. 53
3.3.2 Diagram Alir Utama pada Mikrokontroller ........................................... 55
3.3.2.1 Subrutin Pembacaan Isi Alamat Memori PLC ................................. 57
3.3.2.2 Subrutin Pemilihan Kode ................................................................. 58
3.3.2.3 Subrutin Logika LD ......................................................................... 62
3.3.2.4 Subrutin Logika LDNOT ................................................................. 63
3.3.2.5 Subrutin Logika AND ...................................................................... 65
3.3.2.6 Subrutin Logika ANDNOT .............................................................. 66
3.3.2.7 Subrutin Logika OR ......................................................................... 67
3.3.2.8 Subrutin Logika ORNOT ................................................................. 68
3.3.2.9 Subrutin Logika Timer ..................................................................... 69
3.3.2.10 Subrutin Logika LD TIM ............................................................... 73
3.3.2.11 Subrutin Logika LD TIM NOT ...................................................... 74
3.3.2.12 Subrutin Logika AND TIM ............................................................ 75
3.3.2.13 Subrutin Logika AND TIM NOT .................................................. 76
3.3.2.14 Subrutin Logika OR TIM ............................................................... 78
3.3.2.15 Subrutin Logika OR TIM NOT ..................................................... 79
3.3.2.16 Subrutin Logika OUT .................................................................... 80
3.3.2.17 Subrutin Logika OUTNOT ............................................................ 81
3.3.2.18 Subrutin Logika Counter ................................................................ 83
3.3.2.19 Subrutin Logika LD CNT .............................................................. 85
xvi
3.3.2.20 Subrutin Logika LD CNT NOT ..................................................... 87
3.3.2.21 Subrutin Logika AND CNT ........................................................... 88
3.3.2.22 Subrutin Logika AND CNT NOT .................................................. 89
3.3.2.23 Subrutin Logika OR CNT .............................................................. 90
3.3.2.24 Subrutin Logika OR CNT NOT ..................................................... 91
BAB IV HASIL PENGAMATAN dan PEMBAHASAN............................... 93
4.1 Model CPU PLC ........................................................................................... 93
4.2 Prinsip dan Cara Kerja CPU PLC ................................................................. 94
4.3 Analisa Perangkat Lunak .............................................................................. 96
4.3.1 Inisialisasi................................................................................................ 96
4.3.2 Komunikasi ............................................................................................. 96
4.3.3 Pembacaan kode Kiriman Pada memori CPU PLC ................................ 98
4.3.4 Pembandingan Kode Kiriman dengan Kode Yang Disimpan.................
Pada Memori CPU PLC ......................................................................... 99
4.4 Analisa Perangkat Keras(komunkasi console dengan CPU PLC) ................ 100
4.4.1 Logika LD dan Logika AND .................................................................. 100
4.4.2 Logika LD dan Logika OR ..................................................................... 104
4.4.3 Logika Counter........................................................................................ 107
4.4.4 Logika Timer........................................................................................... 112
4.4.5 Logika ON-OFF...................................................................................... 117
4.4.6 Logika LD NOT dan Logika OR NOT................................................... 119
4.4.7 Logika LD dan logika OUT .................................................................... 121
4.5 Analisa Perangkat Keras(komunikasi PC dengan CPU PLC) ...................... 129
xvii
4.6 Analisa Data Error Saat Komunikasi ............................................................ 130
4.7 Logika OUT NOT ........................................................................................ 131
BAB V KESIMPULAN dan SARAN .............................................................. 133
5.1 Kesimpulan ................................................................................................... 133
5.2 Saran.............................................................................................................. 133
DAFTAR GAMBAR
Gambar 2.1 Sistem Layout dan Hubungan PLC ................................................ 6
Gambar 2.2 Konfigurasi Simbol NO ................................................................. 9
Gambar 2.3 Konfigurasi Simbol NC .................................................................. 9
Gambar 2.4 Konfigurasi Simbol Output ............................................................ 9
Gambar 2.5 Diagram Ladder Instruksi LD dan LDNOT ................................... 10
Gambar 2.6 Diagram Ladder Instruksi AND dan ANDNOT ............................ 10
Gambar 2.7 Diagram Ladder Instruksi OR dan ORNOT .................................. 13
Gambar 2.8 Diagram Ladder Instruksi END ..................................................... 15
Gambar 2.9 Konfigurasi Pin ATmega32 ........................................................... 18
Gambar 2.10 Arsitektur ATmega32 ................................................................... 19
Gambar 2.11 Organisasi Memori ATmega32 .................................................... 20
Gambar 2.12 Peta Memori data AVR ATmega32 ............................................. 21
Gambar 2.13 Register EEARH dan EEARL ...................................................... 22
Gambar 2.14 Register EEDR ............................................................................. 23
Gambar 2.15 Register EECR ............................................................................. 23
Gambar 2.16 Register Serbaguna dari ATmega32 ............................................ 25
Gambar 2.17 Register Serbaguna ....................................................................... 25
Gambar 2.18 Stack Pointer ................................................................................ 26
Gambar 2.19 Register I/O dan Port I/O ............................................................. 27
Gambar 2.20 Register SFIOR ............................................................................ 27
Gambar 2.21 Port A,B,C,D ................................................................................ 28
Gambar 2.22 Lanjutan gambar Port A,B,C,D sebagai register I/O..................... 29
xviii
xix
Gambar 2.23 TIMSK (Timer/Counter Interupt Mask Register) ........................ 30
Gambar 2.24 TIFR ............................................................................................. 31
Gambar 2.25 Special Function Register I/O ...................................................... 31
Gambar 2.26 SPI (Serial Pheripheral Interface) ................................................ 33
Gambar 2.27 USART ......................................................................................... 34
Gambar 2.28 UBRRH dan UBRRL ................................................................... 35
Gambar 2.29 UCSRC ......................................................................................... 35
Gambar 2.30 Komunikasi Serial DB9 ............................................................... 38
Gambar 2.31 IC MAX232 ................................................................................. 39
Gambar 2.32 Relay ............................................................................................. 40
Gambar 2.33 IC ULN2803 Driver Relay............................................................ 41
Gambar 3.1 Diagram Blok Sistem CPU PLC .................................................... 42
Gambar 3.2 Konfigurasi Rangkaian Reset ......................................................... 44
Gambar 3.3 Konfigurasi Rangkaian Osilator ..................................................... 44
Gambar 3.4 Indikator Error CPU PLC ............................................................... 46
Gambar 3.5 Indikator Komunikasi Serial RS-232 dengan CPU PLC ............... 47
Gambar 3.6 Indikator Supply CPU PLC ............................................................ 47
Gambar 3.7 Indikator Input ................................................................................ 49
Gambar 3.8 Indikator Output dan Relay ............................................................ 51
Gambar 3.9 Konfigurasi Komunikasi RS-232 ................................................... 53
Gambar 3.10 Subrutin Komunikasi Serial ......................................................... 54
Gambar 3.11 Aktivasi Komunikasi Serial ......................................................... 55
Gambar 3.12 Diagram Alir Utama Mikrokontroller .......................................... 57
xx
Gambar 3.13 Diagram alir Pembacaan Isi Alamat Memori PLC ...................... 58
Gambar 3.14 Subrutin Pemilihan Kode ............................................................. 59
Gambar 3.15 Lanjutan Subrutin Pemilihan Kode .............................................. 60
Gambar 3.16 Lanjutan Subrutin Pemilihan Kode ............................................... 61
Gambar 3.17 Lanjutan Subrutin Pemilihan Kode .............................................. 62
Gambar 3.18 Diagram Alir Subrutin LD ........................................................... 63
Gambar 3.19 Diagram alir Subrutin LD NOT ................................................... 64
Gambar 3.20 Diagram alir Subrutin AND ......................................................... 65
Gambar 3.21 Diagram Alir Subrutin ANDNOT ................................................ 66
Gambar 3.22 Diagram Alir Subrutin OR ........................................................... 67
Gambar 3.23 Diagram Alir Subrutin ORNOT ................................................... 69
Gambar 3.24 Aktivasi Timer .............................................................................. 70
Gambar 3.25 Subrutin Timer ............................................................................. 72
Gambar 3.26 Logika LD TIM ............................................................................ 73
Gambar 3.27 Logika LD TIM NOT ................................................................... 74
Gambar 3.28 Logika AND TIM ......................................................................... 75
Gambar 3.29 Logika AND TIM NOT ............................................................... 77
Gambar 3.30 Logika OR TIM ............................................................................ 78
Gambar 3.31 Logika OR TIM NOT .................................................................. 79
Gambar 3.32 Diagram alir Logika OUT ............................................................ 81
Gambar 3.33 Diagram alir Logika OUT NOT ................................................... 82
Gambar 3.34 Logika Counter ............................................................................. 83
Gambar 3.35 Proses CNT .................................................................................. 84
xxi
Gambar 3.36 Logika LD CNT ........................................................................... 86
Gambar 3.37 Logika LD CNT NOT .................................................................. 87
Gambar 3.38 Logika AND CNT ........................................................................ 88
Gambar 3.39 Logika AND CNT NOT ............................................................... 89
Gambar 3.40 Logika OR CNT ........................................................................... 91
Gambar 3.41 Logika OR CNT NOT .................................................................. 92
Gambar 4.1 Model CPU PLC ............................................................................. 93
Gambar 4.2 Potongan Program Komunikasi ...................................................... 96
Gambar 4.3 Program Menyimpan Pada Memori CPU PLC............................... 97
Gambar 4.4 Hasil komunikasi disimpan pada memori CPU PLC...................... 97
Gambar 4.5 Program pembacaan memori .......................................................... 98
Gambar 4.6 kode yang terbaca pada memori CPU PLC..................................... 99
Gambar 4.7 potongan program kode yang akan dibandingkan........................... 99
Gambar 4.8 diagram ladder 1.............................................................................. 100
Gambar 4.9 logika LD 001 aktif dan logika AND 002 tidak aktif ..................... 101
Gambar 4.10 logika LD 001 tidak aktif dan logika AND 002 aktif ................... 101
Gambar 4.11 program eksekusi logika LD ......................................................... 102
Gambar 4.12 hasil eksekusi yang tersimpan di memori CPU PLC .................... 102
Gambar 4.13 program logika AND 002.............................................................. 103
Gambar 4.14 program logika OUT 101 .............................................................. 103
Gambar 4.15 hasil diagram ladder 1 ................................................................... 104
Gambar 4.16 diagram ladder 2............................................................................ 104
Gambar 4.17 logika-logika yang dituliskan tidak mendapat input ..................... 105
xxii
Gambar 4.18 hasil diagram ladder 2 logika LD ................................................. 106
Gambar 4.19 hasil diagram ladder 2 logika OR ................................................. 107
Gambar 4.20 diagram ladder 3 logika counter ................................................... 107
Gambar 4.21 pembacaan logika LD untuk logika counter ................................. 109
Gambar 4.22 alur kerja logika counter................................................................ 109
Gambar 4.23 logika LD CNT untuk memanggil hasil eksekusi CNT ................ 110
Gambar 4.24 hasil dari logika counter ................................................................ 111
Gambar 4.25 logika CNT tidak mendapat input ................................................. 111
Gambar 4.26 hasil diagram ladder 3 dari logika counter.................................... 111
Gambar 4.27 diagram ladder 4 logika timer....................................................... 112
Gambar 4.28 hasil diagram ladder 4 dari logika timer 100ms............................ 112
Gambar 4.29 hasil pengujian TIM 50ms............................................................. 114
Gambar 4.30 hasil pengujian TIM 150ms........................................................... 114
Gambar 4.31 hasil pengujian TIM 200ms........................................................... 115
Gambar 4.32 hasil pengujian TIM 250ms........................................................... 115
Gambar 4.33 hasil pengujian TIM 50ms............................................................. 115
Gambar 4.34 hasil pengujian TIM 150ms........................................................... 115
Gambar 4.35 hasil pengujian TIM 200ms........................................................... 116
Gambar 4.36 hasil pengujian TIM 250ms........................................................... 116
Gambar 4.37 diagram ladder 5 logika ON OFF.................................................. 117
Gambar 4.38 logika ON-OFF untuk logika LD 01 ............................................. 118
Gambar 4.39 logika ON-OFF untuk logika OR 02............................................. 118
Gambar 4.40 logika ON-OFF untuk logika LD 01 dan OR 02........................... 119
xxiii
Gambar 4.41 diagram ladder 6 logika LD NOT 004 ..........................................
dan logika OR NOT 005 ................................................................ 119
Gambar 4.42 Logika LD NOT 004 tidak aktif ..................................................
dan logika OR NOT 005 aktif........................................................ 120
Gambar 4.43 hasil logika LD NOT 004 tidak aktif ...........................................
dan logika OR NOT 005 aktif ....................................................... 120
Gambar 4.44 logika LD NOT 004 aktif .............................................................
dan logika OR NOT 005 tidak aktif .............................................. 120
Gambar 4.45 hasil logika LD NOT 004 aktif .....................................................
dan logika OR NOT 005 tidak aktif .............................................. 120
Gambar 4.46 logika LD NOT 004 aktif dan logika OR NOT 005 aktif ............ 120
Gambar 4.47 hasil logika LD NOT 004 aktif ....................................................
dan logika OR NOT 005 aktif ....................................................... 121
Gambar 4.48 diagram ladder 7 logika LD dan logika OUT ............................... 121
Gambar 4.49 hasil dari diagram ladder 7 logika LD 001 dan OUT 101............. 122
Gambar 4.50 hasil dari diagram ladder 7 logika LD 002 dan OUT 102............. 123
Gambar 4.51 hasil dari diagram ladder 7 logika LD 003 dan OUT 103............. 123
Gambar 4.52 hasil dari diagram ladder 7 logika LD 004 dan OUT 104............. 123
Gambar 4.53 hasil dari diagram ladder 7 logika LD 005 dan OUT 105............. 123
Gambar 4.54 hasil dari diagram ladder 7 logika LD 006 dan OUT 106............. 124
Gambar 4.55 hasil dari diagram ladder 7 logika LD 007 dan OUT 107............. 124
Gambar 4.56 hasil dari diagram ladder 7 logika LD 008 dan OUT 108............. 124
Gambar 4.57 logika LD 001 aktif dan logika OUT 101 aktif............................. 125
xxiv
Gambar 4.58 logika LD 002 aktif dan logika OUT 102 aktif............................. 125
Gambar 4.59 logika LD 003 aktif dan logika OUT 103 aktif............................. 126
Gambar 4.60 logika LD 004 aktif dan logika OUT 104 aktif............................. 126
Gambar 4.61 logika LD 005 aktif dan logika OUT 105 aktif............................. 127
Gambar 4.62 logika LD 006 aktif dan logika OUT 106 aktif............................. 127
Gambar 4.63 logika LD 007 aktif dan logika OUT 107 aktif............................. 128
Gambar 4.64 logika LD 008 aktif dan logika OUT 108 aktif............................. 128
Gambar 4.65 hasil komunikasi antara PC dengan CPU PLC ............................. 129
Gambar 4.66 Diagram ladder 8 logika LD 001 dan logika OUT 101................. 129
Gambar 4.67 diagram ladder 8 logika LD 001 aktif ..........................................
dan logika OUT 101 aktif .............................................................. 129
Gambar 4.68 hasil pengujian CPU PLC ............................................................. 130
Gambar 4.69 Data error saat komunikasi............................................................ 130
Gambar 4.70 diagram ladder logika 9 OUT NOT .............................................. 131
Gambar 4.71 diagram ladder logika OUT NOT mendapat input LD 005 .......... 131
Gambar 4.72 hasil diagram ladder 9 logika OUT NOT...................................... 131
Gambar 4.73 hasil dari gambar 4.71 ................................................................... 132
DAFTAR TABEL
Tabel 2.1 Tabel Kebenaran Gerbang AND ........................................................ 11
Tabel 2.2 Tabel Kebenaran Gerbang ANDNOT ................................................ 12
Tabel 2.3 Tabel Kebenaran Gerbang OR ........................................................... 13
Tabel 2.4 Tabel Kebenaran Gerbang ORNOT ................................................... 14
Tabel 2.5 Mnemonic PLC .................................................................................. 15
Tabel 2.6 Pengaturan prescaler ........................................................................... 31
Tabel 2.7 Pengaturan Baud Rate ........................................................................ 36
Tabel 2.8 Komunikasi Serial DB9 ..................................................................... 38
Tabel 4.1 Hasil Pengujian CPU PLC dari diagram ladder 1 .............................. 100
Tabel 4.2 Hasil Pengujian CPU PLC dari diagram ladder 2 .............................. 105
Tabel 4.3 Hasil Pengujian CPU PLC dari diagram ladder 5 .............................. 116
Tabel 4.4 Hasil Pengujian CPU PLC dari diagram ladder 6 .............................. 119
Tabel 4.5 Hasil Pengujian CPU PLC dari diagram ladder 7 .............................. 121
Tabel 4.6 Perbandingan PLC umum dengan CPU PLC ..................................... 131
Tabel 4.7 hasil logika OUT NOT........................................................................ 131
xxv
Daftar lampiran
Lampiran 1
1. Kode intruksi dan data ............................................................................ 134
2. Listing Program....................................................................................... 139
xxvi
BAB I
PENDAHULUAN
1.1 Judul
Implementasi CPU PLC menggunakan mikrokontroler ATmega32.
1.2 Latar Belakang Masalah
Pada masa kini, perkembangan teknologi sangat pesat. Hal ini berdampak
pada pola hidup manusia yang menuntut segala sesuatunya bergerak cepat,
praktis, dan serba instan. Dalam industri sistem pengontrolannya masih dengan
elektromekanik yang menggunakan relay-relay, yang masih mempunyai banyak
kelemahan, diantaranya kontak-kontak yang dipakai mudah aus karena
panas/terbakar atau karena hubung singkat, serta membutuhkan biaya yang cukup
besar untuk instalasi, pemeliharaan dan modifikasi dari sistem yang telah dibuat
jika di kemudian hari diperlukan modifikasi. Dengan menggunakan PLC hal-hal
ini dapat diatasi, karena sistem PLC mengintegrasikan berbagai macam komponen
yang berdiri sendiri menjadi suatu sistem kendali terpadu dan dengan mudah
merenovasi tanpa harus mengganti semua instrumen yang ada[1].
PLC (Programmable Logic Controller) adalah suatu sistem elektronika
yang dirancang untuk industri, yang menggunakan memori yang dapat diprogram
sebagai penyimpanan internal dari instruksi-instruksi untuk menjalankan fungsi-
fungsi logika, sequence, waktu, pencacah, dan aritmatika untuk mengontrol
berbagai jenis mesin atau proses melalui input dan output digital atau analog[1].
1
2
Seiring perkembangan teknologi yang semakin maju terutama pada
peralatan elektronika baik PLC ataupun mikrokontroler, penulis berencana akan
merancang PLC dengan menggunakan mikrokontroler. Pada mikrokontroler
tersebut akan dibuat master program dari fungsi-fungsi logika PLC. Alat ini sering
disebut dengan CPU. Master program fungsi-fungsi logika PLC tersebut akan
disimpan dalam EEPROM mikrokontroler ATmega32, dan CPU itu akan bekerja
sebagai PLC jika CPU itu diprogram sebagai fungsi-fungsi logika PLC. Alat yang
digunakan untuk memprogram CPU itu adalah Konsol dan PC.
1.3 Tujuan dan Manfaat Penelitian
Tujuan dari pembuatan alat ini adalah merancang dan membuat sebuah
PLC baik perangkat keras dan perangkat lunak dengan menggunakan kontrol dari
komputer maupun konsol yang dihubungkan ke mikrokontroler sebagai CPU.
Dalam mikrokontroler akan dibuat master program yang sesuai dengan fungsi-
fungsi logika PLC yang di implementasikan pada mikrokontroler ATmega32.
Penelitian ini dapat memberikan manfaat:
1. Sebagai dasar untuk mengembangkan aplikasi selanjutnya.
2. Sebagai referensi yang dapat mendukung penelitian selanjutnya
yang berkaitan aplikasi mikrokontroler, komunikasi serial dan
PLC.
1.4 Batasan Masalah
Alat ini mempunyai batasan masalah seperti:
1. Mikrokontroler yang digunakan Atmega 32.
3
2. Dalam mikrokontroler akan dibuat program yang berfungsi
menerima, membaca dan akan mengeksekusi fungsi-fungsi logika
dari Konsol dan PC (Personal Computer) yang telah dituliskan.
3. 8 Port Input dan 8 Port Output yang digunakan dalam CPU PLC.
4. Proses komunikasi data menggunakan komunikasi serial dan
komunikasinya hanya satu arah.
5. Fungsi-fungsi logika PLC meliputi: LD, LDNOT, AND,
ANDNOT, OR, ORNOT, TIMER, COUNTER, OUT, OUT NOT,
END.
6. Hanya 1 macam timer saja yang digunakan dalam CPU PLC.
7. Hanya 1 counter saja yang digunakan dalam CPU PLC.
1.5 Metodologi Penelitian
Agar dapat melakukan perancangan alat dengan baik, maka penulis
membutuhkan masukan serta referensi yang didapatkan dengan metode :
1. Studi kepustakaan yang mencakup literatur-literatur, gambar-
gambar, dan manual.
2. Mencari informasi dari berbagai media termasuk dari dunia maya
(internet).
3. Membuat perencanaan dan merancang perangkat keras dan
perangkat lunak.
4. Melakukan pengamatan dan pengujian dengan alat yang sudah
dirancang terlebih dahulu untuk mengetahui alat sudah bekerja
sesuai dengan rancangan atau belum.
4
1.6 Sistematika Penulisan
Sistematika penulisan tugas akhir ini terbagi menjadi lima bab yang
disusun sebagai berikut:
BAB I. PENDAHULUAN
Berisi latar belakang masalah, tujuan dan manfaat penelitian,
batasan masalah, metodologi penelitian, dan sistematika penulisan.
BAB II. DASAR TEORI
Berisi dasar teori komponen-komponen yang akan digunakan
dalam penelitian.
BAB III. RANCANGAN PENELITIAN
Berisi diagram blok dan penjelasan cara kerja secara singkat
rancangan perangkat keras dan perangkat lunak.
BAB IV. HASIL PENELITIAN DAN PEMBAHASAN
Berisi pengamatan kerja dari perangkat keras dan perangkat lunak
yang telah dibuat.
BAB V. PENUTUP
Berisi kesimpulan dan saran untuk perbaikan alat dan penelitian
selanjutnya.
BAB II
DASAR TEORI
Kemajuan teknologi yang berkembang pesat dewasa ini, mengakibatkan
penulis ingin membuat “PLC yang diimplementasikan menggunakan
Mikrokontroller ATmega32”. Dalam perancangan dan pembuatan PLC ini,
harus mengetahui terlebih dahulu prinsip kerja dasar dan piranti atau komponen
yang akan digunakan.
2.1 PLC
PLC atau kendali logika terprogram merupakan suatu piranti elektronik yang
dirancang untuk dapat beroperasi secara digital dengan menggunakan memori
sebagai media penyimpanan intruksi-intruksi internal untuk menjalankan fungsi-
fungsi logika, seperti fungsi pencacah, fungsi urutan proses, fungsi pewaktu,
fungsi aritmatika, dan fungsi yang lainnya dengan cara memprogramnya.
Program-program dibuat kemudian dikirim ke PLC melalui programmer/monitor.
Pembuatan program dapat digunakan komputer sehingga dapat mempercepat hasil
pekerjaan. Fungsi lain pada PLC dapat digunakan untuk memonitor jalannya
proses pengendalian yang sedang berlangsung, sehingga dapat dengan mudah
dikenali urutan kerja proses pengendalian yang terjadi pada saat itu. Seperti
halnya komputer, PLC juga mempunyai kelengkapan yaitu CPU (Central
Processing Unit), memori (RAM dan ROM), programmer/monitor dan modul I/O
(input/output)[2].
5
6
Dalam sistem PLC ini terdapat 4 (empat) komponen bagian utama, keempat
komponen bagian utama tersebut adalah:
1. Central Processing unit (CPU), merupakan otak dari PLC yang terdiri
dari 3 bagian, yaitu:
a. Mikroprosesor merupakan otak dari PLC yang difungsikan untuk
operasi matematika dan opersi logika.
b. Memori, merupakan daerah CPU yang digunakan untuk melakukan
proses penyimpanan dan pengiriman data pada PLC.
c. Catu daya, berfungsi untuk mengubah sumber masukan tegangan
bolak-balik menjadi tegangan searah.
2. Programmer/monitor
3. Input/Output Modules
Secara blok diagram, hubungan bagian utama dari PLC secara umum dapat
di lihat pada gambar 2.1.
Programmer/Monitor
Mikroprosesor
memori
Catu Daya
Modul keluaran
Modul masukkan
Gambar 2.1 Sistem layout dan hubungan PLC[2]
7
PLC memiliki beberapa kelebihan dibanding dengan sistem kontrol relay
konvensional antara lain :
1. Fleksibel (keluwesan)
2. Deteksi dan koreksi kesalahan lebih mudah
3. Harga relatif murah
4. Pengamatan visual
5. Kecepatan operasi yang tinggi
6. Implementasi proyek lebih singkat
7. Lebih sederhana dan mudah dalam penggunaannya, memodifikasi lebih
mudah tanpa tambahan biaya
8. Dokumentasi mudah
Syarat-syarat yang harus dimiliki oleh sebuah PLC :
1. Hardware harus mudah diprogram ulang.
2. Semua komponen mampu beroperasi tanpa alat bantu dan memenuhi
persyaratan lingkungan.
3. Sistem yang dipakai mudah dirawat dan diperbaiki, beberapa indikator
dan alat bantu harus tersedia sebagai bagian dari sistem untuk
memudahkan pelacakan kerusakan.
4. Hardware hanya membutuhkan ruang dan daya yang kecil dibandingkan
dengan sistem elektromekanis.
5. PLC mampu berkomunikasi dengan pusat untuk pemantauan proses
operasi.
8
6. Sistem kontrol menerima catu daya AC standar melalui push-button dan
limit switch yang ada pada sistem[2].
7. Sinyal output PLC mampu menjalankan motor stater dan solenoid valve
yang bekerja dengan catu daya AC, setiap output mampu memutuskan
atau mengalirkan arus sebesar 2A.
8. Hardware memiliki konfigurasi yang dapat dikembangkan dengan
minimal perubahan pada sistem maupun downtime.
9. Struktur memory PLC mudah dikembangkan.
2.1.1 Diagram Ladder
Pada PLC diagram kontrol dinamakan dengan diagram ladder (tangga).
Dinamakan diagram tangga dikarenakan bentuknya menyerupai tangga (bersusun
seperti tangga), seperti berjalan menuruni tangga mulai tangga atas dan perlahan
kebawah. Pada penggambaran diagram tangga dikenal simbol-simbol yang hampir
sama dengan relai-relai mekanik, yaitu: Normally Open (NO), Normally Close
(NC), Keluaran(output).[2]
2.1.1.1 Normally Open
NO merupakan salah satu jenis saklar yang dalam keadaan normal
berkondisi OFF , berupa satu kutub (berasal dari satu sumber) dan menghantarkan
arus hanya ke satu beban. Penghantaran arus dan tegangan (kondisi ON) dari
suatu sumber terjadi jika saklar terhubung, dan pemutusan arus dan tegangan
(kondisi OFF) terjadi saat saklar tidak terhubung atau ketika tidak mendapat arus,
gambar konfigurasi simbol NO dapat dilihat pada gambar 2.2.
9
Gambar 2.2 konfigurasi simbol NO[2]
2.1.1.2 Normally Close
Saklar ini menandakan keadaan saklar yang normalnya pada keadaan
ON/tertutup, jadi jika saklar tersebut diaktifkan akan menjadi OFF/terbuka.
Gambar konfigurasi simbol NC dapat dilihat pada gambar 2.3.
2.1.1.3 Keluaran (Output)
Keluaran dapat berupa relai yang akan mengaktifkan kontak-kontak NO
dan NC. Gambar konfigurasi simbol output dapat dilihat pada gambar 2.4.
Gambar 2.3 konfigurasi simbol NC[2]
Gambar 2.4 konfigurasi simbol output[2]
2.1.2 Instruksi-instruksi Logika dalam PLC
Instruksi-instruksi tangga atau ladder instruction adalah instruksi-instruksi
yang terkait dengan kondisi-kondisi di dalam diagram tangga. Instruksi-instruksi
tangga, baik yang independen maupun kombinasi atau gabungan dengan blok
instruksi berikut atau sebelumnya, akan membentuk kondisi-kondisi eksekusi.
10
2.1.2.1 Instruksi LOAD (LD) dan LOAD Not (LDNOT)
Instruksi LD digunakan untuk memasukkan masukan yang awal dari
tangga. Sedangkan NOT untuk menandakan kontak NC. Intruksi LD dan LDNOT
dibutuhkan hanya satu kondisi logika saja pada awal program. Bentuk diagram
ladder perintah tersebut dapat dilihat pada gambar 2.5.
LD
LDNOT
Gambar 2.5 Diagram ladder instruksi LD dan LDNOT[2]
2.1.2.2 Instruksi AND dan ANDNOT
Instruksi AND digunakan untuk memasukkan masukan yang di seri
dengan masukkan yang sebelumnya. Tentunya instruksi yang di seri harus
terpenuhi semuanya untuk mengeluarkan satu keluaran. Dalam bentuk ladder
perintah tersebut dapat dilihat pada gambar 2.6.
LD AND ANDNOT
Gambar 2.6 Diagram ladder instruksi AND dan NOT AND[2]
11
Untuk menganalisa gerbang AND dengan 2 buah masukan A dan B
dengan keluaran Q, maka terdapat 4 (empat) kemungkinan dan dapat dilihat pada
tabel 2.1.
a. Kemungkinan pertama, masukan A = 0 dan B = 0. Dengan kata lain
tidak ada masukan, maka keluarannya Q = 0.
b. Kemungkinan kedua, masukan pada A = 1 dan B = 0. Terdapat
masukan hanya di A dan tidak ada masukan pada B, maka
keluarannya Q = 0.
c. Kemungkinan ketiga, masukan pada A = 0 dan B = 1. Terdapat
masukan hanya di B dan tidak ada masukan pada A, maka
keluarannya Q = 0.
d. Kemungkinan keempat, masukan pada A = 1 dan B = 1. Terdapat
masukan pada A dan B, maka keluarannya Q = 1.
Tabel 2.1. Tabel kebenaran gerbang AND A B Q
0 0 0
1 0 0
0 1 0
1 1 1
Untuk menganalisa gerbang ANDNOT dengan 2 buah masukan A dan B
dengan keluaran Q, maka terdapat 4 (empat) kemungkinan dan dapat dilihat pada
tabel 2.2.
a. Kemungkinan pertama, masukan A = 0 dan B = 0. Dengan kata lain
tidak ada masukan, maka keluarannya Q = 1.
12
b. Kemungkinan kedua, masukan pada A = 1 dan B = 0. Terdapat
masukan hanya di A dan tidak ada masukan pada B, maka
keluarannya Q = 1.
c. Kemungkinan ketiga, masukan pada A = 0 dan B = 1. Terdapat
masukan hanya di B dan tidak ada masukan pada A, maka
keluarannya Q = 1.
d. Kemungkinan keempat, masukan pada A = 1 dan B = 1. Terdapat
masukan pada A dan B, maka keluarannya Q = 0.
Tabel 2.2. Tabel kebenaran gerbang ANDNOT
A B Q
0 0 1
1 0 1
0 1 1
1 1 0
2.1.2.3 Instruksi OR dan ORNOT
Instruksi OR digunakan untuk memasukkan masukan yang diparalelkan
dengan masukkan yang sebelumnya. Beberapa instruksi memungkinkan terletak
pada garis terpisah secara paralel, maka kondisi pertama merupakan instruksi load
(LD) dan sisanya berhubungan dengan instruksi OR atau ORNOT, gambar
diagram ladder dapat dilihat pada gambar 2.7.
13
LD
OR
ORNOT
Gambar 2.7 Diagram ladder instruksi OR dan ORNOT[2]
Untuk menganalisa gerbang OR, terdapat 4 (empat) kemungkinan dan
dapat dilihat pada tabel 2.3.
a. Kemungkinan pertama, masukan pada A = 0 dan B = 0. Dengan kata
lain tidak ada masukan, maka keluarannya Q = 0.
b. Kemungkinan kedua, masukan pada A = 1 dan B = 0. Terdapat
masukan pada A = 1 dan tidak ada masukan pada B, maka
keluarannya Q = 1.
c. Kemungkinan ketiga, masukan pada A = 0 dan B = 1. Terdapat
masukan pada B dan tidak ada masukan A, maka keluarannya Q = 1.
d. Kemungkinan keempat, masukan pada A = 1 dan B = 1. Terdapat
masukan pada A dan B, maka keluarannya Q = 1.
Tabel 2.3. Tabel kebenaran gerbang OR A B Q
0 0 0
0 1 1
1 0 1
1 1 1
14
Untuk menganalisa gerbang ORNOT, terdapat 4 (empat) kemungkinan
dan dapat dilihat pada tabel 2.4.
e. Kemungkinan pertama, masukan pada A = 0 dan B = 0. Dengan kata
lain tidak ada masukan, maka keluarannya Q = 1.
f. Kemungkinan kedua, masukan pada A = 1 dan B = 0. Terdapat
masukan pada A = 1 dan tidak ada masukan pada B, maka
keluarannya Q = 0.
g. Kemungkinan ketiga, masukan pada A = 0 dan B = 1. Terdapat
masukan pada B dan tidak ada masukan A, maka keluarannya Q = 0.
h. Kemungkinan keempat, masukan pada A = 1 dan B = 1. Terdapat
masukan pada A dan B, maka keluarannya Q = 0.
Tabel 2.4. Tabel kebenaran gerbang ORNOT
A B Q
0 0 1
0 1 0
1 0 0
1 1 0
2.1.2.4 Instruksi END
Instruksi terakhir yang harus dituliskan atau digambarkan dalam diagram
tangga adalah instruksi END. CPU pada PLC akan mengerjakan semua instruksi
dalam program dari awal (baris pertama) hingga ditemui instruksi END yang
pertama, sebelum kembali lagi mengerjakan instruksi dalam program dari awal
lagi, artinya instruksi-instruksi yang ada di bawah atau setelah instruksi END akan
15
diabaikan[2]. Gambar diagram ladder instruksi END dapat dilihat pada gambar
2.8.
END
Gambar 2.8 Diagram ladder instruksi END[2]
2.2 Mnemonic
Secara umum bahasa pemrograman yang digunakan pada PLC ada dua,
yakni bahasa kode dan bahasa gambar. Bahasa kode sering kita jumpai dengan
istilah kode mnemonic atau STL (statement list). Sedangkan bahasa gambar sering
kita jumpai dengan istilah ladder diagram atau diagram tangga.
Untuk berkomunikasi dengan PLC atau memprogram PLC digunakan suatu
alat yang disebut programmer/monitor. Dengan menggunakan
programmer/monitor ini dapat dimasukkan program ke dalam PLC dan juga dapat
memonitor proses yang dilakukan oleh PLC. Programmer/monitor sering juga
disebut hand held programmer dan mempunyai beberapa fungsi yaitu:
1. Off, difungsikan untuk mematikan PLC sehingga program yang dibuat
tidak dapat dijalankan
2. Run, difungsikan untuk pengendalian suatu proses pada saat program
dalam kondisi diaktifkan.
3. Monitor untuk mengetahui keadaan suatu proses yang terjadi pada PLC
4. Program yang menyatakan suatu keadaan dimana programmer/monitor
dapat digunakan untuk membuat program.
16
Kode mnemonik juga bahasa teknik yang merupakan sarana perantara untuk
memasukkan program ke dalam PLC khususnya menggunakan Personal
Computer atau konsole. Kode ini memuat keterangan mengenai instruksi dan data
operand. Deskripsi suatu proses kerja dari sebuah sistem yang dikontrol dapat
dituangkan ke dalam sebuah kode mnemonic yang memuat keterangan-keterangan
mengenai alamat dan tanggapan dari input-output, serta fungsi-fungsi program
pengontrol. Contoh tabel mnemonic dapat dilihat pada table 2.5 mnemonic PLC.
Tabel 2.5 Mnemonic PLC LD 00
AND 01
OUT 102
END
2.3 Mikrokontroller ATmega32
Mikrokontroler ATmega32 memiliki fitur yang cukup lengkap. Mulai dari
dari kapasitas memori program dan memori data yang cukup besar, interupsi,
timer/counter, PWM, RTC, USART, TWI, SPI, analog comparator, EEPROM
internal dan juga ADC internal semuanya ada dalam ATmega32. Sehingga dengan
fitur yang cukup lengkap kita dapat merancang suatu sistem untuk kepentingan
komersial mulai dari sistem yang sederhana sampai dengan sistem yang relative
kompleks hanya dengan menggunakan satu IC saja, yaitu dengan IC
ATmega32[3].
17
2.3.1 Fitur ATmega32
Berikut ini adalah fitur-fitur yang dimiliki oleh ATmega32:
a. 130 macam instruksi , yang hampir semuanya dieksekusi dalam satu
siklus clock.
b. 328-bit register serba guna.
c. Kecepatan mencapai 16 MIPS dengan clock 16MHz.
d. 32 KByte Flash Memori, yang memiliki fasilitas in-system
Programming.
e. 1024 Byte internal EEPROM dan 2 KByte SRAM.
f. Programming Lock, fasilitas untuk mengamankan kode program.
g. 2 buah timer/counter 8-bit dan 1 buah timer/counter 16-bit.
h. 4 channel output PWM
i. 8 channel ADC 10-bit dan serial USART.
1. 8 singgle-ended channel
2. 7 differential channel hanya pada kemasan TQFP
3. 2 differential channel dengan programmable gain 1x, 10x, atau
200x.
j. Master/Slave SPI serial interface dan serial TWI
k. Tegangan :
1. 2.7-5.5V untuk ATmega32L
2. 4.5-5.5V untuk ATmega32
18
Gambar 2.9 Konfigurasi pin ATmega32[4]
Pada gambar 2.9 menunjukkan konfigurasi pin ATmega32 , sehingga pin
tersebut dapat di deskripsikan sebagai berikut:
a. Power, VCC dan GND (ground)
b. PORTA (PORTA 70 ), merupakan pin IO dua arah dan berfungsi khusus
sebagai pin masukan ADC
c. PORTB (PORTB 70 ), merupakan pin IO dua arah dan fungsi khusus
sebagai pin timer/counter, komparator analog dan SPI
d. PORTC (PORTC 70 ), merupakan pin IO dua arah dan fungsi khusus
e. PORTD (PORTD 70 ), merupakan pin IO dua arah dan fungsi khusus
f. RESET adalah pin untuk me-reset mikrokontroler
g. XTAL1 dan XTAL2 pin untuk external clock
19
h. AVCC adalah pin masukan untuk tegangan ADC
i. AREF adalah pin masukan untuk tegangan referensi eksternal ADC[3].
Gambar 2.10 Arsitektur ATmega32[4]
Pada gambar 2.10 Mikrokontroler ATmega32 memiliki Hardvard, yaitu
memisahkan memori untuk kode program dan memori untuk data sehingga dapat
memaksimalkan unjuk kerja dan paralelisme. Instruksi-instruksi dalam memori
program dieksekusi dalam satu alur tunggal, dimana pada saat satu instruksi
dikerjakan instruksi berikutnya sudah diambil (pre-fetched) dari memori program.
Konsep inilah yang memungkinkan instruksi-instruksi dapat dieksekusi dalam
setiap satu siklus clock[3].
32 x 8-bit register serba guna digunakan untuk mendukung operasi pada
Arithmetic Logic Unit (ALU) yang dapat dilakukan dalam satu siklus. 6 dari
register serbaguna ini dapat digunakan sebagai 3 buah register pointer 16-bit pada
20
mode pengalamatan tak langsung untuk mengambil data pada ruang memori data.
Ketiga register pointer 16-bit ini disebut dengan register X (gabungan R26 dan
R27), register Y (gabungan R28 dan R29), dan register Z (gabungan R30 dan
R31).
Hampir semua instruksi AVR memiliki format 16-bit (word). Setiap alamat
memori program terdiri dari instruksi 16-bit atau 32-bit. Selain register serbaguna
diatas, terdapat register lain yang terpetakan dengan teknik memory mapped I/O
selebar 64 byte. Beberapa register ini digunakan untuk fungsi khusus antara lain
sebagai register kontrol Timer/Counter, Interupsi, ADC, UASRT, SPI, EEPROM
dan fungsi I/O lainnya. Register-register ini menempati memori pada alamat
0x20h-0x5Fh[3].
2.3.2 Organisasi Memori
Gambar 2.11. Organisasi memori ATmega32.[4]
21
Mikrokontroler ATmega32 memiliki 3 jenis memori yaitu memori
program, memori data dan memori EEPROM[3]. Ketiganya memiliki ruang
sendiri dan terpisah seperti terlihat pada gambar 2.11
2.3.2.1 Memori Program
ATmega32 memiliki kapasitas memori program sebesar 32 Kbyte yang
terpetakan dari alamat 0000h-3fffh dimana masing-masing alamat memiliki lebar
data 16 bit. Sehingga organisasi memori program seperti ini sering dituliskan
dengan 16K x 16 bit. Memori program ini terbagi menjadi 2 bagian yaitu bagian
program boot dan bagian program aplikasi. Jika kita tidak menggunakan fitur
Boot Loader Flash maka semua kapasitas memori programdiatas dapat digunakan
untuk program aplikasi. Tetapi jika kita menggunakan fitur Boot Loader Flash
maka pembagian ukuran kedua bagian ini ditentukan oleh BOOTSZ fuse[3].
2.3.2.2 Memori Data
Gambar 2.12 Peta Memori Data AVR ATmega32[4]
22
ATmega32 memiliki 2144 alamat memori data yang terbagi menjadi 3
bagian, yaitu 32 buah register file, 64 buah IO register file dan 2048byte internal
SRAM. Peta Memori Data AVR ATmega32 dapat dilihat pada gambar 2.12.
Tampak pada peta memoti data diatas bahwa alamat $0000-$001F ditempati oleh
register file. I/O register menempati alamat dari $0020-$005F. Sedangkan sisanya
sebagai internal SRAM sebesar 2048 byte ($0060-$085F)[3].
2.3.2.3 EEPROM
ATmega32 juga memliki memori data berupa EEPROM 8 bit sebesar
1024 byte yang terpisah dari memori program maupun memori data. Memori
EEPROM ini hanya dapat diakses dengan menggunakan register-register I/O yaitu
register EEPROM. Untuk mengakses memori EEPROM ini diperlakukan seperti
mengakses data eksternal sehingga waktu eksekusinya relatif lebih lama bila
dibandingkan dengan mengakses data dari SRAM[3].
2.3.2.3.1 Register EEARH and EEARL
Gambar 2.13 Register EEARH dan EEARL[4]
Register EEARH dan EEARL digunakan untuk menyimpan alamat
memori EEPROM yang akan diakses. Dengan kapasitas EEPROM sebesar 1024
Kbyte maka dibutuhkan 9-bit alamat (EEAR8...EEAR0)[3]. Gambar register
EEARH dan EEARL dapat dilihat pada gambar 2.13.
23
2.3.2.3.2 Register EEDR
Gambar 2.14 Register EEDR[4]
Bits 7..0 – EEDR7.0: data EEPROM
Pada proses penulisan EEPROM, register ini berisi data yang akan
dituliskan pada alamat EEPROM yang ditunjuk dalam register EEAR, sedangkan
pada opersi pembacaan EEPROM, register ini berisi data yang dibaca dari alamat
EEPROM yang ditunjuk dalam EEAR[3]. Gambar register EEDR dapat dilihat
pada gambar 2.14.
2.3.2.3.3 Register EECR
Gambar 2.15 Register EECR[4].
Gambar 2.15 merupakan register EECR. Register EECR merupakan
register yang mengontrol proses akses terhadap EEPROM. Bit yang digunakan
dalam register ini adalah bit EEMWE, EEWE, dan EERE yang masing-masing
menempati bit 0, bit 1, bit 2, dalam register tersebut.
Bits 7..4 – Res: Reserved Bits
Pada bit 7..4 ini akan selalu dibaca 0 (tidak digunakan)
Bit 3 – EERIE: EEPROM Ready Interrupt Enable
24
Bit EERIE digunakan untuk mengaktifkan interupsi EEPROM jika
bernilai ’1’ maka aktif dan jika bernilai ’0’ maka tidak aktif.
Bit 2 – EEMWE: EEPROM Master Write Enable
Bit EEMWE digunakan untuk mengaktifkan operasi tulis. Jika bit
EEMWE bernilai ’1’ maka pada saat bit EEWE diset ’1’ akan
menyebabkan data pada register EEDR dituliskan ke memori
EEPROM dengan alamat sesuai isi register EEAR dalam 4 siklus
clock. Tetapi jika bit EEMWE bernilai ’0’ maka pada saat bit EEWE
diset ’1’ tidak akan berpengaruh terhadap operasi tulis[3].
Bit 1 – EEWE:EEPROM Write Enable
Bit EEWE digunakan untuk memulai proses menulis data ke
EEPROM. Jika alamat dan data yang akan ditulis sudah ditentukan
maka data tersebut akan dituliskan ke EEPROM segera setelah bit
EEWE ini diset ’1’. Setelah proses menulis data selesai maka secara
otomatis bit EEWE akan bernilai ’0’.
Bit 0 – EERE: EEPROM Read Enable
Bit EEWE digunakan untuk memulai proses membaca data dari
EEPROM. Jika alamat dan data yang akan dibaca sudah ditentukan
maka data tersebut akan segera dibaca setelah bit EERE ini diset
’1’[3].
2.3.3 Register serbaguna
ATmega32 memiliki 32 byte register serbaguna yang terletak pada awal
alamat RAM seperti terlihat pada gambar 2.16.
25
Gambar 2.16. Register Serbaguna dari ATmega32[4]
Dari 32 byte register serbaguna diatas, 6 byte terakhir juga digunakan
sebagai register pointer yaitu register pointer X, register pointer Y dan register
pointer Z[3].
Gambar 2.17 Gambar register serbaguna[4]
26
2.3.4 Stack Pointer
Gambar 2.18 Gambar stack pointer[4]
Stack pointer digunakan untuk menyimpan data sementara (data variabel)
atau untuk menyimpan alamat program yang sedang dikerjakan pada saat terjadi
instruksi percabangan atau interupsi. Stack pointer menempati alamat memori
RAM paling atas dan akan turun semakin kebawah dengan bertambahnya data
yang disimpan. Instruksi PUSH digunakan untuk menyimpan data ke stack
pointer kemudian secara otomatis stack pointer berkurang 1. Sebaliknya instruksi
POP digunakan untuk mengambil data dari stack pointer kemudian secara
otomatis stack pointer bertambah 1[3]. Gambar stack pointer dapat dilihat pada
gambar 2.18.
2.3.5 Register I/O dan Port I/O
ATmega32 memiliki 64 byte register I/O yang dapat diakses sebagai
bagian dari memori RAM (menggunakan instruksi LD atau ST) atau dapat juga
diakses sebagai I/O (menggunakan instruksi IN atau OUT). Jika register I/O
diakses seperti mengakses data pada memori RAM maka register I/O di atas
menempati alamat 0020-005F, tetapi jika register I/O diakses seperti mengakses
I/O maka register I/O menempati alamat memori 0000-003F. Gambar register I/O
dan port I/O dapat dilihat pada gambar 2.19.
27
Gambar 2.19 gambar register I/O dan port I/O[4]
Semua port keluarga AVR bersifat bi-directional (dua arah) pada saat
berfungsi sebagai port I/O digital. Bahkan setiap pin dapat dikonfigurasikan baik
sebagai input maupun output secara individu tanpa mempengaruhi pin-pin yang
lain. Hal ini dapat dilakukan dengan perintah SBI dan CBI. Pengaturan pull-up
resistor internal. Meskipun demikian pengaturan pull-up resistor bisa saja dinon-
aktifkan melalui bit PUD pada register SFIOR. Jika bit PUD diset ’1’ maka berarti
konfigurasi pull-up port I/O non-aktif[3]. Register SFIOR dapat dilihat pada
gambar 2.20.
Gambar 2.20 gambar register SFIOR[4]
Tiga alamat memori I/O dialokasikan untuk mengatur konfigurasi setiap
port I/O yaitu:
1. Data Register (PORTx)
2. Data Direction Register (DDRx)
3. Port Input Pin (PINx)
Data Direction Register (DDRx) digunakan untuk mendefinisikan port
sebagai input atau sebagai output. Jika DDRx diisi ’1’ berarti sebagai output dan
jika diisi ’0’ berarti sebagai input. Data Register (PORTx) digunakan untuk
28
menyimpan data yang akan ditulis/dikeluarkan ke port I/O pada saat dikonfigurasi
sebagai output sedangkan Port Input Pin (PINx) digunakan untuk menyimpan data
yang terbaca dari port I/O pada saat dikonfigurasi sebagai input. Gambar port A,
B, C, D sebagai port I/O dapat dilihat pada gambar 2.21 dan gambar 2.22.
Gambar 2.21 Gambar port A, B, C, D sebagai register I/O[4]
29
Gambar 2.22 lanjutan gambar port A,B , C, D sebagai register I/O[4]
2.3.6 Timer/Counter
ATmega32 memiliki 3 modul timer yang terdiri dari 2 buah timer/counter
8-bit dan 1 buah timer/counter 16-bit. Ketiga modul timer/counter ini dapat diatur
dalam mode yang berbeda secara individu dan tidak saling mempengaruhi satu
sama lain. Selain itu semua timer/counter juga dapat difungsikan sebagai sumber
interupsi. Masing-masing timer/counter ini memiliki register tertentu yang
digunakan untuk mengatur mode dan cara kerjanya tetapi ada 2 register yang
digunakan secara bersama-sama yaitu register TIMSK dan register TIFR. Gambar
TIMSK dan TIFR dapat dilihat pada gambar 2.23 dan gambar 2.24.
30
2.3.6.1 TIMSK (Timer/Counter Interrupt Mask Register)
Gambar 2.23 TIMSK (Timer/Counter Interupt Mask Register)[4]
Bit 7 – OCIE2: Timer/Counter 2 Output compare Match Interupsi
Enable. OCIE2 digunakan untuk mengaktifkan interupsi Output
Compare Match Timer/Counter 2.
Bit 6 – TOIE2: Timer/Counter 2 Overflow Interrupt Enable. TICIE0
digunakan untuk mengaktifkan interupsi Overflow Timer/Counter 2.
Bit 5 – TICIE1: Timer/Counter 1 Input Capture Interrupt Enable.
TICIE1 digunakan untuk mengaktifkan interupsi Input capture
Timer/Counter 1.
Bit 4 – OCIE1A: Timer/Counter 1 Output Compare A Match Interrupt
Enable. OCIE1A digunakan untuk mengaktifkan interupsi Output
Compare A Match Timer/Counter 1.
Bit 3 – OCIE1B : Timer/Counter 1 Output Compare B match interrupt
Enable. OCIE1B digunakan untuk mengaktifkan interrupsi Output
Compare B Match Timer/Counter 1.
Bit 2 – TOIE1: Timer/Counter 1 Overflow Interrupt Enable. TOIE0
digunakan untuk mengaktifkan interupsi Overflow Timer/Counter 1.
Bit 1 – OCIE0: Timer/Counter 0 Output Compare Match Interrupt
Enable. OCIE0 digunakan untuk mengaktifkan interupsi Output
Compare Match Timer/Counter 0.
31
Bit 0 – TOIE0: Timer/Counter 0 Overflow Interrupt Enable. TOIE0
digunakan untuk mengaktifkan interupsi Overflow Timer/Counter 0.
2.3.6.2 TIFR
Gambar 2.24 TIFR[4]
TIFR merupakan register yang digunakan untuk mengetahui apakah
terjadi permintaan interupsi timer/counter atau tidak. Jika bernilai ’1’ berarti
terdapat permintaan interupsi, dan jika layanan interupsi diaktifkan maka program
akan melompat ke alamat vektor interupsi yang sesuai. Untuk mengatur semua
timer dibutuhkan prescaler, pengaturan prescaler dapat dilihat pada tabel 2.6
Tabel 2.6 pengaturan prescaler CS12 CS11 CS10 Description
0 0 0 No clock source (timer/counter stopped) 0 0 1 ClkIO/1 (No prescaling) 0 1 0 ClkIO/8 (No prescaling) 0 1 1 ClkIO/64 (No prescaling) 1 0 0 ClkIO/256 (No prescaling) 1 0 1 ClkIO/1024 (No prescaling) 1 1 0 Ekternal clock source on T1 pin. Clock on falling edge 1 1 1 Ekternal clock source on T1 pin. Clock on rising edge
2.3.6.3 Special Function Register I/O
Gambar 2.25 Special Function Register I/O[4]
Bit 1 – PSR10: Prescalar Reset Timer/Counter 1/0
32
Bit PSR10 digunakan untuk mereset skala clock pada timer/counter 1
dan timer/counter 0. jika bit PSR10 diset ’1’ maka akan mereset skala
clock timer/counter 1 dan timer/counter 0 menjadi 0.
Bit 1 – PSR2: Prescalar Reset Timer/Counter 2
Bit PSR2 digunakan untuk mereset skala clock pada timer/counter 2. jika
bit PSR2 diset ’1’ maka akan mereset skala clock timer/counter 2
menjadi 0. gambar special function register I/O dapat dilihat pada
gambar 2.25.
2.3.7 SPI (Serial Peripheral Interface)
Serial Peripheral Interface (SPI) merupakan salah satu mode komunikasi
serial syncrhronous kecepatan tinggi yang dimiliki oleh ATmega32. Komunikasi
SPI membutuhkan 3 jalur yaitu MOSI, MISO dan SCK. Melalui komunikasi SPI
ini data dapat saling dikirimkan baik antar mikrokontroler maupun antara
mikrokontroler dengan peripheral lain di luar mikrokontroler. Gambar SPI dapat
dilihat pada gambar 2.26.
1. MOSI : Master Output Slave Input Artinya jika dikonfigurasi sebagai
master maka pin MOSI ini sebagai output tetapi jika dikonfigurasi
sebagai slave maka pin MOSI ini sebagai input.
2. MISO : Master Input Slave Output Artinya berkebalikan dengan MOSI
di atas, jika dikonfigurasi sebagai master maka pin MISO ini sebagai
input tetapi jika dikonfigurasi sebagai slave maka pin MISO ini
sebagai output.
33
3. CLK : Clock Jika dikonfigurasi sebagai master maka pin CLK berlaku
sebagai output (pembangkit clock) tetapi jika dikonfigurasi sebagai
slave maka pin CLK berlaku sebagai input (menerima sumber clock
dari master)[3].
Gambar 2.26 SPI (Serial Pheripheral Interface)[4]
2.3.8 USART
Universal Synchronous and Asynchronous Serial Receiver and
Transmitter (USART) juga merupakan salah satu mode komunikasi serial yang
memiliki fleksibilitas tinngi, yang dapat digunakan untuk melakukan transfer data
baik antar mikrokontroler maupun dengan modul-modul eksternal termasuk PC
yang memiliki fitur UART.
34
Gambar 2.27 USART[4]
USART memungkinkan transmisi data baik secara synchronous maupun
asynchronous sehingga dengan demikian USART pasti kompatibel dengan
UART. Pada Atmega32, secara umum pengaturan mode komunikasi baik
synchronous maupun asynchronous adalah sama. Perbedaannya hanyalah terletak
pada sumber clock saja. Jika pada mode asynchronous masing –masing peripheral
memiliki sumber clock sendiri maka pada mode synchronous hanya ada satu
sumber clock yang digunakan secara bersama-sama. Dengan demikian secara
hardware untuk mode asynchronous hanya membutuhkan 2 pin yaitu TXD dan
RXD sedangkan untuk mode synchronous harus 3 pin yaitu TXD, RXD dan XCK.
Gambar USART dapat dilihat pada gambar 2.27.
35
Pada gambar 2.28 dan gambar 2.29 dapat dilihat Untuk mengatur mode
dan prosedur komunikasi USART dilakukan melalui register USCRA, UCSRB,
UCSRC, UBRRH, UBRRL dan UDR. Secara khusus untuk mengatur USART
baud rate menggunakan register UBRRL-UBRRH.
UBRRL dan UBRRH atau sering disebut sebagai UBRR merupakan
register yang digunakan untuk mengatur kecepatan/baudrate transmisi data pada
komunikasi USART. UBRR sebetulnya berupa register 16-bit tetapi untuk upper
bytenya yaitu register UBRRH digunakan bersama-sama dengan register UCSRC.
Sehingga untuk mengaksesnya diperlukan pemilihan register dengan
menggunakan bit URSEL[3].
Gambar 2.28 UBRRH dan UBRRL[4]
Gambar 2.29 UCSRC[4]
1. Bit 15-URSEL: Register Select
Jika bit URSEL, bernilai ’1’ berarti mengakses register UCSRC dan
jika bit URSEL benilai ’0’ berarti mengakses register UBRRH.
2. Bit 14:12-Tidak digunakan
3. Bit 11:0 – UBRR11:0 USART Baut Rate Register
36
UBRR11:0 adalah register dengan lebar 12-bit yang digunakan untuk
menentukan baudrate komunikasi USART. Pengaturan baudrate dan
penentuan nilai register UBBR dapat dihitung dengan rumus pada
tabel 2.7.
Tabel 2.7 Pengaturan Baud Rate[3]
Keterangan:
BAUD : Baudrate (bps)
Fosc : Frekuensi Osilator (Frekuensi kristal)
UBRR : Nilai register UBRR (UBRRH-UBRRL)
Pada tabel 2.7 pengaturan Baud Rate dapat dilihat perhitungan baudrate
sering dilakukan pendekatan terhadap hasil perhitungan rumus. Sebagai hasil
pendekatan akan menyebabkan terjadinya error, error yang muncul akibatnya
pendekatan ini dirumuskan:
%1001
BaudRate
BaudRateError chClosestMat
Keterangan:
Error :prosentase error yang dihasilkan
BaudRate :BaudRate hasil perhitungan
37
BaudRateClosest Match :BaudRate Pembulatan
2.4 Komunikasi Serial
Gambar 2.30 dapat dilihat penghubung komunikasi serial dengan DB9.
Komunikasi serial adalah pengiriman data secara serial (data dikirim satu per satu
secara berurutan) sehingga komunikasi serial jauh lebih lambat daripada
komunikasi parallel. Serial Port lebih sulit ditangani karena peralatan yang
duhubungkan ke serial port harus berkomunikasi menggunakan transmisi serial,
sedangkan data dikomputer diolah secara paralel. Oleh karena itu, data dari serial
port harus dikonversikan kebentuk paralel untuk bisa digunakan jika
menggunakan perangkat keras. Kelebihan serial port adalah jangkauan panjang
kabel yang lebih jauh dibandingkan paralel karena serial port mengirimkan logika
1 dengan kisaran tegangan – 3 volt sampai - 25 volt dan logika 0 sebagai + 3 volt
hingga + 25 volt, sehingga kehilangan daya karena panjangnya kabel bukan
masalah utama. Komunikasi serial port bersifat asinkron sehingga sinyal detak
tidak dikirim bersama data. Setiap word (kata) disinkronkan dengan start bit dan
satu pulsa detak (clock) internal di kedua sisi menjaga bagian data saat
pewaktuan.
Spesifikasi elektris dari serial port adalah sebagai berikut:
1. “Space” (logika 0) adalah tegangan antar +3 hingga + 25 volt.
2. “Mark” (logika 1) adalah tegangan antara – 3 hingga – 25 volt.
3. Daerah antara +3 volt hingga – 3 volt tidak didifinisikan atau tidak
terpakai.
4. Tegangan open circuit tidak boleh melebihi 25 volt.
38
5. Arus hubungan singkat tidak boleh melebihi 500 mA.
Gambar 2.30 Komunikasi Serial DB9
Konektor serial port terdiri atas 2 (dua) jenis yaitu konektor 25 pin (DB 25)
dan 9 pin (DB9) yang berpasangan (jantan dan betina). Bentuk dari konektor DB-
25 sama persis dengan port paralel [5]. Konfigurasi komuniksai serial dapat
dilihat pada tabel 2.8.
Tabel 2.8 Komunikasi Serial DB9
PIN SIGNAL 1 Data Carrier Detect 2 Received Data 3 Transmitted Data 4 Data Terminal Ready 5 Signal Ground 6 Data Set Ready 7 Request To Send 8 Clear to Send 9 Ring Indicator
MAX232 adalah multichannel RS232 driver / receiver yang hanya
membutuhkan single supply sebesar 5V. MAX232 memiliki jalur komunikasi RX
dan TX namun yang digunakan hanya bagian TX (Transmiter) saja dengan
ketentuan sebagai berikut:
39
1. Logic Low (0) pada input dapat menghasilkan tegangan output sebesar +10V.
2. Logic High (1) pada input menghasilkan tegangan output sebesar –10V.
Dalam aplikasi ini MAX232 digunakan untuk menerima keluaran dari
microcontroller, mengolahnya dan mengirimkan sinyal. Antarmuka serial
merupakan pintu gerbang komunikasi antara mikrokontroler dengan Base
Terminal (telepon seluler). Terminal memiliki gerbang serial yang dapat
digunakan untuk berkomunikasi dengan perangkat-perangkat yang lain.
Komunikasi serial tersebut menggunakan standar komunikasi serial UART
dengan 1 start-bit, 8 data-bit, dan 1 stop-bit. Pada antarmuka serial ini dibutuhkan
sebuah IC MAX232 sebagai pengkonversi tegangan digital yang dikeluarkan
gerbang serial yang dimiliki mikrokontroler dari tegangan standar 0-5 volt. Kaki
RXD merupakan kaki yang akan menerima data-data serial, sedangkan TXD
berfungsi mentransmisikan data-data serial dari mikrokontroler [5]. IC MAX232
dapat dilihat pada gambar 2.31.
Gambar 2.31 IC MAX232[6]
40
2.5 Relay
Relay adalah suatu komponen elektronika yang akan bekerja bila ada arus
yang melalui kumparannya. Sebuah relay terdiri dari kumparan yang dililitkan
pada inti besi dan kontak-kontak penghubung. Apabila kumparan yang melilit inti
besi dilalui arus listrik maka akan menimbulkan induksi medan magnet, dan
induksi ini akan menarik kontak-kontak penghubung relay. Diagram relay
ditunjukkan pada gambar 2.32 berikut ini.
Gambar 2.32 Relay
Kontak penghubung relay terdiri dari dua bagian, yaitu :
1. Kontak NC (Normally Close)
Kontak penghubung dalam kondisi menutup atau terhubung bila relay
tidak mendapat masukan tegangan pada kumparannya. Tetapi bila
diberi tegangan yang mencukupi pada kumparannya maka kontak
penghubung menjadi terbuka.
2. Kontak NO (Normally Open)
Kontak penghubung dalam kondisi terbuka bila relay tidak mendapat
tegangan pada kumparannya. Tetapi bila diberi tegangan yang
mencukupi pada kumparannya maka kontak penghubung menjadi
tertutup.
41
2.6 Driver Relay
Relay merupakan suatu modul output yang terdiri dari 8 relay. Relay sering
digunakan baik pada industri, otomotif, ataupun peraltan elektronik lainnya. Realy
berfungsi untuk menghubungkan atau memutus aliran arus listrik yang dikontrol
dengan memberikan tegangan dan arus tertentu pada koilnya dengan memberikan
tegangan dan arus tertentu pada koilnya. Pada IC ULN2803 ini terdapat transistor
darlington yang digunakan untuk menguatkan arus dari mikrokontroler yang
terhubung dengan relay[7], gambar IC ULN 2803 sebagai driver relay dapat
dilihat pada gambar 2.33.
Gambar 2.33 IC ULN2803 Driver Relay[7]
BAB III
PERANCANGAN PENELITIAN
3.1 Diagram Blok Perancangan CPU PLC
CPU PLC dapat diprogram menggunakan 2 alat pemrogram yaitu PC dan
konsol. Untuk komunikasi konsol dengan CPU PLC menggunakan komunikasi
serial RS-232 dan juga PC dengan CPU PLC menggunakan komunikasi serial RS-
232. Dalam pembuatan CPU PLC ini diperlukan perancangan perangkat keras
maupun perangkat lunak. Penulis disini merancang pada bagian CPU PLC,
komunikasi RS232, input, output. Input terdiri dari 8 saklar on/off dan indikator
led. Output terdiri dari 8 port output yang masing-masing port terhubung dengan
IC driver relay dan output dari IC tersebut terhubung dengan indikator led dan
relay. Perancangan peralatan yang dibuat meliputi penyusunan diagram blok,
rancangan perangkat keras dan bagan alir program (flow chart). Diagram blok
Sistem PLC dapat ditunjukkan pada gambar 3.1.
`
CPU PLC Mikrokontroler
ATmega32
RS 232 untuk komunikasi
INPUT dan
INPUT CNT, TIM
OUTPUT
PC atau KOMPUTER
CONSOLE
Gambar 3.1 Diagram blok sistem CPU PLC
42
43
3.2 Perancangan Perangkat Keras
Perancangan perangkat keras untuk alat ini menggunakan mikrokontroler
ATmega32. Dan komunikasi antar CPU PLC dengan konsol atau PC
menggunakan komunikasi serial RS-232.
3.2.1 Rangkaian Mikrokontroler
3.2.1.1 Konstruksi Rangkaian Mikrokontroler
Pada perancangan rangkaian CPU PLC yang menggunakan
mikrokontroler ATmega32 ini digunakan untuk menerima data yang masuk,
melalui TX dan RX, yang dikirim lewat PC (personal computer) atau konsol. Di
dalam rangkaian CPU PLC itu akan diolah datanya dan menjalankan subrutinnya
sesuai perintah dari konsol atau PC (personal computer). Dalam pengiriman dan
penerimaan data mikrokontroler menggunakan komunikasi serial RS-232. Untuk
rangkaian utama sistem CPU PLC dapat dilihat pada lampiran. Dari PC data
dikirim melalui konektor DB9 secara serial dan dihubungkan dengan IC max232,
dari IC dihubungkan ke mikrokontroler. Prosesor yang digunakan IC ATmega32
dengan kapasitas memori 32Kbyte terdiri dari 1Kbyte EEPROM dan 2Kbyte
SRAM. Supply untuk mikro sebesar 5 volt. Dalam rangkaian mikro terdapat
indikator-indikator, macam indikator adalah indikator error dihubungkan dengan
pin PD6, indikator RUN dihubungkan dengan pin PD4, indikator supply
dihubungkan dengan pin VCC. Kristal yang digunakan sebesar 4MHz dengan
kapasitor 22pF. Input dan output dihubungkan dengan konektor 10 kaki dengan 2
kaki VCC dan ground dan yang lainnya sebagai penghubung hardware yang
lainnya.
44
3.2.1.2 Rangkaian Reset
Gambar rangkaian reset dapat dilihat pada gambar 3.2. Reset digunakan
untuk mengembalikan keseluruhan sistem (program) ke awal. Reset terjadi
dengan adanya logika 1 selama minimal 2 cycle (2μ detik) pada kaki reset (pin 9)
berdasarkan datasheet. Pada perancangan, waktu pengosongan dipilih sebesar 10
ms dengan asumsi waktu reset telah lebih dari 2 µs. Bila nilai hambatannya (R)
dipilih 10 kΩ, maka nilai C adalah:
CRT
0,1 = 10.000 x C
C = 10 µF
C4
10uF
SW1
SW PUSHBUTTON
RESET PIN 9
GND
VCC R
10k
Gambar 3.2 Konfigurasi Rangkaian Reset
Saat tombol push button ditekan rangkaian reset akan memberikan
masukan ke mikrokontroler dengan logika low, sedangkan saat tombol reset
dilepas akan berlogika high.
3.2.1.3 Rangkaian Osilator
C2
22pF
C122pF
GND
Y1
4MHzXTAL1
XTAL2
Gambar 3.3 Konfigurasi Rangkaian Osilator
45
Osilator on-chip digunakan sebagai sumber detak (clock) ke
mikrokontroler. Penentuan Osilator yang digunakan dapat berpengaruh dalam
penggunaan baud rate untuk kecepatan data dalam komunikasi serial RS-232.
Dalam perancangan, kristal yang digunakan adalah kristal 7.2 MHz, karena
dengan kristal ini detak limpahan yang diperoleh berupa bilangan bulat. Gambar
rangkaian osilator dapat dilihat pada gambar 3.3. Untuk perancangan ini, baud
rate kecepatan serial yang digunakan adalah 9600bps dan frekuensi osilator yang
digunakan 7.2MHz, maka dapat diperoleh dengan perhitungan sebagai berikut
dengan menggunakan rumus yang ada pada tabel 2.6:
a. Untuk U2X = 0
46
1960016
7200000
UBRR
UBRR
b. Untuk U2X = 1
93
196008
7200000
UBRR
UBRR
Nilai UBRR di atas akan digunakan pada pemrograman mikrokontroler
sebagai inisialisasi komunikasi serial.
3.2.1.4 Indikator LED
Indikator LED berperan penting dalam CPU PLC. Seperti halnya CPU
PLC yang lainnya juga membutuhkan indikator/penanda. Indikator-indikator yang
dibutuhkan CPU PLC berupa indikator Error, indikator untuk komunikasi serial,
indikator supply DC untuk CPU PLC, indikator input/output.
46
3.2.1.4.1 Indikator Error
Indikator Error digunakan untuk mendeteksi bila ada data instruksi-
instruksi yang tidak cocok dengan data yang dituliskan di dalam memori CPU
PLC. Pada gambar 3.4 yang menunjukkan rangkaian LED yang digunakan
sebagai indikator error. Untuk menghidupkan LED pada indikator ini, pin PD7
harus bernilai low yang menyatakan error. VCC bernilai sebesar 5V yang
digunakan untuk menghidupkan LED.
VCC
R1330
D1
LED
PD7
Gambar 3.4 Indikator Error CPU PLC
I = 13mA (LED sudah memenuhi arus minimal yang diperlukan agar LED
menyala).
33076.33010.13
7.05
0
32
2
2
I
VVCCR
IVVCC
VIVCC
LED
RLED
LEDR
3.2.1.4.2 Indikator Komunikasi Serial RS-232
Indikator Komunikasi serial digunakan untuk mendeteksi bila ada
program dari Konsol atau PC yang dikirim ke CPU PLC. Pada gambar 3.5 yang
menunjukkan rangkaian indikator komunikasi serial RS-232. Rangkaian indikator
47
ini terhubung dengan output dari rangkaian RS-232 yang berlogika high atau low,
logika tersebut digunakan untuk mengirim data ke mikrokontroler.
I = 13mA (LED sudah memenuhi arus minimal yang diperlukan agar LED
menyala).
33076.33010.13
7.05
0
32
2
2
I
VVCCR
IVVCC
VIVCC
LED
RLED
LEDR
R1
RESISTOR
D1
LED
RX MAX MIKRO
GND
TX MAX232
Gambar 3.5 Indikator Komunikasi Serial RS-232 dengan CPU PLC
3.2.1.4.3 Indikator Supply CPU PLC
Indikator Supply CPU PLC digunakan untuk mendeteksi CPU PLC
sudah keadaan ON. Pada gambar 3.6 yang menunjukkan rangkaian indikator
supply, indikator ini mendapatkan VCC 5V dan terhubung ke pin VCC pada
mikrokontroler.
Gambar 3.6 Indikator Supplay CPU PLC
48
I = 13mA (LED sudah memenuhi arus minimal yang diperlukan agar LED
menyala).
33076.33010.13
7.05
0
32
2
2
I
VVCCR
IVVCC
VIVCC
LED
RLED
LEDR
3.2.1.4.4 Indikator Input
Input pada CPU PLC terdiri dari 8 port input, 8 port terhubung dengan
saklar on/off dan indikator led. Jika saklar keadaan on mikro akan aktif dan
memberi inputan data. Indikator Input digunakan untuk memberi tanda ke CPU
PLC, ketika CPU PLC membutuhkan masukkan sesuai dengan program yang
dikirim oleh konsol atau PC. Indikator itu dihubungkan ke pin PA0-7. dan VCC
yang digunakan 5V untuk menghidupkan LED dan saklar on/off yang
dihubungkan ke pin PA0-7 dengan logika high. Pada gambar 3.7 adalah gambar
indikator input.
I = 13mA (LED sudah memenuhi arus minimal yang diperlukan agar LED
menyala).
33076.33010.13
7.05
0
32
2
2
I
VVCCR
IVVCC
VIVCC
LED
RLED
LEDR
49
Gambar 3.7 Indikator Input
3.2.1.4.5 Indikator Output dan Relay
Indikator Output digunakan untuk memberikan tanda keadaan port
output aktif tinggi dan aktif rendah yang nanti akan dihubungkan dengan relay.
Indikator itu dihubungkan ke pin PC0-7
I = 13mA (LED sudah memenuhi arus minimal yang diperlukan agar LED
menyala).
33076.33010.13
7.05
0
32
2
2
I
VVCCR
IVVCC
VIVCC
LED
RLED
LEDR
50
Port output dari CPU PLC menggunakan 8 port output, tiap port output
akan dihubungkan dengan IC driver relay. IC yang digunakan yaitu IC
ULN2803A. IC disini adalah sekumpulan transistor Darlington Array dengan
konfigurasi darlington sehingga mempunyai β (penguatan arus) yang besar. IC ini
mampu menguatkan arus dari keluaran mikro untuk mengaktifkan relay. Pada
gambar 3.8 adalah gambar indikator output yang terhubung dengan relay dan
driver relay.
Gambar 3.8 Indikator OUTPUT
51
52
3.2.2 Komunikasi Serial RS-232
Komunikasi secara serial (serial communications) merupakan cara
menghantar data yang lebih mudah dikendalikan berbanding dengan komunikasi
parallel (parallel communications) disebabkan sistem komunikasi parallel terlalu
mahal untuk kegunaan jarak jauh. Data yang bernilai 8 bit dikirim secara satu bit
demi satu bit ke mikrokontroler. Pengiriman data pada IC mikrokontroler fasilitas
yang digunakan untuk komunikasi serial adalah UART (Universal Asynchronous
Receiver Transmitter). Komunikasi serial juga boleh disifatkan sebagai simpleks
(simplex), dupleks setengah (half duplex), dan dupleks penuh (full duplex). Port
serial yang terdapat pada PC (personal computer) biasanya berfungsi sebagai port
dupleks penuh. Tegangan pada level RS-232 menjadi level logika “1”
didefinisikan -3 volt sampai -15 volt, dan logika “0” didefinisikan +3 volt sampai
+15 volt. Pada level TTL yang didefinisikan untuk kondisi “0” volt sampai 0,4
volt dan untuk kondisi “1” tegangannya 2,4 volt sampai 5 volt. Dalam
perancangan ini untuk mengubah level tegangan tersebut digunakan IC MAX-232
dengan 5 buah kapasitor sebesar 1uF/25volt, dengan tegangan catunya sebesar 5
volt. Dengan perangkat tersebut diharapkan dapat digunakan untuk mengirimkan
data/karakter dari komputer ke mikrokontroler dengan sempurna. Baud rate yang
digunakan adalah 9600 Bps, dengan frekuensi osilator 7.2MHz pada
mikrokontroler. Pada gambar 3.9 adalah gambar konfigurasi komunikasi serial
yang terhubung antara CPU PLC dengan PC.
53
C4
1uF
/25V
C3
1uF
/25v
TX
C21uF/25V
GND
C11uF/25v
VCC +5v
DB9
123456789 GND
U2
MAX232_0
138
1110
134526
129147
16
15
R1INR2INT1INT2IN
C+C1-C2+C2-V+V-
R1OUTR2OUTT1OUTT2OUT
VCC
GND
RX
C5
1uF
/25v
GND
VCC
Gambar 3.9 Konfigurasi Komunikasi RS-232
3.3 Perancangan Perangkat Lunak
Mikrokontroler adalah bentuk minimum dari komputer pada sebuah IC yang
berfungsi sebagi unit pengontrol suatu aplikasi tertentu. Mikrokontroler terdiri
dari perangkat keras dan perangkat lunak. Oleh karena itu agar mikrokontroler
dapat dipakai sebagai unit pengontrol tentunya harus diprogram terlebih dahulu.
3.3.1 Komunikasi Serial
Komunikasi data secara serial pada perangkat lunak mikrokontroller
ATmega32 dimulai dengan inisialisasi penggunaan port serial dengan menentukan
mode operasi port serial, pengaturan baudrate, mode komunikasi serial. Dalam
penerimaan data dan pengiriman data secara serial melibatkan USART (Universal
Synchronous and Ashincrounous Serial Receiver and Transmitter), USART
merupakan komunikasi yang memiliki fleksibilitas tinggi, yang dapat digunakan
untuk melakukan transfer data baik antar mikrokontroler maupun dengan modul-
54
modul eksternal termasuk PC yang memiliki fitur UART. Untuk mengatur mode
dan prosedur komunikasi USART dilakukan melalui register UCSRA, UCSRB,
UCSRC, UBRRH, UBRRL, dan UDR. Pada gambar 3.10 adalah subrutin
komunikasi serial.
Inisialisasi USART (USART keadaan default)
Ada data
masuk ?
Tampung di UDR dan kirim ke memori PLC (memori EEPROM)
Data selesai kirim ?
Tidak
Baca data di memori CPU PLC
Ya
Ya
Tidak
End
Start
Gambar 3.10 Subrutin komunikasi serial
Inisialisasi USART
Dalam proses inisialisasi ada beberapa buah register yang perlu ditentukan
nilainya yaitu : UCSRA, UCSRB, UCSRC, UBRRH, UBRRL. Pada proses
55
penerimaan data menggunakan mode 8 bit, mode 8 bit ini diatur pada UCSRB
terletak pada UCSZ2 dikondisikan 0, sedangkan UCSRC terletak pada UCSZ1
kondisi 1 dan UCSZ0 kondisi 1. Untuk mode penerimaan terletak pada UCSRA
terletak pada RXC dan TXC dikondisikan 1. Seperti terlihat pada gambar 3.11.
UCSRA
UCSRB
UCSRC
Kondisi default UCSRA
0 0 1 0 0 0 0 0 UCSRB
0 0 0 0 0 0 0 0 UCSRC
1 0 0 0 0 1 1 0 Pengaturan saat mengaktifkan USART UCSRA
1 1 0 0 1 0 0 1 UCSRB
1 1 0 1 0 0 0 0 UCSRC
0 1 1 0 0 1 1 0 Gambar 3.11 Aktivasi komunikasi serial
3.3.2 Diagram alir Utama pada Mikrokontroler
Pemograman mikrokontroler untuk CPU PLC ini digunakan untuk
membaca masukkan kode baik dari Konsol atau dari PC. Kode yang dikirim
56
adalah logika-logika PLC. Logika-logika itu akan dikerjakan sesuai dengan apa
yang dituliskan. Kode kiriman itu akan dibandingkan dengan kode yang telah
tersimpan di dalam memori utama CPU PLC. Mekanisme kerja diagram alir CPU
PLC sebagai berikut:
Saat Konsol atau PC/Komputer mengirim program berupa kode ke CPU
PLC, CPU PLC mengaktifkan baudrate, port RXC. Kode akan dikirim per bit
sehingga CPU PLC bekerja menerima bit kiriman itu dengan memberi tanda pada
tiap kiriman yaitu bit paritas pada mikrokontrolernya dan diakhiri stop paritas
juga. Sehingga mikrokontroler dapat mengetahui bahwa ada kiriman data yang
harus dikerjakan, komunikasi ini terletak pada USART pada mikrokontroler.
Setelah CPU PLC melakukan komunikasi, CPU PLC akan membaca kode
kiriman. CPU PLC membaca kiriman RUN, CPU PLC akan melakukan eksekusi
kode kiriman. Saat mikrokontroler membaca kiriman kode, kode akan
dibandingkan dengan kode yang telah dituliskan di dalam memori mikrokontroler
tersebut. Setelah kodenya sama CPU PLC mengerjakan sesuai intruksi yang
terpilih. Saat CPU PLC membaca kode END, CPU PLC akan kembali membaca
dari awal lagi. Data hasil komunikasi akan disimpan di memori CPU PLC,
disimpan di memori EEPROM mulai dari alamat 0. Pembacaan kode kiriman
dimulai dari alamat 0 juga. Pada gambar 3.12 adalah subrutin diagram alir utama.
57
Cek kode = program
Ya
Tidak Jalankan program yang sudah tersimpan di memori CPU PLC
Jalankan subrutin komunikasi serial
Kirim ke memori PLC dan simpan
Masuk ke subrutin pemilihan kode
Masuk ke subrutin pembacaan isi alamat memori PLC
Jalankan program yang sudah dibaca dan dieksekusi
End
Inisialisasi memori PLC Inisialisasi memori utama CPU PLC
Start
Gambar 3.12 diagram alir utama mikrokontroler
3.3.2.1 Subrutin Pembacaan Isi Alamat Memori PLC
Pembacaan memori dilakukan berurutan dari alamat terendah sampai
alamat yang paling tinggi. Isi kode tiap-tiap alamat di memori PLC adalah 8bit.
Dari kode tersebut akan dibaca dan akan dibandingkan dengan memori utama
CPU PLC. Saat kode dikirim oleh konsol dan PC, kode akan di alamatkan pada
58
memori PLC. Memori PLC ini digunakan untuk menampung kode kiriman,
sehingga alamat memori PLC perlu di inisialisasikan terlebih dahulu supaya
pembacaan memorinya mudah dikenali. Setiap ada kode baru dikirim, kode
tersebut akan selalu dialamatkan dengan alamat yang sama juga (kode baru akan
menumpuk kode yang lama). Kode yang telah dikirim akan dibaca oleh memori
utama CPU PLC akan dibandingkan kodenya dengan memori utama CPU PLC.
Gambar 3.13 adalah diagram alir pembacaan isi alamat memori PLC.
Ada instruksi END ?
Ya
Tidak
Start
Inisialisasi Alamat Memori PLC
Alamat = Alamat + 1
Baca isi Alamat memori PLC
Jalankan subrutin pemilihan kode
Gambar 3.13 Diagram Alir Pembacaan Isi Alamat Memori PLC
3.3.2.2 Subrutin Pemilihan kode
Gambar 3.14, gambar 3.15, gambar 3.16, gambar 3.17 dapat ditunjukkan
diagram alir subrutin pemilihan kode. Subrutin pemilihan kode ini dilakukan pada
59
mode RUN. Mekanisme kerja pemilihan kode yang sesuai dengan kiriman sebagai
berikut:
1. Membaca memori utama CPU PLC
2. Pilih kode yang sesuai dengan kode kiriman baik dari PC atau dari
console
3. Memilih apakah kodenya sesuai dengan kode yang dituliskan di
memori utama, jika kodenya sama maka jalankan program sesuai
kodenya. Jika kodenya tidak sama maka cocokkan dengan kode yang
lainnya sampai dengan kode terakhir berupa kode END maka
program akan memerintahkan kembali membaca memori utama
(selalu berulang terus).
END
Baca memori utama CPU PLC
Kode = LD NOT
Kode = LD
Kode = AND NOT
ENDEND
H
Pilih kode yang sesuai
YA
Jalankan subrutin LD
NOT
YA
Jalankan subrutin LD
YA
Jalankan subrutin
AND NOT
Tidak Tidak A
Tidak
Start
Gambar 3.14 Subrutin pemilihan kode
60
Kode = AND
A
END
Kode = OR NOT
Kode = OR
Jalankan subrutin AND
Tidak Tidak B Tidak
YA
ENDEND
YA
Jalankan subrutin OR
NOT
YA
Jalankan subrutin OR
Kode = AND TIM
END
Kode = AND TIM NOT
Jalankan subrutin AND TIM
Jalankan subrutin AND TIM NOT
C
Kode = Timer
END
Kode = LDTIM
END
Kode = LD TIM
Not
END
Jalankan subrutin Timer
B
YA YA YA
Jalankan subrutin LD TIM NOT
Jalankan subrutin LDTIM
Tidak
C Tidak Tidak
Tidak D Tidak
YA YA
END
Gambar 3.15 lanjutan Subrutin pemilihan kode
61
Kode = OR TIM
END
Kode = OR TIM NOT
END
D
Jalankan subrutin OR TIM NOT
Jalankan subrutin OR TIM
Tidak Kode = Counter E
Jalankan subrutin counter
YA
END
Tidak
YA YA
Kode = LD CNT
END
Kode = LD CNT NOT
E
Jalankan subrutin LD CNT NOT
Jalankan subrutin LD CNT
Tidak F Tidak
YA YA
END
Kode = AND CNT
END
Jalankan subrutin AND CNT
Tidak Kode = AND CNT NOT
Jalankan subrutin AND CNT NOT
Tidak G
YA
END
F
YA
Gambar 3.16 Lanjutan subrutin pemilihan kode
62
Kode = OR CNT
END
Jalankan subrutin OR CNT
YA
Tidak
G
Kode = OR CNT NOT
END
YA
Tidak Tidak H
YA
Jalankan subrutin END program
Jalankan subrutin OR CNT NOT
END
Kode = END
program
Gambar 3.17 Lanjutan subrutin pemilihan kode
3.3.2.3 Subrutin Logika LD
Pada pemograman untuk logika LD pada PLC merupakan awal dari
sebuah program yang dituliskan oleh Konsol atau PC. Program LD sendiri adalah
program yang menghubungkan logika-logika PLC dengan logika-logika PLC
yang lainnya, dengan keadaan awal OFF dan akan ON jika diberi masukkan. Saat
Konsol atau PC mengirim kode ke memori PLC, saat itu pula memori utama akan
siap membaca kiriman untuk dibandingkan dengan memori utama. Gambar 3.18
adalah diagram alir subrutin logika LD.
Sistem kerja logika LD adalah saat PLC diberi inputan data logika LD
ini berfungsi sebagai awal dari program PLC. Saat baca data dari port input data
itu akan disimpan pada alamat penyimpan 1. Setelah data tersimpan di alamat
penyimpan 1 data tersebut akan digeser sesuai port input. Setelah data digeser data
63
tersebut akan disimpan di alamat penyimpan 2. Setelah selesai menyimpan logika
ini diperintahkan untuk kembali membaca memori PLC.
Baca port input dan baca data (isi port)
Simpan hasil geser ke alamat penyimpan 2
Jalankan operasi geser sesuai dengan alamat port
input
Simpan data ke alamat penyimpan 1(data=Port
Input)
YA
Tidak Simpan data ke alamat penyimpan 1(data=0x00)
Simpan ke alamat penyimpan 2
Kembali
Ada input ?
Alamat = alamat + 1
Kembali
Start
Gambar 3.18 Diagram alir Subrutin LD
3.3.2.4 Subrutin Logika LDNOT
Pemograman pada mikrokontroler dengan logika LDNOT hamper sama
dengan logika LD, bedanya dengan logika LD disini adalah LDNOT sebelum
diberi masukkan sudah aktif terlebih dahulu dan jika diberi masukkan logika
64
tersebut akan off. Proses pengiriman dan pembacaan sama dengan program LD.
Sistem kerja dari LDNOT adalah data dari port input akan dibaca dan akan di
NOT kan terlebih dahulu. Setelah di NOT kan data tersebut akan disimpan pada
alamat penyimpan 1. Setelah disimpan data tersebut akan digeser sesuai dengan
alamat port input, ketika mikro menjalankan operasi geser data tersebut akan
disimpan di alamat penyimpan 2. Setelah data tersimpan logika ini akan
diperintahkan untuk kembali membaca memori PLC dan melakukan subrutin
yang lainnya. Gambar 3.19 adalah diagram subrutin logika LDNOT.
Start
Baca port input dan baca data (isi port)
Simpan ke alamat penyimpan 2
Simpan data ke alamat penyimpan 1(data=0x00)
YA
Tidak Simpan data ke alamat penyimpan 1(data=0xFF)
Simpan ke alamat penyimpan 2
Kembali
Ada input ?
Alamat = alamat + 1
Kembali
Gambar 3.19 Diagram alir Subrutin LDNOT
65
3.3.2.5 Subrutin Logika AND
Pemrograman untuk logika AND, logika AND akan aktif jika kedua
masukkan aktif atau berlogika 1, dan jika salah satu kedua masukkan tidak aktif
atau berlogika 0, logika AND tidak akan aktif. Sistem kerja dari logika AND
adalah baca port input terlebih dahulu setelah terbaca datanya disimpan dialama
penyimpan 1 dan geser datanya, setelah digeser data tersebut di AND kan dengan
Simpan hasil AND ke alamat penyimpan 2
Gambar 3.20 Diagram alir Subrutin AND
Jalankan operasi geser sesuai dengan alamat port input
Baca port input dan baca data (isi port)
Alamat penyimpan 2 di AND kan dengan hasil operasi geser
Simpan data ke alamat penyimpan 1(data=Port Input)
Alamat = alamat + 1
Simpan hasil AND ke alamat penyimpan 2
Jalankan operasi geser sesuai dengan alamat port input
Alamat penyimpan 2 di AND kan dengan hasil operasi geser
Simpan data ke alamat penyimpan 1(data=0x00)
Kembali
Tidak
YA
Ada Input?
Kembali
Start
66
data port input dan simpan di alamat penyimpan 2. Gambar 3.20 adalah diagram
alir subrutin logika AND.
3.3.2.6 Subrutin Logika ANDNOT
Simpan hasil AND ke alamat penyimpan 2
Jalankan operasi geser sesuai dengan alamat port input
Baca port input dan baca data (isi port)
Alamat penyimpan 2 di AND kan dengan hasil operasi geser
Simpan data yang di NOT kan ke alamat penyimpan 1(data=0x00)
Alamat = alamat + 1
Simpan hasil AND ke alamat penyimpan 2
Jalankan operasi geser sesuai dengan alamat port input
Alamat penyimpan 2 di AND kan dengan hasil operasi geser
Simpan data ke alamat penyimpan 1(data=0xFF)
Kembali
Tidak
YA
Ada Input?
Kembali
Start
Gambar 3.21 Diagram alir Subrutin ANDNOT
Pemrograman logika ANDNOT sama dengan logika NAND, jika salah
satu aktif atau berlogika 1 maka keadaan akan aktif. Keadaan awal logika
ANDNOT disini sudah aktif dan jika mendapat masukkan logika ini akan off.
67
Sistem kerja dari logika ANDNOT adalah data port input akan dibaca dan akan
NOT kan terlebih dahulu, setelah di NOT kan data disimpan di alamat penyimpan
1. Setelah disimpan data tersebut akan digeser dan akan di AND kan dengan data
input, dan akan disimpan pada alamat penyimpan 2. Gambar 3.21 adalah diagram
alir subrutin logika ANDNOT.
3.3.2.7 Subrutin OR
Simpan hasil OR ke alamat penyimpan 2
Gambar 3.22 Diagram alir Subrutin OR
Jalankan operasi geser sesuai dengan alamat port input
Baca port input dan baca data (isi port)
Alamat penyimpan 2 di OR kan dengan hasil operasi geser
Simpan data ke alamat penyimpan 1(data=Port Input)
Alamat = alamat + 1
Simpan hasil OR ke alamat penyimpan 2
Jalankan operasi geser sesuai dengan alamat port input
Alamat penyimpan 2 di OR kan dengan hasil operasi geser
Simpan data ke alamat penyimpan 1(data=0x00)
Kembali
Tidak
YA
Ada Input?
Kembali
Start
68
Logika ini akan aktif jika salah satu inputan diberi masukan. Sistem kerja
dari logika OR adalah data dari port input akan dibaca dan akan disimpan di
alaamat penyimpan 1. setelah tersimpan data tersebut akan digeser sesuai dengan
alamat port input, setelah tersimpan data tersebut akan di OR kan dengan data port
input dan akan disimpan di alamat penyimpan 2. Setelah tersimpan mikro akan
memerintahkan untuk membaca kembali isi memori PLC. Gambar 3.22 adalah
diagram alir subrutin logika OR.
3.3.2.8 Subrutin OR NOT
Logika ORNOT adalah logika dari kebalikannya logika OR, logika
ORNOT ini sudah aktif terlebih dahulu. Jika logika ORNOT mendapat masukan
logika ini tidak akan aktif. Pada mikrokontroler logika ORNOT merupakan hasil
dari logika OR di NOT kan ( 1 di NOT kan menjadi 0 ). Gambar 3.23 adalah
diagram alir subrutin logika ORNOT.
Sistem kerja dari logika ORNOT adalah baca data dari port input, data
tersebut akan di NOT kan terlebih dahulu sesuai data inputnya.setelah di NOT kan
data itu akan digeser sesuai dengan port inputnya. Dan data itu akan disimpan di
alamat penyimpan 1. Setelah data tersimpan data tersebut akan di ORNOT kan
dengan data input. Setelah di ORNOT kan data tersebut disimpan di alamat
penyimpan 2. Setelah data tersimpan pada program mikronya akan
memerintahkan untuk membaca kembali memori PLC.
69
Simpan hasil OR ke alamat penyimpan 2
Jalankan operasi geser sesuai dengan alamat port input
Baca port input dan baca data (isi port)
Alamat penyimpan 2 di OR kan dengan hasil operasi geser
Simpan data yang di NOT kan ke alamat penyimpan 1(data=0x00)
Alamat = alamat + 1
Simpan hasil OR ke alamat penyimpan 2
Jalankan operasi geser sesuai dengan alamat port input
Alamat penyimpan 2 di OR kan dengan hasil operasi geser
Simpan data ke alamat penyimpan 1(data=0xFF)
Kembali
Tidak
YA
Ada Input?
Kembali
Start
Gambar 3.23 Diagram alir Subrutin ORNOT
3.3.2.9 Subrutin Logika Timer
Logika timer, pada pemrograman mikrokontroler menggunakan
frekuensi 7.2MHz untuk 1 clocknya.
TCCR1B
70
TIMSK
TIFR
Kondisi timer yang digunakan TCCR1B
0 0 0 0 0 1 0 1 TIMSK
0 0 0 0 0 1 0 0 TIFR
0 0 0 0 0 1 0 0 Gambar 3.24 aktivasi timer1
Pada perancangan timer, kristal yang digunakan sebesar 7.2MHz sehingga untuk
mengaktifkan timer satu detik sama dengan 7200000 siklus. Untuk mengatur
prescaler dapat dilihat pada tabel 2.6, jika prescaler yang di inginkan adalah 64,
akan di dapatkan sebagai berikut:
11250064
72000001 ms
Oleh karena timer count up dan overflow jika melewati $FFFF ke $0000, maka
register TCNT1 diisi dengan 112500.
//inisialisasi timer void timer1_ctc_init(void)//inisialisasi timer n=dataku;//data timer yang diinginkan TCCR1A |=(0<<WGM11)|(0<<WGM10); TCCR1B |=(1<<WGM12)|(1<<CS11)|(1<<CS10);//1:64 OCR1A =(n)*(112500);//tundaan 1 detik f=7.2Mhz TIMSK |=_BV(TOIE1); TIFR &= (1<<OCF0); for(;;) if(TCNT1==OCR1A)//jika cacah timer=data yang dituliskan pada timer
71
rina1[4]=TCNT1;nilai TCNT1 disimpan di rina1 alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); TIFR=(1<<OCF1A);mereset kembali timer cek();
Sistem kerja dari timer adalah timer di dalam mikrokontroler akan
terlebih dahulu diatur prescalernya. Untuk timer disini diatur dengan prescaler 64
supaya timer bekerja dengan baik. Saat timer telah aktif dan mencapai overflow
timer akan mereset sendiri atau membuat diri timer sendiri menjadi nol. Jika timer
yang di inginkan 5 ms maka timer di dalam mikro akan mengalikan dengan timer
1 ms dan akan menyimpan hasil perkalian. Inisialisasi timer meliputi TCCR1A,
TCCR1B, OCR1A, TIMSK, TIFR. TCCR1A dan TCCR1B digunakan untuk
mengatur mode timer yang menggunakan mode CTC, register OCR1A digunakan
untuk mengatur waktu tunda selama 1 ms, register TIMSK digunakan untuk
mengatur timer 1. Register TIFR digunakan untuk mengetahui apakah terjadi
permintaan interupsi timer atau tidak. Pertama TIFR diset 0 dan saat timer aktif
TIFR berubah menjadi 1. Untuk mengaktifkan timer kembali menggunakan
register TIFR yang di OR kan dengan register OCF1A, register OCF1A bernilai 1.
CPU PLC mengatur OCF1A 1 ms dengan mode 3 yaitu clock timer 1 sama
dengan 1/64 frekuensi kristal yang digunakan CPU PLC, frekuensi yang
digunakan 7,2 MHz.. Setelah tersimpan timer akan aktif dengan timer value yang
telah di simpan. Timer disini akan selalu mengecek apakah timer sudah terpenuhi
semuanya sesuai timer yang diinginkan, Gambar 3.25 adalah diagram alir subrutin
timer.
72
Start
Inisialisasi timer (pengaturan prescaler)
Inisialisasi konstanta pengali untuk timer 1 detik
Baca data input
Jalankan operasi perkalian antara data input dengan data yang telah di set
Simpan data hasil perkalian
Aktifkan timer mikro dengan timer value yang sesuai dengan data hasil perkalian
Jalankan proses timer
Timer selesai ?
Status = 1
Status = 0
Ya
Tidak
Kembali
Gambar 3.25 subrutin timer
73
3.3.2.10 Subrutin Logika LD TIM
Baca status timer
simpan data ke alamat penyimpan 1
Baca data #11111111b
Status =1 Tidak
Ya
Baca data #00000000b
Jalankan operasi geser
Simpan ke alamat penyimpan 2
Kembali
Start
Gambar 3.26 logika LD TIM
Sistem kerja logika LD TIM adalah saat logika timer selesai logika LD
TIM akan bekerja membaca status timer, jika status timer = 1 data akan dibaca
#11111111b dan akan disimpan dialamat penyimpan 1. Jika sudah tersimpan data
tersebut akan digeser sebanyak 0 kali dan hasil geser tersebut akan disimpan di
alamat penyimpan 2. Setelah tersimpan program di dalam mikro memerintahkan
untuk membaca kembali. Digeser 0 kali dikarenakan data yang akan keluar dan
74
akan disimpan adalah data #11111111b, jadi data berapapun yang digeser data
tersebut akan sama. Gambar 3.26 adalah diagram alir subrutin logika LD TIM.
3.3.2.11 Subrutin Logika LD TIM NOT
Baca status timer
simpan data ke alamat penyimpan 1
Baca data #00000000b
Status =1 Tidak
Ya
Baca data #11111111b
Jalankan operasi geser
Simpan ke alamat penyimpan 2
Kembali
Start
Gambar 3.27 logika LD TIM NOT
Sistem kerja logika LD TIM NOT adalah saat logika timer selesai logika
LD TIM NOT akan bekerja membaca status timer, jika status timer = 1 data akan
dibaca #00000000b dan akan disimpan dialamat penyimpan 1. Jika sudah
tersimpan data tersebut akan digeser sebanyak 0 kali dan hasil geser tersebut akan
disimpan di alamat penyimpan 2. Setelah tersimpan program di dalam mikro
75
memerintahkan untuk membaca kembali. Digeser 0 kali dikarenakan data yang
akan keluar dan akan disimpan adalah data #00000000b, jadi data berapapun yang
digeser data tersebut akan sama. Gambar 3.27 adalah diagram alir subrutin logika
LD TIM NOT.
3.3.2.12 Subrutin Logika AND TIM
Baca status timer
Jalankan operasi geser
simpan data ke alamat penyimpan 1
Baca data #11111111b
Status =1 Tidak
Ya
Data timer yang telah digeser di AND kan dengan data timer yang tersimpan di
alamat penyimpan 2
Baca data #00000000b
Simpan ke alamat penyimpan 2
Kembali
Start
Gambar 3.28 Logika AND TIM
76
Sistem kerja logika AND TIM adalah saat logika timer selesai logika
AND TIM akan bekerja membaca status timer, jika status timer = 1 data akan
dibaca #11111111b dan akan disimpan dialamat penyimpan 1. Jika sudah
tersimpan data tersebut akan digeser sebanyak 0 kali dan hasil geser tersebut akan
di AND kan dengan data dialamat penyimpan 2 dan akan disimpan di alamat
penyimpan 2. Setelah tersimpan program di dalam mikro memerintahkan untuk
membaca kembali memori PLC. Digeser 0 kali dikarenakan data yang akan keluar
dan akan disimpan adalah data #11111111b, jadi data berapapun yang digeser
data tersebut akan sama. Gambar 3.28 adalah diagram alir subrutin logika AND
TIM.
3.3.2.13 Subrutin Logika AND TIM NOT
Sistem kerja logika AND TIM NOT adalah saat logika timer selesai
logika AND TIM NOT akan bekerja membaca status timer, jika status timer = 1
data akan dibaca #00000000b dan akan disimpan dialamat penyimpan 1. Jika
sudah tersimpan data tersebut akan digeser sebanyak 0 kali dan hasil geser
tersebut akan di AND kan dengan data dialamat penyimpan 2 dan akan disimpan
di alamat penyimpan 2. Setelah tersimpan program di dalam mikro
memerintahkan untuk membaca kembali. Digeser 0 kali dikarenakan data yang
akan keluar dan akan disimpan adalah data #00000000b, jadi data berapapun yang
digeser data tersebut akan sama. Gambar 3.29 adalah diagram alir subrutin logika
AND TIM NOT.
77
Baca status timer
Jalankan operasi geser
simpan data ke alamat penyimpan 1
Baca data #00000000b
Status =1 Tidak
Ya
Data timer yang telah digeser di AND kan dengan data timer yang tersimpan di
alamat penyimpan 2
Baca data #11111111b
Simpan ke alamat penyimpan 2
Kembali
Start
Gambar 3.29 Logika AND TIM NOT
78
3.3.2.14 Subrutin Logika OR TIM
Baca status timer
Jalankan operasi geser
simpan data ke alamat penyimpan 1
Baca data #11111111b
Status =1 Tidak
Ya
Baca data #00000000b
Data timer yang telah digeser di OR kan dengan data timer yang tersimpan di alamat penyimpan 2
Simpan ke alamat penyimpan 2
Kembali
Start
`
Gambar 3.30 Logika OR TIM
Sistem kerja logika OR TIM adalah saat logika timer selesai logika OR
TIM akan bekerja membaca status timer, jika status timer = 1 data akan dibaca
#11111111b dan akan disimpan dialamat penyimpan 1. Jika sudah tersimpan data
tersebut akan digeser sebanyak 0 kali dan hasil geser tersebut akan di OR kan
dengan data di alamat penyimpan 2 dan akan disimpan di alamat penyimpan 2.
Setelah tersimpan program di dalam mikro memerintahkan untuk membaca
79
kembali memori PLC. Digeser 0 kali dikarenakan data yang akan keluar dan akan
disimpan adalah data #11111111b, jadi data berapapun yang digeser data tersebut
akan sama. Gambar 3.30 adalah diagram alir subrutin logika OR TIM.
3.3.2.15 Subrutin Logika OR TIM NOT
Baca status timer
Jalankan operasi geser
simpan data ke alamat penyimpan 1
Baca data #00000000b
Status =1 Tidak
Ya
Baca data #11111111b
Data timer yang telah digeser di OR kan dengan data timer yang tersimpan di alamat penyimpan 2
Simpan ke alamat penyimpan 2
Kembali
Start
Gambar 3.31 Logika OR TIM NOT
Sistem kerja logika OR TIM NOT adalah saat logika timer selesai logika
OR TIM NOT akan bekerja membaca status timer, jika status timer = 1 data akan
dibaca #00000000b dan akan disimpan dialamat penyimpan 1. Jika sudah
80
tersimpan data tersebut akan digeser sebanyak 0 kali dan hasil geser tersebut akan
di OR kan dengan data di alamat penyimpan 2 dan akan disimpan di alamat
penyimpan 2. Setelah tersimpan program di dalam mikro memerintahkan untuk
membaca kembali. Digeser 0 kali dikarenakan data yang akan keluar dan akan
disimpan adalah data #00000000b, jadi data berapapun yang digeser data tersebut
akan sama. Gambar 3.31 adalah diagram alir subrutin logika OR TIM NOT.
3.3.2.16 Subrutin Logika OUT
Logika OUT dalam PLC cara yang paling mudah untuk mengeluarkan
hasil kombinasi kondisi eksekusi dengan menyambung langsung dengan keluaran
melalui intstruksi OUTPUT (OUT) ataupun OUTPUT NOT (OUTNOT). Kedua
instruksi ini digunakan untuk mengontrol bit operan yang bersangkutan berkaitan
dengan kondisi eksekusi (apakah ON atau OFF). Dengan menggunakan instruksi
OUT, maka bit operan akan menjadi ON jika kondisi eksekusinya juga ON.
Sistem kerja dari logika OUT adalah saat logika OUT bekerja saat logika
–logika yang diinginkan telah bekerja dan disimpan dialamat penyimpan 2. Data
dialamat penyimpan 2 dibaca dan dicek terlebih dahulu apa datanya lebih dari
0x00 jika ya data di OR kan dengan 0xFF dan disimpan di variabel temp, dan
kembali lagi di AND kan dengan port output yang diinginkan dan kembali lagi
disimpan di variabel temp, setelah disimpan data di OR kan dengan port output
yang diinginkan dan kembali lagi membaca memori CPU PLC. Gambar 3.32
adalah diagram alir subrutin logika OUT.
81
Baca hasil data sementara pada alamat penyimpan 2
Simpan data di variabel temp
Data di OR kan 0xFF
Simpan lagi di variabel temp
Data dari variabel temp di AND kan dengan port output yang diinginkan
Data dari variabel temp di OR kan dengan Port output yang diinginkan
Cek data lebih dari
0x00 ?
YA
Tidak
Data dari variabel temp di OR kan dengan Port output yang diinginkan
Data dari variabel temp di AND kan dengan 0x00
Simpan lagi di variabel temp
Data 0x00 di OR kan 0xFF
Simpan data di variabel temp
Kembali
Start
Gambar 3.32 Diagram alir Logika OUT
3.3.2.17 Subrutin Logika OUTNOT
Pada pemrograman mikrokontroler logika OUTNOT, dengan logika
telah aktif terlebih dahulu, jika mendapat masukkan logika OUTNOT tidak akan
82
aktif. Logika ini akan dihubungkan ke aplikasi yang digunakan sesuai dengan
program yang telah dituliskan oleh Konsol atau PC. Gambar 3.33 adalah diagram
alir subrutin logika OUTNOT.
Start
Baca hasil data sementara pada
alamat penyimpan 2
Data di OR kan 0x00
Simpan data di variabel temp
Simpan lagi di variabel temp
Data dari variabel temp di AND kan dengan port output yang diinginkan
Data dari variabel temp di OR kan dengan Port output yang diinginkan
Cek data lebih dari
0x00 ?
YA
Tidak
Data dari variabel temp di OR kan dengan Port output yang diinginkan
Data dari variabel temp di AND kan dengan 0x00
Simpan lagi di variabel temp
Data 0x00 di OR kan 0x00
Simpan data di variabel temp
Kembali
Gambar 3.33 Diagram alir Logika OUT NOT
83
3.3.2.18 Subrutin Logika Counter
Logika Counter pada pemrograman mikrokontroler digunakan untuk
mencacah dan diberi masukkan. Logika Counter dalam PLC sama dengan logika
dalam mikrokontroler, logika Counter aktif setelah mencacah. Gambar 3.34 dan
gambar 3.35 adalah diagram alir subrutin logika Counter dan logika proses CNT.
Inisialisasi Register counter Rc = 0
Inisialisasi port input
Baca data CNT
Simpan Rc = data CNT
CNT Selesai ?
Masuk ke subrutin proses CNT
Status = 1 Status = 0
Tidak
YA
End
Start
Gambar 3.34 Logika Counter
84
Baca port input
Geser sesuai port
Baca logika
Port input berubah ?
Ya
Ada kode Load
setelah kode CNT
Baca kode data
Dec Rc
Tidak
Tidak Program Error
Ya
Start
kembali
Gambar 3.35 Proses CNT
Logika counter disini bekerja sebagai pencacah, logika counter akan
aktif jika diberi masukan pada port input. Kerja dari logika counter saat aktif naik
85
dan aktif turun, jika logika aktif naik maka conter mencacah 1 dan seterusnya, dan
jika counter berlogika aktif turun counter tidak mencacah. Register counter disini
digunakan untuk menyimpan data dari port input. Setelah tersimpan di register
counter mikro akan membaca perubahan kondisi apakah kondisi naik/mendapat
input atau kondisi turun/tidak mendapat input. Dan mikro akan mengurangi data
sesuai data counter yang diinginkan jika port input mendapat masukan. Setelah
mengurangi mikro akan mengecek apakah isi register counter sudah sama dengan
nol, jika sama dengan nol simpan hasil counter dan menjalankan proses counter.
Setelah menjalankan proses counter, counter akan mengecek statusnya. Apakah
status counter status = 1 atau status = 0 counter akan selalu menempatkan data
terakhir dieksekusi supaya jalannya program tidak terganggu. Dan jika sudah
terpenuhi maka counter akan melanjutkan ke logika counter yang diinginkan oleh
PLC. Dalam logika counter ini harus terdapat logika LD setelah menuliskan
logika counter, dituliskan logika LD dikarenakan data input dari logika counter ini
adalah data input dari port yang bias mengaktifkan counter sendiri yang didalam
mikrokontroler.
3.3.2.19 Subrutin Logika LD CNT
Sistem kerja dari logika LD CNT adalah saat logika counter selesai
logika LD CNT akan bekerja membaca status counter, jika status counter = 1 data
akan dibaca #11111111b dan akan disimpan di alamat penyimpan 1. jika sudah
tersimpan data akan digeser sebanyak 0 kali dan hasil geser data akan disimpan di
alamat penyimpan 2, setelah tersimpan dialamat penyimpan 2 mikro akan
memerintahkan kembali membaca instruksi selanjutnya. Digeser 0 kali
86
dikarenakan data yang akan keluar dan akan disimpan adalah data #11111111b,
jadi data berapapun yang digeser data tersebut akan sama. Gambar 3.36 adalah
diagram alir subrutin logika LD CNT
Baca status counter
Jalankan operasi geser
simpan data ke alamat penyimpan 1
Baca data #11111111b
Ya
Status =1 Tidak
Baca data #00000000b
Simpan ke alamat penyimpan 2
Kembali
Start
Gambar 3.36 Logika LD CNT
87
3.3.2.20 Subrutin Logika LD CNT NOT
Sistem kerja dari logika LD CNT NOT adalah saat logika counter
selesai logika LD CNT NOT akan bekerja membaca status counter, jika status
counter = 1 data akan dibaca #00000000b dan akan disimpan di alamat
penyimpan 1. Jika sudah tersimpan data akan digeser, hasil geser data akan di
simpan di alamat penyimpan 2. jika sudah tersimpan mikro akan memerintahkan
untuk kembali membaca instruksi selanjutnya. Digeser 0 kali dikarenakan data
Baca status Counter
Jalankan operasi geser
simpan data ke alamat penyimpan 1
Baca data #00000000b
Ya
Status =1 Tidak
Baca data #11111111b
Simpan ke alamat penyimpan 2
Kembali
Start
Gambar 3.37 logika LD CNT NOT
88
yang akan keluar dan akan disimpan adalah data #00000000b, jadi data berapapun
yang digeser data tersebut akan sama. Gambar 3.37 adalah diagram alir subrutin
logika LD CNT NOT.
3.3.2.21 Subrutin Logika AND CNT
Baca status counter
Jalankan operasi geser
simpan data ke alamat penyimpan 1
Baca data #11111111b
Status =1 Tidak
Ya
Data counter yang telah digeser di AND kan dengan data counter yang tersimpan
di alamat penyimpan 2
Baca data #00000000b
Simpan ke alamat penyimpan 2
Kembali
Start
Gambar 3.38 Logika AND CNT
Sistem kerja logika AND CNT adalah saat logika counter selesai logika
AND CNT akan bekerja membaca status counter, jika status counter = 1 data akan
89
dibaca #11111111b dan akan disimpan di alamat penyimpan 1. Jika sudah
tersimpan di lakukan penggeseran data dan hasil geser tersebut akan di AND kan
dengan data di alamat penyimpan 2 dan akan disimpan di alamat penyimpan 2.
Gambar 3.38 adalah diagram alir subrutin logika AND CNT.
3.3.2.22 Subrutin Logika AND CNT NOT
Baca status counter
Jalankan operasi geser
Kembali
simpan data ke alamat penyimpan 1
Baca data #00000000b
Status =1 Tidak
Ya
Data counter yang telah digeser di AND kan dengan data counter yang tersimpan di alamat penyimpan 2
Baca data #11111111b
Simpan ke alamat penyimpan 2
Start
Gambar 3.39 Logika AND CNT NOT
90
Sistem kerja logika AND CNT NOT adalah saat logika counter selesai
logika AND CNT NOT akan bekerja membaca status counter, jika status counter
= 1 data akan dibaca #00000000b dan akan disimpan di alamat penyimpan 1. Jika
sudah tersimpan dilakukan penggeseran data, hasil penggeseran data di AND kan
dengan data di alamat penyimpan 2. hasil AND akan disimpan dialamat
penyimpan 2. Setelah disimpan mikro akan memerintahkan kembali membaca
instruksi selanjutnya. Digeser 0 kali dikarenakan data yang akan keluar dan akan
disimpan adalah data #00000000b, jadi data berapapun yang digeser data tersebut
akan sama. Gambar 3.39 adalah diagram alir subrutin logika AND CNT NOT.
3.3.2.23 Subrutin Logika OR CNT
Sistem kerja logika OR CNT adalah saat counter selesai logika OR CNT
akan bekerja membaca status counter, jika status counter = 1 data akan dibaca
#11111111b dan akan disimpan di alamat penyimpan 1. Jika sudah tersimpan data
akan digeser dan hasil geser akan di OR kan dengan data di alamat penyimpan 2
dan disimpan di alamat penyimpan 2. Setelah tersimpan mikro akan
memerintahkan membaca kembali instruksi di memori PLC. Digeser 0 kali
dikarenakan data yang akan keluar dan akan disimpan adalah data #11111111b,
jadi data berapapun yang digeser data tersebut akan sama. Gambar 3.40 adalah
diagram alir subrutin logika OR CNT.
91
Baca status counter
Jalankan operasi geser
simpan data ke alamat penyimpan 1
Baca data #11111111b
Status =1 Tidak
Ya
Data counter yang telah digeser di OR kan dengan data counter yang tersimpan di alamat penyimpan 2
Baca data #00000000b
Simpan ke alamat penyimpan 2
Kembali
Start
Gambar 3.40 Logika OR CNT
3.3.2.24 Subrutin Logika OR CNT NOT
Sistem kerja logika OR CNT NOT adalah saat logika counter selesai
logika OR CNT NOT akan bekerja membaca status counter, jika status counter =
1 data akan dibaca #00000000b dan akan disimpan di alamat penyimpan 1. Jika
sudah tersimpan, dilakukan penggeseran data dan hasil penggeseran akan di OR
kan dengan data di alamat penyimpan 2 dan hasil OR tersebut di simpan di alamat
92
penyimpan 2, setelah tersimpan mikro akan memerintahkan kembali membaca
instruksi selanjutnya di memori PLC. Digeser 0 kali dikarenakan data yang akan
keluar dan akan disimpan adalah data #00000000b, jadi data berapapun yang
digeser data tersebut akan sama. Gambar 3.41 adalah diagram alir subrutin logika
OR CNT NOT.
Kembali
Simpan ke alamat penyimpan 2
Baca status counter
Jalankan operasi geser
Data counter yang telah digeser di OR kan dengan data counter yang tersimpan di alamat penyimpan 2
simpan data ke alamat penyimpan 1
Baca data #00000000b
Status =1 Tidak
Ya
Baca data #11111111b
Start
Gambar 3.41 Logika OR CNT NOT
BAB IV
HASIL PENGAMATAN DAN PEMBAHASAN
Pada bab IV ini penulis akan menjelaskan hasil pengamatan dari peralatan
yang dibuat oleh penulis. Dari pengujian ini akan didapatkan data-data maupun
bukti-bukti hasil akhir dari kenyataan, apakah perangkat keras dan lunak yang
telah dibuat bisa bekerja sesuai dengan perancangan atau tidak. Berdasarkan data
dan bukti-bukti tersebut dapat dilakukan analisa terhadap proses kerja yang
nantinya dapat digunakan untuk menarik kesimpulan dari apa yang telah disajikan
dalam tugas akhir ini.
4.1 Model CPU PLC
Gambar 4.1 Model CPU PLC
1 2 3 4
Keterangan gambar:
1. Rangkaian CPU PLC menggunakan ATMEGA32
2. Rangkaian komunikasi
3. Rangkaian INPUT CPU PLC
4. Rangkaian OUTPUT CPU PLC
93
94
CPU PLC di atas menggunakan mikro ATmega32. Port A sebagai port
input, port C sebagai port output. Port input menggunakan logika high, logika
high dilogikakan 1. Demikian juga pada port output. Untuk komunikasi data dari
CPU PLC ke console ataupun dari CPU PLC ke PC menggunakan IC max232
yang menggunakan komunikasi asinkron, dengan piranti kabel serial. Cara
penggunaan CPU PLC disini adalah:
a) Hubungkan kabel serial.
b) Hidupkan supply tegangan 12V.
c) Kirim data ke CPU PLC baik menggunakan console ataupun PC. Jika data
dikirim, CPU PLC akan mengirimkan tanda “!” ke alat pengirim data.
Tanda “!” tersebut adalah tanda pengiriman sukses.
d) Beri input sesuai data kiriman atau diagram ladder, jika tidak diberi input,
CPU PLC tidak akan berfungsi. Jika CPU PLC diberi input, CPU PLC
akan mengerjakan fungsi-fungsi dari diagram ladder yang telah dituliskan
dengan mnemonic.
e) Hasil eksekusi dapat dilihat pada port output. Setelah terlihat hasilnya,
CPU PLC akan mengulang membaca data kiriman.
4.2 Prinsip dan cara kerja CPU PLC
CPU PLC ini menggunakan IC mikrokontroler ATMEGA32, untuk
mengaktifkan IC ATMEGA32 membutuhkan tegangan ±5Volt. CPU PLC akan
bekerja jika mendapat data dari console atau PC. Data yang didapat oleh CPU
PLC adalah kode-kode logika PLC. Data komunikasi akan disimpan di memori
EEPROM. Setelah CPU PLC mendapat kode RUN, CPU PLC akan mulai bekerja.
95
Pertama yang akan dikerjakan CPU PLC adalah membaca data kiriman baik dari
console ataupun PC. Pembacaan ini dimulai di alamat 0x00 pada memori
EEPROM (sebagai memori CPU PLC). Setelah data dibaca, data tersebut akan
dibandingkan dengan data yang dituliskan oleh penulis dan diletakkan pada
memori flash. Jika data kiriman sama dengan data yang ada pada memori flash,
maka data tersebut akan dijalankan atau dieksekusi. Setelah data pertama dibaca
dan dibandingkan, CPU PLC akan meminta kembali membaca data kiriman pada
memori CPU PLC. Setelah terbaca, data tersebut akan kembali dibandingkan
dengan data yang ada pada memori flash. CPU PLC akan membaca port input
terlebih dahulu. Jika port input aktif maka data akan disimpan di memori CPU
PLC di alamat lain, dan data tersebut juga sebagai data yang akan dieksekusi
untuk logika-logika PLC. Jika port input tidak aktif maka datanya adalah 0 (nol).
Setelah menyimpan data, CPU PLC memerintahkan kembali untuk membaca data
kiriman. Jika menemukan kode logika out, yang pertama dilakukan CPU PLC
adalah membaca data yang tersimpan hasil eksekusi logika-logika sebelum logika
out. Setelah membaca, data akan dieksekusi sesuai output yang
diinginkan(misalkan data yang akan dioutputkan berada di port C.0). Jika logika
out telah dijalankan, CPU PLC akan memerintah kembali untuk membaca data
kiriman, jika logika terakhir dari data kiriman tersebut adalah logika END, CPU
PLC akan kembali membaca data kiriman dari awal dan mengosongkan memori
penyimpan 1 dan 2 yang digunakan untuk menyimpan data hasil eksekusi.
96
4.3 Analisa perangkat lunak
Pada gambar diagram alir 3.12 dijelaskan proses utama dari CPU PLC. Pada
proses CPU PLC ada berbagai proses yang harus dikerjakan dahulu sebelum
melakukan proses utama.
4.3.1 Inisialisasi
Pada proses inisialisasi, mendefinisikan variabel, alamat memori CPU
PLC dan komunikasi. Proses inisialisasi digunakan untuk mempermudah kerja
dari CPU PLC. Jika alamat memori CPU PLC tidak dipetakan dahulu, CPU PLC
akan kesulitan membaca dan mengeksekusi. Kode-kode logika juga akan
dipetakan dahulu, supaya data hasil komunikasi sesuai dengan kode yang dibuat
oleh konsol ataupun PC.
4.3.2 Komunikasi
Proses komunikasi berdasarkan diagram ladder 3.10 dapat dilihat pada
potongan program gambar 4.2
Inisialisasi komunikasi
Gambar 4.2 potongan program komunikasi
97
Saat proses komunikasi, CPU PLC mengaktifkan UBRRH, UBRRL,
UCSRC, UCSRB. UBRRH dan UBRRL berfungsi untuk mengatur baudrate,
baudrate berfungsi sebagai pengatur kecepatan pengiriman data. UCSRC
digunakan untuk mengatur mode pengiriman data. Pengiriman data ke CPU PLC
menggunakan mode 2 yaitu komunikasi asinkron dan sinkron. UCSRB digunakan
untuk membuat enable pada RXCIE, RXEN, TXEN sehingga komunikasi aktif.
Komunikasi aktif dapat dilihat pada gambar 4.2. Pada bagian UCSRA, RXC nya
akan aktif jika ada data masuk dan diterima oleh UDR. Dari UDR data dikirim ke
memori CPU PLC. Data yang dikirim ke memori CPU PLC disimpan mulai dari
alamat 0x00, yang terletak di memori EEPROM. Proses penyimpanan data
komunikasi dapat dilihat pada gambar 4.3 dan gambar 4.4. Proses penyimpanan
dilakukan jika eepromstatus=1, data akan terus disimpan sampai data terakhir.
Data terakhir yang disimpan adalah data END.
Gambar 4.3 program menyimpan pada memori CPU PLC (memori EEPROM)
Disimpan di memori CPU PLC
Gambar 4.4 hasil komunikasi disimpan pada memori CPU PLC
98
4.3.3 Pembacaan kode kiriman pada memori CPU PLC
Proses pembacaan memori CPU PLC dimulai dari alamat 0x00 yang
terletak di memori EEPROM ATMEGA32. Proses pembacaan dapat dilihat dari
potongan program gambar 4.5. Pembacaan kode kiriman dilakukan per 8 bit,
pembacaan dikerjakan pada memori CPU PLC yang akan dibandingkan dengan
kode yang ada pada CPU PLC. Pembacaan kode dilakukan peralamat mulai dari
alamat 0x00 sampai alamat terakhir pengiriman yaitu alamat yang isinya kode
END. Pembacaan kode pada EEPROM terletak pada EEDR, data yang terbaca
akan di letakkan pada EEDR, setelah data terbaca EEPROM akan kembali ke
EEDR.
Gambar 4.5 Program pembacaan memori
Inisialisasi pembacaan memori CPU PLC
99
Data yang terbaca di memori CPU PLC
Gambar 4.6 kode yang terbaca pada memori CPU PLC
4.3.4 Pembandingan kode kiriman dengan kode yang
disimpan pada memori CPU PLC
Kode yang dituliskan
kode yang akan dibandingkan
Gambar 4.7 Potongan program kode yang akan dibandingkan
100
Kode yang terbaca akan dibandingkan dengan kode yang dituliskan
oleh CPU PLC. Pembacaan kode dilakukan saat CPU PLC mendapatkan kode
RUN, pembacaan dilakukan pada alamat memori CPU PLC, yang pembacaanya
dilakukan pada register EEDR mulai dari alamat 0x00. Jika kode yang terbaca
sama, maka CPU PLC akan mengerjakan sampai kode yang terbaca END. Kode
END terbaca maka CPU PLC akan kembali membaca data kiriman mulai dari
alamat 0x00.
4.4 Analisa perangkat keras (komunikasi console dengan CPU
PLC)
4.4.1 Logika LD dan logika AND
Gambar 4.8 gambar diagram ladder 1
002
001 OUT 101
Dari gambar 4.8 diagram ladder 1 dapat dituliskan mnemoniknya LD 001 AND 002 OUT 101 END
Tabel 4.1 Hasil pengujian CPU PLC dari diagram ladder 1 LD 001 AND 002 OUT 101 Hasil Pengujian
Aktif Tidak aktif Tidak Aktif Gambar 4.9 Tidak Aktif Aktif Tidak Aktif Gambar 4.10
Aktif Aktif Aktif Gambar 4.15
Diagram ladder 1 gambar 4.8 dapat di ujikan pada CPU PLC, hasil
pengujiannya sebagai berikut:
101
1. Jika logika-logika yang dituliskan mnemonik diatas tidak mendapatkan
input, maka output dari hasil eksekusi tidak akan menyala(output tidak
aktif).
2. Jika logika LD 001 mendapat input dan logika AND 002 tidak
mendapatkan input maka output tidak menyala(tidak aktif). Saat logika
LD 001 aktif dan logika AND 002 tidak aktif sehingga outputnya tidak
aktif dapat dilihat pada gambar 4.9.
LD 001 aktif AND 002 tidak aktif Output tidak aktif
Gambar 4.9 logika LD 001 aktif dan logika AND 002 tidak aktif
3. Jika logika LD 001 tidak mendapatkan input dan logika AND 002
mendapat input sehingga output tidak menyala(tidak aktif). Logika LD
001 tidak aktif dan logika AND 002 tidak aktif dapat di lihat pada
gambar 4.10.
Gambar 4.10 logika LD 001 tidak aktif dan logika AND 002 aktif
102
4. Jika logika LD 001 mendapat input dan logika AND 002 mendapat input
sehingga output menyala(aktif). Logika LD 001 aktif dan logika AND
002 aktif dapat dilihat pada gambar 4.15.
Masukan untuk CPU PLC Eksekusi logika LD
Gambar 4.11 program eksekusi logika LD
Data yang akan disimpan di memori CPU PLC
Alamat penyimpan 1 dan 2 di memori CPU PLC
Gambar 4.12 hasil eksekusi yang tersimpan di memori CPU PLC
103
Gambar 4.13 Program logika AND 002
Eksekusi logika AND 02
Kode logika OUT yang terpilih
Hasil eksekusi pada logika OUT
Gambar 4.14 Program logika 0UT 101
Saat logika LD 001 aktif data akan disimpan di alamat penyimpan 1 dan 2.
Logika LD 001 aktif dapat dilihat pada gambar 4.11. Setelah data tersimpan, CPU
PLC akan kembali membaca data kiriman. Data yang terbaca adalah logika AND
104
002. Logika AND 002 aktif data akan disimpan dan akan di AND kan. Data yang
di AND kan akan disimpan di alamat penyimpan 2. CPU PLC akan kembali
membaca data kiriman. Data yang terbaca adalah logika OUT. Logika OUT yang
dikerjakan terlebih dahulu adalah membaca data yang disimpan di alamat
penyimpan 2. Setelah data terbaca, logika OUT akan meng OR kan data yang
terbaca satu persatu. Alur kerja logika OUT dapat dilihat pada gambar 4.14. Hasil
eksekusi diagram ladder 1 dapat dilihat pada gambar 4.8.
Gambar 4.15 hasil diagram ladder 1
OUT 101
LD 001 AND 002
4.4.2 Logika LD dan logika OR
002
001 OUT 101
Gambar 4.16 diagram ladder 2
Dari gambar 4.16 diagram ladder 2 dapat dituliskan mnemoniknya sebagai berikut: LD 001 OR 002 OUT 101 END
105
Tabel 4.2 Hasil pengujian CPU PLC dari diagram ladder 2 LD 001 OR 002 OUT 101 Hasil Pengujian
Aktif Tidak aktif Aktif Gambar 4.18 Tidak Aktif Aktif Aktif Gambar 4.19 Tidak Aktif Tidak Aktif Tidak Aktif Gambar 4.17
Diagram ladder 2 dari gambar 4.16 dapat diujikan pada CPU PLC, hasil
pengujiannya sebagai berikut:
1. Jika logika-logika yang dituliskan diatas tidak mendapat input, maka
logika out tidak aktif. Hasil dari eksekusi dapat dilihat pada gambar 4.17.
Saat CPU PLC tidak mendapatkan input maka CPU PLC hanya
menyimpan data nol. Data nol tersebut akan dieksekusi sampai logika
END. Pada logika OUT data nol berarti port output CPU PLC tidak aktif
atau logika nol.
Gambar 4.17 logika-logika yang dituliskan tidak mendapat input
2. Jika logika LD 001 mendapat input, logika OUT akan menyala atau
aktif. Logika LD 001 aktif pada port A.0, data input dari logika LD
disimpan di alamat penyimpan 1 dan 2. Setelah data disimpan, data akan
dibaca oleh logika OUT, dari logika OUT tersebut akan dieksekusi dan
akan dioutkan sesuai dengan port yang diinginkan oleh mnemonik dan
106
sesuai dengan data kiriman port output tersebut adalah port C.0. Logika
LD aktif logika OR tidak aktif hasilnya dapat dilihat pada gambar 4.18
LD 01
Gambar 4.18 hasil diagram ladder 2 logika LD
OUT 101
3. Jika logika OR 002 mendapat input, logika OUT akan menyala atau
aktif. Logika OR 002 aktif pada port A.1, data input dari logika OR akan
disimpan dialamat penyimpan 2. Logika OR akan terlebih dahulu
membaca data yang disimpan di alamat penyimpan 2. Setelah data
terbaca, data akan di OR kan dan disimpan dialamat penyimpan 2.
Setelah tersimpan logika OUT akan membaca hasil simpanan. Logika
OUT akan mengeksekusi dan akan mengoutkan sesuai dengan data
kiriman dan penulisan mnemonik. Port output terletak di port C.0. Jika
logika OR aktif logika LD tidak aktif hasilnya dapat dilihat pada gambar
4.19.
Jika salah satu logika LD atau OR mendapat input, logika OUT akan aktif.
Jika logika LD aktif logika OR tidak aktif hasilnya dapat dilihat pada gambar
4.18. Jika logika OR aktif logika LD tidak aktif hasilnya dapat dilihat pada
gambar 4.19. Data hasil eksekusi logika LD akan disimpan di alamat penyimpan 1
107
dan 2 Data akan disimpan di memori EEPROM, saat data disimpan di EEPROM
register EECR akan aktif. CPU PLC akan kembali membaca data yang tersimpan
di EEPROM. Data yang terbaca akan dieksekusi kembali. Data logika OR akan
disimpan di alamat penyimpan 1 dan 2. Data yang disimpan di alamat penyimpan
2 akan di eksekusi oleh logika OUT. Pada logika OUT, data yang disimpan di
alamat penyimpan 2 akan di OR kan. Setelah di OR kan data akan di outkan pada
port C. Logika OUT yang dituliskan atau di gambarkan oleh diagram ladder 2
adalah OUT 101. Port C.0 adalah OUT 101.
OR 02 Gambar 4.19 hasil diagram ladder 2 logika OR
OUT 101
4.4.3 Logika counter
001
CNT 001
CNT 001
#05
OUT 101
Gambar 4.20 Diagram ladder 3 logika counter
108
Dari gambar 4.20 diagram ladder 3 dapat dituliskan mnemoniknya sebagai
berikut:
LD 001 CNT 001 #05 LD CNT 001 OUT 101 END
Untuk logika CNT, inputnya berada pada port B.0. Logika CNT diberi input
tersendiri dikarenakan pemograman CNT nya tidak di sediakan pada modul
inputnya, sehingga diberikan input pada port B.0. Dari diagram ladder 3 gambar
4.20 dapat diujikan pada CPU PLC dengan hasil pengujian sebagai berikut:
Saat logika LD 001 mendapat input logika CNT akan mulai mencacah, data
yang dicacah adalah data kiriman setelah kode CNT misalkan data yang dicacah
sesuai dengan diagram ladder 3 adalah #05. CPU PLC akan mencacah mulai dari
5 sampai dengan 0. Data akan dicacah jika port B.0 ditekan, dan jika port B.0
tidak ditekan maka data tidak akan dicacah. Jika data sudah dicacah CPU PLC
akan kembali membaca data kiriman. Data yang telah dicacah, akan dipanggil
kembali saat CPU PLC membaca LD CNT 001. Logika LD CNT 001 akan
mengeksekusi data dari CNT yang telah dicacah. Data hasil eksekusi LD CNT
001 akan disimpan di alamat penyimpan 2. Setelah tersimpan, CPU PLC akan
membaca logika OUT. Logika OUT akan mengeksekusi data, dan akan di out kan
sesuai dengan data kiriman dan diagram ladder 3. Data akan dioutkan di port C.0.
Port C.0 adalah logika OUT 101.
109
Data yang disimpan di memori EEPROM
Data pertama yang dibaca logika LD
Gambar 4.21 pembacaan logika LD untuk logika counter
Logika counter Input logika counter Banyaknya mencacah
pada logika counter
Gambar 4.22 alur kerja logika counter
110
LD CNT memanggil data hasil mencacah
Gambar 4.23 logika LD CNT untuk memanggil hasil eksekusi CNT
Hasil dari logika counter
Gambar 4.24 hasil dari logika counter
111
Gambar 4.25 logika CNT tidak mendapat input
Saat logika CNT tidak mendapat input logika CNT tidak akan berfungsi
dan tidak akan mencacah. CPU PLC akan menunggu sampai logika CNT tersebut
aktif. Setelah logika CNT mendapat input CPU PLC akan memulai mencacah
sampai selesai. Data hasil pencacahan akan disimpan. Data yang tersimpan akan
di baca kembali saat CPU PLC membaca logika LD CNT.
Gambar 4.26 hasil diagram ladder 3 dari logika counter
LD 01 Input counter OUT 101
Logika counter bekerja sesuai dengan data yang dikirim, data kiriman akan
dikurangkan sampai dengan 0. Jika data hasil mencacah sudah disimpan, data
dipanggil kembali saat CPU PLC membaca kode logika LD CNT. Dari logika LD
CNT data hasil pencacahan akan dieksekusi dan akan dihasilkan data yang
berlogika 1. Setelah data disimpan CPU PLC akan membaca logika OUT, dari
logika OUT tersebut data yang disimpan oleh logika LD CNT akan dioutkan
112
sesuai dengan data kiriman dan gambar diagram ladder 3. Data akan di outkan di
port C.0. Port C.0 adalah OUT 101.
4.4.4 Logika timer
Gambar 4.27 diagram ladder 4 logika timer
001
TIM 001
TIM 001
#100
OUT 101
Gambar 4.28 hasil diagram ladder 4 dari logika timer 100ms
Input timer LD 001
OUT 101
Dari gambar 4.27 diagram ladder 4 dapat dituliskan mnemonik sebagai
berikut:
LD 001 TIM 001 #100ms LD TIM 001 OUT 101 END
Untuk logika TIM, inputnya berada pada port B.1. Logika TIM diberi input
tersendiri dikarenakan pemograman TIM nya tidak di sediakan pada modul
113
inputnya, sehingga diberikan input pada port B.1. Dari diagram ladder 4 gambar
4.27 dapat diujikan pada CPU PLC dengan hasil pengujian sebagai berikut:
Logika timer bekerja menggunakan timer 1 yang sudah terdapat di dalam
mikro. Logika timer akan aktif jika LD 001 mendapat input. Saat CPU PLC
membaca logika LD 001 CPU PLC akan menyimpan data hasil eksekusi logika
LD. Saat CPU PLC membaca logika TIM, CPU PLC akan memulai
menginisialisasikan timer 1. Inisialisasi timer 1 dapat dilihat pada gambar 4.30,
inisialisasi timer meliputi TCCR1A, TCCR1B, OCR1A, TIMSK, TIFR. TCCR1A
dan TCCR1B digunakan untuk mengatur mode timer yang menggunakan mode
CTC, register OCR1A digunakan untuk mengatur waktu tunda selama 1 ms,
register TIMSK digunakan untuk mengatur timer 1. Register TIFR digunakan
untuk mengetahui apakah terjadi permintaan interupsi timer atau tidak. Pertama
TIFR diset 0 dan saat timer aktif TIFR berubah menjadi 1. Untuk mengaktifkan
timer kembali menggunakan register TIFR yang di OR kan dengan register
OCF1A, register OCF1A bernilai 1. CPU PLC mengatur OCF1A 1 ms dengan
mode 3 yaitu clock timer 1 sama dengan 1/64 frekuensi kristal yang digunakan
CPU PLC, frekuensi yang digunakan 7,2 MHz. Setelah mengatur inisialisasi timer
CPU PLC akan menjalankan timer sesuai dengan permintaan data kiriman. Jika
permintaan timer telah dipenuhi data timer akan disimpan dan akan kembali
dipanggil, jika CPU PLC membaca kode LD TIM 001. Saat CPU PLC memanggil
data timer yang disimpan, timer akan dikembalikan ke keadaan 1 ms. Logika LD
TIM dipanggil oleh CPU PLC data yang tersimpan akan di eksekusi dan akan
disimpan di alamat penyimpan 2. Data yang tersimpan di alamat penyimpan 2
114
akan di panggil kembali saat CPU PLC memanggil logika OUT. Setelah CPU
PLC memanggil logika OUT data yang tersimpan di alamat penyimpan 2 akan di
OR kan dan menghasilkan data yang akan di outkan sesuai dengan data kiriman
dari diagram ladder 4. Data akan di outkan pada port C.0. Port C.0 adalah logika
OUT 101. Setelah data dioutkan CPU PLC kembali membaca data kiriman dari
awal. Untuk PLC secara umum, timer yang digunakan lebih dari 1 timer dan
mencacah mulai dari 0 – 225 detik, sedangkan pada PLC yang penulis buat hanya
1 dan mencacahnya mulai dari 0-250 ms. Sehingga timernya sangat terbatas dan
jika menggunakan timer pada PLC yang penulis rancang waktu mencacahnya
tidak terlihat. Hasil pengujian timer mulai dari 50-250ms dapat dilihat pada
gambar
Gambar 4.29 hasil pengujian TIM 50ms
aktif TIM 001
002
OUT 102 aktif
aktif
TIM 001
#50
aktif OUT 104
004
TIM 001 aktif
aktif
TIM 001
#150
Gambar 4.30 hasil pengujian TIM 150ms
115
Gambar 4.31 hasil pengujian TIM 150ms
TIM 001
006 aktif #200
TIM 001 aktif
aktif OUT 106
Gambar 4.32 hasil pengujian TIM 150ms
TIM 001
008 aktif #250
TIM 001 aktif
aktif OUT 108
Gambar 4.33 hasil pengujian TIM 50ms
Gambar 4.34 hasil pengujian TIM 150ms
116
Gambar 4.35 Hasil pengujian TIM 200ms
Gambar 4.36 hasil pengujian TIM 250ms
Timer yang digunakan CPU PLC pada pengujian disini sangat terbatas
dikarenakan CPU PLC hanya menggunakan 1 macam timer saja yaitu TIM 001.
Dan mampu mencacah mulai dari 0-250, jika diminta lebih dari 250ms CPU PLC
akan error dan tidak mampu mengerjakan timer tersebut. Dari console dan PC
sendiri timer sudah dibatasi yaitu mencacah mulai dari 0-250ms saja tidak lebih,
jika diminta lebih consol dan PC tidak akan menuliskannya pada display console
dan PC. Hasil pengujian timer mulai dari 0-250ms pada CPU PLC berjalan sesuai
dengan perancangan, timer aktif jika mendapat input pada port B.1. Jika port B.1
belum diberi input timer tidak akan aktif dan hanya menunggu input. Setelah port
B.1 diberi input timer akan aktif dan menghasilkan data, data tersebut akan di
OUT kan sesuai port output yang diinginkan.
117
4.4.5 Logika ON-OFF
003 001 101
002
Gambar 4.37 diagram ladder 5 logika ON-OFF
Dari gambar 4.37 diagram ladder 5 dapat dituliskan mnemoniknya sebagai berikut: LD 001 OR 002 AND NOT 003 OUT 101 END
Tabel 4.3 Hasil pengujian CPU PLC dari diagram ladder 5 LD 001 OR 002 AND NOT 003 OUT 101 Hasil Pengujian
Aktif Tidak aktif Aktif Aktif Gambar 4.38 Tidak Aktif Aktif Aktif Aktif Gambar 4.39
Aktif Aktif Aktif Aktif Gambar 4.40 Dari diagram ladder 5 gambar 4.37 dapat diujikan pada CPU PLC, hasil
pengujian CPU PLC adalah sebagai brikut:
1. Saat logika LD 001 mendapat input logika AND NOT aktif dan terhubung
langsung dengan logika OUT, sehingga logika OUT aktif. Gambar 4.38
memperlihatkan saat logika LD 001 aktif dan logika OUT 101 aktif. Saat
logika LD 001 aktif data eksekusi yang disimpan di alamat penyimpan 2
akan di AND NOT kan dengan data AND NOT, setelah di AND NOT kan
data akan di simpan dan akan dibaca oleh logika OUT. Logika OUT akan
mengeksekusi dan akan dioutkan pada port C.0.
2. Saat logika OR 002 mendapat input, logika AND NOT aktif dan
terhubung langsung dengan logika OUT, sehingga logika OUT aktif dan
118
menyala. Gambar 4.39 menjelaskan logika OR 002 mendapat input dan
LD 001 tidak mendapat input sehingga logika OUT akan menyala atau
aktif. Saat logika OR 002 aktif data yang disimpan dan dieksekusi oleh
logika OR akan dibaca oleh logika AND NOT dan akan dieksekusi.
Setelah dieksekusi, data akan disimpan dan akan dibaca oleh logika OUT.
Dari logika OUT, data akan di OUT kan pada port yang diinginkan oleh
diagram ladder 5 dan dituliskan oleh mnemonik. Port yang diinginkan
adalah port C.0.
3. Saat logika LD 001 aktif, logika OR 002 aktif dan logika AND NOT 003
aktif, out pun akan menyala dan aktif. Gambar 4.40 menjelaskan logika
LD 001 aktif, logika OR 002 aktif dan logika AND NOT 003 aktif, output
akan menyala dan aktif.
Input LD 01
Gambar 4.38 logika ON-OFF untuk logika LD 01
OUT 101
Gambar 4.39 logika ON-OFF untuk logika OR 02
Input OR 02
OUT 101
119
Input LD 01 dan OR 02
OUT 101
Gambar 4.40 logika ON-OFF untuk logika LD 01 dan OR 02
4.4.6 Logika LD NOT dan logika ORNOT
101
005
004
Gambar 4.41 diagram ladder 6 logika LD NOT 004 dan logika OR NOT 005
Dari gambar 4.41 diagram ladder 6 dapat dituliskan mnemoniknya sebagai
berikut:
LD NOT 004 OR NOT 005 OUT 101 END
Data yang dikirim baik melalui PC atau console ke CPU PLC, hasil
pengujiannya dapat dilihat pada tabel 4.4.
Tabel 4.4 Hasil Pengujian CPU PLC dari diagram ladder 6 LD NOT OR NOT OUTPUT Hasil dapat dilihat pada gambar
Tidak Aktif Aktif Aktif Gambar 4.43 Aktif Tidak Aktif Aktif Gambar 4.45 Aktif Aktif Aktif Gambar 4.47
120
Gambar 4.42 logika LD NOT 004 tidak aktif dan logika OR NOT 005 aktif
Tidak aktif 004
OUT101 aktif 005 aktif
Gambar 4.43 hasil logika LD NOT 004 tidak aktif dan logika OR NOT 005 aktif
Gambar 4.44 logika LD NOT 004 aktif dan logika OR NOT 005 tidak aktif
aktif 004
OUT101 aktif 005 Tidak aktif
Gambar 4.45 hasil logika LD NOT 004 aktif dan logika OR NOT 005 tidak aktif
004
OUT101
aktif
aktif aktif 005
Gambar 4.46 logika LD NOT 004 aktif dan logika OR NOT 005 aktif
121
Gambar 4.47 hasil logika LD NOT 004 aktif dan logika OR NOT 005 aktif
4.4.7 Logika LD dan OUT
Gambar 4.48 diagram ladder 7 logika LD dan Logika OUT
106
105
104
107
108
103
102
101
003
001
006
007
004
008
005
002
Dari gambar 4.48 diagram ladder 7 dapat dituliskan mnemoniknya sebagai berikut: LD 001 OUT 101 LD 002 OUT 102 LD 003 OUT 103 LD 004 OUT 104 LD 005
122
OUT 105 LD 006 OUT 106 LD 007 OUT 107 LD 008 OUT 108 END
Data yang dikirim baik melalui PC atau console ke CPU PLC, hasil
pengujiannya dapat dilihat pada tabel 4.5.
Tabel 4.5 Hasil Pengujian CPU PLC dari diagram ladder 7 LD OUTPUT Hasil dapat dilihat pada gambar Alamat( IN-OUT)
Aktif Aktif Gambar 4.49 dan gambar 4.57 001-101 Aktif Aktif Gambar 4.50 dan gambar 4.58 002-102 Aktif Aktif Gambar 4.51 dan gambar 4.59 003-103 Aktif Aktif Gambar 4.52 dan gambar 4.60 004-104 Aktif Aktif Gambar 4.53 dan gambar 4.61 005-105 Aktif Aktif Gambar 4.54 dan gambar 4.62 006-106 Aktif Aktif Gambar 4.55 dan gambar 4.63 007-107 Aktif Aktif Gambar 4.56 dan gambar 4.64 008-108
Hasil pengujian CPU PLC diagram ladder 7 saat logika LD aktif logika
OUT akan aktif. Jika LD aktif OUT aktif dikarenakan gambar diagram laddernya
terhubung langsung seperti halnya 1 saklar yang terhubung dengan 1 lampu. Jika
saklar ditekan lampu akan menyala, lampu menyala dikarenakan ada arus yang
masuk ke lampu.
Gambar 4.49 hasil dari diagram ladder 7 logika LD 001 dan OUT 101
123
Gambar 4.50 hasil dari diagram ladder 7 logika LD 002 dan OUT 102
Gambar 4.51 hasil dari diagram ladder 7 logika LD 003 dan OUT 103
Gambar 4.52 hasil dari diagram ladder 7 logika LD 004 dan OUT 104
Gambar 4.53 hasil dari diagram ladder 7 logika LD 005 dan OUT 105
124
Gambar 4.54 hasil dari diagram ladder 7 logika LD 006 dan OUT 106
Gambar 4.55 hasil dari diagram ladder 7 logika LD 007 dan OUT 107
Gambar 4.56 hasil dari diagram ladder 7 logika LD 008 dan OUT 108
125
Gambar 4.57 logika LD 001 aktif dan Logika OUT 101 aktif
aktif
108
107
104
105
106
103
102
101
003
001 aktif
005
008
004
007
006
002
aktif aktif
Gambar 4.58 logika LD 002 aktif dan Logika OUT 102 aktif
108
107
103
106
105
104
102
101 001
008
002
006
007
004
003
005
126
Gambar 4.59 logika LD 003 aktif dan Logika OUT 103 aktif
108
107
103 aktif
106
105
aktif
104
102
101
003
001
005
008
004
006
007
002
001
Gambar 4.60 logika LD 004 aktif dan Logika OUT 104 aktif
108
107
101
aktif
103
106
104
105
102
008
007
002
006
003
004
005
aktif
127
aktif
Gambar 4.61 logika LD 005 aktif dan Logika OUT 105 aktif
108
107
103
106
104
105
102
101
003
001
005 aktif
008
004
006
007
002
102
101 001
006
007
004
008
005
003 103
106
107
aktif
108
Gambar 4.62 logika LD 006 aktif dan Logika OUT 106 aktif
aktif
104
105
002
128
aktif
Gambar 4.63 logika LD 007 aktif dan Logika OUT 107 aktif
108
107 aktif
103
106
104
105
102
101
003
001
005
008
004
006
007
002
aktif aktif
Gambar 4.64 logika LD 008 aktif dan Logika OUT 108 aktif
108
107
103
106
104
105
102
101
003
001
005
008
004
006
007
002
129
4.5 Analisa Perangkat Keras (komunikasi PC dengan CPU PLC)
Gambar 4.65 hasil komunikasi antara PC dengan CPU PLC
Dari gambar 4.65 dapat dituliskan mnemonic dan gambar diagram ladder
sebagai berikut:
Kode PROG Data CPU PLC yang akan dikerjakan Kode RUN
Gambar 4.66 diagram ladder 8 logika LD 001 dan Logika OUT 101
001 101
Mnemonic dapat dituliskan sebagai berikut: LD 001 OUT 101 END
Hasil pengujian CPU PLC dapat dijelaskan sebagai berikut:
Saat logika LD mendapat input atau akaif logika OUT akan menyala, hasil pada
pengujian CPU PLC dapat dilihat pada gambar 4.66.
001
101 aktif
aktif
Gambar 4.67 diagram ladder 8 logika LD 001 aktif dan Logika OUT 101 aktif
130
Gambar 4.68 hasil pengujian CPU PLC
CPU PLC menerima data kiriman dari PC per paket. Jika data dikirim per
kode CPU PLC tidak akan menerima. Data yang dikirim dari PC harus sudah
dikodekan terlebih dahulu, jika belum dikodekan CPU PLC tidak akan bisa
menjalankan logika-logika yang dikirim. Logika-logika yang dikirim berupa
logika PLC yang sudah berbentuk mnemonic.
4.6 Analisa Data Error Saat komunikasi
Gambar 4.69 Data error saat komunikasi
Data error saat komunikasi
Saat CPU PLC mengalami kegagalan pengiriman data, CPU PLC tidak akan
bekerja sesuai keinginan. Contoh pengiriman data yang gagal dapat dilihat pada
gambar 4.69. CPU PLC akan bekerja kembali saat CPU PLC kembali menerima
data kiriman dan mereset kembali CPU PLC.
Table 4.6 perbandingan PLC umum dengan CPU PLC NO Perbandingannya CPU PLC PLC secara umum 1 Timer 1 timer saja Lebih dari 1 macam
timer 2 Counter 1 counter saja Lebih dari 1 macam
counter 3 Operasi logika Operasi logikanya Operasi logikanya lebih
131
terbatas dari CPU PLC 4 Output Hanya display saja Display dan mampu
mengaktifkan peralatan lain
5 Komunikasi Kadang mengalami masalah
Tidak ada masalah dalam komunikasi
4.7 Logika OUT NOT
Gambar 4.70 diagram ladder 9 logika OUT NOT
005 105
Tidak aktif aktif
Mnemonic diagram ladder 9
LD 005 OUT NOT 105 END
Tabel 4.7 hasil logika OUT NOT LD 005 OUT 105 Hasil Pengujian
Tidak Aktif Aktif Gambar 4.72 Aktif Tidak Aktif Gambar 4.73
105 tidak aktif
005 aktif
Gambar 4.71 diagram ladder logika OUT NOT mendapat input LD 005
Gambar 4.72 hasil diagram ladder 9 logika OUTNOT
Gambar 4.71 adalah diagram ladder logika OUT NOT tidak aktif, dikarenakan
logika LD 001 mendapat input atau aktif. Logika OUT NOT adalah logika yang
132
belum mendapat input akan aktif terlebih dahulu, jika mendapat input logika OUT
NOT tidak akan aktif.
Gambar 4.73 hasil dari gambar 4.71
BAB V
KESIMPULAN DAN SARAN
5.1 Kesimpulan
1. Sistem komunikasi antara konsol dengan CPU PLC dan juga komunikasi
antara PC dengan CPU PLC bekerja sesuai perancangan.
2. CPU PLC modul input dan output bekerja sesuai dengan perancangan.
3. Logika LD, LD NOT, AND, AND NOT, OR, OR NOT, TIM, CNT, OUT,
OUT NOT, END berjalan sesuai dengan perancangan.
4. Untuk logika CNT, TIM mendapat input dari luar modul input.
5.2 Saran
1. Dengan menambah rangkaian pada output CPU PLC, sehingga output CPU
PLC mampu mengangkat beban yang lebih dari tegangan yang dikeluarkan
oleh mikro.
2. Memperbanyak Timer dan Counter, karena Timer dan Counter pada CPU
PLC hanya satu yang digunakan. Dan menambahkan timer dan counter pada
modul input.
3. Mengurangi overflow pada SRAM, dan mengurangi kegagalan komunikasi.
4. Saat CPU PLC dihidupkan, yang dikerjakan pertama kali adalah mengecek
data-data, seharus CPU PLC langsung membaca data yang tersimpan di
memori CPU PLC. Mengurangi error waktu komunikasi.
133
REFERENSI
[1] ______, Programmable Logic Controller, Festo Didactic
[2] M.Budiyanto dan A.Wijaya. Pengenalan Dasar-Dasar PLC
(Programmable Logic Controller). Yogyakarta: Penerbit Gava Media
[3] Agus Bejo. C dan AVR Rahasia Kemudahan Bahasa C dalam
Mikrokontroler ATmega8535. Yogyakarta: Penerbit Graha Ilmu
[4] Datasheet ATmega32. www.atmel.com/literature
[5] RS232 Tutorial on Data Interface and cable. [email protected].
[6] +5V-Powered, Multichannel RS-232 Drivers/Receivers.
www.maxim-ic.com/packages.
[7] Datasheet ULN2803 driver relay. www.driver_relay.com
133
Lampiran 1
1. Kode intruksi dan data......................134
2. Listing Program.................................139
KODE INSTRUKSI CPU PLC
INSTRUKSI KODE
PROG 0001 0111
RUN 0001 1000
END 1111 1111
INSTRUKSI KODE PORT INPUT KODE
AND 0000 0001 001 0000 0001
AND 0000 0001 002 0000 0010
AND 0000 0001 003 0000 0011
AND 0000 0001 004 0000 0100
AND 0000 0001 005 0000 0101
AND 0000 0001 006 0000 0110
AND 0000 0001 007 0000 0111 AND 0000 0001 008 0000 1000
INSTRUKSI KODE OPERAND
TIM KODE
AND TIM 0000 0010 001 0000 0001
INSTRUKSI KODE OPERAND
TIM KODE
AND TIM NOT 0000 0011 001 0000 0001
INSTRUKSI KODE PORT INPUT KODE
AND NOT 0000 0100 001 0000 0001
AND NOT 0000 0100 002 0000 0010
AND NOT 0000 0100 003 0000 0010
AND NOT 0000 0100 004 0000 0100
AND NOT 0000 0100 005 0000 0101
AND NOT 0000 0100 006 0000 0110
AND NOT 0000 0100 007 0000 0111 AND NOT 0000 0100 008 0000 1000
134
135
INSTRUKSI KODE OPERAND
CNT KODE
AND CNT 0000 0101 001 0000 0001
INSTRUKSI KODE OPERAND
CNT KODE
AND CNT NOT 0000 0110 001 0000 0001
INSTRUKSI KODE PORT INPUT KODE
OR 0000 0111 001 0000 0001
OR 0000 0111 002 0000 0010
OR 0000 0111 003 0000 0011
OR 0000 0111 004 0000 0100
OR 0000 0111 005 0000 0101
OR 0000 0111 006 0000 0110
OR 0000 0111 007 0000 0111 OR 0000 0111 008 0000 1000
INSTRUKSI KODE OPERAN TIM KODE
OR TIM 0000 1000 001 0000 0001
INSTRUKSI KODE OPERAND
TIM KODE
OR TIM NOT 0000 1001 001 0000 0001
INSTRUKSI KODE PORT INPUT KODE
OR NOT 0000 1010 001 0000 0001
OR NOT 0000 1010 002 0000 0010
OR NOT 0000 1010 003 0000 0011
OR NOT 0000 1010 004 0000 0100
OR NOT 0000 1010 005 0000 0101
OR NOT 0000 1010 006 0000 0110
OR NOT 0000 1010 007 0000 0111 OR NOT 0000 1010 008 0000 1000
136
INSTRUKSI KODE OPERAND
CNT KODE
OR CNT 0000 1011 001 0000 0001
INSTRUKSI KODE OPERAND
CNT KODE
OR CNT NOT 0000 1100 001 0000 0001
INSTRUKSI KODE PORT INPUT KODE
LD 0000 1101 001 0000 0001
LD 0000 1101 002 0000 0010
LD 0000 1101 003 0000 0011
LD 0000 1101 004 0000 0100
LD 0000 1101 005 0000 0101
LD 0000 1101 006 0000 0110
LD 0000 1101 007 0000 0111 LD 0000 1101 008 0000 1000
INSTRUKSI KODE OPERAND
TIM KODE
LD TIM 0000 1110 001 0000 0001
INSTRUKSI KODE OPERAND
TIM KODE
LD TIM NOT 0000 1111 001 0000 0001
INSTRUKSI KODE PORT INPUT KODE
LD NOT 0001 0000 001 0000 0001
LD NOT 0001 0000 002 0000 0010
LD NOT 0001 0000 003 0000 0011
LD NOT 0001 0000 004 0000 0100
LD NOT 0001 0000 005 0000 0101
LD NOT 0001 0000 006 0000 0110
LD NOT 0001 0000 007 0000 0111 LD NOT 0001 0000 008 0000 1000
137
INSTRUKSI KODE OPERAND CNT KODE LD CNT 0001 0001 001 0000 0001
INSTRUKSI KODE OPERAND CNT KODE LD CNT NOT 0001 0010 001 0000 0001
INSTRUKSI KODE OPERAND
CNT BANYAKNYA MENCACAH
KODE
CNT 0001 0011 001 001 0000 0001 CNT 0001 0011 001 002 0000 0010 CNT 0001 0011 001 003 0000 0011 CNT 0001 0011 001 004 0000 0100 CNT 0001 0011 001 005 0000 0101 CNT 0001 0011 001 006 0000 0110 CNT 0001 0011 001 007 0000 0111 CNT 0001 0011 001 008 0000 1000 CNT 0001 0011 001 009 0000 1001 CNT 0001 0011 001 010 0000 1010
INSTRUKSI KODE PORT
OUTPUT KODE
OUT 0001 0101 101 0110 0101
OUT 0001 0101 102 0110 0110
OUT 0001 0101 103 0110 0111
OUT 0001 0101 104 0110 1000
OUT 0001 0101 105 0110 1001
OUT 0001 0101 106 0110 1010
OUT 0001 0101 107 0110 1011 OUT 0001 0101 108 0110 1100
INSTRUKSI KODE PORT
OUTPUT KODE
OUT NOT 0001 0110 101 0110 0101
OUT NOT 0001 0110 102 0110 0110
OUT NOT 0001 0110 103 0110 0111
OUT NOT 0001 0110 104 0110 1000
OUT NOT 0001 0110 105 0110 1001
OUT NOT 0001 0110 106 0110 1010
OUT NOT 0001 0110 107 0110 1011 OUT NOT 0001 0110 108 0110 1100
138
INSTRUKSI KODE OPERAND
TIM BANYAKNYA MENCACAH
KODE
TIM 0001 0100 001 1 0000 0001
TIM 0001 0100 001 2 0000 0010
TIM 0001 0100 001 3 0000 0011
TIM 0001 0100 001 4 0000 0100
TIM 0001 0100 001 5 0000 0101
TIM 0001 0100 001 6 0000 0110 TIM 0001 0100 001 7 0000 0111
TIM 0001 0100 001 250 1111 1010
//***************************************************************** // File Name : 'CPU PLC.c' // Title : ATmega 32 based CPU PLC for Console and PC // Author : Edi Gunawan - Copyright (C) 2008 - 2009 // Created : 2009-05-20 // Revision : 2009-06-12 // Version : 0.5 sukoi // Target MCU : Atmel AVR ATMEGA32 //***************************************************************** #include <avr/io.h> #include <avr/iom32.h> #include <stdio.h> #include <inttypes.h> #define BAUD 9600 #define F_CPU 7200000UL #include <util/setbaud.h> #include <avr/eeprom.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdint.h> //deklarasi program utama void USART_init(void); void USART_receive(void); void USART_transmit(unsigned char); int cek (void); void baca1(void); void baca2(void); void simpan(void); volatile unsigned char buffer[512]; volatile unsigned char runstatus=0,progstatus=0; volatile unsigned char eepromstatus=0; volatile unsigned char clrstatus=0; volatile unsigned char stopstatus=0; volatile unsigned char cekstatus=0; // data biner yang DITERIMA #definePROG_ 0b00010111 #defineRUN_ 0b00011000 #defineEND_ 0b11111111 #defineAND_ 0b00000001 #defineANDNOT_ 0b00000100 #defineANDTIM_ 0b00000010 #defineANDTIMNOT_ 0b00000011
139
140
#defineANDCNT_ 0b00000101 #defineANDCNTNOT_ 0b00000110 #defineOR_ 0b00000111 #defineORNOT_ 0b00001010 #defineORTIM_ 0b00001000 #defineORTIMNOT_ 0b00001001 #defineORCNT_ 0b00001011 #defineORCNTNOT_ 0b00001100 #defineLD_ 0b00001101 #defineLDNOT_ 0b00010000 #defineLDTIM_ 0b00001110 #defineLDTIMNOT_ 0b00001111 #defineLDCNT_ 0b00010010 #defineLDCNTNOT_ 0b00010001 #defineCNT_ 0b00010011 #defineOUT_ 0b00010101 #defineOUTNOT_ 0b00010110 #defineTIM_ 0b00010100 #define USART_BAUD 9600ul #define USART_UBBR_VALUE ((F_CPU/(USART_BAUD<<4))-1) //definisi yang digunakan int edi[10]=0,510,530,550,570,590,610,630,650,670;//alamat penyimpan 1 int gunawan[10]=0,690,710,730,750,770,790,810,830;//alamat penyimpan 2 int rina1[10]=0,850,870,890,910,930,940,960,980,1000;//alamat penyimpan CNT int data_terima;//data di UDR int alamat;//alamat memori CPU PLC int dataku;//pembacaan alamat di memori PLC int data;//data-data input int data1;//data-data input int data2;//data-data input int dataku1;//pembacaan data dialamat penyimpan 1 int dataku2;//pembacaan data dialamat penyimpan 2 int dataku3;//pembacaan data dialamat penyimpan 2 int dataku6;//pembacaan data dialamat penyimpan 2 int hijau;//alamat penyimpan 1 int kuning;//alamat penyimpan 1 int coklat;//alamat penyimpan 2 int merah;//alamat penyimpan 2 int n;//data timer dan counter int temp;//alamat penyimpan counter int i;//alamat eeprom
141
/***************************************************************** Functions from UART_Test *****************************************************************/ void USART_init(void) // set baud rate UBRRH = (uint8_t)(USART_UBBR_VALUE>>8); UBRRL = (uint8_t)USART_UBBR_VALUE; // set frame format dengan 8 bit data, no parity, 1 stop bit UCSRC |= (1<<URSEL)|(0<<USBS)|(1<<UCSZ1)|(1<<UCSZ0); // enable interupsi RX, receiver dan transmitter UCSRB |= (1<<RXCIE)|(1<<RXEN)|(1<<TXEN); sei(); void USART_transmit(unsigned char data) /* TUNGGU DATA PADA BUFFER TRANSMITER KOSONG */ while ( ( UCSRA & (1<<UDRE))==0); /* KIRIM DATA KE UDR UNTUK DIKIRIM KE PC */ UDR = data; void USART_receive( void ) /*TUNGGU DATA MASUK KE RECEIVER*/ while ( (UCSRA & (1<<RXC))==0); /* TERIMA DATA DARI PC DAN KONSOLE */ data_terima=UDR;//data dari UDR di tampung di data terima /***************************************************************** Functions from UART_Test *****************************************************************/ //inisialisasi timer void timer1_ctc_init(void)//inisialisasi timer n=dataku; TCCR1A |=(0<<WGM11)|(0<<WGM10); TCCR1B |=(1<<WGM12)|(1<<CS11)|(1<<CS10);//1:64 OCR1A =(n)*(112500);//tundaan 1 detik f=7.2Mhz TIMSK |=_BV(TOIE1); TIFR &= (1<<OCF0); sei(); for(;;) if(TCNT1==OCR1A)//jika cacah timer=data yang dituliskan pada timer rina1[4]=TCNT1;
142
TIFR=(1<<OCF1A); alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); cek(); void cnt(void) loop_until_bit_is_set(PINB,PIN0); while(bit_is_set(PINB,PIN0)) if(n>0) n--; loop_until_bit_is_set(PINB,PIN0); if(n==0) data=0xFF; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; baca2(); while(bit_is_set(PINB,PIN2)) n=dataku; cnt(); //interrupt dari luar digunakan untuk komunikasi ISR (USART_RXC_vect)//interupsi luar data_terima=UDR; if(progstatus==1 && data_terima!=PROG_ && data_terima!=RUN_) sei(); PORTD=0x20; buffer[alamat]=data_terima; alamat++; if (UDR==0xff)
143
USART_transmit('!'); eepromstatus=1; if (eepromstatus==1) for (i=0;buffer[i]!=0xff;i++) eeprom_write_byte((unsigned char *)i,buffer[i]); eeprom_write_byte((unsigned char *)(i),0xff); eepromstatus=0; if(data_terima==RUN_) sei(); PORTD=0x40; USART_transmit('!'); runstatus=1; progstatus=0; cekstatus=1; baca1(); if(data_terima==PROG_) sei(); PORTD=0x80; PORTC=0x00; USART_transmit('!'); runstatus=0; progstatus=1; cekstatus=0; alamat=0; //inisialisasi untuk membaca1 EEPROM void baca1(void)//mengecek logika yang sesuai if(cekstatus==1) PORTD=0x40; PORTC=0x00; asm("cli"); alamat=0;
144
dataku=eeprom_read_byte((uint8_t*)alamat); _delay_us(100); asm("sei"); cek(); if (cekstatus==0) PORTD=0x40; PORTC=0x00; asm("cli"); alamat=0; dataku=eeprom_read_byte((uint8_t*)alamat); _delay_us(100); asm("sei"); cek(); //inisialisasi untuk membaca1 EEPROM void baca2(void)//mengecek logika yang sesuai asm("cli"); alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); _delay_us(100); asm("sei"); cek(); //deklarasi umum int main(void) DDRA = 0x00;//input PLC PORTA = 0x00;//input PLC DDRB = 0x00;//input timer PORTB = 0x00;//input timer DDRC = 0xFF;//output PLC PORTC = 0x00;//output PLC DDRD = 0xFF;//output timer PORTD = 0x00;//output timer GICR = 0x20; GIFR = 0x20; USART_init(); while(1)
145
cekstatus=1; _delay_us(100); baca1(); ; return 0; //mengecek kode intruksi int cek(void) cekstatus=1; while(1) //logika LD if(dataku==LD_)//kode_intruksi = logika LD alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b00000001)//kode data LD=001 if(bit_is_clear(PINA,PIN0)) data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA0)) data=PINA; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000010)//LD=002
146
if(bit_is_clear(PINA,PIN1)) data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA1)) data=PINA; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000011)//LD=003 if(bit_is_clear(PINA,PIN2)) data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA2)) data=PINA; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat;
147
if(dataku==0b00000100)//LD=004 if(bit_is_clear(PINA,PIN3)) data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA3)) data=PINA; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000101)//LD=005 if(bit_is_clear(PINA,PIN4)) data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA4)) data=PINA; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++;
148
eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000110)//LD=006 if(bit_is_clear(PINA,PIN5)) data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA5)) data=PINA; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000111)//LD=007 if(bit_is_clear(PINA,PIN6)) data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA6))
149
data=PINA; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00001000)//LD=008 if(bit_is_clear(PINA,PIN7)) data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA7)) data=PINA; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; //logika LDNOT else if(dataku==LDNOT_)//kode_intruksi = logika LDNOT alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b00000001)//kode data LDNOT=001 if(bit_is_clear(PINA,PIN0))
150
data=0xFF; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA0)) data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000010)//LDNOT=002 if(bit_is_clear(PINA,PIN1)) data=0xFF; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA1)) data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat;
151
if(dataku==0b00000011)//LDNOT=003 if(bit_is_clear(PINA,PIN2)) data=0xFF; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA2)) data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000100)//LDNOT=004 if(bit_is_clear(PINA,PIN3)) data=0xFF; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA3)) data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data);
152
merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000101)//LDNOT=005 if(bit_is_clear(PINA,PIN4)) data=0xFF; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA4)) data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000110)//LDNOT=006 if(bit_is_clear(PINA,PIN5)) data=0xFF; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA5)) data=0x00;
153
eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000111)//LDNOT=007 if(bit_is_clear(PINA,PIN6)) data=0xFF; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA6)) data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00001000)//LDNOT=008 if(bit_is_clear(PINA,PIN7)) data=0xFF; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat;
154
else if(bit_is_set (PINA,PINA7)) data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; //logika AND else if(dataku==AND_)//kode_intruksi = logika and alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b00000001)//kode data and=001 if(bit_is_clear(PINA,PIN0)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA0)) data1=PINA; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat;
155
if(dataku==0b00000010)//and=002 if(bit_is_clear(PINA,PIN1)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA1)) data1=PINA; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000011)//and=003 if(bit_is_clear(PINA,PIN2)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA2)) data1=PINA; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4];
156
merah++; goto lewat; if(dataku==0b00000100)//and=004 if(bit_is_clear(PINA,PIN3)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA3)) data1=PINA; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000101)//and=005 if(bit_is_clear(PINA,PIN4)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA4)) data1=PINA; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]);
157
hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000110)//and=006 if(bit_is_clear(PINA,PIN5)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA5)) data1=PINA; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000111)//and=007 if(bit_is_clear(PINA,PIN6)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat;
158
else if(bit_is_set (PINA,PINA6)) data1=PINA; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00001000)//and=008 if(bit_is_clear(PINA,PIN7)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA7)) data1=PINA; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; //logika ANDNOT else if(dataku==ANDNOT_)//kode_intruksi = logika andnot alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b00000001)//kode data andnot=001
159
if(bit_is_clear(PINA,PIN0)) data1=0xFF; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA0)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000010)//andnot=002 if(bit_is_clear(PINA,PIN1)) data1=0xFF; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA1)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++;
160
goto lewat; if(dataku==0b00000011)//andnot=003 if(bit_is_clear(PINA,PIN2)) data1=0xFF; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA2)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000100)//andnot=004 if(bit_is_clear(PINA,PIN3)) data1=0xFF; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA3)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6;
161
data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000101)//andnot=005 if(bit_is_clear(PINA,PIN4)) data1=0xFF; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA4)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000110)//andnot=006 if(bit_is_clear(PINA,PIN5)) data1=0xFF; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA5))
162
data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000111)//andnot=007 if(bit_is_clear(PINA,PIN6)) data1=0xFF; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA6)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00001000)//andnot=008 if(bit_is_clear(PINA,PIN7)) data1=0xFF; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4];
163
merah++; goto lewat; else if(bit_is_set (PINA,PINA7)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; //logika OR else if(dataku==OR_)//kode_intruksi = logika OR alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b00000001)//OR=001 if(bit_is_clear(PINA,PIN0)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA0)) data1=PINA; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat;
164
if(dataku==0b00000010)//OR=002 if(bit_is_clear(PINA,PIN1)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA1)) data1=PINA; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000011)//OR=003 if(bit_is_clear(PINA,PIN2)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA2)) data1=PINA; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau);
165
eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000100)//OR=004 if(bit_is_clear(PINA,PIN3)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA3)) data1=PINA; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000101)//OR=005 if(bit_is_clear(PINA,PIN4)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA4))
166
data1=PINA; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000110)//OR=006 if(bit_is_clear(PINA,PIN5)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA5)) data1=PINA; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000111)//OR=007 if(bit_is_clear(PINA,PIN6)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++;
167
goto lewat; else if(bit_is_set (PINA,PINA6)) data1=PINA; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00001000)//OR=008 if(bit_is_clear(PINA,PIN7)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA7)) data1=PINA; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; //logika ORNOT else if(dataku==ORNOT_)//kode_intruksi = logika ORNOT alamat++; dataku=eeprom_read_byte((uint8_t*)alamat);
168
if(dataku==0b00000001)//ORNOT=001 if(bit_is_clear(PINA,PIN0)) data1=0xFF; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA0)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000010)//ORNOT=002 if(bit_is_clear(PINA,PIN1)) data1=0xFF; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA1)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2);
169
merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000011)//ORNOT=003 if(bit_is_clear(PINA,PIN2)) data1=0xFF; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA2)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000100)//ORNOT=004 if(bit_is_clear(PINA,PIN3)) data1=0xFF; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA3)) data1=0x00;
170
dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000101)//ORNOT=005 if(bit_is_clear(PINA,PIN4)) data1=0xFF; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA4)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000110)//ORNOT=006 if(bit_is_clear(PINA,PIN5)) data1=0xFF; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat;
171
else if(bit_is_set (PINA,PINA5)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00000111)//ORNOT=007 if(bit_is_clear(PINA,PIN6)) data1=0xFF; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA6)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; if(dataku==0b00001000)//ORNOT=008 if(bit_is_clear(PINA,PIN7)) data1=0xFF; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau);
172
eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; else if(bit_is_set (PINA,PINA7)) data1=0x00; dataku6=eeprom_read_byte((uint8_t*)gunawan[4]); hijau=dataku6; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; //logika OUT else if(dataku==OUT_)//kode_intruksi = logika out alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b01100101)//OUT=101 dataku3=eeprom_read_byte((uint8_t*)gunawan[4]); kuning=dataku3; if(kuning>0x00) kuning|=0xFF; temp=kuning; temp&=0x01; PORTC|=temp; goto lewat; else if(kuning==0x00) kuning&=0xFF; temp=kuning; temp&=0x00; PORTC|=temp; goto lewat;
173
if(dataku==0b01100110)//OUT=102 dataku3=eeprom_read_byte((uint8_t*)gunawan[4]); kuning=dataku3; if(kuning>0x00) kuning|=0xFF; temp=kuning; temp&=0x02; PORTC|=temp; goto lewat; else if(kuning==0x00) kuning&=0xFF; temp=kuning; temp&=0x00; PORTC|=temp; goto lewat; if(dataku==0b01100111)//OUT=103 dataku3=eeprom_read_byte((uint8_t*)gunawan[4]); kuning=dataku3; if(kuning>0x00) kuning|=0xFF; temp=kuning; temp&=0x04; PORTC|=temp; goto lewat; else if(kuning==0x00) kuning&=0xFF; temp=kuning; temp&=0x00; PORTC|=temp; goto lewat;
174
if(dataku==0b01101000)//OUT=104 dataku3=eeprom_read_byte((uint8_t*)gunawan[4]); kuning=dataku3; if(kuning>0x00) kuning|=0xFF; temp=kuning; temp&=0x08; PORTC|=temp; goto lewat; else if(kuning==0x00) kuning&=0xFF; temp=kuning; temp&=0x00; PORTC|=temp; goto lewat; if(dataku==0b01101001)//OUT=105 dataku3=eeprom_read_byte((uint8_t*)gunawan[4]); kuning=dataku3; if(kuning>0x00) kuning|=0xFF; temp=kuning; temp&=0x10; PORTC|=temp; goto lewat; else if(kuning==0x00) kuning&=0xFF; temp=kuning; temp&=0x00; PORTC|=temp; goto lewat;
175
if(dataku==0b01101010)//OUT=106 dataku3=eeprom_read_byte((uint8_t*)gunawan[4]); kuning=dataku3; if(kuning>0x00) kuning|=0xFF; temp=kuning; temp&=0x20; PORTC|=temp; goto lewat; else if(kuning==0x00) kuning&=0xFF; temp=kuning; temp&=0x00; PORTC|=temp; goto lewat; if(dataku==0b01101011)//OUT=107 dataku3=eeprom_read_byte((uint8_t*)gunawan[4]); kuning=dataku3; if(kuning>0x00) kuning|=0xFF; temp=kuning; temp&=0x40; PORTC|=temp; goto lewat; else if(kuning==0x00) kuning&=0xFF; temp=kuning; temp&=0x00; PORTC|=temp; goto lewat;
176
if(dataku==0b01101100)//OUT=108 dataku3=eeprom_read_byte((uint8_t*)gunawan[4]); kuning=dataku3; if(kuning>0x00) kuning|=0xFF; temp=kuning; temp&=0x80; PORTC|=temp; goto lewat; else if(kuning==0x00) kuning&=0xFF; temp=kuning; temp&=0x00; PORTC|=temp; goto lewat; //logika OUTNOT else if(dataku==OUTNOT_)//kode_intruksi = logika outnot alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b01100101)//OUTNOT=101 dataku3=eeprom_read_byte((uint8_t*)gunawan[4]); kuning=dataku3; if(kuning>0x00) kuning&=0x00; temp=kuning; temp&=0x00; PORTC|=temp; goto lewat;
177
else if(kuning==0x00) kuning|=0xFF; temp=kuning; temp&=0x01; PORTC|=temp; goto lewat; if(dataku==0b01100110)//OUTNOT=102 dataku3=eeprom_read_byte((uint8_t*)gunawan[4]); kuning=dataku3; if(kuning>0x00) kuning&=0x00; temp=kuning; temp&=0x00; PORTC|=temp; goto lewat; else if(kuning==0x00) kuning|=0xFF; temp=kuning; temp&=0x02; PORTC|=temp; goto lewat; if(dataku==0b01100111)//OUTNOT=103 dataku3=eeprom_read_byte((uint8_t*)gunawan[4]); kuning=dataku3; if(kuning>0x00) kuning&=0x00; temp=kuning; temp&=0x00; PORTC|=temp; goto lewat;
178
else if(kuning==0x00) kuning|=0xFF; temp=kuning; temp&=0x04; PORTC|=temp; goto lewat; if(dataku==0b01101000)//OUTNOT=104 dataku3=eeprom_read_byte((uint8_t*)gunawan[4]); kuning=dataku3; if(kuning>0x00) kuning&=0x00; temp=kuning; temp&=0x00; PORTC|=temp; goto lewat; else if(kuning==0x00) kuning|=0xFF; temp=kuning; temp&=0x08; PORTC|=temp; goto lewat; if(dataku==0b01101001)//OUTNOT=105 dataku3=eeprom_read_byte((uint8_t*)gunawan[4]); kuning=dataku3; if(kuning>0x00) kuning&=0x00; temp=kuning; temp&=0x00; PORTC|=temp; goto lewat;
179
else if(kuning==0x00) kuning|=0xFF; temp=kuning; temp&=0x10; PORTC|=temp; goto lewat;
if(dataku==0b01101010)//OUTNOT=106 dataku3=eeprom_read_byte((uint8_t*)gunawan[4]); kuning=dataku3; if(kuning>0x00) kuning&=0x00; temp=kuning; temp&=0x00; PORTC|=temp; goto lewat; else if(kuning==0x00) kuning|=0xFF; temp=kuning; temp&=0x20; PORTC|=temp; goto lewat; if(dataku==0b01101011)//OUTNOT=107 dataku3=eeprom_read_byte((uint8_t*)gunawan[4]); kuning=dataku3; if(kuning>0x00) kuning&=0x00; temp=kuning; temp&=0x00; PORTC|=temp; goto lewat;
180
else if(kuning==0x00) kuning|=0xFF; temp=kuning; temp&=0x40; PORTC|=temp; goto lewat; if(dataku==0b01101100)//OUTNOT=108 dataku3=eeprom_read_byte((uint8_t*)gunawan[4]); kuning=dataku3; if(kuning>0x00) kuning&=0x00; temp=kuning; temp&=0x00; PORTC|=temp; goto lewat; else if(kuning==0x00) kuning|=0xFF; temp=kuning; temp&=0x80; PORTC|=temp; goto lewat; //logika LDTIM else if(dataku==LDTIM_)//kode_intruksi = logika ldtim alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b00000001)//LDTIM=001 data=rina1[4]; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9];
181
coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; //logika LDTIMNOT else if(dataku==LDTIMNOT_)//kode_intruksi = logika ldtimnot alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b00000001)//kode data LDTIMNOT=000 data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; //logika LDCNT else if(dataku==LDCNT_)//kode_intruksi = logika ldcnt alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b00000001)//kode data LDCNT=001 data=0xFF; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat;
182
//logika LDCNTNOT else if(dataku==LDCNTNOT_)//kode_intruksi = logika ldcntnot alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b00000001)//kode data LDCNTNOT=000 data=0x00; eeprom_write_byte((uint8_t*)edi[9],data); coklat=edi[9]; coklat++; eeprom_write_byte((uint8_t*)gunawan[4],data); merah=gunawan[4]; merah++; goto lewat; //logika ANDTIM else if(dataku==ANDTIM_)//kode_intruksi = logika andtim alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b00000001)//ANDTIM=001 data1=rina1[4]; dataku2=eeprom_read_byte((uint8_t*)edi[9]); hijau=dataku2; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; //logika ANDTIMNOT else if(dataku==ANDTIMNOT_)//kode_intruksi = logika andtimnot alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b00000001)//ANDTIMNOT=001
183
data1=0x00; dataku2=eeprom_read_byte((uint8_t*)edi[9]); hijau=~dataku2; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; //logika ANDCNT else if(dataku==ANDCNT_)//kode_intruksi = logika andcnt alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b00000001)//ANDCNT=000 data1=0xFF; dataku2=eeprom_read_byte((uint8_t*)edi[9]); hijau=dataku2; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; //logika ANDCNTNOT else if(dataku==ANDCNTNOT_)//kode_intruksi = logika andcntnot alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b00000001)//ANDCNTNOT=000 data1=0x00; dataku2=eeprom_read_byte((uint8_t*)edi[9]); hijau=~dataku2; data2=(data1) && (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat;
184
//logika ORTIM else if(dataku==ORTIM_)//kode_intruksi = logika ortim alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b00000001)//ORTIM=001 data1=rina1[4]; dataku2=eeprom_read_byte((uint8_t*)edi[9]); hijau=dataku2; data2=(data1)|| (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; //logika ORTIMNOT else if(dataku==ORTIMNOT_)//kode_intruksi = logika ortimnot alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b00000001)//ORTIMNOT=001 data1=0x00; dataku2=eeprom_read_byte((uint8_t*)edi[9]); hijau=~dataku2; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; //logika ORCNT else if(dataku==ORCNT_)//kode_intruksi = logika orcnt alamat++; dataku=eeprom_read_byte((uint8_t*)alamat);
185
if(dataku==0b00000001)//ORCNT=000 data1=0xFF; dataku2=eeprom_read_byte((uint8_t*)edi[9]); hijau=dataku2; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; //logika ORCNTNOT else if(dataku==ORCNTNOT_)//kode_intruksi = logika orcntnot alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); if(dataku==0b00000001)//ORCNTNOT=001 data1=0x00; dataku2=eeprom_read_byte((uint8_t*)edi[9]); hijau=~dataku2; data2=(data1) || (hijau); eeprom_write_byte((uint8_t*)gunawan[4],data2); merah=gunawan[4]; merah++; goto lewat; //logika CNT_ else if(dataku==CNT_) alamat++; dataku=eeprom_read_byte((uint8_t*)alamat); n=dataku; data=n; cnt(); //logika TIM_ else if(dataku==TIM_) alamat++;
186
dataku=eeprom_read_byte((uint8_t*)alamat); n=dataku; sei(); loop_until_bit_is_set(PINB,PIN1); timer1_ctc_init(); //logika END else if(dataku==END_)//kode_intruksi = logika END asm("cli"); cekstatus=0; _delay_us(100); asm("sei"); break; lewat: asm("nop"); cli(); baca2(); ; return 0;
Top Related