Frequensi Counter
Frequensi Counter
* frequensi_counter.c
*
* Created: 1/20/2018 7:58:29 PM
* Author: Khalimatus Syadiyah
*/
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <stdlib.h>
#include "lcd.h"
#define f_cpu 2000000
char frequ[10];
int ambil1, ambil2, ambil3;
int period;
long freq;
//float duty;
ISR(TIMER1_CAPT_vect){
TCCR1A = 0; //mode normal
TCNT1 = 0;
TIFR = (1<<ICF1); //clear ICF flag
TCCR1B = 0;
freq = f_cpu/period;
lcd_clrscr();
lcd_home(); //menampilkan karakter frekuensi
lcd_gotoxy(0, 0);
ltoa(freq, frequ, 10); //membaca nilai data frequensi
lcd_puts("Frekuensi :"); //menampilkan karakter frekuensi
lcd_gotoxy(0, 1);
lcd_puts(frequ); //menampilkan hasil pembacaan frekuensi
lcd_puts(" Hz");
}
else
{
lcd_clrscr();
lcd_gotoxy(0, 0);
lcd_puts("Nilai ERROR"); //membaca nilai data frequensi EROR
lcd_gotoxy(0, 1);
lcd_puts("-------"); //menampilkan hasil pembacaan EROR
}
_delay_ms(50);
}
int main(void)
{
lcd_init(LCD_DISP_ON_CURSOR); //inisialisasi IO
DDRD = 0x00; // Port_D6 sebagaiinput ICP_1
PORTD |= _BV(6); // PasangR-Pullup
TIMSK |= (1<<TICIE1) | (1<<TOIE1); //TIMSK Timer Interrupt MAskRegister
//OCIE2 TOIE2 TICIE1 OCIE1A CIE1B TOIE1
OCIE0 TOIE0
TCCR1B |= (1<<ICNC1)|(0<<ICES1)|(0<<CS12)|(0<<CS11)|(1<<CS10); //Noise canceller,
ICP_1 aktifnaik //No presaclerand start timer
sei(); //Enable global interrupt
while(1)
{
}
}
Gambar rangkaian
Hasil
(ini tak kasih gambar yang eror, kalau mau menampilkan yang eror ya monggo, nek mau dihapus ya
monggo, yang eror jika nilai dibawah 100. Bisa membaca pada kisaran angka 100 – 9999. Kalau sudah
bernilai 100K hz program tidak terbaca (tampilan e “- “)
10 hz
50 hz
100 hz
200hz
1000
10K Hz
100k Hz