Anda di halaman 1dari 10

/*

* 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 |= (1<<ICNC1)|(1<<CS00); //aktif tinggi dan no prescaler


while((TIFR&(1<<ICF1)) == 0);
ambil1 = ICR1; //mengambil nilai capture
TIFR = (1<<ICF1); //clear ICF flag

TCCR1B |= (1<<CS00); //aktif rendah dan no prescaler


while((TIFR&(1<<ICF1)) == 0);
ambil2 = ICR1; //mengambil nilai capture
TIFR = (1<<ICF1); //clear ICF flag

TCCR1B |= (1<<ICNC1)|(1<<CS00); //aktif tinggi dan no prescaler


while((TIFR&(1<<ICF1)) == 0);
ambil3 = ICR1; //mengambil nilai capture
TIFR = (1<<ICF1); //clear ICF flag

TCCR1B = 0;

if(ambil1<ambil2 && ambil2<ambil3)


{
period = ambil3-ambil1;

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

Anda mungkin juga menyukai