Mikrokontroler
PIC16F877A merupakan salah satu mikrokontroler dari keluarga PICmicro yang
popular digunakan sekarang ini, mulai dari pemula hingga para profesional. Hal
tersebut karena PIC16F877A sangat praktis dan menggunakan teknologi FLASH
memori sehingga dapat di program-hapus hingga seribu kali. Keunggulan
mikrokontroler jenis RISC ini dibanding dengan mikrokontroler 8-bit lain
dikelasnya terutama terletak pada kecepatan dan kompresi kodenya. Selain itu,
PIC116F877A juga tergolong praktis dan ringkas karena memiliki kemasan 40 pin
dengan 33 jalur I/O.
Anggota
keluarga PICmicro buatan Microchip Inc. cukup banyak. Ada yang menggunakan
FLASH memori dan ada pula yang jenis OTP (One Time Programmable). Mikrontroler
dari keluarga PICmicro yang popular, antara lain PIC2C08, PIC16C54, PIC16F84.
Agar lebih mengenal PIC16F877A, berikut ini diberikan fitur-fitur penting yang
terdapat pada PIC16F877A.
MIkrokontroller PIC16F877A
Fitur-Fitur
PIC16F877A
RISC CPU yang mempunyai
performance tinggi
Hanya 35 jenis instruksi yang
perlu dipelajari
Semua instrujsi mempunyai
siklus tunggal kecuali untuk instruksi percabangan.
Kecepatan Instruksi: DC – 20
MHz clock input DC – 200 ns instruction cycle
8K
x 14 words of FLASH Program Memory, 368 x 8 bytes of Data Memory (RAM) ,
256 x 8 bytes of EEPROM Data Memory
Pinout compatible dengan
PIC16C73B/74B/76/77
Interrupt (14 sumber interrupt)
Delapan level hardware stack
Direct, indirect dan relative
addressing modes
Power-on Reset (POR)
Power-up Timer (PWRT) dan
Oscillator Start-up Timer (OST)
Watchdog Timer (WDT) dengan
on-chip RC oscillator
Programmable code protection
dan Fully static design
Power saving SLEEP mode
Selectable oscillator options
Low power, high speed CMOS
FLASH/EEPROM technology
In-Circuit Serial Programming
(ICSP) hanya dengan dua pin
Single 5V In-Circuit Serial
Programming capability
Processor read/write access to
program memory
Wide operating voltage range:
2.0V to 5.5V
High Sink/Source Current: 25 mA
Commercial, Industrial and
Extended temperature ranges
Deskripsi
Pin Pin
Mikrokontroler PIC16F877A di produksi dalam kemasan 40 pin
PDIP (Plastik Dual In Line) maupun 40 pin SO (Small Outline). Namun yang banyak
terdapat dipasaran adalah kemasan PDIP. Pin-pin untuk I/O sebanyak 33 pin, yang
terdiri atas 6 pada Port A, 8 pada Port B, 8 pada Port C, 8 pada Port D, 3 pada
Port E. Ada pula beberapa Pin pada mikrokontroler yang memiliki fungsi ganda.
Organisasi
Memori
Memori pada PIC16F877A dapat dipisahkan menjadi dua blok
memori, satu untuk memori program dan satu untuk memori data. Memori EEPROM dan
register GPR didalam RAM merupakan memori data, sedangkan memori FLASH
merupakan memori program.
a. Mempelajari aplikasi output pada mikrokontroller ATMEGA 8535
b. Mempelajari aplikasi input pada mikrokontroller ATMEGA 8535
c. Mempelajari aplikasi I/O pada mikrokontroller ATMEGA 8535
Mikrokontroller AVR (Alf and Vegard’s Risc processor) memiliki
arsitektur 8 bit, dimana semua instruksi dikemas dalam kode 16-bit dan
sebagian besar instruksi dieksekusi dalam 1 siklus clock atau dikenal
dengan teknologi RISC (Reduced Instruction Set Computing). Secara umum,
AVR dapat dikelompokan ke dalam 4 kelas, yaitu keluarga AT90Sxx,
keluarga ATMega dan AT86RFxx. Pada dasarnya yang membedakan
masing-masing adalah kapasitas memori, peripheral dan fungsinya.Dari
segi arsitektur dan instruksi yang digunakan, mereka bisa dikatakan
hamper sama. Pada praktikum kali ini yang membedakan antara ATMEGA 128
dengan ATMEGA 8535 selain pada kapasistas memori, jug dari Bahasa
program yang digunakan.
Berikut gambar dari ATMEGA8535:
Berikut merupakan gambar konfigurasi pin pada ATMEGA8535 :
Arduino adalah kit elektronik atau
papan rangkaian elektronik open source yang di dalamnya terdapat
komponen utama yaitu sebuah chip mikrokontroler dengan jenis AVR dari
perusahaan Atmel. Arduino yang kita gunakan pada prkatikum ini adalah
arduino mega yang menggunakan chip AVR ATmega 2560 yang memiliki
fasilitas PWM, komunikasi serial, ADC, timer, interupt, SPI dan I2C.
Sehingga Arduino bisa digabungkan bersama modul atau alat lain dengan
protocol yang berbeda-beda. Bahasa pemograman yang digunakan adalah
bahasa C. Tetapi bahasa ini sudah dipermudah menggunakan fungsi-fungsi
yang sederhana sehingga lebih mudah dalam memprogramnya. Dalam
memprogram arduino, kita bisa menggunakan serial komunikasi agar arduino
dapat berhubungan dengan komputer ataupun aplikasi lain. Beberapa fitur dari Arduino Mega 2560 ini adalah :
Microcontroller :ATmega2560
Operating Voltage :5V
Input Voltage
(recommended) :7-12V
Input Voltage
(limits) :6-20V
Digital I/O Pins :54 (of which
15 provide PWM output)
Analog Input Pins :16
DC Current per I/O
Pin :20 mA
DC Current for 3.3V
Pin :50 mA
Flash Memory :256 KB of
which 8 KB used by bootloader
SRAM :8 KB
EEPROM :4 KB
Clock Speed :16 MHz
I.
BAGIAN-BAGIAN DARI ARDUINO MEGA 2560
Soket USB
Soket USB adalah soket
untuk kabel USB yang disambungkan ke komputer atau laptop.
Berfungsi untuk mengirimkan program ke Arduino dan juga sebagai
port komunikasi serial.
Input /
Output Digital
Input/Output Digital
atau digital pin adalah pin-pin untuk menghubungkan Arduino dengan
komponen atau rangkaian
digital. Pada Arduino
Mega terdapat 53
I/O Digital dimana
16
diantaranya dapat dijadikan sebagai output PWM
Input Analog
Input Analog atau analog
pin adalah pin-pin yang berfungsi untuk menerima sinyal dari komponen atau
rangkaian analog. Misalnya dari potensiometer, sensor suhu, sensor cahaya, dsb.
Terdapat 16 input analog pada arduino mega 2560.
Pin POWER
Pin-pin catu daya
adalah pin yang memberikan tegangan untuk komponen atau rangkaian yang
dihubungkan dengan Arduino. Pada bagian catu daya ini terdapat juga pin Vin dan
Reset.Vin digunakan untuk memberikan tegangan langsung kepada Arduino tanpa
melalui tegangan USB atau adaptor.
Tombol RESET
Reset adalah pin untuk
memberikan sinyal reset melaui tombol atau rangkaian eksternal.
Jack Baterai/Adaptor
Soket baterai atau adaptor digunakan untuk menyuplai
Arduino dengan tegangan dari baterai/adaptor 9V pada saat Arduino sedang
tidak disambungkan ke komputer. Kalau Arduino sedang disambungkan ke komputer
melalui USB, Arduino mendapatkan suplai tegangan dari USB, jadi tidak perlu
memasang baterai/adaptor saat memprogram Arduino.
Mikrokontroller ATMEGA 128 merupakan mikrokontroller keluarga AVR yang
mempunyai kapasitas flash memori 128KB. AVR (Alf and Vegard’s Risc
Processor) merupakan seri mikrokontroler CMOS 8-bit buatan ATEMEL inc,
berdasarkan arsitektur RISC (Reduced Instruction Set Computer). Secara
umum, AVR dapat terbagi menjadi 4 kelas, yaitu keluarga ATtiny, keluarga
AT90Sxx, keluarga AT-Mega, dan AT86RFxx. Pada dasarnya yang membedakan
masing-masing kelas adalah memori, peripheral, dan fungsinya. Dari segi
arsitektur dan instruksi yang digunakan, bisa dikatakan hampir sama.
Semua jenis AVR dilengkapi dengan flash memori sebagai memori program.
Kapasitas dari flash memori ini berbeda antara chip yang satu dengan
chip yang lain. Tergantung dari jenis IC yang digunakan. Untuk flash
memori yang paling kecil adalah 1 kbytes (ATtiny11, ATtiny12, dan
ATtiny15) dan paling besar adalah 128 kbytes (AT-Mega128). Berikut ini
adalah spesifikasi Mikrokontroler AVR ATMega-128 dan konfigurasi pin
ATMEGA 128.
1. Saluran I/O sebanyak 56 buah, yaitu Port A, Port B, Port C, Port D, Port E, Port F dan Port G.
2. ADC 10 bit sebanyak 8 saluran.
3. 2 buah Timer/Counter 8 bit dan 2 buah Timer/Counter 16 bit.
4. Dua buah PWM 8 bit.
5. Watchdog Timer dengan osilator internal.
6. Internal SRAM sebesar 4 kbyte.
7. Memori flash sebesar 128 kBytes.
8. Interupsi Eksternal.
9. Port antarmuka SPI.
10. EEPROM sebesar 4 kbyte.
11. Real time counter.
12. 2 buah Port USART untuk komunikasi serial.
13. Enam kanal PWM.
14. Tegangan operasi sekitar 4,5 V sampai dengan 5,5V
char tombol[4][3] = //menyatakan tombol di keypad adalah kolom 3 dan baris 4 { //pembuka tata letak keypad {'1', '2', '3'}, //deklarasi posisi tombol keypad {'4', '5', '6'}, //deklarasi posisi tombol keypad {'7', '8', '9'}, //deklarasi posisi tombol keypad {'*', '0', '#'} //deklarasi posisi tombol keypad }; //penutup tata letak keypad
byte pin[] = {2, 3, 4, 5, 6, 7, 8, 9}; //deklarasi pin arduino pada seven segment dengan tipe data byte byte pinBaris[] = {17, 18, 19, 20}; //deklarasi pin arduino yang dihubungkan ke baris pada keypad byte pinKolom[] = {14, 15, 16}; //deklarasi pin arduino yang dihubungkan ke kolom pada keypad
Keypad keypad = Keypad(makeKeymap(tombol), //digunakan untuk menciptakan objek keypad pinBaris, pinKolom, 4, 3); //objek keypad yaitu empat kali tiga
void setup() //fungsi utama { pinMode(10,OUTPUT); //pin 10 arduino digunakan sebagai output digitalWrite(10,LOW); //pin 10 pada arduino digunakan pada keaadan low
}
void loop() //fungsi perulangan pada program { char kode = keypad.getKey(); //fungsi membaca tombol apa pada keypad yang ditekan if (kode == NO_KEY) //keadaan jika tombol tidak ditekan return; // perintah return dieksekusi
else if(kode == '0' || kode == '2' || kode == '4' || kode == '6' || kode == '8') //kondisi dimana tombol angka genap di tekan { for (int a=0; a<=5; a++){ //fungsi perulangan jika memenuhi syarat maka akan terus berulang digitalWrite(2,HIGH); //pin 2 seven segment hidup digitalWrite(3,LOW); //pin 3 seven segment mati digitalWrite(4,LOW); //pin 4 seven segment mati digitalWrite(5,HIGH); //pin 5 seven segment hidup digitalWrite(6,HIGH); //pin 6 seven segment hidup digitalWrite(7,HIGH); //pin 7 seven segment hidup digitalWrite(8,HIGH); //pin 8 seven segment hidup digitalWrite(9,LOW); //pin 9 seven segment mati delay (100); //delay selama 100ms digitalWrite(2,LOW); //pin 2 seven segment mati digitalWrite(3,LOW); //pin 3 seven segment mati digitalWrite(4,LOW); //pin 4 seven segment mati digitalWrite(5,LOW); //pin 5 seven segment mati digitalWrite(6,LOW); //pin 6 seven segment mati digitalWrite(7,LOW); //pin 7 seven segment mati digitalWrite(8,LOW); //pin 8 seven segment mati digitalWrite(9,LOW); //pin 9 seven segment mati delay (100); //delay selama 100ms ; } } else if(kode == '1') //kondisi dimana angka satu ditekan {digitalWrite(2,LOW); //pin 2 seven segment mati digitalWrite(3,HIGH); //pin 3 seven segment hidup digitalWrite(4,HIGH); //pin 4 seven segment hidup digitalWrite(5,LOW); //pin 5 seven segment mati digitalWrite(6,LOW); //pin 6 seven segment mati digitalWrite(7,LOW); //pin 7 seven segment mati digitalWrite(8,LOW); //pin 8 seven segment mati digitalWrite(9,LOW); //pin 9 seven segment mati } else if(kode == '3') //kondisi dimana angka tiga ditekan { digitalWrite(2,HIGH); //pin 2 seven segment hidup digitalWrite(3,HIGH); //pin 3 seven segment hidup digitalWrite(4,HIGH); //pin 4 seven segment hidup digitalWrite(5,HIGH); //pin 5 seven segment hidup digitalWrite(6,LOW); //pin 6 seven segment mati digitalWrite(7,LOW); //pin 7 seven segment mati digitalWrite(8,HIGH); //pin 8 seven segment hidup digitalWrite(9,LOW); //pin 9 seven segment mati } else if(kode == '5') //kondisi dimana angka lima ditekan { digitalWrite(2,HIGH); //pin 2 seven segment hidup digitalWrite(3,LOW); //pin 3 seven segment mati digitalWrite(4,HIGH); //pin 4 seven segment hidup digitalWrite(5,HIGH); //pin 5 seven segment hidup digitalWrite(6,LOW); //pin 6 seven segment mati digitalWrite(7,HIGH); //pin 7 seven segment hidup digitalWrite(8,HIGH); //pin 8 seven segment hidup digitalWrite(9,LOW); //pin 9 seven segment mati } else if(kode == '7') //kondisi dimana angka tujuh ditekan { digitalWrite(2,HIGH); //pin 2 seven segment hidup digitalWrite(3,HIGH); //pin 3 seven segment hidup digitalWrite(4,HIGH); //pin 4 seven segment hidup digitalWrite(5,LOW); //pin 5 seven segment mati digitalWrite(6,LOW); //pin 6 seven segment mati digitalWrite(7,LOW); //pin 7 seven segment mati digitalWrite(8,LOW); //pin 8 seven segment mati digitalWrite(9,LOW); //pin 9 seven segment mati } else if(kode == '9') //kondisi dimana angka sembilan ditekan { digitalWrite(2,HIGH); //pin 2 segment segment hidup digitalWrite(3,HIGH); //pin 3 segment segment hidup digitalWrite(4,HIGH); //pin 4 segment segment hidup digitalWrite(5,HIGH); //pin 5 segment segment hidup digitalWrite(6,LOW); //pin 6 segment segment mati digitalWrite(7,HIGH); //pin 7 segment segment hidup digitalWrite(8,HIGH); //pin 8 segment segment hidup digitalWrite(9,LOW); //pin 9 segment segment mati
Pada percobaan yang telah dilakukan pada modul 2 kondisi 7, yaitu percobaan pada 7 segment, jika angka genap ditekan pada keypad maka akan menampilkan karakter E pada 7 segment ,dimana percobaan ini memerlukan beberapa komponen yaitu :
Arduino2560 yang
berfungsi sebagai otak dari rangkaian ini
Seven segment yang berfungsi sebagai keluaran
keypad yang berfungsi sebagai masukan
Pada rangkaian, seven segment dihubungkan pada arduino sebagai output dan keypad sebagai input. Dimana apabila angka genap ditekan pada keypad maka akan menampilkan karakter 'E' berkedip dengan delay 100ms pada seven segment .
Prinsip Kerja:
Pada percobaan kali ini, yaitu
menampilkan teks dari kiri ke kanan pada lcd.
Dimana membutuhkan beberapa komponen, yaitu Mikroprosesor ATMega 128
yang berfungsi sebagai otak dari rangkaian ini, LCD berfungsi sebagai
keluaran berupa karakter, serta Switch yang berfungsi sebagai
masukan/input. Serta juga menambahkan kristal sebagai 'Clock' atau
sering disebut juga sebagai pendetak bagi Mikroprosesor ATMega 128.
Pada rangkaian, LCD dihubungkan pada PORT
A dan SWITCH pada PORT B. Dimana apabila salah satu Switch ditekan dan
bernilai 1, maka pada LCD akan menampilkan 'Nama : Setiawan MH'
1. Pastikan semua supply dalam keadaan off
2. Hubungkan jumper seperti gambar dibawah
3. Buatlah listing program yang telah ada pada modul.
4. Hidupkan supply pada modul
5. Upload program pada rangkaian
6. Tekan tombol Reset
7. Amati percobaan, jika tidak sesuai perbaiki rangkaian atau program
8. Jika sesuai, maka selesai dan demokan pada instruktur atau asisten yang mengawas
9. Matikan supply pada modul
Pada percobaan yang telah dilakukan pada modul 2 kondisi 7, yaitu percobaan pada 7 segment, jika angka genap ditekan pada keypad maka akan menampilkan karakter E pada 7 segment ,dimana percobaan ini memerlukan beberapa komponen yaitu :
Arduino2560 yang
berfungsi sebagai otak dari rangkaian ini
Seven segment yang berfungsi sebagai keluaran
keypad yang berfungsi sebagai masukan
Pada rangkaian, seven segment dihubungkan pada arduino sebagai output dan keypad sebagai input. Dimana apabila angka genap ditekan pada keypad maka akan menampilkan karakter 'E' berkedip dengan delay 100ms pada seven segment .
Prinsip Kerja:
Pada percobaan kali ini, yaitu
menampilkan teks dari kiri ke kanan pada lcd.
Dimana membutuhkan beberapa komponen, yaitu Mikroprosesor ATMega 128
yang berfungsi sebagai otak dari rangkaian ini, LCD berfungsi sebagai
keluaran berupa karakter, serta Switch yang berfungsi sebagai
masukan/input. Serta juga menambahkan kristal sebagai 'Clock' atau
sering disebut juga sebagai pendetak bagi Mikroprosesor ATMega 128.
Pada rangkaian, LCD dihubungkan pada PORT
A dan SWITCH pada PORT B. Dimana apabila salah satu Switch ditekan dan
bernilai 1, maka pada LCD akan menampilkan 'Nama : Setiawan MH'
char tombol[4][3] = //menyatakan tombol di keypad adalah kolom 3 dan baris 4 { //pembuka tata letak keypad {'1', '2', '3'}, //deklarasi posisi tombol keypad {'4', '5', '6'}, //deklarasi posisi tombol keypad {'7', '8', '9'}, //deklarasi posisi tombol keypad {'*', '0', '#'} //deklarasi posisi tombol keypad }; //penutup tata letak keypad
byte pin[] = {2, 3, 4, 5, 6, 7, 8, 9}; //deklarasi pin arduino pada seven segment dengan tipe data byte byte pinBaris[] = {17, 18, 19, 20}; //deklarasi pin arduino yang dihubungkan ke baris pada keypad byte pinKolom[] = {14, 15, 16}; //deklarasi pin arduino yang dihubungkan ke kolom pada keypad
Keypad keypad = Keypad(makeKeymap(tombol), //digunakan untuk menciptakan objek keypad pinBaris, pinKolom, 4, 3); //objek keypad yaitu empat kali tiga
void setup() //fungsi utama { pinMode(10,OUTPUT); //pin 10 arduino digunakan sebagai output digitalWrite(10,LOW); //pin 10 pada arduino digunakan pada keaadan low
}
void loop() //fungsi perulangan pada program { char kode = keypad.getKey(); //fungsi membaca tombol apa pada keypad yang ditekan if (kode == NO_KEY) //keadaan jika tombol tidak ditekan return; // perintah return dieksekusi
else if(kode == '0' || kode == '2' || kode == '4' || kode == '6' || kode == '8') //kondisi dimana tombol angka genap di tekan { for (int a=0; a<=5; a++){ //fungsi perulangan jika memenuhi syarat maka akan terus berulang digitalWrite(2,HIGH); //pin 2 seven segment hidup digitalWrite(3,LOW); //pin 3 seven segment mati digitalWrite(4,LOW); //pin 4 seven segment mati digitalWrite(5,HIGH); //pin 5 seven segment hidup digitalWrite(6,HIGH); //pin 6 seven segment hidup digitalWrite(7,HIGH); //pin 7 seven segment hidup digitalWrite(8,HIGH); //pin 8 seven segment hidup digitalWrite(9,LOW); //pin 9 seven segment mati delay (100); //delay selama 100ms digitalWrite(2,LOW); //pin 2 seven segment mati digitalWrite(3,LOW); //pin 3 seven segment mati digitalWrite(4,LOW); //pin 4 seven segment mati digitalWrite(5,LOW); //pin 5 seven segment mati digitalWrite(6,LOW); //pin 6 seven segment mati digitalWrite(7,LOW); //pin 7 seven segment mati digitalWrite(8,LOW); //pin 8 seven segment mati digitalWrite(9,LOW); //pin 9 seven segment mati delay (100); //delay selama 100ms ; } } }