SOAL 1. Interrupt.
a. Berikan penjelasan ringkas tentang interupsi termasuk istilah yang
biasa digunakan, yaitu Interrupt Request, Interrupt Vector,
Interrupt Service Routine dan Interrupt Enable.
IRQ = Interrupt Request, pemicu interupsi
IV = Interrupt Vector, pengarah interupsi ke ISR
ISR = Interrupt Service Routine, kumpulan instruksi untuk melayani
interupsi.
IE = Interrupt Enable, untuk mengaktifkan interupsi.
IP = Interrupt Priority, utk menentukan, siapa yg prioritasnya
lebih utama.
Setting :
TCCR2A = 0;TCCR2B = 0;
TCCR2A = (1<<WGM21);
TCCR2B = (1<<CS20);
TIMSK2 = (1<<OCIE2B);
sei();
ISR :
ISR(TIMER2_COMPB_vect) {
angka += 5; if(angka>95) angka=5;
lcd.setCursor(0, 0);
lcd.print(angka);
}
1
SOAL 2. Timer / Counter.
a. Sebutkan perbedaan utama antara Timer dan Counter serta
berikan masing-masing 1 contoh sederhana penggunaannya,
tidak harus elektronik.
Counter = angka berdetak. Timer = Counter yang berdetak teratur.
Contoh counter : Tasbeh, Pencacah di pintu boarding.
Contoh Timer : Jam dinding, stop watch, waker.
b. Sebutkan perbedaan utama antara Timer dan Counter dalam
ATmega328.
Timer berdetak karena internal clock (= frekuansi kristal).
Counter berdetak karena external clock via pin T0, pin nomor 4
pada Arduino atau T1, pin nomor 5 pada Arduino.
c. Sebutkan 3 Timer/Counter dalam Atmega328 serta beberapa
register yang terkait erat dengan setting dan operasinya.
TCNT0, TCCR0A, TCCR0B, OCR0A, OCR0B, TIMSK0,
TCNT1, TCCR1A, TCCR1B, OCR1A, OCR1B, TIMSK1,
TCNT2, TCCR2A, TCCR2B, OCR2A, OCR2B, TIMSK2,
d. Tuliskan beberapa instruksi untuk setting TCNT1 berdetak
sebagai Timer dengan prescaler 64.
TCCR1B |= (1<<CS11) | (1<<CS10);
e. Tuliskan beberapa instruksi untuk menghasilkan sinyal periodik
dari pin 8, dengan duty cycle 40% dan periode 3.2 ms.
void setup() {
TCCR2A=0;TCCR2B=0;
TCCR2A |= (1<<WGM21);
TCCR2B |= (1<<CS22) |(1<<CS22);
TIMSK2 |= (1<<OCIE2A);
fase=1;OCR2A=80;
sei();}
ISR(TIMER2_COMPA_vect){
switch (fase) {case 1: fase = 2; OCR2A = 120;
digitalWrite(8, LOW); break;
case 2: fase = 1; OCR2A = 80;
digitalWrite(8, HIGH); break; }}
2
SOAL 3. Aplikasi Interrupt Timer.
a. Gambarkan sketsa rangkaian pengukur kecepatan angular yang
terdiri dari Arduino Uno, sensor rotary encoder dan LCD.
VDD
VSS
VEE
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
E
1
2
3
4
GND 5
6
7
8
9
10
11
12
13
14
RS
D4
D5
D6
D7
E
11 ENA
5 enc
13 RS
10 D5
9 D4
6 D7
4 D6
12 E
3
2
1
0
+5v +24V
PB5/SCK
PB0/ICP1/CLKO
PD4/T0/XCK
AREF
TX PD1/TXD
RX PD0/RXD
~PB3/MOSI/OC2A
~ PB2/SS/OC1B
~ PB1/OC1A
PD7/AIN1
~ PD6/AIN0
PD5/T1
~ PD3/INT1
PD2/INT0
PB4/MISO
U3
~
9 4
DIGITAL (~PWM)
5
IN1 VCC VS +88.8
7 2
IN2 OUT1
10
IN3
12 3
IN4 OUT2
ATMEGA328P-PU
ENA 6
1121
ENA
11 13
ENB OUT3
1 14
SENSA OUT4 enc
microcontrolandos.blogspot.com 15
PC4/ADC4/SDA
SENSB GND
PC5/ADC5/SCL
ANALOG IN
PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
R1 8 L298
RESET
10R
A0
A1
A2
A3
A4
A5
b. Tentukan Time Window (T) dan jumlah pulsa tiap putaran (N)
agar alat ukur tsb memiliki resolusi 5 rpm.
n = (60.P)/(T.N)
Agar (n = 5P) untuk resolusi 5 rpm, maka T.N = 12
Jika T = 80 ms, maka N = 150
c. Tuliskan kalkulasi sederhana untuk menggunakan TCNT0 sebagai
penghasil Time Window yang ditentukan pada soal 3b.
Agar diperoleh T = 80 ms, maka prescaler = 1024,
kristal 16 MHz, jumlah detak = OCR0A = 250.
T = 5 slot x 250 x 1024 x 1/16Mega = 5 x 250 x 64µs = 80 ms.
d. Tuliskan Interrupt Service Routine untuk mengukur kecepatan
angular dan menampilkannya secara berkala pada LCD.
ISR(TIMER0_COMPA_vect){
slot += 1;
if(slot == 25) TCNT1=0;
if(slot == 30) {
TIMSK0 &= ~(1<<OCIE0A); // disable timer 0A compare interrupt
velo = TCNT1;
velo = velo*5;
itoa(velo,tulisan,10); // convert int to decimal string
lcd.setCursor(4, 1); // fifth column second row
lcd.print(tulisan);
slot = 0;
TIMSK0 |= (1<<OCIE0A); // enable timer 0A compare interrupt
}}
e. Tuliskan contoh ISR untuk menghasilkan sinyal PWM,
menggunakan Timer/Counter 2.
ISR(TIMER2_COMPA_vect) {
switch (fase) {case 1: fase = 2; OCR2A = 200 - 2*PW;
digitalWrite(11, LOW); break;
case 2: fase = 1; OCR2A = 2*PW;
digitalWrite(11, HIGH); break; }}
3
LAMPIRAN
SETTING & USING PORT
PORTC = untuk set / reset pin, 1 = set atau 5 volt. Jika PORTC1 = 1 saat
DDRC1 = 0 atau input, berarti pull up resistor untuk pin ini aktif.
Jika Bit PUD=1 pada register SFIOR, maka seluruh bit pada seluruh port
akan disable pull up.
DDRC = untuk direction, 1 = output, 0=input
PINC = untuk baca pin, 1 = 5 volt, 0 = nol volt
ATmega328Timer Setting
4
5
6
SETTING & USING INTERRUPT