Sabtu, 25 Oktober 2014

Sistem Tertanam (Embedded System)

SEVEN SEGMENT AND RUNNING LED WITH LCD

BAB III
PERANCANGAN SISTEM

3.1 Analisa Rangkaian Secara Blok Diagram

Dalam hal menganalisa suatu rangkaian Seven Segment Counter dan Running Led With LCD ini, kami akan menerangkan bagaimana cara kerja alat ini secara blok diagram dan secara detail serta menganalisa listing program dari alat ini. Rangkaian Seven Segment Counter dan Running Led With LCD ini didasari dengan teori yaitu jika push ON pada PortC.1 di tekan maka led pada Port A akan melakukan Running Led dari PortA.0 - PortA.7 dan kembali ke PortA.0. Kemudian jika push ON pada PortC.0 di tekan maka seven segment pada Port B akan melakukan Counter-UP dari 0-9.
Berikut ini adalah blok diagram dari Seven Segment and Running Led With LCD :


Pada blok diagram diatas dijelaskan bahwa sebagai berikut :

1. Aktivator

Aktivator pada rangkaian Seven Segment Counter and Running Led With LCD ini untuk mengaktifkan catu daya pada alat. Sumber tegangan yang digunakan adalah +12V  dan ground yang diubah tegangannya menjadi 5V dengan menggunakan IC Regulator yang berada pada minsys ATMEGA8535.  

2. Blok Input

Dalam memproses dan mengolah 2 input dari saklar counter up dan saklar counter down diperlukan sebuah input yaitu berupa ATMEGA8535. Pada rangkaian running led akan masuk melalui PORTA , Seven Segment akan masuk melalui PORTB, dan kemudian LCD akan masuk melalui PORTC.

3. Blok Proses

Pada rangkaian ini untuk memproses suatu Seven Segment and Running Led diperlukan mikrokontroler ATMEGA8535 yang berfungsi sebagai kontrol pusat.

4. Blok Output

Output akan tampil pada LCD, LED dan seven segment. LCD di PORTA akan menerima perintah dari mikrokontroler untuk menampilkan karakter. LED menerima perintah dari mikrokontroler dalam bentuk biner, dan seven segment akan menampilkan angka.


3.2 Analisa Rangkaian Secara Detail


Sistem pengontrol pada alat ini dikendalikan oleh Mikrokontroler AVR ATMega8535, dimana port yang di gunakan adalah Port A, Port B, dan Port C. Cara kerja alat ini sederhana, jika push ON pada PortC.1 di tekan maka led pada Port A akan melakukan Running Led dari PortA.0 - PortA.7 dan kembali ke PortA.0. Kemudian jika push ON pada PortC.0 di tekan maka seven segment pada Port B akan melakukan Counter-UP dari 0-9. Program yang digunakan pada rangkaian ini adalah bahasa C menggunakan CodeVisionAVR.

Ketika adanya input, proses dan output mikrokontroler ATMEGA 8535 membutuhkan clock yang teratur untuk membaca setiap siklus mesinnya. Clock tersebut didapat dari Xtal sebesar 4Mhz yang dipasangkan pada pin 12 dan pin 13 ATMEGA 8535. Pin untuk clock ini juga terhubung dengan pin reset dengan switch1 sebagai jembatannya. Bentuk reset seperti ini dikategorikan sebagai reset manual, karena proses reset dapat terjadi jika pengguna alat menekan switch resetnya. Jadi ketika proses berlangsung dan switch1 ini ditekan, maka clock eksternal ini direfresh dengan memberi nilai logika 1.

3.3 Analisa Logika Program

Listing Program :


#include <mega8535.h>                                   // Memasukkan library mega8535.h
#include <delay.h>                                             // Memasukkan library delay.h
#include <lcd.h>                                                  // Memasukkan library lcd
#asm                                                                      // Menyisipkan bahasa assembly
                 .equ __lcd_port=0x15                       // Memberi nilai 0x15 pada __lcd_port, PORTC
                 #endasm                                              // Selesai menyisipkan bahasa assembly
int n,i;                                                                     // Deklarasi variable n dan I memiliki data integer
void sevenseg(){                             // Subrutin sevenseg, digunakan untuk memberikan nilai      pada seven segment yang terhubung pada PORTB
if(n==0){PORTB=0xc0;}                                      // Jika n=0 maka nilai PORTB=0xc0
if (n==1){PORTB=0xf9;}                                     // Jika n=1 maka nilai PORTB=0xf9
if (n==2){PORTB=0xa4;}                                    // Jika n=2 maka nilai PORTB=0xa4
if (n==3){PORTB=0xb0;}                                    // Jika n=3 maka nilai PORTB=0xb0
if (n==4){PORTB=0x99;}                                    // Jika n=4 maka nilai PORTB=0x99
if (n==5){PORTB=0x92;}                                    // Jika n=5 maka nilai PORTB=0x92
if (n==6){PORTB=0x82;}                                    // Jika n=6 maka nilai PORTB=0x82
if (n==7){PORTB=0xf8;}                                     // Jika n=7 maka nilai PORTB=0xf8
if (n==8){PORTB=0x80;}                                    // Jika n=8 maka nilai PORTB=0x80
if (n==9){PORTB=0x90;}}                                   // Jika n=9 maka nilai PORTB=0x90
void running_led(){                             // Subrutin running_led, digunakan untuk memberikan nilai pada seven segment yang terhubung pada PORTA
if(n==0){PORTA=0xff;}                                       // Jika n=0 maka nilai PORTA=0xff
if(n==1){PORTA=0xfe;}                                      // Jika n=1 maka nilai PORTA=0xfe
if(n==2){PORTA=0xfd;}                                      // Jika n=2 maka nilai PORTA=0xfd
if(n==3){PORTA=0xfb;}                                      // Jika n=3 maka nilai PORTA=0xfb
if(n==4){PORTA=0xf7;}                                      // Jika n=4 maka nilai PORTA=0xf7
if(n==5){PORTA=0xef;}                                      // Jika n=5 maka nilai PORTA=0xef
if(n==6){PORTA=0xdf;}                                      // Jika n=6 maka nilai PORTA=0xdf
if(n==7){PORTA=0xbf;}                                      // Jika n=7 maka nilai PORTA=0xbf
if(n==8){PORTA=0x7f;}                                      // Jika n=8 maka nilai PORTA=0x7f
if(n==9){PORTA=0x00;}}                                    // Jika n=9 maka nilai PORTA=0x00
void lcd_counter_up(){                       // Subrutin lcd_counter_up, digunakan untuk memberikan nilai pada LCD yang terhubung pada PORTC
lcd_gotoxy(0,0);                                                   // Meletakkan kursor pada baris 0 kolom 0
lcd_putsf("====COUNTER====");                   // Kirim data”===COUNTER===” ke LCD
lcd_gotoxy(0,1);                                                   // Meletakkan kursor pada baris 1 kolom 0
lcd_putsf("====UP====");}                               // Kirim data”=====UP=====” ke LCD   
void lcd_counter_down(){                  // Subrutin lcd counter down, digunakan untuk memberikan nilai pada LCD di PORTC
lcd_gotoxy(0,0);                                                   // Meletakkan kursor pada baris 0 kolom 0
lcd_putsf("====COUNTER====");                   // Kirim data”===COUNTER===” ke LCD
lcd_gotoxy(0,1);                                                   // Meletakkan kursor pada baris 1 kolom 0
lcd_putsf("====DOWN====");}                        // Kirim data”=====DOWN=====” ke LCD
void main(void){                                  // Merupakan bagian utama dari program
DDRB=0xFF;                                                        // Set register DDRB=0xFF, ini untuk membuat PORTB sebagai output
PORTA=0xFF;                                                      // Memberi nilai pada PORTA=0xFF
DDRA=0xFF;                                                        // Set register DDRA=0xFF, ini untuk membuat PORTA sebagai output
PORTD=0x0FF;                                                    // Memberi nilai pada PORTA=0xFF
DDRD=0x00;                                                        // Set register DDRD=0x00, ini untuk membuat PORTD sebagai input
n=0;                                                                        // Memberi nilai variable n bernilai 0
lcd_init(16);                                                           // Inisialisasi bahwa menggunakan LCD 16 kolom
lcd_gotoxy(0,0);                                                   // Letakkan kursor LCD ke kolom 0 baris 0
lcd_putsf("====COUNTER====");                   // Tampilkan =====COUNTER===== pada LCD
PORTB=0xC0;                                                      // Memberi nilai PORTB=0xC0, ini membuat seven segment menampilkan angka 0
while (1){                                               // Program didalam while akan terus berulang tanpa batas
if (PIND.2==0){{                                                   // Jika PIND.2 bernilai 0( saklar counter up ditekan)
delay_ms(1000);                                                 // Buat delay selama 1000 mili detik
while (PIND.2==0);                                              // Cek apakah PIND.2 sudah ditekan( sudah ditekan dan sesaat kemudian dilepas), jalankan program while
if(n<9){                                                                   // Jika  nilai variable n lebih kecil dari 9
i=0;                                                                         // Memberi nilai variable i bernilai 0
while(i<9){                                                             // Ulangi program dalam while, selama nilai variable i bernilai kurang dari 9
n=n+1;                                                                   // Nilai variable n ditambah 1 hasilnya disimpan kembali ke variable n
sevenseg();                                                           // Panggil subrutin sevenseg()
lcd_counter_up();                                                                // Panggil subrutin lcd_counter_up
running_led();                                                      // Panggil subrutin running led()
i++;                                                                         // Nilai variable I ditambah 1
delay_ms(1000);}}}}                                            // Buat delay selama 1000 mili detik
if (PIND.3==0){                                                     // Jika PIND.3 bernilai 0( saklar counter up ditekan)
lcd_counter_down();                                           // Panggil lcd_counter_down()
running_led();                                                      // Panggil subrutin running led()

PORTB=0x90;PORTA=0x00;delay_ms(1000);
PORTB=0x80;PORTA=0x7f;delay_ms(1000);
PORTB=0xf8;PORTA=0xbf;delay_ms(1000);
PORTB=0x82;PORTA=0xdf;delay_ms(1000);
PORTB=0x92;PORTA=0xef;delay_ms(1000);                                    //  Memberi nilai pada PORTB
PORTB=0x99;PORTA=0xf7;delay_ms(1000);                                    //  dan buat delay 1000 milidetik
PORTB=0xb0;PORTA=0xfb;delay_ms(1000);
PORTB=0xa4;PORTA=0xfd;delay_ms(1000);
PORTB=0xf9;PORTA=0xfe;delay_ms(1000);

PORTB=0xc0;PORTA=0xff;delay_ms(1000);

1 komentar:

Template Copy by Blogger Templates | BERITA_wongANteng |MASTER SEO |FREE BLOG TEMPLATES