Jumat, 12 Juni 2015

Persiapan Belajar pemogramanan LCD


Sebelum belajar memprogram LCD. Anda harus terlebih dahulu mengetahui bagaimana menggunakan LCD, merangkai dan memberikan tegangan ke tiap bit data, RS, dan R/W nya. berikut penjelasan tentang LCD. Dari sini diperlukan persiapan sebelum belajar pemograman LCD.

LCD (Liquid Cristal Display) merupakan komponen elektronika sebagai display yang terbuat dari teknologi CMOS logic yang bekerja dengan memantulkan cahaya yang terdapat di sekelilingnya. Jadi LCD (Liquid Cristal Display) memiliki fungsi untuk menampilkan data baik itu dalam bentuk karakter, angka, huruf maupun grafik.

Bahan pembuat LCD (Liquid Cristal Display) adalah  lapisan yang terdiri dari campuran organik antara lapisan kaca bening dengan elektroda transparan indium oksida berbentuk seven-segment dan lapisan elektroda yang terdapat pada kaca belakang. Ketika elektroda tersebut diaktifkan dengan memberi tegangan (medan listrik), molekul organik yang panjang dan silindris menyesuaikan diri dengan elektroda dari segmen. Lapisan tersebut memiliki polarisasi cahaya vertikal depan dan polarisasi cahaya horisontal belakang yang diikuti dengan lapisan reflektor. Cahaya yang dipantulkan tidak bisa melewati molekul yang telah menyesuaikan diri dan segmen yang diaktifkan terlihat menjadi gelap dan membentuk karakter data yang ingin ditampilkan.




Pengendali / Kontroler LCD (Liquid Cristal Display) 
Pada modul LCD (Liquid Cristal Display) di atas terdapat microcontroller yang memiliki fungsi untuk mengendalikan tampilan LCD (Liquid Cristal Display). Microntroller yang terdapat pada LCD (Liquid Cristal Display) tersebut dilengkapi dengan register dan memori. Berikut memori yang terdapat pada mikrokontroler internal LCD adalah : 
  • DDRAM (Display Data Random Access Memory) adalah memori tempat ditampilkannya karakter
  • CGRAM (Character Generator Random Access Memory) adalah memori yang digunakan untuk menggambarkan bentuk/pola dari sebuah karakter yang mana bentuk karakternya dapat dirubah sesuai dengan keinginan.
  • CGROM (Character Generator Read Only Memory) adalah memori yang digunakan untuk menggambarkan suatu pola dari sebuah karakter yang mana pola tersebut adalah karakter dasar yang sudah ditetapkan oleh pabrik pembuat LCD secara permanen sehingga pengguna tinggal mangambilnya karakter tersebut sesuai alamat memori dari karakter tersebut serta tidak dapat mengubah karakter dasar yang ada dalam CGROM.


Register control yang terdapat dalam suatu LCD diantaranya adalah.
  • Register perintah yaitu register yang berguna untuk memberikan perintah ke LCD (Liquid Cristal Display) 
  • Register data yaitu register untuk menulis dan membaca ke dalam LCD contoh register DDRAM


Pin, kaki atau jalur input dan kontrol dalam suatu LCD (Liquid Cristal Display) diantaranya adalah :
  • Pin 1 dan 2
  • Merupakan catu daya. Pin 1 dihubungkan ke ground dan Pin 2 dihubungkan ke Vcc(+5V). Pin ini memberikan tegangan suply untuk menghidupkan LCD
  • Pin 3
  • merupakn pin yang dihubungkan dengan Rheostat/Trimpot yang berguna untuk mengatur tingkat kontras dari LCD. Sehingga tingkat pencahayaan LCD dapat kita atur dengan memutar rheostat tersebut
  • Pin 4
  • Merupakan pin RS(Register Select dai LCD)
  • Pin 5
  • Merupakan pin R/W berguna untuk melakukan penulisan atau pembacaan ke LCD. Pin ini dihubungkan ke kaki mikrokontroler kita
  • Pin 6
  • Merupakan pin berguna untuk Enable
  • Pin 7 sampai 14
  • Merupakan pin untuk data (D0-D7)
  • Pin 15 dan 16
  • Merupakan Pin 15 dan 16 berguna untuk backlight/ cahaya latar. Pin 15 Untuk anoda A(+) sedangkan pin 16 untuk katoda K (-)


Beikut adalah gambar tabel perintah LCD(Untuk mengontrol LCD). LCD yang dikontrol diberi sinyal pada D0-D7 serta RS dan R/W seperti pada tabel di bawah ini:

Poster PA






Pointer Internal Eeprom

Pointer adalah sebuah variabel yang berisikan alamat memori (bukan nilai) atau dengan kata lain dapat dikatakan bahwa pointer adalah suatu variabel penunjuk ke alamat memori tertentu. Secara umum, pointer dapat digambarkan sebagai berikut.



 Ilustrasi Pointer

Dari gambar di atas, dapat kita lihat bahwa pointer P sedang menunjuk ke alamat ke-1, ini berarti bahwa nilai dari pointer P adalah alamat ke-1. Hal ini berbeda dengan variabel biasa yang hanya dapat menyimpan nilai dengan tipe data tertentu.

Keuntungan menggunakan pointer ini adalah kita dapat mengakses data dengan ukuran yang besar dengan waktu yang relative lebih cepat bila dibandingkan dengan variabel biasa ataupun variabel array. Selain itu, untuk menunjuk lokasi memori tertentu dapat dilakukan ketika program aplikasi sedang dijalankan sehingga ini menjadi lebih flrksibel.

1. DEKLARASI POINTER

A. Deklarasi Pointer Dengan Tipe
Adapun cara pendeklarasian pointer di dalam bahasa C adalah dengan menambahkan tanda asterik (*)di depan nama pointer yang akan dibuat. Berikut bentuk umumnya.

tipe_data *nama_pointer;

Contoh:

char *pointermu;
int *data_pointer = 0x90;

Pada deklarasi pointer pertama diatas, kita mendefinisikan sebuah pointer yang digunakan untuk menunjuk sebuah data di memori tetapi belum ditentukan alamat memori yang dimaksud sedangkan pada deklarasi kedua sudah ditentukan alamat memorinya yaitu 0x90.
Keluarga mikrokontroler AVR memiliki 3 kelompok memori yaitu memori program (flash memory), memori data (SRAM), dan memori EEPROM. Sehingga untuk mendeklarasikan sebuah pointer kita juga harus mendefinisikan alamat memori manakah yang kita tuju apakah memori program, memori data, atau memori EEPROM. Perbedaan cara deklarasi ketiga jenis memori tersebut adalah sebagai berikut.

char flash *pointer_di_flash;   // pointer di memori program
char eeprom *pointer_di_eeprom; // pointer di memori EEPORM
char *pointer_di_ram;           // pointer di memori SRAM

B. Deklarasi Pointer Tanpa Tipe
Sebelumnya kita telah mempelajari bahwa pointer yang dideklarasikan dengan tipe data tertentu (misalnya tipe int), hanya dapat menunjuk alamat yang berisi variabel dengan tipe data yang sesuai (dalam hal ini tipe int). Dengan kata lain pointer tersebut tidak dapat digunakan untuk menunjuk ke alamat yang berisi variabel dari tipe data lain seperti floatdoublechar, maupun lainnya.
Dalam bahasa C terdapat cara khusus untuk membuat pointer tersebut dapat menunjuk ke alamat – alamat yang berisi variabel dari tipe data apapun, yaitu dengan menggunakan kata kunci ‘void’ pada saat pendeklarasiannya. Maka dari itu, pointer seperti ini sering disebut dengan istilah pointer tanpa tipe (void pointer). Berikut ini bentuk umum untuk mendeklarasikan suatu pointer tanpa tipe.

void *nama_pointer;

Contoh:

void *t;
void *data = 0xFE;

2. POINTER DAN ARRAY
Dalam bahasa C pointer dan array saling berhubungan. Anggaplah kita memiliki array A yang terdiri dari 10 buah elemen yang bertipe int serta pointer p yang akan menunjuk ke tipe int. Sekarang apabila kita mengeset pointer tersebut untuk menunjuk ke elemen pertama array, maka kita dapat mengakses elemen–elemen dari array A tersebut dengan menggunakan pointer p.

Contoh:

#include<mega8535.h>

int main(void)
{
 int A[10] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
 int j;
 int *p;

 for(j=0;j<10;j++)
   {
     p = &A[j];
     PORTA = p;
   }

 return 0;
} 


3. POINTER SEBAGAI PARAMETER FUNGSI
Terdapat dua cara untuk melewatkan parameter ke dalam suatu fungsi, yaitu dengan menggunakan pass by value(melewatkan berdasarkan nilai) dan pass by reference (melewatkan berdasarkan alamat). Alamat yang dimaksud di sini tidak lain adalah pointer.

Contoh:

#include<mega8535.h>
int hitung(int *x, int *y)
{
  *x = *y + 0x35;
}

int main(void)
{
 PORTD = hitung(&0x23,&0x10);
 return 0;
}

4. POINTER KONSTAN ( “CONST“)
Pointer dapat bersifat konstan, artinya pointer tersebut hanya dapat menunjuk dari alamat tertentu saja. Untuk melakukan hal ini kita harus menggunakan kata kunci const yang telah disediakan dalam bahasa C. Bentuk umum dari penempatan kata kunci const sebelum tipe data adalah sebagai berikut.

const tipe_data *nama_pointer;


Contoh:

#include<mega8535.h>

int main(void)
{
 const int *p;

 ……………………
 …………

 return 0;
}

5. MENUNJUK ALAMAT SEBUAH VARIABEL
Apabila kita telah membuat deklarasi pointer maka selanjutnya kita dapat menunjuk pada alamat memori tertentu tempat menyimpan sebuah variabel data seperti contoh berikut:

Contoh:

char data = 0x20;
char *alamat;
alamat = &data;


Keterangan program:

Baris pertama,
Mendeklarasikan sebuah variabel bernama ‘data’ dengan tipe ‘char’ (1-byte) dimana isi datanya yaitu 0x20 disimpan di alamat memori tertentu (sebagai contoh misalnya disimpan di alamat 0x90).

Baris kedua,
Mendeklarasikan sebuah pointer dengan nama ‘alamat’ yang digunakan untuk menunjuk alamat memori tertentu yang dalam hal ini belum ditentukan.

Baris ketiga,
Digunakan untuk menyatakan bahwa alamat memori yang digunakan untuk menyimpan variabel ‘data’ adalah pada pointer bernama ‘alamat’, sehingga sekarang pointer sudah menunjuk ke memori variabel ‘data’. Jadi pointer sekarang berisi 0x90 dan data yang ada di alamat memori 0x90 adalah 0x20.

 ---ooo00ooo---

Untuk menyimpan variabel pointer itu sendiri selain menggunakan memori SRAM seperti pada contoh diatas juga dapat menggunakan memori flash atau memori EEPROM. Jadi pointernya dapat disimpan di memori SRAM, memori flash, atau memori EEPROM dan data variabel yang ditunjuk juga dapat disimpan di memori SRAM, memori flash, atau memori EEPROM. Pointer yang disimpan dalam memori flash atau EEPROM dideklarasikan seperti contoh berikut:

1: char *flash pointermu1 = “simpan string di SRAM”;
2: flash char *flash pointermu2 = “simpan string di FLASH”;
3: eeprom char *flash pointermu3 = “simpan string di EEPROM”;
4: char *eeprom pointermu4 = “simpan string ini di SRAM”;
5: flash char *eeprom pointermu5 = “simpan string ini di FLASH”;
6: eeprom char *eeprom pintermu6 = “simpan string ini di EEPROM”;

Keterangan:

Baris 1:
Deklarasi pointer ‘pointermu1’ yang disimpan di memori flash dan variabel datanya berupa string “simpan string di SRAM” disimpan di SRAM.

Baris 2:
Deklarasi pointer ‘pointermu2’ yang disimpan di memori flash dan variabel datanya berupa string “simpan string di FLASH” disimpan di  FLASH.

Baris 3:
Deklarasi pointer ‘pointermu3’ yang disimpan di memori flash dan variabel datanya berupa string “simpan string di FLASH” disimpan di  EEPROM. 

Baris 4:
Deklarasi pointer ‘pointermu4’ yang disimpan di memori EEPROM dan variabel datanya berupa string “simpan string di FLASH” disimpan di  SRAM.

Baris 5:
Deklarasi pointer ‘pointermu5’ yang disimpan di memori EEPROM dan variabel datanya berupa string “simpan string di FLASH” disimpan di  FLASH.

Baris 6:
Deklarasi pointer ‘pointermu6’ yang disimpan di memori EEPROM dan variabel datanya berupa string “simpan string di FLASH” disimpan di  EEPROM. 

Sabtu, 06 Juni 2015

Tutorial EEPROM

#include <mega8535.h>
#include <delay.h>
int eeprom *pointer_eeprom;
int data=0;
int ubah;
int sat,pul,rat,rib;
void write_data_to_eeprom()
{
 *pointer_eeprom=data;
}        
    
void read_data_to_eeprom()
{     
  data=*pointer_eeprom;
} 
void convert_to_format7segment()
{
           if (ubah==0){ubah=0xc0;}
           if (ubah==1){ubah=0xf9;}
           if (ubah==2){ubah=0xa4;}
           if (ubah==3){ubah=0xb0;}
           if (ubah==4){ubah=0x99;}
           if (ubah==5){ubah=0x92;}
           if (ubah==6){ubah=0x82;}
           if (ubah==7){ubah=0xf8;}
           if (ubah==8){ubah=0x80;}
           if (ubah==9){ubah=0x90;}
}
void display_7segment()
{
           PORTC=rib;//send data kedigit5
           PORTD.5=0;
           PORTD.6=0;
           PORTD.7=0;
           delay_ms(5);
           PORTC=rat;//send data kedigit6
           PORTD.5=1;
           PORTD.6=0;
           PORTD.7=0;
           delay_ms(5);
           PORTC=pul;//send data kedigit7
           PORTD.5=0;
           PORTD.6=1;
           PORTD.7=0;
           delay_ms(5);
           PORTC=sat;//send data kedigit8
           PORTD.5=1;
           PORTD.6=1;
           PORTD.7=0;
           delay_ms(5);
}
// Declare your global variables here
void main(void)
           {
 PORTA=0x00;
           DDRA=0x00;
           
           PORTB=0x00;
           DDRB=0x00;
           
           PORTC=0x00;
           DDRC=0xFF;
           
           PORTD=0x07;
           DDRD=0xE0;
           
           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;
 UCSRB=0x00;
 ACSR=0x80;
           SFIOR=0x00;
 SFIOR&=0x0F;
// SPI initialization
           // SPI disabled
   SPCR=0x00;
 TWCR=0x00;
 pointer_eeprom=0; //addres eeprom tobe write and read
 read_data_to_eeprom();
 while (1)
 {
  if (PIND.0==0)
  {
   data=data+5; // data=data+2; add 5
   delay_ms(200);
   if (data <=0)
   {
    data=0;
   }
   write_data_to_eeprom();
  }
  else if (PIND.1==0)
  {
   data=data-5;
   delay_ms(200);
   if (data <=0)
   {
    data=9999;
   }
   write_data_to_eeprom();
  }
  else if (PIND.2==0)
  {
   data=0;
  }
  sat = data % 10;// sat = modulus
  pul = data / 10;
  pul = pul % 10;
  rat = data / 100;
  rat = rat % 10;
  rib = data / 1000;
  rib=rib%10;
  ubah=sat;
  convert_to_format7segment();
  sat=ubah;
  ubah=pul;
  convert_to_format7segment();
  pul=ubah;
  ubah=rat;
  convert_to_format7segment();
  rat=ubah;
  ubah=rib;
  convert_to_format7segment();
  rib=ubah; 
  display_7segment(); 
 }
}


http://www.mytutorialcafe.com/microcontroller%20AVR%20Tutorial%20and%20Project.htm