Gampang membuat frequency counter dengan ATmega8535.

Pada program berikut kita akan membuat frequency counter atau penghitung frekuensi memakai counter 1 pada ATmega8535, walaupun tipe AVR lain dapat juga dipakai.

Bahasa pemrogramannya kita pakai yang simple, BASCOM-AVR.

Aplikasi Mikrokontroler

 $regfile = “m8535.dat”                                                                                                            $crystal = 16000000                                                                                                                Config Lcdpin=Pin,Rs=PORTC.0,E=PORTC.2 , Db4 = PORTC.4 , Db5 = PORTC.5 , Db6 = PORTC.6, Db7 = PORTC.7                                                                                                         Config Lcd = 16 * 2                                                                                                                      Cursor Off                                                                                                                                         Cls                                                                                                                                                 Config Timer1 = Counter , Edge = falling                                                                                  Lcd ”  Freq Counter  ”                                                                                                                  Lowerline                                                                                                                                         Lcd “Freq=”
Do
Start Counter1
Wait 1
Stop Counter1
Locate 2,6
Lcd Counter1 ; ” Hz   ”
Counter1 = 0
Loop
End

Jalannya Program.

Sebagaimana peralatan frequency counter, maka pulsa yang masuk ke pin T1 akan dihitung dan kemudian ditampilkan setiap 1 detik, sehingga dapat diberi satuan Hz. Berikan inputan pulsa misalnya dari function generator dengan output gelombang kotak, kemudian atur frekuensinya misalnya 100 Hz, maka pada LCD akan tampil “Freq=100Hz”.

Penjelasan program.

Config Timer1=Counter,Edge=falling
Timer 1 difungsikan sebagai counter dengan sinyal deteksi falling edge.
Start counter1
Wait 1
Stop counter1
Frekuensi artinya jumlah pulsa selama 1 detik, sehingga counter 1 diaktifkan selama 1 detik, kemudian dimatikan.
Locate 2,6
Lcd counter1 ; ” Hz   “
Menampilkan hasil cacahan counter 1 di baris 2 kolom 6, disebelah “Freq=”. Titik koma (;) digunakan untuk menampilkan ke LCD pada alamat/posisi sesudahnya, sehingga disebelah kanan tampilan nilai counter1, akan tampil “Hz”, anda bisa juga menulis programnya sebagai berikut:
Lcd counter1
Lcd “Hz  “

Master Mikrokontroler

Kalau mau pakai bahasa C (dengan CodeVisionAVR) juga gampang :

#include
#include
#include
#include
unsigned int counter1;
unsigned char buffer[10];
void main(void)
{
lcd_init(16);
lcd_clear();
lcd_putsf(”  Freq Counter”);
lcd_gotoxy(0,1);
lcd_putsf(“Freq=”);
while (1)
      {
      TCCR1B=0x06;
      delay_ms(1000);
      TCCR1B=0x0;
      counter1=(256*TCNT1H)+TCNT1L;   
      sprintf(buffer,”%d Hz “,counter1);
      lcd_gotoxy(5,1);
      lcd_puts(buffer);
      TCNT1H=0;
      TCNT1L=0;
      }
}

Jangan lupa untuk menghubungkan pin RW (LCD) ke PORTC.1 dan mengatur konfigurasi library LCD pada CodeVisionAVR !!.

This entry was posted in Mikrokontroler AVR. Bookmark the permalink.

31 Responses to Gampang membuat frequency counter dengan ATmega8535.

  1. wahyu'hd says:

    wah mas mohon bantuannya,,
    maksud dari script ini apa ya?
    TCCR1B=0×06;
    delay_ms(1000);
    TCCR1B=0×0;
    counter1=(256*TCNT1H)+TCNT1L;
    sprintf(buffer,”%d Hz “,counter1);
    lcd_gotoxy(5,1);
    lcd_puts(buffer);
    TCNT1H=0;
    TCNT1L=0;
    }

    counter1=(256*TCNT1H)+TCNT1L;
    mohon penjelassannya mas

    • admin says:

      TCCR1B=0×06; //timer 1 sebagai counter, falling edge
      delay_ms(1000);//tunda 1 detik, ini untuk mencacah 1 detik (freq=jml pulsa dlm 1 detik)
      TCCR1B=0×0; //matikan timer/counter
      counter1=(256*TCNT1H)+TCNT1L; //hasilnya ada di 2 byte : TCNT1H+TCNT1L, shg data frek ada disini
      sprintf(buffer,”%d Hz “,counter1); //counter1 tipe datanya integer, shg harus diconvert ke string
      lcd_gotoxy(5,1); //posisikan cursor pada baris ke 2 kolom ke 6
      lcd_puts(buffer); //tampilkan nilai freq
      TCNT1H=0; //kosongkan register timer krn mo dipake utk nyacah lagi
      TCNT1L=0;
      }

      counter1=(256*TCNT1H)+TCNT1L;

  2. ardy says:

    kalo mau baca tiga input frekuensi gimana mas, trus klo mau dibatasi semisal 50hz dan lebihnya dari 50hz kita buang kesalah satu port bagaimana mas , mohon bantuanya !!

  3. smarpren says:

    Mas mau nanya, kalo port PB1 dimasukkan input berupa sinus bertegangan kecil apa bisa??

  4. Ryan says:

    kalo outputnya pake 4 buah LED matrix, terus satuannya bisa Hz, KHz, dan MHz itu skematik dan pemrogramannya gimana yah? makasih

  5. adi says:

    kalau nilai frekuensi yg ingin ditampilkan bilangan pecahan gimna acaranya?

  6. angga says:

    kalau frekuensi yang diukur 50.01 bisa ditampilkan g mas?

  7. angga says:

    kalau membuat frekuensi meter dengan sensitifitas 0.01 HZ bgman programnya gan?

  8. Rifky says:

    mas, permisi mau tanya
    kalau program untuk kendali dimmer lampu bagaimana cranya mas?
    jadi ketika diberi input pwm sekian nyala lampu redup. itu caranya bagaimana mas ya?
    terima kasih

    • admin says:

      Lampu DC tinggak konek outnya dengan PWM (kalau perlu kasih driver). Lampu AC perlu tambahan zero crossing detector

  9. aryo says:

    mas, kalau deteksi warna pakai sensor TCS dengan atmega 8535 gimana caranya ya???

  10. willy says:

    Start counter1
    Wait 1
    Stop counter1
    Frekuensi artinya jumlah pulsa selama 1 detik, sehingga counter 1 diaktifkan selama 1 detik, kemudian dimatikan.

    program diatas sudah saya coba, tapi waktunya kok gak pas selama 1 detik ya mas?
    gmana caranya agar waktunya akurat selama 1 detik?

    • admin says:

      Kalau gak pas kemungkian frekuensi clock tidak sama. Cek crystalnya, harus sama dengan program, kalau beda tinggal samakan saja programnya di bagian $crystal=…..

  11. citra says:

    mas bagaimana kalau inputan berupa gelombang sinus? dan range yang dihasilkan dari program di atas berapa?
    terima kasih sebelumnya.

  12. Taufik says:

    Mas, kalau pakai bahasa C bagaimana? minta tolong ya…sbb saya gak biasa pake bascom, matur suwun…

  13. redho says:

    mas moho bantuan bisa share interface antara mikrokontroler dengan speaker gak??pake tambahan ic apalagi ya??mksh

    • admin says:

      Kalau sekedar membunyikan seperti alarm (tidak keluar suara seperti poliponik) kan tinggal tambah driver pakai transistor saja mas.

  14. redho says:

    mas mohon share interface antara mikro dengan speaker dong,,tpi pake bahasa C,,itu perlu tambahan ic apa??

  15. Me says:

    mas untuk waktu tunda 15 detik,untuk mencacah 15 detik (freq=jml pulsa dlm 15 detik) itu tinggal mengubah delay_ms nya menjadi 15 ya..
    tpi saya menggunakan mikro atmega8 kok mikro nya engga pas 15 detik ya ?
    terima kasih.

    • admin says:

      Kalau harus tepat sampai benar2 pas agak susah kalau pakai fungsi delay. Kalau mau mendekai tepat pakai timer mas.

  16. Mira says:

    Mas mohon bantuannya, kalau keluaran frekuensi di LCDnya mau koma gimana ya? misal 10.3 Hz untuk bahasa CVAVR? Terimakasih..

Leave a Reply