MODUL V: Timer dan Counter.1 DASAR TEORI Gambar.1 Prinsip Dasar Timer/Counter pada Mikrokontroler Ttimer = Tosc*(-TCNT0)*N ( bit = ) Ttimer = Tosc*(-TCNT1)*N (1 bit = ) Gambar. Diagram Blok Timer/Counter pada Mikrokontroler keluarga AVR 1 TEKNIK ANTARMUKA Modul V: Timer Counter
1. TIMER SEDERHANA MENGGUNAKAN FASILITAS delay.h A. Langkah kerja 1. Buat program sebagai berikut: #include <mega.h> #include <delay.h> void main(void) // Declare your local variables here PORTC=0x00; DDRC=0xFF; PORTC.0=0; PORTC.1=0; PORTC.=0; PORTC.=0; while (1) char c; PORTC.1=~PORTC.1; for(c = 0; c < ; c++) PORTC.0=~PORTC.0; delay_ms(); ;. Compile dan make program anda.. Buat desain proteus sebagaimana Gambar. LCD1 LM01L R1 k C 0uF X1 CRYSTAL C1 pf C pf U1 0 RESET XTAL1 XTAL PA0 1 PA0/AD0 PA1 0 PA1/AD1 PA PA/AD PA PA/AD PA PA/AD PA PA/AD PA PA/AD PA PA/AD PB0/SS PB1/SCK PB/MOSI 1 PB/MISO 1 PB/OC0 1 PB/OC1A 1 PB/OC1B 1 PB/OC/OC1C PC0 PC0/A PC1 PC1/A PC PC/A PC PC/A PC/A 0 PC/A1 1 PC/A1 PC/A1 AREF AVCC PD0/SCL/INT0 PD1/SDA/INT1 PD/RXD1/INT PD/TXD1/INT PD/ICP1 PD/XCK1 PD/T1 PD/T PE0/RXD0/PDI PE1/TXD0/PDO PE/XCK0/AIN0 PE/OCA/AIN1 PE/OCB/INT PE/OCC/INT PE/T/INT PE/ICP/INT PF0/ADC0 PF1/ADC1 PF/ADC PF/ADC PF/ADC/TCK PF/ADC/TMS PF/ADC/TDO PF/ADC/TDI PG0/WR PG1/RD PG/ALE PG/TOSC PG/TOSC1 PEN 0 1 1 0 1 1 1 RV1 R R VSS VDD VEE RS RW E D0 D1 D D D D 1 D 1 D PA0 PA1 PA PA PA PA PA R TOMBOL 1 TOMBOL TOMBOL PC0 PC1 PC PC A B C D ATMEGA Gambar. Skema Desain Proteus untuk Percobaan. TEKNIK ANTARMUKA Modul V: Timer Counter
. Perhatikan tampilan osciloscop virtual. Hitung perioda dari masing-masing gelombang kotak. B. TUGAS.1: Modifikasi program pada subbab. diatas untuk menghasilkan gelombang kotak dengan spesifikasi sebagai berikut: PORTC.0 => T = 0ms; PORTC.1 => T = 00ms; PORTC. => T = 00ms; PORTC. => T = 00ms.. TIMER MENGGUNAKAN FASILITAS TIMER/COUNTER INTERNAL A. Langkah kerja 1. Hitung nilai TCNT1 pada rumus pada subbab.1 untuk Ttimer 0ms (fosc=.0mhz).. Buat project baru pada CodeVisionAVR.. Atur Isi dari perhitungan step 1. Edit program hasil generate sebagai berikut : TEKNIK ANTARMUKA Modul V: Timer Counter
interrupt [TIM1_OVF] void timer1_ovf_isr(void) TCNT1H=0xYYYY >> ; //YYYY=nilai hex hasil perhitungan TCNT1L=0xYYYY & 0xff; PORTC.0=~PORTC.0; TCCR1B=0x0; PORTC.0=0; while (1) ;. Compile dan make program anda.. Jalankan program anda pada desain Gambar.. Amati dan hitung periode sinyal pada Osciloscop virtual B. TUGAS. : Ulangi Tugas.1 dengan menggunakan timer internal. C. TUGAS. : Program Jam Digital menggunakan Timer pada LCD. TEKNIK ANTARMUKA Modul V: Timer Counter
. COUNTER MENGGUNAKAN TIMER/COUNTER INTERNAL A. Langkah kerja LCD1 LM01L R1 k C 0uF X1 CRYSTAL C1 pf C pf PA0 1 PA1 0 PA PA PA PA PA PA PB0 PB1 PC0 PC1 PC PC 0 1 1 1 1 1 0 1 U1 RESET XTAL1 XTAL PA0/AD0 PA1/AD1 PA/AD PA/AD PA/AD PA/AD PA/AD PA/AD PB0/SS PB1/SCK PB/MOSI PB/MISO PB/OC0 PB/OC1A PB/OC1B PB/OC/OC1C PC0/A PC1/A PC/A PC/A PC/A PC/A1 PC/A1 PC/A1 AREF AVCC PD0/SCL/INT0 PD1/SDA/INT1 PD/RXD1/INT PD/TXD1/INT PD/ICP1 PD/XCK1 PD/T1 PD/T PE0/RXD0/PDI PE1/TXD0/PDO PE/XCK0/AIN0 PE/OCA/AIN1 PE/OCB/INT PE/OCC/INT PE/T/INT PE/ICP/INT PF0/ADC0 PF1/ADC1 PF/ADC PF/ADC PF/ADC/TCK PF/ADC/TMS PF/ADC/TDO PF/ADC/TDI PG0/WR PG1/RD PG/ALE PG/TOSC PG/TOSC1 PEN 0 1 1 0 1 1 1 RV1 AM VSS VDD VEE RS RW E D0 D1 D D D D D D 1 1 1 + - FM PA0 PA1 PA PA PA PA PA TOMBOL A B C D ATMEGA Gambar. Skema Desain Proteus untuk Percobaan. 1. Buat project baru dengan program sebagai berikut. #include <mega.h> #include <stdlib.h> // Alphanumeric LCD Module functions #asm.equ lcd_port=0x1b ;PORTA #endasm #include <lcd.h> // Declare your global variables here unsigned char temp[]; int data; void main(void) // Timer/Counter initialization // Clock source: T pin Falling Edge // Clock value: Timer Stopped // Mode: Normal top=ffh // OC output: Disconnected TCCR=0x0; TCNT=0x00; OCR=0x00; // LCD module initialization TEKNIK ANTARMUKA Modul V: Timer Counter
lcd_init(1); while (1) data=tcnt;//hasil counter (TCNT0) dipindah ke data if (data>=) lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("electro-polines"); itoa(data,temp); //menampilkan di LCD lcd_gotoxy(0,1); lcd_puts(temp); ;. Jalankan program pada desain Gambar.. Tekan tombol berulang-ulang. Jika program anda benar maka nilai pada LCD bertambah 1 setiap tombol ditekan sekali.. Buat program berikut #include <mega.h> #include <stdlib.h> // Alphanumeric LCD Module functions #asm.equ lcd_port=0x1b ;PORTA #endasm #include <lcd.h> // Declare your global variables here unsigned char temp[]; unsigned int data; void main(void) TCCR1A=0x00; TCCR1B=0x0; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; OCR1CH=0x00; OCR1CL=0x00; // LCD module initialization lcd_init(1); TEKNIK ANTARMUKA Modul V: Timer Counter
while (1) 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); ;. Jalankan program anda pada design gambar.. Atur parameter signal Generator sebagaimana Gambar. Gambar. Pengaturan signal generator 1. Putar-putar dengan pelan tombol centre. Lihat perubahan pada Osciloscop. Perhatikan perubahan pada LCD B. TUGAS. : Gabungkan kedua program pada percobaan. dalam 1 program (baris atas LCD menampilkan hitungan dari tombol, sdangkan baris bawah LCD untuk penghitungan pulsa) TEKNIK ANTARMUKA Modul V: Timer Counter
. FREQUENCY COUNTER (KOMBINASI TIMER & COUNTER) A. Langkah kerja LCD1 LM01L R1 k C 0uF X1 CRYSTAL C1 pf C pf PA0 1 PA1 0 PA PA PA PA PA PA PB0 PB1 0 1 1 1 1 1 0 1 U1 RESET XTAL1 XTAL PA0/AD0 PA1/AD1 PA/AD PA/AD PA/AD PA/AD PA/AD PA/AD PB0/SS PB1/SCK PB/MOSI PB/MISO PB/OC0 PB/OC1A PB/OC1B PB/OC/OC1C PC0/A PC1/A PC/A PC/A PC/A PC/A1 PC/A1 PC/A1 AREF AVCC PD0/SCL/INT0 PD1/SDA/INT1 PD/RXD1/INT PD/TXD1/INT PD/ICP1 PD/XCK1 PD/T1 PD/T PE0/RXD0/PDI PE1/TXD0/PDO PE/XCK0/AIN0 PE/OCA/AIN1 PE/OCB/INT PE/OCC/INT PE/T/INT PE/ICP/INT PF0/ADC0 PF1/ADC1 PF/ADC PF/ADC PF/ADC/TCK PF/ADC/TMS PF/ADC/TDO PF/ADC/TDI PG0/WR PG1/RD PG/ALE PG/TOSC PG/TOSC1 PEN 0 1 1 0 1 1 1 RV1 AM VSS VDD VEE RS RW E D0 D1 D D D D D D 1 1 1 + - FM PA0 PA1 PA PA PA PA PA TOMBOL ATMEGA Gambar. Skema Desain Proteus untuk Percobaan. 1. Persiapkan program dan project baru pada CVAVR dengan konfigurasi sebagai berikut: Chip Chip: ATMega Clock:.0 MHz LCD LCD Port: Port A Chars./line: 1 Timer 1 Clock Source: T1 pin Falling Edge Interrupt: Non Active Timer Clock Source: system Clock Clock Value:.00 khz Interrupt: Active. Edit program hasil generate CVAVRWizard pada beberapa bagian sehingga dihasilkan program sebagai berikut. #include <mega.h> // Alphanumeric LCD Module functions #asm.equ lcd_port=0x1b ;PORTA #endasm #include <lcd.h> #include <stdlib.h> TEKNIK ANTARMUKA Modul V: Timer Counter
#include <stdio.h> // Declare your global variables here unsigned char buffer[1]; unsigned int data; // Timer overflow interrupt service routine interrupt [TIM_OVF] void timer_ovf_isr(void) TCNTH=0xDD0 >> ; //FBC => 0.1 detik; DD0 => 1 detik TCNTL=0xDD0 & 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=0x0; TCNT1H=0x00; //DD0 TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; OCR1CH=0x00; OCR1CL=0x00; // Timer/Counter initialization // Clock source: System Clock // Clock value:.00 khz // Mode: Normal top=ffffh // Noise Canceler: Off // Input Capture on Falling Edge // OCA output: Discon. // OCB output: Discon. TEKNIK ANTARMUKA Modul V: Timer Counter
// OCC output: Discon. // Timer Overflow Interrupt: On // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off // Compare C Match Interrupt: Off TCCRA=0x00; TCCRB=0x0; TCNTH=0xD; //DD0 TCNTL=0xD0; ICRH=0x00; ICRL=0x00; OCRAH=0x00; OCRAL=0x00; OCRBH=0x00; OCRBL=0x00; OCRCH=0x00; OCRCL=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; ETIMSK=0x0; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x0; SFIOR=0x00; // LCD module initialization lcd_init(1); // Global enable interrupts #asm("sei") while (1) //data=tcnt1;//hasil counter (TCNT0) dipindah ke data if (data>=0xffff) lcd_clear(); lcd_gotoxy(0,0); sprintf(buffer,"frek.:%d Hz",data); lcd_puts(buffer); // display data on LCD ;. Jalankan program anda pada design gambar.. Atur parameter signal Generator sebagaimana Gambar. TEKNIK ANTARMUKA Modul V: Timer Counter
Gambar. Pengaturan signal generator. Putar-putar dengan pelan tombol centre.. Lihat perubahan tampilan pada LCD, bandingkan dengan nilai pada VSM Generator. B. TUGAS. : Modifikasi program pada contoh dimana baris kedua LCD menampilkan frekuensi dalam KHz. B. TUGAS. : Buat program simulasi TACHO-METER (RPM Meter). TEKNIK ANTARMUKA Modul V: Timer Counter