RSS

SIMPLE STOPWATCH MENGGUNAKAN MIKROKONTROLER DENGAN CODEVISION AVR

12 Jun

Aplikasi ini merupakan sebuah stopwatch sederhana yang dapat menghitung sampai satuan waktu terkecil yaitu 1/100 detik atau 10 ms. Untuk membangkitkan timer 10 ms saya menggunakan fitur timer0 mikrokontroler AVR. Untuk lebih jelas mengenai fitur timer AVR silakan baca postingan saya mengenai tutorial Timer dan Counter AVR.

Pada aplikasi ini terdapat 3 buah tombol (push button) yang terdiri dari tombol START, STOP dan RESET. Tombol START digunakan untuk memulai stopwatch,  STOP digunakan untuk memberhentikan stowatch dan tombol RESET untuk me-reset (menset ulang kembali nilai stopwatch).

Saya juga menyertakan program dalam file CodeVision AVR dan file simulasi proteus pada akhir artikel ini. Berikut adalah schematik rangkaiannya.

Sedangkan setting untuk CodeWizard AVR adalah sebagai berikut:

Berikut adalah listimg program lengkapnya:

unsigned char count, temp[16], indeks=0, detik=0, menit=0, jam=0;

#include <mega16.h>
#include <stdio.h>
#include <stdlib.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x8A;
count++;
}

void hitung_waktu()
{
if (count>=100)
    {
    lcd_clear();
    detik++;
    count=0;
    }

if (detik>=60)
    {
    menit++;
    detik=0;
    }

if (menit>=60)
    {
    jam++;
    menit=0;
    }
}

void detek_tombol()
{
if (PINA.0==0 && (indeks==0 || indeks==2))//start timer
    {
    indeks=1;
    TIMSK=0x01;//memulai timer
    lcd_clear();
    }

if (PINA.1==0 && indeks==1)//stop timer
    {   
    indeks=2;
    TIMSK=0x00;//menstop timer
    lcd_clear();
    }

if (PINA.2==0 && indeks==2)//reset timer
    {   
    indeks=0;//semua data direset
    count=0;
    detik=0;
    menit=0;
    jam=0;   
    lcd_clear();
    }
}

void tampil_lcd()
{
lcd_gotoxy(0,0);
sprintf(temp,”Timer %d:%d:%d:%d”,jam,menit,detik,count);
lcd_puts(temp);//tampilkan waktu di LCD baris pertama

if (indeks==0)
    {
    lcd_gotoxy(0,1);
    lcd_putsf(“START”);
    }   

if (indeks==1)
    {
    lcd_gotoxy(0,1);
    lcd_putsf(“STOP”);
    }    

if (indeks==2)
    {
    lcd_gotoxy(0,1);
    lcd_putsf(“START      RESET”);
    }
}

void main(void)
{
PORTA=0x0f;
DDRA=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x05;
TCNT0=0x8A;
OCR0=0x00;

// 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)
      {
      detek_tombol();
      hitung_waktu();
      tampil_lcd();
      };
}

Untuk file program CodeVision AVR dan file simulasi Proteus silakan download link dibawah ini.

File program CodeVision AVR dan file simulasi Proteus

Semoga bermanfaat…

 
9 Comments

Posted by on June 12, 2011 in AVR Projects

 

Tags: , , ,

9 responses to “SIMPLE STOPWATCH MENGGUNAKAN MIKROKONTROLER DENGAN CODEVISION AVR

  1. Allthewin

    June 18, 2011 at 21:02

    Manfaat banget mas tutorialnya, lengkap dan jelas banget.
    Salam kenal

     
  2. rina

    June 23, 2011 at 08:40

    sangan bermanfaat artikel nya..🙂
    kebetulan saya ada tugas ..
    terima kasih
    oh ya saya mau tanya anda menggunakan software proteus versi berapa ?
    karena file proteus nya gak bisa dibuka di proteus saya versi 7.1 sp 4.
    mohon bantuannya ?
    thx

     
  3. rina

    June 23, 2011 at 13:24

    mas ni pake proteus n cvavr tipe brapa?

     
  4. moko

    July 5, 2011 at 09:03

    salam kenal. .
    aku pakai timer0.
    ceritanya aq mau bwt array bobot n array waktu.
    1. tiap kali OVF, nilai “tim akan nail 1 per 1”
    2.tiap kali ada perubahan “PV”, maka :
    nilai “PV” dimasukkan ke->array bobot, dan nlai “tim” dimasukkkan ke-> array waktu.

    yang terjadi adalah, array bobot bisa terisi saat nilai PV berubah, tapi saat itu juga array waktunya tidak terisi dengan variabel tim.

    yang saya inginkan nilai tim itu CountUp: 1 3 7 9 12 17 19..dst dan tersimpan ke array waktu

    ini scriptnya mas:

    // Timer 0 overflow interrupts service routine
    int tim;unsigned char j;
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    unsigned char pwmcount;
    pwmcount++;

    TCNT0=0xFF;

    if(pwmcount==255) tim++;
    if(PVsblm!=PV) { bobot[j]=PV; waktu[j]=tim; j++;}

    PVsblm=PV;
    }

    mohon pencerahannya…,
    terima kasih
    moko UMS

     
    • ElectrO-cOntrOl Team

      July 5, 2011 at 09:50

      saya kurang mengerti maksud anda… apa itu PV dan tersimpan ke array waktu???
      untuk lebih jelasnya silakan kirim lewat email saja dengan mengunjungi blog saya yg baru di elektro-kontrol.blogspot.com

       
  5. moko

    July 20, 2011 at 20:33

    terima kasih kawan atas artikel stop watchnya, setelah saya pelajari, apa yang saya tanyakan sudah terjawab. lain waktu kalau ada yang ingin saya tanyakan saya boleh bertanya lagi kan?

    terima kasih banyak.

     
    • ElectrO-cOntrOl Team

      July 21, 2011 at 02:59

      Blog ini telah dipindah ke alamat baru yaitu:

      elektro-kontrol.blogspot.com

      Jika ada pertanyaan atau komentar silakan kunjungi blog yg terbaru, jika anda meninggalkan pertanyaan atau saran disini tidak akan ditanggapi.

      Harap maklum. Terima kasih.

       

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: