Anda di halaman 1dari 19

Mikrokontroller 2

(Cara mengakses interrupt dengan


Rotary Encoder)
Donny Radianto
Rotary Encoder

Definisi :
Salah satu tipe sensor yang
berfungsi untuk menentukan
sudut dari putaran shaft
Tipe dari Rotary Encoder
• Absolute Rotary
Encoder
• Incremental
Rotary encoder

Realpars.com
Implementation

1. https://www.autonics.com/
Implementation

1. https://www.autonics.com/
Implementation

1. https://www.autonics.com/
Implementation

1. https://www.autonics.com/
2. Realpars.com
Implementation

1. https://www.autonics.com/
2. Realpars.com
Clockwise
Counter Clockwise
Penggunaan Rotary Encoder dengan 2
interrupt (int 0 & int 1)
PROGRAM ROTARY ENCODER DENGAN
MENGGUNAKAN 1 INTERRUPT
#define F_CPU 8000000UL int main(void)
#include <avr/io.h> {
DDRC=0xFF;/* PORT C SEBAGAI KELUARAN*/
#include <avr/interrupt.h> PORTC=0;
#include <util/delay.h> DDRB=0xFF;/* PORT B SEBAGAI KELUARAN*/
PORTB=0;
/*Interrupt Service Routine for INT0*/
DDRD=0;/* PORTD SEBAGAI MASUKAN */
ISR(INT0_vect) PORTD=0xFF;/* PORT D DI PULL UP */
{ GICR = 1<<INT0;/* MENGAKTIFKAN INTERRUPT 0*/
//MCUCR = 1<<ISC01 | 1<<ISC00; /* Trigger INT0 on rising
PORTC=0B01010101;/* PORT C SEBAGAI KELUARAN */ edge */
_delay_ms(50); /* DELAY */ MCUCR =0<<ISC01 | 0<<ISC00;
sei();/* MENGAKTIFKAN GLOBAL INTERRUPT*/
PORTB=~PORTB;/* PORT B SEBAGAI KELUARAN*/ while(1);
_delay_ms(50); }
}
Penggunaan Rotary Encoder dengan 0
interrupt (int 0)
PROGRAM ROTARY ENCODER DENGAN
MENGGUNAKAN 2 INTERRUPT
#define F_CPU 8000000UL int main(void)
#include <avr/io.h> {
DDRC=0xFF;/* PORT C SEBAGAI KELUARAN*/
#include <avr/interrupt.h> PORTC=0;
#include <util/delay.h> DDRB=0xFF;/* PORT B SEBAGAI KELUARAN*/
PORTB=0;
/*Interrupt Service Routine for INT0*/
DDRD=0;/* PORTD SEBAGAI MASUKAN */
ISR(INT0_vect) PORTD=0xFF;/* PORT D DI PULL UP */
{ GICR = 1<<INT1|1<<INT0;/* MENGAKTIFKAN INTERRUPT
0*/
PORTC=0B01010101;/* PORT C SEBAGAI KELUARAN */ //MCUCR = 1<<ISC01 | 1<<ISC00; /* Trigger INT0 on rising
_delay_ms(50); /* DELAY */ edge */
MCUCR = 0<<ISC11|0<<ISC10|0<<ISC01 | 0<<ISC00;
PORTB=~PORTB;/* PORT B SEBAGAI KELUARAN*/ sei();/* MENGAKTIFKAN GLOBAL INTERRUPT*/
_delay_ms(50); while(1);
}
}
PROGRAM ROTARY ENCODER DENGAN
MENGGUNAKAN 2 INTERRUPT
PROGRAM ROTARY ENCODER DENGAN
MENGGUNAKAN 2 INTERRUPT
#define F_CPU 8000000UL int main(void)
#include <avr/io.h> {
DDRA=0xFF;/* PORT C SEBAGAI KELUARAN*/
#include <avr/interrupt.h> PORTA=0;
#include <util/delay.h> DDRB=0xFF;/* PORT B SEBAGAI KELUARAN*/
PORTB=0;
/*Interrupt Service Routine for INT0*/
DDRD=0;/* PORTD SEBAGAI MASUKAN */
ISR(INT0_vect) PORTD=0xFF;/* PORT D DI PULL UP */
{ GICR = 1<<INT1|1<<INT0;/* MENGAKTIFKAN INTERRUPT
0*/
PORTA=0B01010101;/* PORT C SEBAGAI KELUARAN */ //MCUCR = 1<<ISC01 | 1<<ISC00; /* Trigger INT0 on rising
_delay_ms(50); /* DELAY */ edge */
MCUCR = 0<<ISC11|0<<ISC10|0<<ISC01 | 0<<ISC00;
PORTB=~PORTB;/* PORT B SEBAGAI KELUARAN*/ sei();/* MENGAKTIFKAN GLOBAL INTERRUPT*/
_delay_ms(50); while(1);
}
}
Implementasi Interrupt berbasis Atmega 16
Implementasi Interrupt berbasis Atmega 16
TERIMA KASIH ATAS
PERHATIANNYA

Anda mungkin juga menyukai