MODUL V: Timer dan Counter 5.1 DASAR TEORI
Gambar 5.1 Prinsip Dasar Timer/Counter pada Mikrokontroler
Ttimer = Tosc*(256-TCNT0)*N → (8 bit = 256) Ttimer = Tosc*(65536-TCNT1)*N → (16 bit = 65536)
Gambar 5.2 Diagram Blok Timer/Counter pada Mikrokontroler keluarga AVR 1
TEKNIK ANTARMUKA| Modul V: Timer Counter
5.2 TIMER SEDERHANA MENGGUNAKAN FASILITAS delay.h A. Langkah kerja 1. Buat program sebagai berikut: #include <mega128.h> #include <delay.h>
void main(void) { // Declare your local variables here PORTC=0x00; DDRC=0xFF; PORTC.0=0; PORTC.1=0; PORTC.2=0; PORTC.3=0; while (1) { char c2; // Place your code here PORTC.1=~PORTC.1; for(c2 = 0; c2 < 10; c2++) { PORTC.0=~PORTC.0; delay_ms(10); }; } }
2. Compile dan make program anda.
3. Buat desain proteus sebagaimana Gambar 5.3
LCD1
100uF
C1
33pF
C2
33pF
51 50 49 48 47 46 45 44 10 11 12 13 14 15 16 17
PC0 PC1 PC2 PC3
35 36 37 38 39 40 41 42 62 64
PA0/AD0 PA1/AD1 PA2/AD2 PA3/AD3 PA4/AD4 PA5/AD5 PA6/AD6 PA7/AD7 PB0/SS PB1/SCK PB2/MOSI PB3/MISO PB4/OC0 PB5/OC1A PB6/OC1B PB7/OC2/OC1C PC0/A8 PC1/A9 PC2/A10 PC3/A11 PC4/A12 PC5/A13 PC6/A14 PC7/A15 AREF AVCC
PD0/SCL/INT0 PD1/SDA/INT1 PD2/RXD1/INT2 PD3/TXD1/INT3 PD4/ICP1 PD5/XCK1 PD6/T1 PD7/T2 PE0/RXD0/PDI PE1/TXD0/PDO PE2/XCK0/AIN0 PE3/OC3A/AIN1 PE4/OC3B/INT4 PE5/OC3C/INT5 PE6/T3/INT6 PE7/ICP3/INT7 PF0/ADC0 PF1/ADC1 PF2/ADC2 PF3/ADC3 PF4/ADC4/TCK PF5/ADC5/TMS PF6/ADC6/TDO PF7/ADC7/TDI PG0/WR PG1/RD PG2/ALE PG3/TOSC2 PG4/TOSC1 PEN
25 26 27 28 29 30 31 32
RV1 1k
D0 D1 D2 D3 D4 D5 D6 D7
XTAL1 XTAL2
7 8 9 10 11 12 13 14
RESET
2 3 4 5 6 7 8 9 61 60 59 58 57 56 55 54
PA4 PA5 PA6 PA7
CRYSTAL
C3
PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7
U1
RS RW E
24 23
4 5 6
20
X1
PA0 PA1 PA2
10k
1 2 3
R1
VSS VDD VEE
LM016L
PC0 PC1 PC2
R4 1k
R2 1k
33 34 43 18 19
PC3
R3 1k
TOMBOL 1 TOMBOL 2 TOMBOL 3
1
ATMEGA128
Gambar 5.3 Skema Desain Proteus untuk Percobaan 5.2 2
TEKNIK ANTARMUKA| Modul V: Timer Counter
A B C D
4. Perhatikan tampilan osciloscop virtual. Hitung perioda dari masing-masing gelombang kotak. B. TUGAS 5.1: Modifikasi program pada subbab 5.2 diatas untuk menghasilkan gelombang kotak dengan spesifikasi sebagai berikut: PORTC.0 => T = 100ms; PORTC.1 => T = 300ms; PORTC.2 => T = 600ms; PORTC.4 => T = 1200ms.
5.3 TIMER MENGGUNAKAN FASILITAS TIMER/COUNTER INTERNAL A. Langkah kerja 1. Hitung nilai TCNT1 pada rumus pada subbab 5.1 untuk Ttimer 100ms
(fosc=11.059MHz). 2. Buat project baru pada CodeVisionAVR. 3. Atur
Isi dari perhitungan step 1
4. Edit program hasil generate sebagai berikut : 3
TEKNIK ANTARMUKA| Modul V: Timer Counter
interrupt [TIM1_OVF] void timer1_ovf_isr(void) { // Place your code here TCNT1H=0xYYYY >> 8; //YYYY=nilai hex hasil perhitungan TCNT1L=0xYYYY & 0xff; PORTC.0=~PORTC.0; } TCCR1B=0x05; PORTC.0=0; while (1) { // Place your code here }
};
5. Compile dan make program anda. 6. Jalankan program anda pada desain Gambar 5.3 7. Amati dan hitung periode sinyal pada Osciloscop virtual B. TUGAS 5.2 : Ulangi Tugas 5.1 dengan menggunakan timer internal. C. TUGAS 5.3 : Program Jam Digital menggunakan Timer pada LCD.
4
TEKNIK ANTARMUKA| Modul V: Timer Counter
5.4 COUNTER MENGGUNAKAN TIMER/COUNTER INTERNAL A. Langkah kerja
LCD1
C3
100uF
C1
33pF
C2
33pF
PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7
51 50 49 48 47 46 45 44
PB0 10 PB1 11 12 13 14 15 16 17 PC0 PC1 PC2 PC3
35 36 37 38 39 40 41 42 62 64
PA0/AD0 PA1/AD1 PA2/AD2 PA3/AD3 PA4/AD4 PA5/AD5 PA6/AD6 PA7/AD7 PB0/SS PB1/SCK PB2/MOSI PB3/MISO PB4/OC0 PB5/OC1A PB6/OC1B PB7/OC2/OC1C PC0/A8 PC1/A9 PC2/A10 PC3/A11 PC4/A12 PC5/A13 PC6/A14 PC7/A15
PE0/RXD0/PDI PE1/TXD0/PDO PE2/XCK0/AIN0 PE3/OC3A/AIN1 PE4/OC3B/INT4 PE5/OC3C/INT5 PE6/T3/INT6 PE7/ICP3/INT7 PF0/ADC0 PF1/ADC1 PF2/ADC2 PF3/ADC3 PF4/ADC4/TCK PF5/ADC5/TMS PF6/ADC6/TDO PF7/ADC7/TDI
AREF AVCC
PG0/WR PG1/RD PG2/ALE PG3/TOSC2 PG4/TOSC1 PEN
25 26 27 28 29 30 31 32
RV1 1k
2 3 4 5 6 7 8 9 61 60 59 58 57 56 55 54
A B +
FM
-
1
ATMEGA128
Gambar 5.4 Skema Desain Proteus untuk Percobaan 5.4
#include <mega128.h> #include <stdlib.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x1B ;PORTA #endasm #include
// Declare your global variables here unsigned char temp[6]; int data; void main(void) { // Timer/Counter 2 initialization // Clock source: T2 pin Falling Edge // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected TCCR2=0x06; TCNT2=0x00; OCR2=0x00; // LCD module initialization
5
TEKNIK ANTARMUKA| Modul V: Timer Counter
C D
AM
33 34 43 18 19
1. Buat project baru dengan program sebagai berikut.
D0 D1 D2 D3 D4 D5 D6 D7
PD0/SCL/INT0 PD1/SDA/INT1 PD2/RXD1/INT2 PD3/TXD1/INT3 PD4/ICP1 PD5/XCK1 PD6/T1 PD7/T2
7 8 9 10 11 12 13 14
XTAL1 XTAL2
PA4 PA5 PA6 PA7
CRYSTAL
RESET
RS RW E
24 23
U1
4 5 6
20
X1
PA0 PA1 PA2
10k
1 2 3
R1
VSS VDD VEE
LM016L
TOMBOL 3
lcd_init(16);
while (1) { // Place your code here data=TCNT2;//hasil counter (TCNT0) dipindah ke data if (data>=256) { lcd_clear(); } lcd_gotoxy(0,0); lcd_putsf("ElectrO-Polines"); itoa(data,temp); //menampilkan di LCD lcd_gotoxy(0,1); lcd_puts(temp); }; }
2. Jalankan program pada desain Gambar 5.4
3. Tekan tombol berulang-ulang. Jika program anda benar maka nilai pada LCD bertambah 1 setiap tombol ditekan sekali. 4. Buat program berikut #include <mega128.h> #include <stdlib.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x1B ;PORTA #endasm #include // Declare your global variables here unsigned char temp[6]; unsigned int data; void main(void) { TCCR1A=0x00; TCCR1B=0x06; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; OCR1CH=0x00; OCR1CL=0x00;
6
// LCD module initialization lcd_init(16);
TEKNIK ANTARMUKA| Modul V: Timer Counter
while (1) { // Place your code here data=TCNT1;//hasil counter (TCNT0) dipindah ke data if (data>=0xFFFF) { lcd_clear(); } lcd_gotoxy(0,0); lcd_putsf("ElectrO-Polines"); itoa(data,temp); //menampilkan di LCD lcd_gotoxy(0,1); lcd_puts(temp); }; }
5. Jalankan program anda pada design gambar 5.4
6. Atur parameter signal Generator sebagaimana Gambar 5.5
Gambar 5.5 Pengaturan signal generator 1. Putar-putar dengan pelan tombol “centre” 2. Lihat perubahan pada Osciloscop. Perhatikan perubahan pada LCD B. TUGAS 5.4 : Gabungkan kedua program pada percobaan 5.5 dalam 1 program (baris atas LCD menampilkan hitungan dari tombol, sdangkan baris bawah LCD untuk penghitungan pulsa)
7
TEKNIK ANTARMUKA| Modul V: Timer Counter
5.5 FREQUENCY COUNTER (KOMBINASI TIMER & COUNTER) A. Langkah kerja LCD1
100uF
C1
33pF
C2
33pF
51 50 49 48 47 46 45 44
PB0 10 PB1 11 12 13 14 15 16 17 35 36 37 38 39 40 41 42 62 64
PA0/AD0 PA1/AD1 PA2/AD2 PA3/AD3 PA4/AD4 PA5/AD5 PA6/AD6 PA7/AD7
PE0/RXD0/PDI PE1/TXD0/PDO PE2/XCK0/AIN0 PE3/OC3A/AIN1 PE4/OC3B/INT4 PE5/OC3C/INT5 PE6/T3/INT6 PE7/ICP3/INT7
PB0/SS PB1/SCK PB2/MOSI PB3/MISO PB4/OC0 PB5/OC1A PB6/OC1B PB7/OC2/OC1C
PF0/ADC0 PF1/ADC1 PF2/ADC2 PF3/ADC3 PF4/ADC4/TCK PF5/ADC5/TMS PF6/ADC6/TDO PF7/ADC7/TDI
PC0/A8 PC1/A9 PC2/A10 PC3/A11 PC4/A12 PC5/A13 PC6/A14 PC7/A15
PG0/WR PG1/RD PG2/ALE PG3/TOSC2 PG4/TOSC1
AREF AVCC
PEN
RV1 1k
D0 D1 D2 D3 D4 D5 D6 D7
XTAL1 XTAL2
25 26 27 28 29 30 31 32
7 8 9 10 11 12 13 14
PD0/SCL/INT0 PD1/SDA/INT1 PD2/RXD1/INT2 PD3/TXD1/INT3 PD4/ICP1 PD5/XCK1 PD6/T1 PD7/T2
2 3 4 5 6 7 8 9 61 60 59 58 57 56 55 54
PA4 PA5 PA6 PA7
CRYSTAL
C3
PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7
RESET
RS RW E
24 23
U1
4 5 6
20
X1
PA0 PA1 PA2
10k
1 2 3
R1
VSS VDD VEE
LM016L
+
AM
FM
33 34 43 18 19
-
TOMBOL 3
1
ATMEGA128
Gambar 5.6 Skema Desain Proteus untuk Percobaan 5.5 1. Persiapkan program dan project baru pada CVAVR dengan konfigurasi sebagai berikut: Chip LCD Timer 1 Timer 3
2.
Chip: ATMega 128 Clock: 11.0592 MHz LCD Port: Port A Chars./line: 16 Clock Source: T1 pin Falling Edge Interrupt: Non Active Clock Source: system Clock Clock Value: 10.800 kHz Interrupt: Active
Edit program hasil generate CVAVRWizard pada beberapa bagian sehingga dihasilkan program sebagai berikut. #include <mega128.h>
// Alphanumeric LCD Module functions #asm .equ __lcd_port=0x1B ;PORTA #endasm #include #include <stdlib.h>
8
TEKNIK ANTARMUKA| Modul V: Timer Counter
#include <stdio.h>
// Declare your global variables here unsigned char buffer[16]; unsigned int data;
// Timer 3 overflow interrupt service routine interrupt [TIM3_OVF] void timer3_ovf_isr(void) { // Place your code here TCNT3H=0xD5D0 >> 8; //FBC8 => 0.1 detik; D5D0 => 1 detik TCNT3L=0xD5D0 & 0xff; data=TCNT1; TCNT1H=0x00; TCNT1L=0x00; } void main(void) { // Timer/Counter 1 initialization // Clock source: T1 pin Falling Edge // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // OC1C output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off // Compare C Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x06; TCNT1H=0x00; //D5D0 TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; OCR1CH=0x00; OCR1CL=0x00; // Timer/Counter 3 initialization // Clock source: System Clock // Clock value: 10.800 kHz // Mode: Normal top=FFFFh // Noise Canceler: Off // Input Capture on Falling Edge // OC3A output: Discon. // OC3B output: Discon.
9
TEKNIK ANTARMUKA| Modul V: Timer Counter
// OC3C output: Discon. // Timer 3 Overflow Interrupt: On // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off // Compare C Match Interrupt: Off TCCR3A=0x00; TCCR3B=0x05; TCNT3H=0xD5; //D5D0 TCNT3L=0xD0; ICR3H=0x00; ICR3L=0x00; OCR3AH=0x00; OCR3AL=0x00; OCR3BH=0x00; OCR3BL=0x00; OCR3CH=0x00; OCR3CL=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; ETIMSK=0x04;
// Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // LCD module initialization lcd_init(16); // Global enable interrupts #asm("sei")
while (1) { // Place your code here // Place your code here //data=TCNT1;//hasil counter (TCNT0) dipindah ke data if (data>=0xFFFF) { lcd_clear(); } lcd_gotoxy(0,0); sprintf(buffer,"frek.:%5d Hz",data); lcd_puts(buffer); // display data on LCD }; }
3. Jalankan program anda pada design gambar 5.6
4. Atur parameter signal Generator sebagaimana Gambar 5.7 10
TEKNIK ANTARMUKA| Modul V: Timer Counter
Gambar 5.5 Pengaturan signal generator 5. Putar-putar dengan pelan tombol “centre”. 6. Lihat perubahan tampilan pada LCD, bandingkan dengan nilai pada VSM Generator. B. TUGAS 5.5 : Modifikasi program pada contoh dimana baris kedua LCD menampilkan frekuensi dalam KHz. B. TUGAS 5.6 : Buat program simulasi TACHO-METER (RPM – Meter).
11
TEKNIK ANTARMUKA| Modul V: Timer Counter