Rabu, 11 Juni 2014

LAPORAN TUGAS AKHIR MIKROKONTROLLER "TIMBANGAN DIGITAL BERBASIS ATMEGA 16"


A.      JUDUL
Timbangan Digital Berbasis Mikrokontroller ATMega16

B.       TUJUAN
Tujuan Tugas Akhir ini, merancang bangun timbangan digital adalah untuk alat bantu menimbang berat berbasis mikrokontroller ATMEGA16.

C.      LATAR BELAKANG
Dalam hal pengukuran massa, pengukuran massa biasanya dilakukan secara manual yaitu dengan menggunakan timbangan manual. Definisi timbangan itu sendiri adalah sebuah alat bantu yang digunakan untuk mengetahui berat suatu benda. Dalam pemanfaatannya timbangan digunakan diberbagai bidang salah satunya dibidang perdagangan, seperti halnya pedagang buah dipasar yang kebanyakan masih menggunakan timbangan manual.
Berdasarkan dari penjelasan diatas, maka dirancanglah suatu alat timbangan elektronik menggunakan mikrokontroller ATMega16 sebagai pmroses data. Pada timbangan elektronik ini menggunakan sensor berat yaitu sebuah potensiometer sebagai pendeteksi berat suatu benda.
Sensor diletakkan ditengah agar alat dapat menimbang secara baik. Pada saat alat mendeteksi adanya beban, maka secara otomatis sensor akan membaca dan mengirimkan sinyal ke mikrokontroler yang kemudian berat buah tersebut ditampilkan oleh LCD.
Setelah suatu benda diletakkan pada tumpuan beban pada timbangan maka timbangan akan keluar kode dari timbangan yang akan disimpan pada EEPROM (electrically erasablle programmable read-only memory) mikrokontroller ATMega 16.
Pada saat suatu benda diletakkan diatas timbangan, nilai berat akan muncul pada layar LCD (Liquid Crystal Display). Dalam hal ini kami memutuskan untuk merancang rumusan ini sebagai bentuk tugas akhir perkuliahan Mikrokontroller yang berjudul “ Timbangan Digital berbasis ATMega 16 ”.
D.      DASAR TEORI
D.1 Mikrokontroller ATMega 16
Mikrokontroler adalah sebuah sistem komputer lengkap dalam satu serpih (chip). Mikrokontroler lebih dari sekedar sebuah mikroprosesor karena sudah terdapat atau berisikan ROM (Read-Only Memory), RAM (Read-Write Memory), beberapa bandar masukan maupun keluaran, dan beberapa peripheral seperti pencacah/pewaktu, ADC (Analog to Digital converter), DAC (Digital to Analog converter) dan serial komunikasi.
Salah satu mikrokontroler yang banyak digunakan saat ini yaitu mikrokontroler AVR. AVR adalah mikrokontroler RISC (Reduce Instuction Set Compute) 8 bit berdasarkan arsitektur Harvard. Secara umum mikrokontroler AVR dapat dapat dikelompokkan menjadi 3 kelompok, yaitu keluarga AT90Sxx, ATMega dan ATtiny. Pada dasarnya yang membedakan masing-masing kelas adalah memori, peripheral, dan fiturnya
Seperti mikroprosesor pada umumnya, secara internal mikrokontrolerATMega16 terdiri atas unit-unit fungsionalnya Arithmetic and Logical Unit (ALU), himpunan register kerja, register dan dekoder instruksi, dan pewaktu beserta komponen kendali lainnya. Berbeda dengan mikroprosesor, mikrokontroler menyediakan memori dalam serpih yang sama dengen prosesornya (in chip).
D.1.1 Arsitektur Mikrokontroller ATMega 16
Mikrokontroler ini menggunakan arsitektur Harvard yang memisahkan memori program dari memori data, baik bus alamat maupun bus data, sehingga pengaksesan program dan data dapat dilakukan secara bersamaan (concurrent).
Secara garis besar mikrokontroler ATMega16 terdiri dari :
1. Arsitektur RISC dengan throughput mencapai 16 MIPS pada frekuensi 16Mhz.
2. Saluran I/O 32 buah, yaitu PORT A, PORT B, PORT C, dan PORT D.
3. CPU yang terdiri dari 32 buah register.
4. User interupsi internal dan eksternal
5. PORT antarmuka SPI dan Bandar USART sebagai komunikasi serial
6. Fitur Peripheral
• Dua buah 8-bit timer/counter dengan prescaler terpisah dan mode compare
• Satu buah 16-bit timer/counter dengan prescaler terpisah, mode compare, dan
mode capture
Real time counter dengan osilator tersendiri
• Empat kanal PWM dan Antarmuka komparator analog
• 8 kanal, 10 bit ADC
Byte-oriented Two-wire Serial Interface
• Watchdog timer dengan osilator internal

D.1.2 Deskripsi Mikrokontroller ATMega 16
·         VCC (Power Supply) dan GND (Ground)
·         PORT A (PA7..PA0)
PORT A berfungsi sebagai input analog pada konverter A/D. PORT A juga sebagai suatu bandar I/O 8-bit dua arah, jika A/D konverter tidak digunakan. Pena - pena PORT dapat menyediakan resistor internal pull-up (yang dipilih untuk masing-masing bit). PORT A output buffer mempunyai karakteristik gerakan simetris dengan keduanya sink tinggi dan kemampuan sumber. Ketika pena PA0 ke PA7 digunakan sebagai input dan secara eksternal ditarik rendah, pena–pena akan memungkinkan arus sumber jika resistor internal pull-up diaktifkan. Pena PORT A adalah tri-stated manakala suatu kondisi reset menjadi aktif, sekalipun waktu habis.
·         PORT  B (PB7..PB0)
PORT B adalah suatu bandar I/O 8-bit dua arah dengan resistor internal pull-up (yang dipilih untuk beberapa bit). PORT B output buffer mempunyai karakteristik gerakan simetris dengan keduanya sink tinggi dan kemampuan sumber. Sebagai input, pena PORT B yang secara eksternal ditarik rendah akan arus sumber jika resistor pull-up diaktifkan. Pena PORT B adalah tri-stated manakala suatu kondisi reset menjadi aktif, sekalipun waktu habis.
·         PORT  C (PC7..PC0)
PORT C adalah suatu bandar I/O 8-bit dua arah dengan resistor internal pull-up (yang dipilih untuk beberapa bit). PORT C output buffer mempunyai karakteristik gerakan simetris dengan keduanya sink tinggi dan kemampuan sumber. Sebagai input, pena PORT C yang secara eksternal ditarik rendah akan arus sumber jika resistor pull-up diaktifkan. Pena PORT C adalah tri-stated manakala suatu kondisi reset menjadi aktif, sekalipun waktu habis.
·         PORT D (PD7..PD0)
PORT D adalah suatu bandar I/O 8-bit dua arah dengan resistor internal pull-up (yang dipilih untuk beberapa bit). PORT D output buffer mempunyai karakteristik gerakan simetris dengan keduanya sink tinggi dan kemampuan sumber. Sebagai input, pena PORT D yang secara eksternal ditarik rendah akan
arus sumber jika resistor pull-up diaktifkan. Pena PORT D adalah tri-stated manakala suatu kondisi reset menjadi aktif, sekalipun waktu habis.
• AVCC adalah pena penyedia tegangan untuk bandar A dan Konverter A/D.
• AREF adalah pena referensi analog untuk konverter A/D.
D.1.3 Memori Program
Arsitektur ATMega16 mempunyai dua memori utama, yaitu memori data dan memori program. Selain itu, ATMega16 memiliki memori EEPROM untuk menyimpan data. ATMega16 memiliki 16K byte On-chip In-System Reprogrammable Flash Memory untuk menyimpan program. Instruksi ATMega16 semuanya memiliki format 16 atau 32 bit, maka memori flash diatur dalam 8K x 16 bit. Memori flash dibagi kedalam dua bagian, yaitu bagian program boot dan aplikasi. Bootloader adalah program kecil yang bekerja pada saat sistem dimulai yang dapat memasukkan seluruh program aplikasi ke dalam memori prosesor.
D.2 LCD
LCD (Liquid Crystal Display) adalah modul penampil yang banyak digunakan karena tampilannya menarik. LCD yang paling banyak digunakan saat ini ialah LCD M1632 refurbish karena harganya cukup murah. LCD M1632 merupakan modul LCD dengan tampilan 2x16 (2 baris x 16 kolom) dengan konsumsi daya rendah. Modul tersebut dilengkapi dengan mikrokontroler yang didesain khusus untuk mengendalikan LCD.
LCD yang umum, ada yang panjangnya hingga 40 karakter (2x40 dan 4x40), dimana kita menggunakan DDRAM untuk mengatur tempat penyimpanan karakter tersebut.
E.       LANGKAH PEMBUATAN
1.      Pembuatan Rangkaian
Langkah kerja :
1.      Buat skema rangkaian pada ISIS.
2.      Lanjutkan dengan membuat desain PCB pada ARES.
3.      Cetak rangkaian PCB pada kertas Glosy.
4.      Siapkan alat dan bahan yang diperlukan.
5.      Setrika kertas Glosy pada PCB yang telah disediakan, sebelumnya bersihkan dahulu PCB agar saat menyetrika jalur mudah menempel.
6.      Larutkan PCB dengan Ferric Choride (FeCl3).
7.      Bersihkan PCB lalu bor letak kaki komponen.
8.      Pasang komponen pada PCB.
9.      Lakukan pengujian rangkaian.
10.  Kemas rangkaian pada box yang telah dibuat.

2.      Pembuatan Box
Langkah pembuatan box :
1.      Buat skema box.
2.      Siapkan plat alumunium.
3.      Ukur plat sesuai skema box yang telah dibuat.
4.      Potong plat sesuai kebutuhan.
5.      Lipat plat sesuai skema box.

F.       PENGUJIAN
Langkah pengujian :
1.      Pastikan rangkaian sudah sesuai dengan desain yang telah dibuat.
2.      Hubungkan rangkaian sistem minimum dengan sensor, downloader dan LCD.
3.      Uji dengan menghubungkan downloader dengan komputer.
4.      Download program dengan Kazama.
5.      Uji alat.

        No.
BERAT BARANG
HASIL PENIMBANGAN
         1.
      Kursi 1.8 kg
       1.86 Kg
         2.
      Box 689 Gram
       420 Gram
         3.
      Laptop 3 Kg
       3.4 Kg
Tabel 1. Data pengujian timbangan digital
            Hasil percobaan timbangan digital berbasis mikrokontroller ATMega 16 dapat dilihat di http://www.youtube.com/watch?v=7bfCJV9yHos

G. PERANCANGAN DAN REALISASI ALAT
1.      Spesifikasi Alat :
Berikut ini adalah spesifikasi dari sistem yang akan direalisasikan :
1. Tegangan Operasional Sistem : 12VDC
2. Sumber : Adaptor
3. Mikrokontroler : ATMEGA16
4. Output : Layar LCD
5. Range Berat : 0 – 3 Kg
2.      Diagram Blok :

 

Gambar 1. Diagram blok sistem kontrol timbangan digital berbasis ATMega16
Sistem minimum ATMEGA16 berfungsi sebagai pengendali utama untuk mengendalikan system secara keseluruhan. Ketika potensiometer berubah posisinya, maka masukan input dari ADC internal yang di miliki Atmega16 juga berubah yang menyebabkan perubahan nilai berat yang ditampilkan LCD. Potensiomter berfungsi untuk menentukan nilai berat yang akan ditampilkan oleh LCD
3.      Cara Kerja Rangkaian :
Jenis timbangan yang digunakan adalah jenis timbangan pegas. Timbangan berfungsi sebagai alat pokok dalam sistem ini. Di dalam timbangan ini dipasang sebuah potensiometer geser. Ketika timbangan mendapatkan beban,maka akan terjadi perubahan atau pergeseran pada potensiometer. Karena adanya perubahan pada resistansi, berubah pula tegangan yang di berikan ke AVR ATMega 16. Di dalam AVR sudah terintegrasi rangkaian ADC yang mengubah data analog menjadi data digital yang nantinya bisa di program di dalam AVR. Output dari AVR masuk ke dalam LCD. Nilai berat yang diterima ditampilkan oleh LCD.
4.      Perancangan Hardware
4.1  Timbangan dan Potensiometer
Jenis timbangan yang digunakan adalah jenis timbangan pegas yang dapat menimbang hingga berat maksimal 3 kg. Timbangan berfungsi sebagai alat pokok dalam sistem ini. Di dalam timbangan ini dipasang sebuah potensiometer geser yang biasa digunakan untuk equalizer pada sebuah pemutar audio seperti tape, radio dan lain-lain. Potensiometer dipasang secara permanen yang apabila timbangan diberi beban maka pegas akan menurun dan ikut menggerakan potensiometer tersebut. Semakin berat beban yang diberikan semakin besar hambatan yang dihasilkan oleh potensiometer.

Gambar 2. Realisasi timbangan pegas berbasis mikrokontroller ATMega16

Gambar 3. Potensiometer geser yang digunakan dalam timbangan pegas
4.2  Mikrokontroller
Sistem minimum yang ingin digunakan adalah berupa modul mikrokontroler ATMEGA16, mikrokontroler ini memiliki 4 Port, ( Port A sampai port D ), semuanya ada 40 pin input output.

Gambar 4. ATMega 16 dalam bentuk fisik

Gambar 5. Arsitektur ATMega 16
Port
Fungsi
Keterangan
PA0
Input
Input dari potensiometer
PB0 – PB6
Output
Inisial LCD
PC5
Tombol
Tombol mode
PC6
Tombol
Tombol setting
PC7
Tombol
Tombol setting tambah
Tabel 2. PORT-PORT yang digunakan di dalam modul timbangan digital
4.3  Desain Box

Gambar 6. Rancangan box timbangan digital
4.4  Skema Rangkaian Timbangan (ISIS)
4.4.1        Skema Rangkaian Sistem Minimum :

Gambar 7. Skema rangkaian system minimum
4.4.2        Skema Rangkaian Timbangan

Gambar 8. Skema rangkaian timbangan digital

5.      Perancangan Software
5.1  Flowchart Program
Sesuai perancangan hardware, maka dapat dirancang flowchart program yang sesuai dengan fungsi alat yang diinginkan, berikut gambar rancangan flowchart program :

Gambar 9. Flowchart program timbangan digital
5.2  Listing Program
Dari rancangan flowchart program diatas, dapat dirancang program seperti yang diinginkan, berikut adalah listing program pada mikrokontroler sesuai dengan rancangan flowchart :
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 24/05/2014
Author  : NeVaDa
Company :
Comments:


Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 16,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega16.h>
#include <delay.h>
#include <alcd.h>

#include <stdio.h>
#define ADC_VREF_TYPE 0x00     //deklarasi ADC
                 
#define P5  PINC.5             //deklarasi PINC 5 sebagai P5     
#define P6  PINC.6
#define P7  PINC.7

eeprom unsigned char batas,batas1;            //pengatur nilai eeprom, batas sebagai pengatur nilai bulat, batas1 sebagai pengatur nilai desimal
int adc_in;        //deklrasi variabel adc_in bertipe integer
float nilai;       //deklrasi variabel nilai bertipe float
char_buff[33];     //deklarasi variabel buff untuk penyalaan LCD

unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

//global variabel
void main(void)                            
{
unsigned char a=0,b=0,c;                    //membuat variabel a, b diisi dengan 0, dan membuat variabel c
float set;                                  //membuat variabel set bertipe float
PORTA=0x00;                                 //port A sebagai input dari ADC dan aktif saat 1
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0xFF;      //PORT C sebagai input dan aktif saat 0
DDRC=0x00;


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;

// Timer/Counter 2 initialization

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization

UCSRB=0x00;

// Analog Comparator initialization
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;

// SPI initialization
SPCR=0x00;

// TWI initialization
TWCR=0x00;

// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTB Bit 6
// RD - PORTB Bit 5
// EN - PORTB Bit 4
// D4 - PORTB Bit 3
// D5 - PORTB Bit 2
// D6 - PORTB Bit 1
// D7 - PORTB Bit 0
// Characters/line: 16
lcd_init(16);                                      //deklarasi menggunakan lcd 16x2

lcd_clear();
lcd_putsf(" Selamat datang ");
delay_ms(2000);
lcd_gotoxy(0,0);
lcd_putsf(" Hashemi Group  ");
delay_ms(2000);

//Mengambil data batas maksimal dari eeprom
set=batas;                                         //nilai batas dimasukkan ke variabel set(untuk pengaturan bilangan bulat setingan
set=set+(float)batas1/100;                         //mengatur angka desimal, nilai batas 1 dibagi 100 dan dijadikan float untuk bilangan desimal

while (1)
      {  
      /*******************************************************
       **************** PENGOLAHAN DATA ADC ******************
       *******************************************************/
      
       adc_in = read_adc(0);                   //Membaca data ADC yang didapat dari pin ADC0 dimasukkan pada variabel adc_in
       nilai = (float)adc_in*3/1024;           //Hasil pembacaan diolah menggunakan float dengan nilai maksimal=3 kg dan dimasukkan pada variabel nilai
       lcd_gotoxy(0,0);                        //Penempatan posisi karakter pada LCD untuk karakter nilai pengukuran
      
       lcd_putsf("Berat : ");                 
       lcd_puts(buff);                         //Menampilkan data pada layar LCD
      
      lcd_gotoxy(0,1);                                          //penempatan layar lcd untuk seting berat
      sprintf(buff,"Set   : %0.2f kg   ",set);                  //setting menggunakan satuan kilogram dengan dua angka dibelakang koma
      lcd_puts(buff);
      delay_ms(300);
        
      /*******************************************************
       *************** KONVERSI SATUAN BERAT *****************
       *******************************************************/
      
      if(!P5){a++;if(a>2){a=0;}delay_ms(100);}       //Tombol konversi ditekan, maka nilai var a bertambah, saat a>2 maka kembali ke 0

      if(a==0)                                       //saat ditekan 1 kali, nilai buff diambil dari konversi kilogram
        {                                            //nilai ini akan dikirimkan pada buff di blok ADC sebagai penampil pengukuran nilai berat
        sprintf(buff,"%0.2f kg ",nilai);
        }
       
      if(a==1)
        {
        nilai=(float)nilai*10;                       //dikali 10 untu konversi ons
        sprintf(buff,"%2.1f ons ",nilai);
        }
        
      if(a==2)
        {
        nilai=(float)nilai*1000;                     //dikalo 100 untuk konversi gram
        sprintf(buff,"%4.0f gr  ",nilai);
        }
      
          
      /*******************************************************
       *************** PENGATURAN BERAT MAKSIMAL *************
       *******************************************************/
      
      if(!P6)                                          //Program akan bekerja saat tombol Setting atau tombol P6 ditekan
        {
        b++;                                           //variabel b terus bertambah dengan 1 saat ditekan
        if(b>2)                                        //saat nilai b lebih dar 2 maka
            {                                         
            batas=set;                                 //untuk angka didepan koma: nilai set pada setingan dimasukkan pada var batas
            c=set*100;                                 //untuk angka dibelakang koma: nilai set terlebih dulu dikalikan 100 agar dapat terbaca karena nilai awalnya masih char dan desimal
            c=c%100;                                   //c mod 100 digunakan untuk mengambil 2 digit terakhir
            batas1=c;                                  //memasukkan nilai c pada variabel batas1
            b=0;                                       //mengembalikan nilai b ke 0
            }
        delay_ms(200);
        }
      
      if(b==1)                                         //saat tombol P6 ditekan dan b ditekan 1 kali
        {                                              //digunakan untuk mengatur setingan bilangan depan koma
        lcd_gotoxy(8,1);                               //penempatan posisi lcd
        lcd_putsf(" ");
        delay_ms(100);
            if(!P7) {delay_ms(100);set=set+1;if(set>3){set=0;}}    //saat tombol P7 ditekan, nilai set ditambahkan 1, sampai set>3 maka kembali menjadi 1
        } 
       
      if(b==2)                                         //saat tombol P6 ditekan dan b ditekan 2 kali
        {                                              //digunakan untuk mengatur setingan bilangan belakang koma
        lcd_gotoxy(9,1);
        lcd_putsf(".  ");
        delay_ms(100);
            if(!P7){delay_ms(100);set=set+0.01;if(set>3){set=0;}} //saat tombol P7 ditekan, nilai set ditambahkan 0.01, sampai set>3 maka kembali menjadi 1
        }
     
     //Saat beben melebihi maksimal     
      while(nilai>set)                          //Untuk nilai pengukuran lebih besar dari nilai setingan
        {                                       //Pembacaan data ADC digunakan agar selama nilai>set maka pemberitahuan akan tetap ada
        adc_in = read_adc(0);                   //Membaca data ADC yang didapat dari pin ADC0 dimasukkan pada variabel adc_in
        nilai = (float)adc_in*3/1024;
        lcd_gotoxy(0,0);
        lcd_putsf("Beban melampaui batas             ");
        }
      }
}

H.    KESIMPULAN DAN SARAN
E.1 KESIMPULAN
Berdasarkan dari pengujian, maka akhirya pembuatan tugas proyek ini dapat diambil beberapa simpulan diantaranya :
1.      Timbangan hanya dapat membaca berat minimal 0 kg dan maksimal 3 kg
2.      Apabila beban diberi kurang dari 1 kg, maka timbangan kurang sensitive. Jika diberi beban lebih dari 1 kg, maka timbangan lebih sensitive.
E.2 SARAN
1.      Sebaiknya digunakan sensor tekan (berat) yang lebih sensitif sehingga akan terjadi perubahan nilai tegangan meskipun diberi beban yang ringan.
2.      Sebaiknya digunakan jenis timbangan yang menggunakan pegas yang lunak dan skala pembacaan berat yang lebih besar.