praktikum 1 – modul penghitung barang

anggota :

1. Fitria (7108040013)

2. Relanggih (7108040020) (author)

1.1 Pendahuluan

Pada praktikum pertama ini akan melakukan percobaan modul 1(1).

Gambar 1.Ilustrasi alat penghitung barang

Pada praktikum kali ini akan di coba membuat alat untuk penghitung barang.Dimana pada pada pabrik biasanya menggunakan  conveyor.Namun pada praktikum ini tentu saja tidak menggunakan conveyor asli,melainkan hanya menggunakan sebuah simulasi.

1.2 Tujuan

  • Dapat me-review  kembali teknik pemrograman khusunya dengan menggunakan bahasa C.
  • Dapat menggunakan register – register untuk mengakses port sebagai digital I/O.
  • Dapat menggunakan simulator untuk memahami proses terjadi.

 

1.3 Teori

 

Pada praktikum ini konfigurasi dari modul adalah sebagai berikut :

push button – ATmega 8535 – LED

 

1.4 Alat

1. Personal Computer dan Software AVR
2. Modul pemrograman AVR + Downloader
3. DC Power Supply 9 volt

1.5 Langkah percobaan

Dalam praktikum ini akan menggunakan software codevision AVR,maka hal penting yang dilakukan adalah :

- membaca chip

 

 

gambar 2

samapai muncul seperti pada gambar 2 di atas.Berati ATmega 8535 telah terbaca dan dapat digunakan.Hal ini merupakan hal yang penting dilakukan di awal di setiap kali melakukan pemrograman

a.percobaan 1

program :

#include <mega8535.h>
#include <delay.h>
#define LED PORTD
// nilai logika ketika saklar di tekan
#define Ditekan         1
#define Tidak_Ditekan   0
// Declare your global variables here
unsigned char counter;
//Function prototype
void Counter_Show();
void Counter_Update();
//void Delay(unsigned int periode);
unsigned char Baca_PB();

void main()
{
// Declare your local variables here

PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0xff;

TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;

//counter=0;
    while (1)
    {
        // Place your code here
        {
            PORTD = counter; //tampilkan nilai counter ke LED
            if (PINC.0==0){ //bila push button diaktifkan
                counter++;} //tambah counter dengan 1
        }
    }
 }

 

 

b. percobaan 2

#include <mega8535.h>
#include <delay.h>
#define LED PORTD
#define Ditekan         1
#define Tidak_Ditekan   0
// Declare your global variables here
unsigned char counter;

void main(void)
{
// Declare your local variables here

PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0xff;

TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;

counter=0;
while (1)
      {
      // Place your code here

        LED=counter;                    // tampilkan nilai counter ke LED
        if(PINC.0==0)                   // jika push button di tekan
        {
            delay_ms(500);              // waktu delay 500ms
            if (PINC.0==0)              // cek push button lagi
            {
                while (PINC.0==0);      // jika push button masih ditekan
                counter++;              // tambah counter dengan 1
            }
        }
      };
}

 

c. percobaan 3

#include <mega8535.h>
#include <delay.h>
#define LED PORTD
// nilai logika ketika saklar di tekan
#define Ditekan         1
#define Tidak_Ditekan   0
// Declare your global variables here
unsigned char counter;
//Function prototype
void Counter_Show();
void Counter_Update();
//void Delay(unsigned int periode);
unsigned char Baca_PB();

void main()
{
// Declare your local variables here

PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0xff;

TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;

//counter=0;
    while (1)
        {
        // Place your code here

            Counter_Show();
             if (Baca_PB()==Ditekan)
                {Counter_Update();}
        };
 }
void Counter_Show()
    {
        LED = counter;
    }
/* -------------------------------------- *
Counter_Update()
Menambahkan nilai counter dengan 1
-* -------------------------------------- */
void Counter_Update()
    {
        counter++;
    }

unsigned char Baca_PB()
{
unsigned char push=Tidak_Ditekan; //nilai default tidak ditekan
    if (PINC.0==0){ //bila push_button diaktifkan
        delay_ms(500); //tunda 500 ms
        if (PINC.0==0){ //cek push_button kembali
            while (PINC.0==0); //tunggu sampai dilepas
            push=Ditekan; //push_button ditekan dengan benar
        }
    }
    return(push); //kembalikan hasilnya
}

 

masukkan setiap program di atas secara berurutan.Lalu Built all(shift + F9)

sehingga terlihat seperti gambar 3

 

gambar 3

1.6 Analisa

 Pada percobaan pertama

  while (1)
    {
        // Place your code here
        {
            PORTD = counter; //tampilkan nilai counter ke LED
            if (PINC.0==0){ //bila push button diaktifkan
                counter++;} //tambah counter dengan 1
        }
    }
 }

dapat dilihat bahwa di sini masih digunkan program sederhana.Di mana pada program ini efek bouncing masih bisa terjadi.Hal tersebut di karenakan tidak diberikannya suatu delay pada program tersebut.

pada percobaan kedua

 

while (1)
      {
      // Place your code here

        LED=counter;                    // tampilkan nilai counter ke LED
        if(PINC.0==0)                   // jika push button di tekan
        {
            delay_ms(500);              // waktu delay 500ms
            if (PINC.0==0)              // cek push button lagi
            {
                while (PINC.0==0);      // jika push button masih ditekan
                counter++;              // tambah counter dengan 1
            }
        }
      };
}

pada percobaan kedua ini telah di berikan delay.Sehingga efek bouncing dapat di hilangkan.Maka selama push button yang di gunakan di tekan selama < 500 ms maka tidak akan ada perubahan pada LED.Sedangkan jika push button ditekan > 500ms maka LED akan menyala/counter + 1.

pada percobaan 3 pada dasarnya sama dengan percobaan 2,hanya bedanya pada percobaan 3 ini telah di buat sub fungsi.

1.7 Kesimpulan

  • Pada penggunaan counter jika memang data inputan masuk secara terus menerus sebaiknya menggunakan delay supaya tidak terjadi efek bouncing.
  • Efek bouncing sendiri pasti akan terjadi pada suatu counter bila aplikasi seperti di atas karena kecepatan menghitung dari ATmega 8535 itu sendiri.
  • Program di atas hanya berlaku pada benda padat dan tidak dapat di aplikasikan pada benda yang berongga.

 

modul by hary (at) eepis-its (dot) edu

author by Relanggih08