You are on page 1of 33

I/O Mikrokontroller

Abyanuddin Salam
POLMAN Bandung
Pin I/O Mikrokontroler Arduino Uno
I/O DIGITAL MIKROKONTROLER
Microcontroller Ports and Pins
 The communication channels
through which information flows C
into or out of the
microcontroller
 Ex. PORTB
 Pins PB0 – PB7
 May not be contiguous
 Often bi-directional
Port Pin Data Directionality
• Input
• When you want to take information from the external
world (sensors) into the MCU
• Output
• When you want to change the state of something outside
the MCU (turn a motor on or off, etc.)
• Pins default to input direction on power-up or reset
• Your program can set or change the directionality of a
pin at any time
ATmega328
Block Diagram

Input

Output
M68HC11 microcontroller
Digital I/O
• Semua pin pada Arduino, baik pin digital maupun pin analog,
dapat digunakan sebagai pin digital. Digital berarti sinyal yang
dikirimkan/diterima bernilai 1 atau 0, on atau off, HIGH atau LOW,
ada atau tidak ada sinyal.  
• Berbeda dengan sinyal analog yang nilainya bersifat kontinyu,
yakni nilai antara 0 dan 1 dipertimbangkan.
• Pin digital berarti pin dapat menerima/mengirim sinyal digital.
Digital I/O
• Secara umum pin pada Arduino dapat dikonfigurasi ke dalam dua mode, yaitu
mode input dan output.
• Mode input berarti mengeset pin agar dapat digunakan untuk menerima
masukan sinyal.
• Mode output berarti mengeset pin agar dapat mengirimkan sinyal.
Setting the Pin Data Direction
• Arduino
• pinMode(pin_no., dir)
• Ex. Make Arduino pin 3 (PD3) an output
• pinMode(3, OUTPUT);
• pinMode(PIN_D3, OUTPUT); // with me106.h
• Note: one pin at a time
• Suppose you wanted Arduino pins 3, 5, and 7 (PD3, PD5, and PD7)
to be outputs?
• Is there a way to make them all outputs at the same time?
• Yes! Answer coming later…
Pin Voltages
• Microcontrollers are fundamentally digital devices.
For digital IO pins:
• Information is ‘coded’ in two discrete states:
• HIGH or LOW (logic: 1 or 0)
• Voltages
• TTL
• 5 V (for HIGH)
• 0 V (for LOW)
• 3.3 V CMOS
• 3.3 V (for HIGH)
• 0 V (for LOW)
Pin Used as an Output
• Turn on an LED, which is connected
to pin Arduino pin 0 (PD0) (note the ATmega328
resistor!)
• What should the data direction be for Arduino
pin 0
pin 0 (PD0)? (PD0)
• pinMode(____, ____);
• Turn on the LED
• digitalWrite(PIN_LED,HIGH);
• Turn off the LED
• digitalWrite(PIN_LED,LOW);
Pins as Inputs and Pull-up Resistors - 1
• Using a switch as a sensor
• Ex. Seat belt sensor ATmega328
• Detect the switch state
• What should the data direction be for Arduino
Arduino pin 3 (PD3)? pin 3
(PD3)
• pinMode(____, ____);
• What will the voltage be on PD3 when
the switch is closed?
• What will the voltage be on PD3 when
the switch is open?
• Indeterminate! SPST

momentary
Pins as Inputs and Pull-up Resistors - 2
• Switch as a sensor, cont.
• Make the voltage on the pin ATmega328
determinate by turning on the pull-up VTG= +5V
resistor for PD3
• Assuming PD3 is an input: 1
• digitalWrite(PIN_SWITCH,HIGH); PD3
turns on the “pull-up” resistor 0
• pinMode(PIN_SWITCH,INPUT_PULLUP);
• What will the voltage on PD3 be when
the switch is open?
• VTG
• What will the voltage on PD3 be when
the switch is closed?
Pins as Inputs and Pull-up Resistors - 3
• Switch as a sensor, cont.
• To turn off the pull-up resistor ATmega328
• Assuming PD3 is an input: VTG= +5V
digitalWrite(PIN_SWITCH,LOW);
turns the “pull-up” resistor off
1
PD3
0
Pins as Inputs and Pull-up Resistors - 4
• Possibility of ‘weak drive’ when
pull-up resistor is turned on ATmega328
• Pin set as an input with a pull-up VTG= +5V

resistor turned on can source a small iweak


current 1
PD3
• Remember this!
0
I/O ANALOG MIKROKONTROLER
I/O Analog
• Pin analog pada Arduino (dan mikrokontroller lain pada umumnya) dapat
digunakan untuk input dan output digital. Hanya saja pin analog memiliki fitur
untuk dapat mengubah sinyal analog yang masuk menjadi nilai digital yang
mudah diukur. Pin digital hanya dapat mengenali sinyal 0 volt sebagai nilai
LOW dan 5 volt sebagai nilai HIGH. Sedangkan Pin analog dapat mengenali
sinyal pada rentang nilai voltase tersebut. Hal ini sangat berguna ketika kita
hendak mengukur sesuatu dari sensor dan menggunakan nilai masukan
tersebut untuk keperluan lain.
• Pin analog ini terhubung dengan converter pada mikrokontroller yang dikenal
dengan istilah analog-to-digital converter (disingkat ADC atau
A/D). Converter ini mengubah nilai analog berbentuk sinyal voltase ke dalam
bentuk digital/angka supaya nilai analog ini dapat digunakan dengan lebih
mudah dan aplikatif. Pada Arduino (mikrokontroller ATMega) converter ini
memiliki resolusi 10 bit, artinya nilai hasil konversi berkisar dari 0 hingga 1023.
Pada Arduino UNO, pin analog ditandai dengan label A0 sampai A5. Pada
board lainnya, pin-pin yang diberi tanda A, Analog, ADC adalah pin analog.
ADC (Analog To Digital Converter)

• Analog To Digital Converter (ADC) adalah pengubah input analog


menjadi kode – kode digital.
• ADC banyak digunakan sebagai Pengatur proses industri,
komunikasi digital dan rangkaian pengukuran/ pengujian.
• Umumnya ADC digunakan sebagai perantara antara sensor yang
kebanyakan analog dengan sistem komputer seperti sensor suhu,
cahaya, tekanan/ berat, aliran dan sebagainya kemudian diukur
dengan menggunakan sistim digital (komputer).
ADC (Analog To Digital Converter)

• ADC (Analog to Digital Converter) memiliki 2 karakter prinsip,


yaitu kecepatan sampling dan resolusi
• Kecepatan sampling suatu ADC menyatakan “seberapa sering
sinyal analog dikonversikan ke bentuk sinyal digital pada selang
waktu tertentu”. Kecepatan sampling biasanya dinyatakan dalam
sample per second (SPS).
• Resolusi ADC menentukan “ketelitian nilai hasil konversi ADC”.
Sebagai contoh: ADC 8 bit akan memiliki output 8 bit data digital,
ini berarti sinyal input dapat dinyatakan dalam 255 (2n-1) nilai
diskrit. ADC 12 bit memiliki 12 bit output data digital, ini berarti
sinyal input dapat dinyatakan dalam 4096 nilai diskrit. Dari contoh
diatas ADC 12 bit akan memberikan ketelitian nilai hasil konversi
yang jauh lebih baik daripada ADC 8 bit.
ADC (Analog To Digital Converter)

• Prinsip kerja ADC adalah mengkonversi sinyal analog ke dalam


bentuk besaran yang merupakan rasio perbandingan sinyal input
dan tegangan referensi. Sebagai contoh, bila tegangan referensi 5
volt, tegangan input 3 volt, rasio input terhadap referensi adalah
60%. Jadi, jika menggunakan ADC 10 bit dengan skala maksimum
1023, akan didapatkan sinyal digital sebesar 60% x 1023 = 614
(bentuk desimal) atau 00111101 (bentuk biner).
• Signal = (sample/max_value) * reference_voltage
= (614/1023) * 5
= 3 Volts
ADC (Analog To Digital Converter)

• Pada gambar di bawah ini ditunjukkan sebuah grafik


gelombang sinus serta grafik digital yang diperoleh
menggunakan ADC 3-bit.
Pemrograman ADC
• PIC 16f877a memiliki modul ADC 10 bit dan 8 kanal masukan,
memiliki 2 saluran tegangan referensi VDD, VSS, RA2, dan RA3
• Register yang berhubungan dengan ADC adalah ADRESH,
ADRESL, ADCON0, ADCON1.
• Register ADRESH dan ADRESL digunakan untuk menyimpan data
hasil konversi
• Register ADCON0 berfungsi untuk mengendalikan operasi modul
ADC
• Register ADCON1 berfungsi untuk mengkonfigurasi pin-pin dari
port masukan ADC
Pemrograman ADC
• mikroC PIC telah menyediakan library untuk membaca ADC,
yaitu dengan menggunakan instruksi berikut:

int vadc;
ADC_Init(); //inisialisasi ADC dengan nilai default
vadc=ADC_Read(0); //konversi digital kanal 0
Pulse Width Modulation (PWM)
• Untuk mengkonversi besaran digital menjadi analog diperlukan
suatu converter yang disebut DAC (Digital to Analog Converter).
• Selain menggunakan DAC, terdapat cara lain yaitu dengan
menggunakan PWM.
Pulse Width Modulation (PWM)
• Pulse Width Modulation (PWM) secara umum adalah sebuah cara
memanipulasi lebar sinyal yang dinyatakan dengan pulsa dalam
suatu perioda, untuk mendapatkan tegangan rata-rata yang
berbeda.
• Besarnya tegangan sinyal analog hasil rekonstruksi sebanding
dengan siklus kerja (duty cycle)
• Duty cycle merupakan prosentase periode sinyal high dan periode
sinyal low, prosentase duty cycle akan bebanding lurus dengan
tegangan rata-rata yang dihasilkan. Berikut ilustrasi sinyal PWM.
Pulse Width Modulation (PWM)
Pulse Width Modulation (PWM)
• Sinyal PWM pada umumnya memiliki amplitude dan frekuensi
dasar yang tetap, namun memiliki lebar pulsa yang bervariasi.
Lebar pulsa PWM berbanding lurus dengan amplitude sinyal asli
yang belum termodulasi. Artinya, sinyal PWM memiliki frekuensi
gelombang yang tetap namun duty cycle bervariasi antara 0%
hingga 100%.
• Ton adalah waktu dimana tegangan keluaran berada pada posisi
tinggi (high atau 1) dan, Toff adalah waktu dimana tegangan
keluaran berada pada posisi rendah (atau 0). Ttotal adalah waktu
satu siklus atau penjumlahan antara Ton dengan Toff , biasa
dikenal dengan istilah periode satu gelombang.
• Ttotal = Ton + Toff
Pulse Width Modulation (PWM)
• Siklus
  kerja atau duty cycle sebuah gelombang di definisikan
sebagai:

• Teganan keluaran dapat bervariasi sesuai dengan duty-cycle dan


dapat dirumusan sebagai berikut,
Pulse Width Modulation (PWM)
• Beberapa Contoh aplikasi PWM adalah pemodulasian data untuk
telekomunikasi, pengontrolan daya atau tegangan yang masuk ke
beban, regulator tegangan, audio effect dan penguatan, serta
aplikasi-aplikasi lainnya. Aplikasi PWM berbasis mikrokontroler
biasanya berupa, pengendalian kecepatan motor DC,
Pengendalian Motor Servo, Pengaturan nyala terang LED.
Pulse Width Modulation (PWM)
• Dari persamaan diatas, diketahui bahwa perubahan duty cycle
akan merubah tegangan output atau tegangan rata-rata seperti
gambar dibawah ini. 
Pulse Width Modulation (PWM)
• Pada
  mikrokontroler PIC 16F877A sudah terdapat fitur PWM yaitu
modul CCP yang terdapat pada PIN RC1 dan RC2. PWM duty ratio
pada mikrokontroler PIC 167877A adalah 8 bit, rentang nilai duty
ratio dari 0 sampai 255. Duty ratio dapat dihitung menggunakan
rumus :
Pemrograman PWM
• Untuk mengakses modul CCPx, mikroC PIC telah menyediakan library
PWM, sehingga langsung dapat menggunakan fungsi yang telah
disediakan.
• Seperti contoh berikut ini membangkitkan PWM dengan duty cycle 32%
void main(){
short duty_c;
TRISC=0x00;
PWM2_Init(5000);
PWM2_Start();
PWM2_Set_Duty(duty_c);
while(1){
duty_c=32;
}
}

You might also like