Monday, June 22, 2015

JAM DIGITAL LCD DENGAN I2C DS 1307 CAVR ( ATMEGA 32 )

Assalamualaikum...
Yo opo kabare Lurrrd....
Menjelang puasa H5 Global elektronik terus update artikel tentang mikrocontroller,,semoga dengan mengisi bulan ramadhan ini dengan kegiatan yang positif tentu nya akan menambah nikmat kita berpuasa..
Baik,langsung saja kita kali ini akan posting tentang membuat Jam Digital LCD 16x2 dengan RTC DS 1307 tentunya masih dengan software Code Vision AVR dan memakai IC uC Atmega 32...

Yang perlu diperhatikan didalam pembuatan jam digital ini hanyalah penempatan LCD pada PORTD dan IC RTC pada PORTC

Langkah pertama kita kita setting wizard nya seperti gambar dibawah ini :

setelah itu kita ketik source code nya :

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : Jam Digital RTC
Version : 1.0
Date    : 6/21/2015
Author  : rey
Company : http://elektronikasystem.blogspot.com/
Comments:


Chip type               : ATmega32
Program type            : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 512
*****************************************************/
unsigned char h, m, s, d, mo, y, w,temp[16];
/*
h=hour, m=minute, s=second
w=week, d=day, mo=month, y=year
*/
#include <mega32.h>
#include <i2c.h>
#include <ds1307.h>
#include <alcd.h>
#include <stdio.h>
#include <delay.h>
// Declare your global variables here

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=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=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;

// I2C Bus initialization
// I2C Port: PORTC
// I2C SDA bit: 1
// I2C SCL bit: 0
// Bit Rate: 100 kHz
// Note: I2C settings are specified in the
// Project|Configure|C Compiler|Libraries|I2C menu.
i2c_init();

// DS1307 Real Time Clock initialization
// Square wave output on pin SQW/OUT: Off
// SQW/OUT pin state: 0
rtc_init(0,0,0);

rtc_set_time(18,49,00); //untuk menset jam 09,10,26
rtc_set_date(28,22,06,15); //untuk menset tanggal: (week),22,06,2015

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTD Bit 0
// RD - PORTD Bit 1
// EN - PORTD Bit 2
// D4 - PORTD Bit 4
// D5 - PORTD Bit 5
// D6 - PORTD Bit 6
// D7 - PORTD Bit 7
// Characters/line: 16
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("Jam Digital RTC");
lcd_gotoxy(5,1);
lcd_putsf("By Rey");
delay_ms(2000);
lcd_clear();

while (1)
      {
      rtc_get_time(&h,&m,&s); //mendapatkan nilai  jam, menit dan detik
      rtc_get_date(&w,&d,&mo,&y); //mendapatkan nilai tanggal, bulan dan tahun

        lcd_gotoxy(0,0);
        sprintf(temp,"Time %d:%d:%d",h,m,s);
        lcd_puts(temp);//tampilkan jam di LCD baris pertama

        lcd_gotoxy(0,1);
        sprintf(temp,"Date %d-%d-%d",d,mo,2000+y);
        lcd_puts(temp);//tampilkan tanggal di LCD baris kedua

      }
}


Setelah itu compile lalu download ke mikro,,
Ada satu hal penting dalam proses download,yaitu file hex harus di download 2x yang pertama kita memakai source code di atas,namun setelah itu lakukan sekali lagi namun ada 2 list code yang perlu di hapus yaitu ini :



setelah code di hapus lalu di compile sekali lagi dan di downlaod ke mikro lagi...
Selamat mencoba..

Wassalamualaikum Wr.Wb

hfsdf

Saturday, June 20, 2015

PENGUNCI PINTU DGN PASWORD ATMEGA32 CAVR

Assalamualaikum Sahabat blogger,,
Masih semangat kan yah menginjak puasa hari ke tiga di bulan Ramadhan 1436H ini,,semoga puasa kita lancar dan afdol..
Ok baik,pada kesempatan kali ini saya akan share tentang bagaimana membuat pintu berpasword dengan Atmega32 dan dengan pemograman bahasa C pada software Code Vision AVR.
Ini dia Sob penampakan hardware nya :


Kesulitan utama dari aplikasi ini adalah ketika seorang user memasukkan password dengan menggunakan keypad, kita harus dapat menyimpan input yang berasal dari keypad kedalam satu variabel. Misalnya user menekan 6, lalu 2, lalu 0 dan 4 berarti passwornya adalah 6204 (misalkan). Nilai tersebut harus dijadikan dalam 1 variabel yang kemudian akan dibandingkan dengan password yang sebenarnya. Jika user memasukkan password dengan benar maka akan membuka kunci, jika salah maka kunci tidak akan terbuka.

Untuk mengatasi masalah tersebut saya menggunakan array untuk mendeteksi berapa kali penekanan keypad dan angka berapa yang akan ditekan. Baiklah disini saya akan menjelaskan algoritma yang saya buat. Jika user menekan 6, lalu 2 lalu 0 dan 4 maka seperti ini logikanya:

Awalnya saya deklarasikan array sebagai berikut:
array[10], i=0;

saat terjadi penekanan angka 6 maka;
i++ (saya increamentkan) jadi i=1
kemudian angka 6 saya simpan pada variabel array[i] jadi array[1]=6

kemudian saat terjadi penekanan angka 2, maka:
i++ (saya increamentkan lagi) jadi i=2
kemudian angka 2 saya simpan pada variabel array[i] jadi array[2]=2

kemudian saat terjadi penekanan angka 0, maka:
i++ (saya increamentkan lagi) jadi i=3
kemudian angka 0 saya simpan pada variabel array[i] jadi array[3]=0

kemudian saat terjadi penekanan angka 4, maka:
i++ (saya increamentkan lagi) jadi i=4
kemudian angka 4 saya simpan pada variabel array[i] jadi array[4]=4

maka didapat array[1]=6, array[2]=2, array[3]=0, array[4]=4

kalo sudah didapat seperti diatas maka kita tinggal kumpulkan dalam satu variabel (nama variabelnya misalkan nilai) caranya:

saat i bernilai 1, i=1 kita hitung dengan rumus:
nilai=array[1]  //jadi nilai=6

saat i bernilai 2, i=2 kita hitung dengan rumus:
nilai=(array[1]*10)+array[2]  //jadi nilai=62

saat i bernilai 3, i=3 kita hitung dengan rumus:
nilai=(array[1]*100)+(array[2]*10)+array[3]  //jadi nilai=620

saat i bernilai 4, i=4 kita hitung dengan rumus:
nilai=(array[1]*1000)+(array[2]*100)+(array[3]*10)+array[4]  //jadi nilai=6204

Sudah mengerti bukan, dari rumus-rumus diatas masih dapat disederhanakan, menjadi:

jika i=1
nilai=array[i]

jika i bernilai (i>=2 dan i<=8)
nilai=(nilai*10)+array[i]

Baiklah kembali lagi ke aplikasi yang akan kita buat. Langsung saja ke cara kerjanya, gambar rangkaiannya bisa anda lihat dibawah ini. Saat pertama kali alat ini saya nyalakan maka dalam keadaan tidak terkunci (unlock), untuk menguncinya (lock) anda harus menekan tombol = (lihat gambar keypad dibawah). Setelah terkunci, jika anda ingin membukanya kembali anda harus memasukkan passwordnya (jika sudah mengetikan password tekan tombol + untuk memasukkannya). Jika benar maka akan membuka kunci, tetapi jika salah kunci tidak akan terbuka. Ketika sudah terbuka maka cara kerjanya kembali lagi ke awal. Sedangkan tombol ON/C saya gunakan untuk menghapus password jika salah dalam pengetikannya. Untuk indikator kuncinya saya menggunakan sebuah LED, jika LED menyala maka dalam keadaan tidak terkunci dan jika mati dalam keadaan terkunci.

Berikut konfigurasi nya pada software :

 1.Konfigurasi IC mikrocontroller dan crystal


2.Konfigurasi PORTB sebagai Scanning Keypad 4x4


3.Konfigurasi PORT C.0 sebagai Output Solenoid Pengunci Pintu


4.Konfigurasi PORTD sebagai output ke LCD 16x2


/*****************************************************
Project : Pengunci pintu dengan pasword
Version : 1.0
Date    : 6/21/2015
Author  : REY
Company : http://elektronikasystem.blogspot.com/
Comments:

Chip type               : ATmega32
Program type            : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 512
*****************************************************/

#include <mega32.h>
#include <delay.h>
#include <stdlib.h>
#include <stdio.h>
#include <alcd.h>

float nilai=0, password=2015;
char temp[12], array[10], i=0, indeks=0;
//variabel indeks digunakan untuk mendeteksi jika indeks=0 unlock, indeks=1 lock


void lock()
{
 while (indeks==0)
      {
      lcd_gotoxy(0,0);
      lcd_putsf("Tekan Tombol #");
      lcd_gotoxy(0,1);
      lcd_putsf("untuk mengunci");
      PORTB = 0b11111011;
      delay_ms(30);
      if (PINB.7 == 0)
       {
        indeks=1;
        PORTC.0=1;//terkunci
        lcd_clear();  
        lcd_gotoxy(0,0);
        lcd_putsf("Terkunci");
        delay_ms(1000);
        lcd_clear();
        }
      }
}


void enter()
{
if (nilai==password)
   {
   lcd_clear();
   lcd_gotoxy(0,0);
   lcd_putsf("Terbuka");
   delay_ms(1000);
   i=0; nilai=0;
   PORTC.0=0;//kunci terbuka
   indeks=0; 
   }                      
else
   {
   lcd_clear();
   lcd_gotoxy(0,0);
   lcd_putsf("Password Salah !");
   delay_ms(2500);
   i=0; nilai=0;
   indeks=1;//karena password salah jadi masih terkunci
   }
}

void simpan_dlm_1variabel()
{
       if (i==1){nilai=array[i];}
       if (i>=2 && i<=8)
           {
           nilai=(nilai*10)+array[i];
           }  
}

void scanning_keypad()//scanning pendeteksian penekanan keypad
{
lcd_gotoxy(0,0);
lcd_putsf("Masukan Pasword");
PORTB = 0b11111110;
delay_ms(30);
if (PINB.4 == 0) {i++; array[i]=1; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.5 == 0) {i++; array[i]=4; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.6 == 0) {i++; array[i]=7; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.7 == 0) {lcd_clear();i=0;nilai=0;delay_ms(300);}
PORTB = 0b11111101;
delay_ms(30);
if (PINB.4 == 0) {i++; array[i]=2; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.5 == 0) {i++; array[i]=5; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.6 == 0) {i++; array[i]=8; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.7 == 0) {i++; array[i]=0; simpan_dlm_1variabel(); delay_ms(300);}
PORTB = 0b11111011;
delay_ms(30);
if (PINB.4 == 0) {i++; array[i]=3; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.5 == 0) {i++; array[i]=6; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.6 == 0) {i++; array[i]=9; simpan_dlm_1variabel(); delay_ms(300);}
if (PINB.7 == 0) {delay_ms(300);}
PORTB = 0b11110111;
delay_ms(30);
if (PINB.4 == 0) {delay_ms(300);}
if (PINB.5 == 0) {delay_ms(300);}
if (PINB.6 == 0) {delay_ms(300);}
if (PINB.7 == 0) {enter();delay_ms(300);}
}

void tampil_lcd()
{
if (nilai>0)
    {
        ftoa(nilai,0,temp);
        lcd_gotoxy(0,1);
        lcd_puts(temp);
    }
}



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=Out Func2=Out Func1=Out Func0=Out
// State7=P State6=P State5=P State4=P State3=1 State2=1 State1=1 State0=1
PORTB=0xFF;
DDRB=0x0F;

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

// 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 - PORTD Bit 0
// RD - PORTD Bit 1
// EN - PORTD Bit 2
// D4 - PORTD Bit 4
// D5 - PORTD Bit 5
// D6 - PORTD Bit 6
// D7 - PORTD Bit 7
// Characters/line: 16
lcd_init(16);
lcd_putsf(" Pengunci Pintu  Dgn Keypad 4x4");
delay_ms(1500);
lcd_clear();

while (1)
      {
      lock();
      scanning_keypad();
      tampil_lcd();

      }
}


Konfigurasi hardware nya sebagai berikut :
Ok bro sekian terima kasih

Referensi tulisan : http://elektro-kontrol.blogspot.com/2011/06/pengunci-pintu-door-lock-berpassword.html

Monday, February 23, 2015

Assalamualaikum,,,yah setelah lama gak oprek Micro ternyata susah juga ya kalau memang sudah hoby itu sulit untuk di tinggalkan,liburan kuliah rencana buat refreshing yah karena banyak pasien service an saya jadi tidak bisa liburan deh,,,nah setelah dapet link belanja baru (karena nyari komponen mikrocontroller di tangerang susah bener dan jauh) saya menemukan link belanja online baru yaitu CREATIVE ELEKTRONIK saya menjadi semangat lagi oprek mikro...disamping itu di semester 4 ini sudah ada materi tentang Mikroprosessor dan Mikrocontroller 1 dibimbing oleh Dosen yang bernama Ibu Lisa,,,lha kok malah bercerita begini ya???ok barang sudah sampai dan ingin rasa nya segera oprek ATmega32 saya pasang ke minsys lalu saya dengan hati hati mensetting Fusebit,,,pengalaman saya yang pertama kali salah dalam pensettingan fusebit dan MCU ATmega32 pertama saya jadi korban mati suri,,,sudah di tolong oleh AVR doctor juga tidak sembuh,,kali ini saya setting dengan Low Fuse = 0xBF dan High Fuse = 0x89 dan Alhamdulillah Aman...
Ini penampakan nya Gan heheheh...

Ok sekian dulu Thanks....
Walaikumsalam...

Sunday, February 15, 2015

Setting Lock&Fusebit ATmega8 Aman

Sebagai catatan pribadi saja,kali ini saya menuliskan bagaimana mensetting Lock & Fusebit terutama pada Microcontroller Atmega8 supaya aman(yang sering saya pakai) dengan menggunakan software Extreme burner AVR.Karena dengan settingan ini IC mikro saya aman,,hehehe ini screen shot nya :
Nah itu dia,,,,tapi bisa juga di setting Low fuse nya FF dan high fusse nya DF,
Untuk default pabrikan nya Atmega8 adalah Low fuse : E1 dan High fuse D9
bisa juga kita menggunakan kalkulator AVR Klik Disini
Sekian dan terima kasih

Friday, January 23, 2015

COUNTER UP 4 DIGIT SevSeg Common kathoda Atmega8

Assalamualaikum sobat blogger...
Salam microver's...

Setelah lama vacum beberapa bulan karena kegiatan yang full version (hehehe seperti software aja kali :D) kembali lagi saya menulis catatan kecil saya di blog ini,,kali ini saya membuat sebuah Counter Up 4 digit menggunakan seven segment common kathode dimana yang telah saya kemas pada sebuah PCB yg saya beri nama PCB seven Segment Control versi 1.0 dan ini penampakan nya :



Dalam PCB ini saya menggunakan Transistor C1815 sebagai driver/saklar elektronik untuk men switch negatif supplay ke unit common seven segment,dimana saya menggunakan teknik SCANNING.Apa itu teknik scanning??  Pada prinsipnya scanning adalah teknik yang bergantian. Misalnya, kita ingin menampilkan 8 angka pada 7 segment, maka nyala lampu pada 7 segment dibuat bergantian sehingga jalur data dapat digunakan secara bersamaan oleh kedelapan 7 segment tersebut. Proses bergantian ini dilakukan sangat cepat sehingga mata manusia seoalah-olah akan melihat kedelapan 7 segment menyala.
Secara program scanning dapat dilakukan dengan cara polling maupun timer. Cara polling dilakukan dengan menjalankan program scanning secara terus menerus dimana program scanning biasanya diletakkan di program utama. Jika pada program utama terdapat terdapat program lain yang membutuhkan waktu pengerjaan yang lama, maka program untuk scanning akan teganggu. Sedangkan, cara timer lebih efektif dan efisien sebab mikrokontroler dapat mengerjakan program lain tanpa mengganggu scanning.
Sayamenggunakan PORTD sebagai output untuk data dari character digit,sedangkan PORTB sebagai output control basis Transistor.karena untuk menghemat pengkabelan,saya memberi nilai low/0 pada PINB.4 sebagai referensi ke negatif supplay,dan berikut listing program nya yang saya buat dengan CAVR :

#include <mega8.h>  // Memakai preposessor ATmega8
#include <delay.h>  // Memakai library delay
int; // mengalokasikan data sebagai integer
unsigned char satuan,puluhan,ratusan,ribuan,ulang; // mengalokasikan data digit
unsigned char data[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //data angka/character

void main(void)
{
PINB.4=0; //menjadikan PINB.0 sebagai pin negatif untuk common ke sevseg common kathoda

// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;

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

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

while (1)
      {
      for(ribuan=0;ribuan<=9;ribuan++)
        {
         for(ratusan=0;ratusan<=9;ratusan++)
         {
           for(puluhan=0;puluhan<=9;puluhan++)
           {
              for(satuan=0;satuan<=9;satuan++)
           {
                for(ulang=0;ulang<=250;ulang++)
           {
                  PORTD=data[satuan];
                    PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;
                      delay_ms(1);
                        PORTD=data[puluhan];
                          PORTB.0=0;PORTB.1=1;PORTB.2=0;PORTB.3=0;
                            delay_ms(1);
                             PORTD=data[ratusan];
                              PORTB.0=0;PORTB.1=0;PORTB.2=1;PORTB.3=0;
                               delay_ms(1);
                                 PORTD=data[ribuan];
                                  PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=1;
                                   delay_ms(1);
     }
    }
   }
  }
  }
 }
}



Wednesday, July 30, 2014

Cara Flashing Handphone Nokia

Assalamualaikum...

Kali ini saya lepas dari ruang lingkup Microcontroller,Kesempatan hari libur lebaran 1435H tepatnya pada tanggal 31-07-2014 saya menderita sakit perut (mules) akibat kemarin saya makan mie ayam yang pedas,rencana mau silaturohmi ke budhe yang ada di bekasi pun jadi gagal karena saya sakit perut,,Namun karena BT dirumah dan terinspirasi oleh adik saya untuk men flash HP dan disaat itu memory HP saya corrupted,,saya format MMC saya lalu saya nge flash HP jadul Nokia 5800 Express Music saya menjadi OS Anna Belle versi 7.9,,h3x...(kok malah jadi cerita gini :D).

Ok deh langsung saya akan memulai cara nya :

Wednesday, July 23, 2014

Pengenalan Bahasa C

Assalamualaikum...

















SEJARAH SINGKAT
Bahasa Pemrograman C diciptakan dan dikembangkan oleh Brian Kernighan dan Denis Ritchie di Bell Research Labs. Bahasa Pemrograman C secara khusus diciptakan dengan tujuan agar para programmer (orang yang membuat program komputer) dapat mengakses seluruh internal register.

I/O slots dan absolute address dari sebuah komputer.
Pada awal tahun 1960-an, sistem operasi komputer mulai menjadi jauh lebih kompleks daris ebelumnya karena adanya pengenalan multi terminal dan kemampuan multi prosessor. Pada saat itu, sistem operasi diciptakan dengan menggunkan bahasa assembly (bahasa pemrograman tingkat rendah).
Di mana banyak pengembang yang menyadari bahwa suatu sistem operasi dapat dikembangkan lebih lagi, tidak cukup hanya dengan menggunakan bahasa assembly. Inilah asal mula Bahasa C yang dimplementasikan pada Digital Equipment Corporation PDP-7. Pada perkembangan selanjutnya Bahasa Pemrograman C digunakan untuk mengimplementasikan Sistem Operasi Unix.

Keluarga Besar Bahasa Pemrograman C


Bahasa Pemrograman C telah mengalami banyak evolusi sejak awal diciptakanya hingga saat ini. Saat ini, banyak Bahasa Pemrograman yang merupakan turunan/varian/keluarga dari Bahasa C seperti: C ++, Java Script, PHP, Java, perl dan lain sebagainya.

C dan C++

Banyak orang yang bingung tentang perbedaan antar Bahasa Pemrograman C dan Bahasa Pemrograman C ++ . Sebenarnya ada sedikit perbedaan antara C dan C++ yang merupakan keturunan Bahasa C. Pertama, perbedaan nama (C dan C++). Kedua, perbedaan sintaks; sintaks bahasa pemrograman c++ dan c agak sedikit berbeda di beberapa bagian.

Kegunaan Belajar Bahasa C pada Saat ini

Anda mungkin berpikir bahwa saat ini sudah tidak ada gunanya lagi belajar Bahasa C karena sudah tidak terpakai lagi. Sebenarnya anda salah, karena pada saat ini, sistem operasi linux mulai dipakai secara luas, di mana bahasa C(GCC) dapat digunakan untuk pemrograman sistem linux dan pemrograman jaringan linux. Bahkan jika anda ingin menjadi hacker yang baik anda harus menguasai GCC (socket programming, system programming, database programming dan shellcoding).

Pengenalan Bahasa C

C merupakan bahasa universal dalam bidang pegembangan software dan banyak digunakan pada mesin-mesin dan komputer, banyak sekali software sistem yang dibuat dengan C karena bahasa C memiliki kemampuan untuk mengakses sistem dari komputer, mulai dari RAM yang sederhana, disk bahkan sampai yang sangat detail dan dalam seperti register dan port-port pada komputer, baik itu PC maupun mini computer dan Mainframe.
Menulis Bahasa Pemrograman C tidaklah sesulit yang anda bayangkan. Saya asumsikan anda menggunakan sistem operasi linux/unix atau mungkin cygwin di windows, di mana sudah terinstall compiler yang tersedia untuk Bahasa Pemrograman C. Ada begitu banyak kompiler untuk bahasa c ini di berbagai platform seperti GCC, CC di linux/unix; Miracle C, Turbo C, Microsoft Visual C++ di linux/unix.Kompiler yang akan kita pergunakan kali ini adalah GCC.
Selanjutnya anda juga perlu mempersiapkan text editor apa saja. Bisa notepad jika anda menggunakan windoze atau vi, pico, vim, kwort, nano, gedit, emacs dan lain sebagainya.

DASAR-DASAR C

Sebelum kita mulai mempelajari pemrograman bahasa C++, ada baiknya kita tahu pengertian dari C++ itu sendiri. Bahasa C++ merupakan pengembangan dari bahasa pemrograman C. Bahasa C++ dikembangkan oleh Dennis Ritchie, dan pertama kali diimplementasikan di komputer DEC PDP-11 pada tahun 1972
C++ menggunakan konsep yang penting dari bahasa BCPL dan B.
Pertama kali bahasa C dikenal dengan luas oleh karena bahasa pengembangan dari UNIX operating system, Pada saat ini kebanyakan dari sistem operasi menggunakan bahasa C & C++, Selama hampir dua dekade, bahasa C dapat dioperasikan di semua komputer. C++ ( ekstensi dari C ), dikembangkan oleh B jarne Stourstrup di awal tahun 1980, banyak kemampuan-kemampuan baru yang ada di C++, tapi lebih penting lagi C++ mempunyai kemampuan object-oriented.
Bahasa C++ ini juga merupakan pemrograman terstruktur dimana untuk menyelesaikan sebuah masalah harus bertahap sesuai dengan algortima pemrograman, dimana secara garis besar program yang akan dieksekusi dari awal secara berurut sampai akhir.
Bahasa C++ sendiri merupakan bahasa pemrograman yang lumayan banyak digemerai oleh programmer dan merupakan dasar untuk mempelajari bahasa pemrograman yang lebih grafis (GUI) seperti Visual C++, Visual C, dan lain-lain. Bahasa C ++ mengembangkan kemampuan dari bahasa C yaitu dengan:

a) Memberikan dukungan untuk menciptakan dan memanfaatkan abstraksi data.
b) Dapat digunakan untuk pemrograman berorientasi objek.
c) Dan yang terakhir telah menutupi beberapa kekurangan dalam bahasa C.

Mengenal C

Sebuah berkas program C terdiri dari beberapa unsur, yaitu dokumentasi program , pengarah prapengolahan, bagian deklarasi global, sebuah fungsi main ( ), dan fungsi-fungsi buatan pemrogram. Masing-masing fungsi ini terdiri dari badan fungsi yang memuat deklarasi local dank ode program yang dapat dieksekusi.

Berikut sebuah program sederhana :

/* Nama file : Program sederhana
Conto program sederhana pada program C*/
#include
int main ( )
{
return 0;
}

Dokumentasi Program

Memberikan dokumentasi pada program sangat berguna untuk membantu memperjelas alur logika penyusunan program. Karena tujuannya hanya sebagai dokumentasi, komentar-komentar yang dituliskan pada program tidak diproses oleh compiler. Komentar dapat dimulai dengan simbol dua karakter yang terdiri dari garis miring dan asterisk (/*) dan diakhiri dengan asterisk dan garis miring.
Karakter komentar /* dapat diletakkan dimana saja didalam program dan dapat mencakup lebih dari satu komentar, dengan syarat setiap /* harus ditutup dengan */. Pada awal program, komentar yang diberikan biasanya bertujuan untuk menjelaskan apa yang dilakukan oleh program, sedangkan pada bagian probram yang lain tujuannya adalah untuk memperjelas logika program.
Dalam membeikan komentar untuk dokumentasi program, ada beberapa hal yang perlu diperhatikan, diantaranya:


1. Komentar hendaklah diberikan pada tempat-tempat yang bias menimbulkan kekaburan pengertian.
2. Beri komentar ditempat yang perlu saja, misalnya pada awal program untuk menjelaskan secara ringkas tujuan program, pada awal blok pernyataan untuk menjelaskan kumpulan tugas yang dilakukan , pada pernyataan keputusan untuk menjelaskan kondisi yang harus dipenuhi dalam pengambilan keputusan.
3. Komentar tidak bisa dibuat bertingkat , yaitu adanya komentar dalam komentar, misalnya;


/* Komentar awal /* Komentar lagi /* Komentar berikutnya*/

Pengarah Prapengolahan

Dalam mengolah kode-kode program, compiler C melaksanakan beberapa tahapan yaitu melakukan prapengolahan untuk melakukan persiapan yang diperlukan sebuah berkas program kompilasi. Di dalam program pengarah prapengolahan diawali oleh karakter # yang dituliskan pada baris-baris pertama program.
Prapengolahan memperlakukan berkas program sebagai sederetan baris teks: membaca, mengolah, dan menuliskan kembali hasil pengolahan kedalam berkas semula. Prapengolah membuang semua baris perintah prapengolahan dari berkas sumber dan melakukan perubahan terhada berkas sumber sesuai dengan arahan perintah yang diberikan. Secara garis besar pelayanan prapengolah dibagi dalam tiga kelompok :

1) Penyisipan berkas (#include),
2) Pendefenisian makro (#define), dan
3) Pengarah kendali compiler (#ifdef, #ifndef, dll)

Dalam menyertakan berkas judulyang diperlukan olefh fungsi input dan outputyang digunakan dalam program : #include dan untuk mendefenisikan sebuah konstanta (pi): #define PI 3.1459, sementara itu #ifdef diguakan apabila hendak melakukan kompilasi terhadap satu bagian program hanya apabila sebuah ekspresi tertentu telah didefenisikan menggunakan #define. Standar ANSI C menambahkan beberapa pengarah prapengolahan tambahan; pengujian alternatif, pernyataan instruksi, pendeteksian kesalahan, pengubahan pengenal menjadi string dan penggabungan pengenal.

Deklarasi Global

Pada bagian deklarasi global terdapat pendeklarasian variable dan prototipe fungsi. Semua variable y ang dideklarasikan pada bagian ini akan dikenal oleh semua bagian program yang terdapat dibawahnya. Sementara itu prototipe fungsi adalah sebuah deklarasi tentang akan digunakannya sebuah fungsi didalam program. Ada tiga unsur yang perlu disebutkan: jenis data yang dikembalikan oleh fungsi, nama fungsi dan daftar argumen yang diberikan pada fungsi yang diberi jumlah argumen (arity) dan jenis data masing-masing argumen.

Fungsi Main ( )

Fungsi main ( ) memegang peranan yang penting pada sebuah program. Fungsi ini merupakan fungsi utama pada setiap program C dimana eksekusi keseluruhan program dimulai. Barapapun banyaknya fungsi yang terdapat pada sebuah program C, main ( ) adalh fungsi utama yang akan dilaksanakan oleh compiler. Contoh program yang memperlihatkan struktur fungsi main ( ) sederhana.

/* Nama file : Hello.c
Menampilkan teks dilayar*/
#include
int main ( )
{
printf(“hello, world!\n”);
return 0;
}

Pada contoh diatas fungsi main ( ) tidak memerlukan argumen, badan fungsi main ( ) tidak memiliki bagian deklarasi lokal, dan hanya memiliki sebuah pernyataan yang dapat dieksekusi, berupa fungsi output printf ( ). Kode program (pernyataan) yang dapat dieksekusi adalah kode program yang merupakan baris-baris instruksi yang harus dilaksanakan oleh kompiler. Kode program ini dapat berupa input/output, konstruksi runtunan, konstruksi keputusan dan konstruksi pengulangan. Dalam badan fungsi main ( ) terdapat pula bagian deklarasi lokal yang dimaksudkan untuk mendeklarasikan variable-variabel dan prototipe-prototipe fungsi. semua variable dan prototipe fungsi ini bersifat lokal terhadap main ( ), dalam arti hanya dikenal oleh main ( ).

Fungsi Buatan Pemrogram

Selain main ( ) yang mempunyai kedudukan khusus dalam sebuah program, terdapat pula fungsi-fungsi buatan pemrogram. Pada fungsi ini dapat diberikan deklarasi prototype fungsi lain secara local, sehingga hanya dikenal oleh fungsi tersebut. Kode program yang dapat dieksekusi juga dapat berupa fungsi input/output standar, konstruksi runtunan, konstruksi keputusan, dan konstruksi pengulangan.

Pembatas

Setelah pendefenisian fungsi terdapat kurung kurawal buka “{“ dan kurung kurawal tutup “}” yang menunjuk akhir blok fungsi, kurung kurawal ini disebut pembatas (delimeters). Dalam badan program kurung kurawal juga dapat digunakan untuk membatasi pernyataan majemuk yang dimiliki oleh sebuah blok kode program. Selain kurung kurawal juga terdapat beberapa pembatas lain, diantaranya: [ ], < >, ( ), “ “, dan ‘ ‘.

Akhir Pernyataan

Setiap pernyataan (statement) dalam C diakhiri dengan titik koma ( ; ) yang berperan untuk memberitahu compiler akhir pernyataan. Carriage return yang diperoleh sewaktu menekan tombol bukan penunjuk akhir pernyataan, karena C mengabaikan semua karakter yang disebut karakter-karakter whitespace, yaitu spasi, tabulator dan carriage return (newline).

Tipe Data

Adalah suatu nilai yang dapat dinyatakan dalam bentuk konstanta atau variabel dan operator. Konstanta menyatakan nilai yang tetap, sedangkan variabel menyatakan nilai yag dapat berubah-ubah selama eksekusi berlangsung.

Tipe data simple merupakan tipe data bawaan dari C++, tipe data ini terdiri dari beberapa tipe data yaitu:
o Tipe data integral merupakan tipe data yang terdiri dari bilangan dengan range yang berbeda-beda.
o Floating merupakan tipe data untuk bilangan desimal. Untuk semua Turbo C++, type floating-point yang menggunakan format-format IEEE floating-point digunakan oleh intel 8087. Type float menggunakan real format 32-bit IEEE. Type double menggunakan real format 64-bit IEEE. Type long double menggunakan extended real format 80-bit IEEE.
Address merupakan tipe data yang digunakan untuk menunjuk suatu alamat memori. Sedangkan tipe data structured merupakan tipe data bentukan.

Identifiers

Identifiers adalah untaian satu atau lebih huruf, angka, atau garis bawah ( _ ). Panjang dari identifier, tidak terbatas, walaupun untuk beberapa kompiler hanya 32 karakter pertama saja yang dibaca sebagai identifier (sisanya diabaikan). Identifier harus selalu diawali dengan huruf atau garis bawah ( _ ). Ketentuan lainnya yang harus diperhatikan dalam menentukan identifier adalah tidak boleh menggunakan keyword dari bahasa C.

Dekalarasi Variabel

Untuk menggunakan variable pada C, kita harus mendeklarasikan tipe data yang akan digunakan. Sintaks penulisan deklarasi variable adallah dengan menuliskan tipe data yang akan digunakan diikuti dengan identifier yang benar, contoh :

int a;
float mynumber;
Jika akan menggunakan tipe data yang sama untuk beberapa identifier maka data dituliskan dengan tanda koma, contoh :

int a, b, c;

Tipe data integer (char, long, short, dan int) dapat berupa signed atau unsigned tergantung dari kisaran nilai yang direpresentasikan. Dilakukan dengan menyertakan keyword signed atau unsigned sebelum tipe data, contoh :

unsigned short NumberofSons;
signed int MyAccountBalance;

jika tidak ditulis maka akan dianggap signed.

Inisialisasi Variabel


Ketika mendeklarasikan variable local, kita dapat memberikan nilai tertentu. Sintaks penulisan sbb :

Tipe identifier = initial_value ;

Misalkan kita akan mendklarasikan variable int dengan nama a yang bernilai 0, maka dapat dituliskan :

int a = 0;

Atau dengan cara lain, yaitu menyertakan nilai yang akan diberikan dalam tanda ( ) :

tipe identifier (initial_value);

Konstanta : Literals


Konstanta adalah ekspesi dengan nilai yang tetap. Terbagi dalam nilai integer, nilai floating point karakter, dan string.

Nilai Integer

Merupakan nilai konstanta numeric yang meng-identifikasikan nilai integer decimal. Karena merupakan nilai numeric, maka tidak memerlukan tanda kutip ( “ ) maupun karakter khusus lainnya. Contoh :

1776
707
-273

C memungkinkan kita untuk menggunakan nilai octal (base 8) dan heksadesimal (base 16). Jika menggunakn octal harus digunakan dengan karakter 0 (karakter nol), dan untuk heksadesimal diawali dengan karakter 0X (nol, X). contoh :

75 // decimal
0113 // octal
0X4b // heksadecimal

Nilai Floating Point
Merepresentasikan nilai decimal dan / atau eksponen, termasuk titik decimal dan karakter e (yang merepresentasikan “ dikali 10 pangkat n “, dimana n merupakan nilai integer) atau keduanya. Contoh :

3.14159 // 3.14159
6.02e23 // 6.02 * 10^23
1.6e-19 // 1.6 * 10^-19
3.0 // 3.0

Konstanta Define (#define)

Kita dapat mendefenisikan sendiri nama untuk konstanta yang akan kita pergunakan, dengan menggunakan preprocessor directive #define. Dengan format :

#define identifier value

Contoh :

#define PI 3.14159
#define NEWLINE ‘\n’
#define WIDTH 100

Deklarasi Konstanta (const)

Dengan prefix const kita dapat mendeklarasikan konstanta dengan tipe yang spesifik seperti yang kita inginkan. Contoh :

const int width = 100;
constchar tab = ‘t’;
const zip = 12440;

Jika tipe data tidak disebutkan, maka compiler akan mengsumsikan sebagai int.

Operator

Operator yang disediakan C berupa keyword atau karakter khusus. Operator-operator ini cukup penting untuk diketahui karena merupakan salah satu dasar bahasa C.

Assignation ( = )

Operator ini digunakan untuk membeikan nilai ke suatu variable.

a = 5 ;

Memberikan nilai integer 5 ke variable a. Sisi kiri dari operator disebut lvalue (left value) dan sisi kanan disebut rvalue (right value). lvalue harus selalu berupa variable dan sisi kanan berupa konstanta, variable, hasil dari suatu operasi atau kombinasi dari semuanya. Contoh :

Int a, b; // a : ? b : ?
a = 10; // a : 10 b : ?
b = 4; // a : 10 b : 4
a = b; // a : 4 b : 4
b = 7; // a : 4 b : 7

Hasil dari contoh diatas , a bernilai 4 dan b bernilai 7.
Contoh :

a = 2 + (b = 5);
equivalent dengan :

b = 5
a = 2 + b

Arithmetic Operators ( +, -, *, / , % )

+ addition
- substraction
* multiplication
/ division
% module

Increase (++) and decrease (--).

Contoh :

a++;
a+=1;
a=a+1;

Operator increase dan decrease dapat digunakan sebagai prefix dan suffix. Dengan kata lain dapat dituliskan sebelum identifier variable (++a) atau sesudahnya (a++). Operator increase yang digunakan sebagai prefix (++a), letak perbedaan :

Example 1 Example 2
B=3; B=3;
A=++B; A=B++;
// A is 4, B is 4 // A is 3, B is 4

Relasional Operators (= =, !=, >, <, >=, <=)


Untuk mengvaluasi antara dua ekspresi, dapat digunakan operator relasional. Hasil dari operator ini adalah nilai bool yaitu hanya berupa true atau false, atau dapat juga dalam nilai int, 0 untuk merepresentasikan “false” dan 1 untuk merepresentasikan “true”. Operator-operator relasional pada C :

= = Equal
!= Different
> Greater than
< Less than
>= Greater or equal then
<= Less or equal then

Logic Operators ( !, &&, || )


Operator ! equivalent dengan operasi Boolean NOT, hanya mempunyai 1 operand, berguna untuk membalikkan nilai dari operand yang bersangkutan. Contoh :

! (5 = = 5) returns false because the expression at is right (5 = = 5) would be true.
! (6 =<= 4) returns true because (6 <=4) be false.
! true returns false.
!false returns false.
Operator logika && dan || digunakan untuk mengevaluasi 2 ekspresi dan menghasilkan 1 nilai akhir. Mempunyai arti sama dengan logika Boolean AND dan OR.

Conditional Operator ( ? )

Operator kondisional mengevaluasi ekspresi dan memberikan hasil tergantung dari hasil evaluasi (true atau false ). Sintaks :

conditional ? result1 : result2

Jika kondisi true maka akan menghasilkan result1, jika tidak akan menghasilkan result2.

7 = = 5 ? 4 : 3 returns 3 since 7 is not equal to 5.
7 = = 5 + 2 ? 4 :3 returns 4 since 7 is equal to 5 + 2.
5 > 3 ? a : b returns a, since 5 is greater than 3.
a > b ? a :b returns the greater one, a or b.

Explisit Type Casting Operators

Explisit type casting operators memungkinkan untuk mengkonversikan tipe data yang sudan diberikan ke tipe data ynag lain. Ada beberapa cara yang dilakukan dalam C, yang paling populer yaitu tipe baru dituliskan dalam tanda kurung ( ), contoh :

int i;
float f = 3.14;
i = (int) f;

Contoh diatas mengkonversikan nilai 3.14 menjadi nilai integer (3). Tipe casting operator yang digunakan (int). cara lainnya :

i = int ( f );

Operator ini menerima 1 parameter, dpat berupa type variable atau variable itu sendiri dan mengembalikan ukuran type atau object tersebut dalam bytes :

a = sizeof (char);

Contoh diatas akan memberikan nilai 1 ke a karena char adalah tipe data dengan panjang 1 byte. Nilai yang diberikan ole sizeof bersifat konstan.

Sekian terimakasih...
Sumber referensi

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Powered by KAMPUS UMT TANGERANG | Supported by Bebit Deartha - Ristu Sadewa | Kota Tangerang