Jumat, 19 Juli 2013

COUNTER UP DOWN DISPLAY LCD.


Allhamduliallah akhirnya saya bisa menulis kembali dan bisa berbagi sedikit ilmu dengan kawan pendekar solder, diselala waktu istirahat sehabis sholat jumat ini saya gunakan untuk menyapa teman-teman. Karena waktunya Cuma sedikit jadi bahasannya tidak panjang dan juga lebar.. he….  
Baiklah kawan pada kesempatan ini saya akan mencoba memenuhi janji saya kepada kawan- kawan yang pernah meminta untuk membahas counter updown yang ditampilkan di LCD. Jadi tema postingan kali ini adalah “Membuat Couter Up Down display LCD”. Jika kawan-kawan ada yang mengingikan displaynya  menggunakan seven segment silahkan buka postingan saya sebelumnya disini..




Kalo ada yang nanya kira – kira susah gak yah buat programnya?
Maka saya menjawabnya relative, bisa dibilang susah bisa juga dibilang gampang he… Tapi disini saya akan membuat program semudah mungkin, saya berharap kawan pendekar solder dapat dengan mudah memahaminya… amiiien.. jika kawan pendekar solder belum mengerti tentang LCD karakter silahkan baca dulu postingan saya “Liguid Crystal Display (LCD) 16 x 2”.
Untuk logika pemogramannya saya membuat lebih sederhana yaitu membuat sebuah variable penampung counter dengan tipe datanya integer (dalam program à int data=0). Kemudian variable data ini nanti bisa dikurangi (down) atau ditambah (up), jika ada input up maka variablenya ditambah 1, jika ada input down maka datanya dikurangi 1.
Untuk cara penulisan program mengurangi atau menambah datanya seperti ini:
·         Untuk penambahan data (UP)
data=data+1;
atau cara penulisan singkatnya menjadi:
data++;
·         Untuk pengurangan data (DOWN)
data=data-1;
atau cara penulisan singkatnya menjadi:
data--;

Terus bagai mana kalo datanya mau kuta batasi misalnya ada min dan max ?
apabila kita mau membatasi datanya misalnya dari 0-1000, kita tinggal tambahin program seperti ini:
·         data max 1000
If (data>=1000) data=1000;  // jika data lebih besar atau sama dengan 1000, data = 1000
·         data min 0
If (data<=0) data=0;  // jika data lebih kecil atau sama dengan 0, data = 0
 Untuk selanjutnya data yang sudah dikurangi atau ditambah kemudian ditampilkan ke LCD. perlu kita ingat bahwa varibel data di atas adalah masih berupa data integer (angka), sementara yang mau ditampilkan adalah harus berupa karakter. Jadi kita harus merubah dulu variable datanya menjadi sebuah karakter .
Bagai mana caranya………… ?
pertama kita harus membuat variable untuk menampung karakter itu sendiri. Contoh:
unsigned char  tampil[6];
 variable array “tampil” adalah variable yang dibuat sebagai penampung data karakter dengan max 6 karakter. Kita bebas membuat nama variable dengan selera kita, cumin jika boleh saya member masukan, gunakanlah nama variable yang mencerminkan fungsinya agar lebih memudahkan kita dalam menganalisa program.
Kemudian baru kita rumbah data integer ke karakter agar bisa ditampilkan, caranya seperti ini.
itoa(data,tampil); 

untuk lebih jelasnya berikut ini saya lampirkan program secara keseluruhannya dan hasil simulasi menggunakan software proteus juga saya lampirkan dibawahnya.

Note: jika kawan pendekar solder ada pertanyaan ataupun masukan mangga di share wae ajah… he…
Hatur nuhun….

/*****************************************************
Project                                 : Counter Up-Down display LCD
Version                : V01
Date                      : 6/28/2013
Author                  : Aris Munandar
Company             : Les elektronika
Comments          : Semoga Bermanfaat...


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

#include  
#include   

// Alphanumeric LCD functions
#include   

// Declare your global variables here
//eeprom
int data=0;
unsigned char tampil[6];
bit status_up=0,status_down=0;

#define tombol_up       PINB.1
#define tombol_down     PINB.0
#define on              0
#define off             1     


void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=P State0=P
PORTB=0x03;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

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

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16
lcd_init(16);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(" LES ELEKTRONIKA");
lcd_gotoxy(0,1);
lcd_putsf("DATA:");

while (1)
      {
      // Place your code here
       if (tombol_up==off) status_up=on;
       if ((tombol_up==on)&(status_up==on)) { data++;
                                              if (data>=1000){ data=1000;} 
                                              status_up=off;
                                              lcd_clear();
                                                 }
       if (tombol_down==off) status_down=on;
       if ((tombol_down==on)&(status_down==on)) {
                                                  data--;  
                                                  status_down=off;
                                                  lcd_clear();
                                                  if (data<1 br="" data="0;">
                                                     }
     
      lcd_gotoxy(0,0);
      lcd_putsf(" LES ELEKTRONIKA");
      lcd_gotoxy(0,1);
      lcd_putsf("DATA COUNT:");                                           
      itoa(data,tampil); 
      lcd_gotoxy(12,1);
      lcd_puts(tampil);
       
      }
}


hasil simulasi counter UP DOWN menggunakan software PROTEUS :


Tambahan:
kawan - kawan list program diatas ada sebagian program yang tidak tampil, saya juga belum tahu penyebabnya.. jadi kalau kawan - mau program + file simulasi yang lengakap silahkan download disini..

111 komentar:

  1. untuk kawan- kawan, list program diatas #include mega16.h, #include stdlib.h, #include alcd.h itu tidak tampil seharusnya ada di listn program.. silahkan tambahkan saja, saya juga masih belum paham kalau ada kata yang tulisannya dikurung '<' '>' jadi gak bisa tampil di blog... mungkin ada yang bisa ngasih saran...

    BalasHapus
  2. gan define on 0 sama define off 1 maksudnya apa yah ?

    BalasHapus
    Balasan
    1. define itu mendefinisikan,
      misalnya:
      #define on 0 // kata on diibaratkan angka 0
      #define off 1 // kata off diibaratkan angka 1

      ini gunanya untuk kita lebih mudah dalam menganalisa pemograman, itu biasanya dalam mendefinisikan input atau output, misalnya jika ada input saat aktif adalah low maka saya mendefinisikan (on -> 0), jika saat input aktif adalah high maka saya mendefinisikan (on -> 1), saya kira begitu mas semoga bisa terbantu...

      Hapus
  3. saran bro,,,mending listing program di upload di indowebster.com atau mediafire.com dalam format zip/rar terus kasih link download di bawah postingan,, :)

    BalasHapus
    Balasan
    1. terimaksih sarannya mas... bagusnya sh seperti itu.. saya juga bisanya di upload di ziddu.. cuman internet buat uploadnya kadang lemot... maklum paket unlimited.. he.... nanti saya coba lagi upload....

      Hapus
  4. mas law seanday nya input nya kita ganti dengan input ADC g man program nhya mas???

    BalasHapus
    Balasan
    1. bisa aja mas bekti, cuman kalau menurut pendapat saya sih untuk input counter lebih bagus langsung inputnya digital.. tapi kalau untuk belajar sih gak masalah mungkin nanti akan coba saya bahas tentang ADCnya pada kesempatan yang lain..

      Hapus
  5. Balasan
    1. CodeVisionAVR V2.05.3.. tapi seharunya sih pake seri berapa juga bisa... saya kira begitu... semoga bisa terbantu...

      Hapus
  6. selamat pagi dan salam kenal.
    saya mau tanya, kalau mau buat program counter yang mengeluarkan data setelah 3 kali tekan gmn ya?
    kalau dari program mas yang diatas apa saja yang perlu ditambahi ato diedit...
    terima kasih atas pencerahannya...

    BalasHapus
    Balasan
    1. salam kenal juga kang nuki.. maksud kang nuki mengeluarkan data itu nambah counter atau apa... ?.. bisa kang tinggal tambahin variable lagi untuk menampung input 3 kali tekannya..?

      Hapus
    2. maksud saya itu counter up mas, jadi nanti di LCD itu keluar datanya setelah 3 kali tekan.
      untuk penambahan variabelnya gmn ya mas? dan penempatan penulisannya dimana saja...?
      terima kasih mas...

      Hapus
    3. kang nuki coba buat varible baru untuk menghitung berapa kali tombol ditekan,,,
      kalau sudah 3 kali program ini baru jalanini..

      lcd_gotoxy(0,0);
      lcd_putsf(" LES ELEKTRONIKA");
      lcd_gotoxy(0,1);
      lcd_putsf("DATA COUNT:");
      itoa(data,tampil);
      lcd_gotoxy(12,1);
      lcd_puts(tampil);

      Hapus
    4. salam kenal, numpang nanya mas...
      kalau inputan untuk set waktu counternya bisa pake keypad gk mas, truss kalau misalnya counternya sampai hitungan hari bisa gak mas???
      makasih sebelumnya.

      Hapus
    5. salam kenal juga kang melq,
      Untuk Setingan pake keypad bisa saja kang tinggal buat programnya,
      terus untuk counter sampai hari berikutnya bisa saja misalkan kalau udah selesai digunakan, counternya dimatiin tapi hitungan counternya saat dinyalakan melanjutkan dari sebelumnya.. itu tinggal tambahin program di eepromnya kang.. saya kira seperti itu semoga bisa terbantu...

      Hapus
  7. makasih infonya mas, saya baru kenal mikro mas jadi maklum lah......
    minta saran dong mas, rencana saya mau buat alat dengan mikro atmega 16, rencananya saya mau buat saklar otomatis (automatic change over switch) dengan pemicunya pake timer (counter) yang nantinya menggerakkan relay driver, nanti waktunya saya mau setting untuk counternya pake keypad 3x4 truss ditampilkan lewat LCD. Setelah waktunya di set ntar ada tombol start untuk memulai counternya sesuai waktu yang telah di setting misalnya 3 hari, habis counternya selesai ngitung ntar lewat timernya yg sdh d setting tadi akan mentrigger relay driver sehingga dia pindah otomatis habis i2 waktunya reset lagi secara otomatis (berulang) begitu seterusnya.... jadi saya mau mengganti 2 operasi peralatan selama 3 hari truss akan bergantian operasinya pake aplikasi ini.
    kira2 gimana mas kalau gtu, bisa gk?? mohon sarannya mas, trima kasih......

    BalasHapus
    Balasan
    1. Bisa kang, berarti tinggal menggunakan timer (untuk hitung jam/ hari). dan counter untuk hitung jumlah setingan harinya... nanti untuk setingan bisa disimpan di eeprom, jadi walaupun alatnya mati setingan tidak berubah.. kalau hitungan harinya mau lebih akurat bisa menggunakan RTC kang... saya kira begitu...

      Hapus
  8. makasih mas sarannya, tolong dong mas bisa gk sket gambar rangkaiannya yg d proteus di posting,,,,???
    sebelumnya RTC itu apa yaa mas....
    makasih.....

    BalasHapus
    Balasan
    1. Sama - sama kang..
      RTC (Real Time Clock). Alat yang berguna sebagai acuan waktu yang sebenarnya.. dengan tingkat akurasi sangat tinggi.
      jadi kita tidak perlu lagi membuat program untuk hitungan waktu (jam / tannggal) karena tinggal ngambil saja dari RTC ini. saya kira begitu kang melq. semoga bisa dipahami... he,,,

      Hapus
  9. if (data<1 data="0;}

    fungsi ini apa ya mas

    BalasHapus
    Balasan
    1. kang beni, mohon maaf sebenarnya penulisannya tidak sepeti itu ( ada kesalahan otomatis saat posting), akan coba saya perbaiki.
      yang benar adalah :

      if (data<1) { data=0;}

      maksud dari program diatas adalah, jika nilai "data" lebih kecil dari 1 ( misalnya 0,-1,-2,-3,....-10) maka nilai "data" dijadikan 0. fungsinya adalah untuk membuat nilai " data" paling kecil adalah 0.

      Saya kira sepeti itu kang, semoga kang beny bisa terbantu...

      Hapus
  10. if (data<1 data="0;}

    ini maksudna

    BalasHapus
    Balasan
    1. kang beni, mohon maaf sebenarnya penulisannya tidak sepeti itu ( ada kesalahan otomatis saat posting), akan coba saya perbaiki.
      yang benar adalah :

      if (data<1) { data=0;}

      maksud dari program diatas adalah, jika nilai "data" lebih kecil dari 1 ( misalnya 0,-1,-2,-3,....-10) maka nilai "data" dijadikan 0. fungsinya adalah untuk membuat nilai " data" paling kecil adalah 0.

      Saya kira sepeti itu kang, semoga kang beny bisa terbantu...

      Hapus
  11. siph mas aris sudah berjalan programnya makasih bgt mas :D sukses selalu

    BalasHapus
    Balasan
    1. sukes juga kang beny, sama - sama alhdulillah kalau udah bisa jalan programnya..

      Hapus
  12. mas aris mau nanya lg dnk bagaimana logikanya apabila kondisi counter up sudah 30 maka buzzer akan bunyi dengan delay beberapa detik , gimana ya logika programnya?

    BalasHapus
    Balasan
    1. untuk programnya bisa speti berikut:
      1. buat varible status aktifnya buzer:
      misal : char status_buzer =0;

      2: baru tulis logika untuk aktifin buzer:

      if ((data==30)&(status_buzer==0)){
      PORTD.0=0; // misal buzer disambung di PORTD.0
      delay_ms(1000); // delay 1000 ms
      PORTD.0=1;
      status_buzer=1;
      }

      if (data<=29) status_buzer=0;

      Hapus
  13. mas sudah saya coba dan jalan anehnya kok buzzer suarana kecil banget ya mas dan dya nala terus tidak mati mas itu gimana ya delay saya rubah2 tetap saja mas ?

    BalasHapus
  14. - untuk suara buzer kecil:
    coba cek buzer yang digunakan berapa volt ? jika buzer 5 V rangkaian gunakan aklif low, (bisa langsung dihubungkan ke mikon). jika buzer 12 volt bisa gunakan aktif low cuman harus ditambah driver (tidak bisa langsung) akang bisa gunakan uln2803.

    - Buzer tidak bisa mati.
    coba cek inisialisasi output untuk pin buzernya di pullup atau gak ( seting harus PULLUP dan diseting sebagai OUTPUT).
    saya kira begitu kang.

    BalasHapus
  15. satu lagi kang aris saya mau nanya bisa ngak program counter di gabung dengan program running text kang?jadi baris pertama dya running dan baris kedua counternya ?soalnya udah saya cb dan hasilnya runningnya acak2nya jalannya terus counternya jadi tidak tampil?kalau bisa logikanya seperti apa ya kang?makasih

    BalasHapus
    Balasan
    1. bisa aja kang, untuk runing text harus bener2 dihitung posisi kursornya, misalnya text ada 4 huruf mau ditampilakn di lcd 2x16, berarti kolom (kursor) maksimal pada baris pertama adalah kolom 12, kalau lebih dari 12 maka text akan tampil pada baris berikutnya.
      kalau mau lebih simple coba runingnya di baris ke 2, counter di baris 1. saya kira begitu kang beny semoga bisa terbantu...

      Hapus
  16. mas codingan running text yg mas share kalimatnya ngak bisa banyak ya mas terbatas sama jumlah karakter yaitu 16 bagaimana cara biar karakternya bisa banyak mas aris sudah saya cb tetapi runningnya pada saat bergerah dari kiri ke kanan tiba2 muncul lg dari kiri dengan cara menghentak,bagaimana cara supaya running textnya mulus jalannya mas jadi seperti bejalan karakternya,

    BalasHapus
    Balasan
    1. iya kang program itu belum bisa menampilkan banyak, ini hanya program sederhana, tulisannya langsung ditampilkan semua jadi kalau tulisannya banyak karakter akan tampil di posisi lain (tidak teratur), kalau mau karakternya banyak nanti karakternya dibuat array dulu, pada saat ditampilkan tidak semua langsung tampil yakni sebagian karakter aja yang ditampilkan, sesuai kebutuhan. saya kira begitu kang semoga bisa dimengerti he...

      Hapus
  17. siap mas aris makasih atas ilmunya maaf kalau banyak tanya hehehe

    BalasHapus
    Balasan
    1. iya sama-sama kang, semoga ilmunya bermanfaat.

      Hapus
  18. mas aris saya mau nanya lg nie mas misal counter di tekan kan bertambah nah tiap bertambah saya mau kasih indikator led mas jadi tiap di tekan indikator led menyala bagian mana mas codinganna yang di tambahkan makasih sblmna :D

    BalasHapus
    Balasan
    1. tinggal tambahin aja kang pin buat nyalaain led, letak programanya setelah " data++; ". semoga bisa terbantu....

      Hapus
  19. kang aris nanya lagi fungsi dari itoa(data,tampil); itu apa ya apa arti dari itoa itu sendiri ?

    BalasHapus
    Balasan
    1. itoa itu intruksi untuk merubah dari tipe data integer menjadi bentuk string (huruf). untuk contoh diatas variable "data" berisi angka atau nilai, kalau langsung ditampilkan tidak bisa karena masih bentuk integer. sementara data yang bisa tampil di lcd harus bentuk string, jadi harus dirubah dulu dari integer ke bentuk string. saya kira begitu kang beny semoga bisa terbantu.

      Hapus
  20. bang Aris mau tanya
    di codevision saya simbol itoa kok undefined ya waktu di compile ? hehe
    kalo saya ganti lcd_string bisa nda ?
    thx

    BalasHapus
    Balasan
    1. untuk kang jonathan, mungkin saya sharing sedikit:
      1. untuk itoa itu bukan intruksi codevision tetapi intruksi dalam bahasa c, karena codevision menggunakan bahasa c secara otomatis harusnya bisa, cuman perlu diketahui intruksi "itoa" berada dalam library "stdlib.h" jadi kalau mau menggunakan "itoa", harus di masukan juga library stdlib.h nya.. kebetulan untuk contoh program diatas stdlib.h tidak tampil, tapi didalam program yang saya lampirkan harusnya ada dan lengkap, silahkan didownload aja..

      2. untuk lcd_string mungkin pertanyaan bisa lebih diperjelas lagi kang?...

      sayakira begitu kang semoga bisa terbantu...

      Hapus
    2. selamat pagi bang..
      oh iya bang benar.. hehe
      iya bang cuma saya mau nyoba buat sendiri dulu..
      saya lupa masukkan kode
      saya coba modifikasi program abang seperti ini
      /*****************************************************
      This program was produced by the
      CodeWizardAVR V2.03.4 Standard
      Automatic Program Generator
      © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
      http://www.hpinfotech.com

      Project :
      Version :
      Date : 6/21/2014
      Author :
      Company :
      Comments:


      Chip type : ATmega8535
      Program type : Application
      Clock frequency : 4.000000 MHz
      Memory model : Small
      External RAM size : 0
      Data Stack size : 128
      *****************************************************/

      #include
      #include

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

      // Declare your global variables here
      int x=0;
      unsigned char tampil[6];
      void main(void)
      {
      // Declare your local variables here

      // Input/Output Ports initialization
      // Port A initialization
      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=P
      PORTA=0x01;
      DDRA=0x00;

      // Port B initialization
      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
      PORTB=0x00;
      DDRB=0x00;

      // Port C initialization
      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
      PORTC=0x00;
      DDRC=0x00;

      // Port D initialization
      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
      PORTD=0x00;
      DDRD=0x00;

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

      // Timer/Counter 1 initialization
      // Clock source: System Clock
      // Clock value: Timer 1 Stopped
      // Mode: Normal top=FFFFh
      // OC1A output: Discon.
      // OC1B output: Discon.
      // Noise Canceler: Off
      // Input Capture on Falling Edge
      // Timer 1 Overflow Interrupt: Off
      // Input Capture Interrupt: Off
      // Compare A Match Interrupt: Off
      // Compare B Match Interrupt: Off
      TCCR1A=0x00;
      TCCR1B=0x00;
      TCNT1H=0x00;
      TCNT1L=0x00;
      ICR1H=0x00;
      ICR1L=0x00;
      OCR1AH=0x00;
      OCR1AL=0x00;
      OCR1BH=0x00;
      OCR1BL=0x00;

      // Timer/Counter 2 initialization
      // Clock source: System Clock
      // Clock value: Timer 2 Stopped
      // Mode: Normal top=FFh
      // OC2 output: Disconnected
      ASSR=0x00;
      TCCR2=0x00;
      TCNT2=0x00;
      OCR2=0x00;

      // External Interrupt(s) initialization
      // INT0: Off
      // INT1: Off
      // INT2: Off
      MCUCR=0x00;
      MCUCSR=0x00;

      // Timer(s)/Counter(s) Interrupt(s) initialization
      TIMSK=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);
      lcd_gotoxy(0,0);
      lcd_putsf("X:");
      itoa(x,tampil);
      lcd_gotoxy(3,0);
      lcd_puts(tampil);
      while (1)
      {
      // Place your code here
      if(PINA.0==1){x++;};
      if(x>=100){x=100;}
      }
      }

      yang terjadi di lcd saya kenapa angka selalu 0, padahal saya sudah memberi perintah incriment (++)
      saya coba cek apakah push button dengan lcd saya sudah terhubung saya beri perintah lcd_clear()..
      dan saat saya tekan push button tsb, lcd saya mati, berarti saya ambil kesimpulan kalau push button saya dengan lcd sudah terhubung..
      mungkin program saya ada yang kurang atau salah bang mohon bantuaannya..
      trims

      Hapus
    3. begini kang, saya coba kutip program yang akang buat ya....


      // BAGIAN 1
      // LCD module initialization
      lcd_init(16);
      lcd_gotoxy(0,0);
      lcd_putsf("X:");
      itoa(x,tampil);
      lcd_gotoxy(3,0);
      lcd_puts(tampil);

      // BAGIAN 2
      while (1)
      {
      // Place your code here
      if(PINA.0==1){x++;};
      if(x>=100){x=100;}
      }
      }

      untuk kedua bagian program diatas ada perbedaan:
      bagian 1 adalah sebagai inisialisasi (setingan awal) jalannya program bagian 1 hanya satu kali. fungsinya menampilkan tulisan di lcd termasuk nilai x awal (sebelum ditambah) = 0;

      sementara bagian kedua itu bagian looping, atau program yang membaca terus menerus berurutan dari awal ke akhir dan mengulang. fungsi program yang akang buat hanya menambah nilai x jika PINA.0 di sambungkan ke gnd (ditekan) tanpa menampilkan kembali nilai x di lcd.

      jadi nilai yang di tampilkan lcd selalu 0. itu saya kira penyebabnya...
      saya kira begitu kang, semoga bisa terbantu... terimakasih..

      Hapus
  21. mas kalo tombol updown itu ditamabh dengan tombol enter gimana ya, misalnya tombol up ditekan terus nilai dipilih 30drajat celcius, ditekan enter, heater on menaikan suhu ruangan sapek 30drajat celcius, trus pas sampek 30djajat heater mati, kalo suhu kurang dari 30drajat celcius heater nyala lagi ?

    BalasHapus
    Balasan
    1. kalau mau buat program seperti itu pertema akang buat program untuk pembaca suhu, variable pembaca suhu nanti dibandingkan dengan nilai setingan counter (sebagai nilai acuan suhu). jika nilai suhu lebih kecil dibandingkan dengan nilai acuan makan heater aktif, jika nilai suhu sama atau lebih besar dari nilai acuan maka heater mati.. untuk program perbandingannya gunakan "if" aja kang. saya kira begitu semoga bisa terbantu...

      Hapus
    2. naah, kalo mau nyimpen hasil counternya itu biar bisa dipake sbgai nilai acuan pakenya perintah apa ya mas?

      Hapus
    3. nilai acuan itu nilai counter program diatas kang... nanti nilai counternya dibandingin dengan nilai input dari sensor. saya kira begitu kang...

      Hapus
  22. bang, gimana caranya apabila kondisi counter up sudah 10 maka led 1 yaitu merah nyala, dan jika <=10 maka led 2 hijau nyala. led merah mengaktifkan motor. led hijau menonaktifkan motor.
    mohon bantuannya..
    thx sebelumnya,,,

    BalasHapus
    Balasan
    1. Mungkin bisa diperjelas dulu, led merah dan hijaunya mengunakan 2 pin kah? jika program itu buat on / off motor seharusnya 1 pin cukup. oke saya anggap menggunakan 2 pin ya kang.
      1. untuk menyalakan led merah (kondisi konter bernilai > 10)

      if (data>=11) PORTD.0=0; // misal led merah disambung di PORTD.0

      2, menyalakan led hijau.

      if (data<=10) PORTD.1=0; // misal led merah disambung di PORTD.1

      saya asumsikan led menggunakan rangkaian aktif low.
      Saya kira begitu kang, semoga terbantu.

      Hapus
    2. alhamdulillah bang, sudah sy buat dan jadi.
      satu lagi bang. mengenai LCD, untuk membaca sensor. umpanya 5 sensor. kolom pertama, baris pertama ditulis A(nama sensor), trs kolom pertama baris kedua adalah counternya. misalx pada tempat parkir. sensorx untuk mendteksi kendaraan yang telah menempati area parkir tersebut.
      mungkin ilustrasinya seperti ini
      A B C D E
      IN OUT OUT IN OUT
      IN menandakan area telah terisi, dan OUT menandakan area kosong.
      Sensor yang mendeteksi kendaraan yang ada pada area akan menampilkan data pada LCD “IN” sebaliknya jika tidak maka LCD akan menampilkan “OUT”.
      mhn bimbingannya buat saya yang msh awan.
      asslamualaikum, thx sebelumnya.

      Hapus
    3. wasalam, untuk program tinggal buat aja pembaca sensor terus langsung di tampilkan di lcd, untuk menampilkan datanya (5 data) tinggal atur posisi kursor hurufnya, biar tidak saling tumpuk. saya kira begitu, semoga bisa terbantu..

      Hapus
  23. alhamdulillah bang, sudah sy buat dan jadi.
    satu lagi bang. mengenai LCD, untuk membaca sensor. umpanya 5 sensor. kolom pertama, baris pertama ditulis A(nama sensor), trs kolom pertama baris kedua adalah counternya. misalx pada tempat parkir. sensorx untuk mendteksi kendaraan yang telah menempati area parkir tersebut.
    mungkin ilustrasinya seperti ini
    A B C D E
    IN OUT OUT IN OUT
    IN menandakan area telah terisi, dan OUT menandakan area kosong.
    Sensor yang mendeteksi kendaraan yang ada pada area akan menampilkan data pada LCD “IN” sebaliknya jika tidak maka LCD akan menampilkan “OUT”.
    mhn bimbingannya buat saya yang msh awan.
    asslamualaikum, thx sebelumnya.

    BalasHapus
    Balasan
    1. wasalam, untuk program tinggal buat aja pembaca sensor terus langsung di tampilkan di lcd, untuk menampilkan datanya (5 data) tinggal atur posisi kursor hurufnya, biar tidak saling tumpuk. saya kira begitu, semoga bisa terbantu..

      Hapus
  24. maaf bang, bs minta listing programnya? sedikit aja, biar ad gambaran. mhn bantuannya.

    BalasHapus
    Balasan
    1. tinggal atur posisi star kursor aja:
      lcd_init(16);
      lcd_gotoxy(0,0);
      lcd_putsf("A");

      lcd_init(16);
      lcd_gotoxy(4,0);
      lcd_putsf("B");

      lcd_init(16);
      lcd_gotoxy(8,0);
      lcd_putsf("C");

      lcd_init(16);
      lcd_gotoxy(12,0);
      lcd_putsf("D");


      kaya gitu kang..

      Hapus
  25. mas tlng jelasin yg ini dong..
    if (tombol_up==off) status_up=on;
    if ((tombol_up==on)&(status_up==on)) { data++;
    if (data>=1000){ data=1000;}
    status_up=off;
    lcd_clear();
    }
    if (tombol_down==off) status_down=on;
    if ((tombol_down==on)&(status_down==on)) {
    data--;
    status_down=off;
    lcd_clear();
    if (data<1 br="" data="0;">
    }

    BalasHapus
    Balasan
    1. program yang dilampirkan ini sebenarnya salah (program jadi error setelah diposting) yang benarnya silahkan download dulu.
      maksud dari bagian program diatas, kalo tomobol up ditekan datanya nambah satu, jika data sudah mencapai 1000 datanya diset 1000 (artinya data maksimal 1000).
      jika tombol down ditekan datanya dikurangin 1 jika datanya lebih kecil dari 1 datanya diset jadi 0,
      saya kira begitu kang semoga bisa terbantu.

      Hapus
  26. kang terima kasih banyak saya terbantu dengan postingan ini ..saya minta izin untuk menggunakan programnya.dan kalo berkenan saya ingin kontak langsung untuk sharing mengenai project yang saya buat. jika berkenan tolong hubungi saya kang di nomor 085624758107..terima asih banyak,,semoga akang sehat selalu

    BalasHapus
    Balasan
    1. amiin.. silahkan kang gunakan aja programnya...

      Hapus
  27. kang, kok file di ziddu nya kok error ya, minta tolong kirim ke emailku aja ya kang, farisfaishol01@gmail.com

    BalasHapus
    Balasan
    1. coba download lagi aja kang, barusan sih saya coba download lancar kang...

      Hapus
  28. kang, mau tanya, kalo pada saat data=0 maka akan muncul tulisan penuh, caranya gimana ya kang? soalnya aku mau bikin alat buat informasi parkir, jadi pada saat parkir sudah habis maka akan muncul tulisan penuh pada LCD.

    BalasHapus
    Balasan
    1. tinggal tambah if aja.
      misalnya if (data==0) { tampilin tulisan penuh}
      else { tampilin counter biasa}
      semoga bisa terbantu kang...

      Hapus
  29. cara seting awal di cv avrnya gmana ya om?

    BalasHapus
    Balasan
    1. untuk lcd seting aja pinnya disamain dengan gambar.
      untuk pin input tombol, pin diseting jadi input kemudian PULLUP diaktifin..
      semoga bisa terbantu kang..

      Hapus
  30. cara seting awal di cv avrnya gmana ya om?

    BalasHapus
    Balasan
    1. untuk lcd seting aja pinnya disamain dengan gambar.
      untuk pin input tombol, pin diseting jadi input kemudian PULLUP diaktifin..
      semoga bisa terbantu kang..

      Hapus
  31. kang mau nanya kalo pengen tombolnya pake 3, 1 untuk Up dan 2 untuk Down harus ada yang dirubah atau bagaimana kang ?
    harap maklum kang masih belajar
    terimakasih :)

    BalasHapus
    Balasan
    1. tinggal tambahin aja satu pin difungsikan sebagai input, nanti programnya disamain dengan tombol down pertama, saya kira begitu kang..

      Hapus
  32. Master mau tanya, saya masih baru belajar program cvAVR, kenapa pada saat build all project selalu muncul pesan ini "Linker error: the program has no 'main' function".. mohon pencerahannya :)

    BalasHapus
    Balasan
    1. waduh saya sih belum pernah kang, tapi kalo lihat masalahnya fungsi main nya gak ada diprogram yang akang bikin kali.

      Hapus
    2. wah sama kaya ane nih, padahal itu program kemarin saya coba berhasil di build tapi sekarang malah muncul pesan gitu

      Hapus
  33. seting alphanumerik lcd = port c

    seting portnya hanya di portB 0&1
    port b = bit o in P bit 0
    bit 1 in P bit 1

    apa betul setinganku om?

    BalasHapus
  34. "LES ELEKTRONIKA" kalo runnning textnya pengen nembus gtu , jd pas jalan ke kanan trus si karakternya muncul lagi disebelah kiri,, kodingnya jadi kaya gimana kang, terimaksih

    BalasHapus
    Balasan
    1. hehe.. harus bin fungsi lagi kang erik. kalo fungsi bawaan dari codevision sih belum ada..

      Hapus
  35. kang master, mau tanya.. saya mencoba buat program akang tapi tombol push buttonnya saya rubah pakai sensor ldr sebagai saklar yg disambung ke relay 8pin, naah pas saya coba program counternya gak jalan akang.. mohon pencerahannya akang :)

    BalasHapus
    Balasan
    1. kalau mau pake LDR sistem pembacaan yang efektif menggunakan ADC kang, jadi nilai pebuhannya sekecil apapun bisa terdeteksi pebedaan antara ada cahaya dengan tidak ada cahaya. atau bisa juga menggunakan rangkaian comparator di ldrnya.. terus ukur sampe dapet 2 kondisi sinyal (HIGH dan LOW). semoga bisa terbantu..

      Hapus
  36. oh iya akang, kan gini akang saya buat rangkaian LDR yang disambung ke relay pengganti push button, jika ldr saya terhalangi cahaya maka relay saya aktif, saya menggunakan kaki relay NO yang saya hubungkan ke PortB.0
    saya sdh membuat rangkaian counter up/down dgn tampilan seven segement menggunakan rangkaian LDR yang di sambung ke relay sebagai saklar. dan hasilnya berhasil akang.. nah pas saya mau buat untuk tampil di LCD pakai program akang, gak berhasil. jika rangkaian LDR saya ini bisa menggunakan ADC, mohon penjelasan settingan awalnya akang.. mohon pencerahannya akang

    BalasHapus
    Balasan
    1. kalau untuk ditampilkan di lcd yang penting pertama seting dulu pin apa aja yang mau disambungkan ke lcd (rs,e,rw, d4,d5,d6,d7) jangan sampe ketuker antara program dengan rangkaian aslinya. kemudian untuk menampilkan data counter dari type integer gak bisa langsung nampil dilcd harus dirubah dulu ke bentuk array dengan menggunakan intruksi "itoa". semoga bisa terbantu kang..

      Hapus
    2. alhamdulillah berhasil akang :) terima kasih penjelasannya akang
      oh iya ada lagi akang, bagaimana listing membuat timer "05:00" menghitung mundur sampe "00:00" dengan tombol settingan up, down, dan reset
      mohon penjelasannya lagi akang :)

      Hapus
    3. allhamdulillah.. sama sama kang. untuk membuat timer akang harus bikin dulu interrupt timer untuk memicu detik ( setiap 1 detik program interupt aktif). jadi fungsinya interupt timer ini sebagai pengurang variable timer detik mundur. untuk varible nanti dipisah antara detik sama menit. ketika detik = 0, menit -1; detik balik lagi ke 59. semoga bisa terbantu kang...

      Hapus
    4. akang saya sdh coba buat,
      // Timer1 overflow interrupt service routine
      interrupt [TIM1_OVF] void timer1_ovf_isr(void)
      {
      // Reinitialize Timer1 value
      TCNT1H=0xD23A >> 8;
      TCNT1L=0xD23A & 0xff;
      // Place your code here
      detik--;
      }

      void jam_digital()
      {

      if (detik==0)
      {
      lcd_clear();
      detik=59;
      menit--;
      }

      if (menit==60)
      {
      lcd_clear();
      menit=0;
      }
      }

      mohon pencerahannya akang

      Hapus
    5. masalahnya dimana seperti apa kang, yang gak sesuai dengan keinginan akang?.

      Hapus
  37. bisa mintA tolong buatkan program nga kang,,, mirip sprti ini tapi ada saklar outnya.. jadi nanti intinya buat penganti dip switch

    BalasHapus
    Balasan
    1. maaf belum bisa bantu kang kalau bikinin sampe jadi soalnya lagi banyak kerjaan, akang coba2 aja sendiri kalau ada masalah bisa dishare siapa tau saya bisa kasih masukan.. terimakasih semoga bisa terbantu...

      Hapus
  38. Assalamu'alaikum ,mas aris saya ingin konsultasi tentang progam micro untuk atmega 8535.. rencana saya ingin membuat prototipe parkir otomatis ,, saya menggunakan motor servo standart sebagai portal membuka dan menutup portal , disini saya menggunakan 2 motor servo untuk pintu masuk dan keluar parkir mas.. parkir ini juga menggunakan sarana LCD 16x2 sebagai informasi area parkir yang TERISI dan yang KOSONG,, saya menggunakan 2 sensor photodioda mas sebagai perintah membuka portal sekaligus menghitung mobil yang masuk dan sensor lainnya untuk membuka portal keluar parkir sekaligus mengurangi kapasitas parkir.. disini saya menggunakan PORT_D sebagai output LCD. Tulisan di LCD hanya berisi "TERISI" lalu ada counternya di baris pertama, "KOSONG" lalu ada counternya di baris ke 2. jika space yang terisi penuh maka LCD akan menunjukkan keterangan "FULL". yang saya konsultasikan progam micro dari mas aris counter up down pada LCD ini di ganti variasi apanya mas di gabung dengan progam 2 motor servo gerak CW CCW 90 derajat.. makasih mas..

    BalasHapus
    Balasan
    1. untuk kang romhat pertanyaannya sudah saya balas di kolom konsultasi terimakasih... semoga bisa terbantu...

      Hapus
  39. ini progam counter dari mas jika di ganti pakai atmega 8535 , output LCD Port_D dan keterangan TERISI dan KOSONG di modifikasi bagian mana mas? mAaf merepotkan , maklum saya masih awam belajar Micro mas.


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

    #include mega16.h
    #include stdlib.h

    // Alphanumeric LCD functions
    #include alcd.h

    // Declare your global variables here
    //eeprom
    int data=0;
    unsigned char tampil[6];
    bit status_up=0,status_down=0;

    #define tombol_up PINB.1
    #define tombol_down PINB.0
    #define on 0
    #define off 1


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

    PORTB=0x03;
    DDRB=0x00;

    PORTC=0x00;
    DDRC=0x00;

    PORTD=0x00;
    DDRD=0x00;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=0xFF
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer1 Stopped
    // Mode: Normal top=0xFFFF
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;

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

    // USART initialization
    // USART disabled
    UCSRB=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    // ADC initialization
    // ADC disabled
    ADCSRA=0x00;

    // SPI initialization
    // SPI disabled
    SPCR=0x00;

    // TWI initialization
    // TWI disabled
    TWCR=0x00;

    // Alphanumeric LCD initialization
    // Connections are specified in the
    // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    // RS - PORTC Bit 0
    // RD - PORTC Bit 1
    // EN - PORTC Bit 2
    // D4 - PORTC Bit 4
    // D5 - PORTC Bit 5
    // D6 - PORTC Bit 6
    // D7 - PORTC Bit 7
    // Characters/line: 16
    lcd_init(16);
    lcd_clear();
    lcd_gotoxy(0,0);
    lcd_putsf(" LES ELEKTRONIKA");
    lcd_gotoxy(0,1);
    lcd_putsf("DATA:");

    while (1)
    {
    // Place your code here
    if (tombol_up==off) status_up=on;
    if ((tombol_up==on)&(status_up==on)) { data++;
    if (data>=1000){ data=1000;}
    status_up=off;
    lcd_clear();
    }
    if (tombol_down==off) status_down=on;
    if ((tombol_down==on)&(status_down==on)) {
    data--;
    if (data<1){ data=0;}
    status_down=off;
    lcd_clear();
    }

    lcd_gotoxy(0,0);
    lcd_putsf(" LES ELEKTRONIKA");
    lcd_gotoxy(0,1);
    lcd_putsf("DATA COUNT:");
    itoa(data,tampil);
    lcd_gotoxy(12,1);
    lcd_puts(tampil);

    }
    }

    BalasHapus
    Balasan
    1. untuk kang romhat pertanyaannya sudah saya balas di kolom konsultasi terimakasih... semoga bisa terbantu...

      Hapus
  40. mas mau tnya untuk setting push button misal saat counter yang pertama di setting 37 trus d tekan tombol start untuk memulai counter zg kedua dan saat counter zg kedua sampe pada angka 37 buzzer berbunyi programnya gmna ya mas..mohon pencerahannya mas

    BalasHapus
  41. Kang sy mau buat penghitung jumlah putara dalam setiap 10 menit, 20 menit, dan 30 menit. jika waktu tercapai maka buzzer akan on... tolong di bantu kang.

    BalasHapus
  42. mas programnya ga bisa di donwload.tolong kirimin ke putra.dedi3@gmail.com ya mas.terimakasih

    BalasHapus
  43. assalamualaikum. kang mau tanya
    kan saya mau bikin conveyor pemilah dan penghitung barang dengan atmega8. nah pas d hitungnya nanti di keluarin di display. penghitungannya hanya counter up saja dengan infrared dan photodioda. mohon di bantu kang koding untuk counter up nya sama utk di tampilkan di display, soalnya saya awam banget sama kodingnya kang hehe nuhun.

    BalasHapus
  44. pada atmega 16 dan 8 maksimal waktu yang dapat dicapai berapa menit ?

    BalasHapus
  45. malam pak... kalau botton up nya di buat di buat 3 input. codingan nya di tambah nya bagaimana ya ? terus kalau mau di tambah button reset codingan nya bagaimana ? terima kasih

    BalasHapus
  46. numpang tanya, penjelasan program yg ini bang:
    if (data<1 br="" data="0;">

    BalasHapus
  47. Mas mau nanya kalo misalkan mau di count misal saya down count 50 second setelah 50 second misal pin a1 awalnya on setelah di downcount 50-0 jadi off programnya gimana mas?????

    BalasHapus
  48. kalau mau lngsung nambah 5 gimana mas?

    BalasHapus
  49. gan link downloadnya tidak bisa

    BalasHapus
  50. B427E
    ----
    ----
    matadorbet
    ----
    ----
    ----
    ----
    ----
    ----

    BalasHapus

Silahkan tinggalkan komentar kawan - kawan, baik berupa pertanyaan ataupun saran yang sifatnya membangun. komentar kawan - kawan sangat berharga untuk kemajuan blog ini. kalau bisa mohon hindari penggunaan Anonim. Semoga bermanfaat untuk kita semua...
Terimakasih....