• Tidak ada hasil yang ditemukan

Aplikasi Mikrokontroler Untuk Menampilkan Karakter Ke Layar Televisi.

N/A
N/A
Protected

Academic year: 2017

Membagikan "Aplikasi Mikrokontroler Untuk Menampilkan Karakter Ke Layar Televisi."

Copied!
56
0
0

Teks penuh

(1)

ABSTRAK

Setiap sistem terdiri atas 3 komponen utama yaitu komponen masukan, pemrosesan data, data keluaran. Keluaran sistem memiliki bermacam-mcam bentuk, salah satu bentuk keluaran sistem adalah informasi yang ditampilkan pada suatu media display. Informasi ini bisa berbentuk karakter atau angka-angka. Media display yang dipergunakan juga bermacam-macam seperti monitor, touch screen, televisi dan lain-lain. Pada penelitian tugas akhir ini hanya memfokuskan pada pemanfaatan televisi sebagai media display keluaran system.

Pada tugas akhir ini telah dirancang dan direalisasikan alat sederhana yang dapat menampilkan karakter berupa angka dan huruf berbasis mikrokontroler. Alat ini dirancang dengan menggunakan ATmega 16 dengan televisi sebagai media display keluaran. Di sini mikrokontroler diisi dengan program untuk menampilkan karakter ke televisi yang telah dikompile menjadi hexa file dan output dari mikrokontroler tersebut dikirim ke televisi melalui sebuah interface dengan menggunakan konektor RCA yellow .

(2)

ABSTRACT

Every system consist of three primary components, those are input component, data process, and output data. Output system has many form, one of them is displayed information at one particular media display. This information form could be numbers or characters. Media display also many kinds such as monitor, touch screen, television and others. This final project only focussed at television utility as media display output.

This final project have been designed and realized the simple tool which is able to display characters in the form of numbers and letters base on mikrokontroler. This tool is designed by using ATmega 16 with television as media display. The mikrokontroler filled with program for displaying the characters to television which have compiled become hexa file, and the output from mikrokontroler is sent to television through an interface by using RCA yellow connector .

(3)

BAB II LANDASAN TEORI

II.1 Mikrokontroler 4

II.4.1 Arsitektur ATMega16 5

II.4.2 Peta Memori 7

(4)

III.4.1 Diagram Alir Perangkat Lunak pada Mikrokontroler 25 III.4.2 Langkah Kerja Program 28

BAB IV PENGUJIAN DAN ANALISA

(5)

4.2.1 Analisa Bentuk Sinyal Keluaran Mikrokontroler 34

BAB V KESIMPULAN DAN SARAN

V.1 Kesimpulan 36

V.2 Saran 36

DAFTAR PUSTAKA 37

LAMPIRAN A DATA SHEET KOMPONEN

LAMPIRAN B LISTING PROGRAM MIKROKONTROLER

LAMPIRAN C SKEMA RANGKAIAN ALAT

(6)

DAFTAR TABEL

Tabel IV.1 Hasil Perhitungan Tegangan Port Keluaran 32

(7)

DAFTAR GAMBAR

Gambar II.1 Konfigurasi Kaki Pengendali Mikrokontroler ATMega16 5 Gambar II.2 Blok Diagram Fungsional ATMega16 6 Gambar II.3 Konfigurasi Memori Data AVR ATmega16 7 Gambar II.4 Memori Program AVR ATmega16 8

Gambar II.5 Register EECR 9

(8)

DAFTAR LAMPIRAN

LAMPIRAN A DATA SHEET KOMPONEN

LAMPIRAN B LISTING PROGRAM MIKROKONTROLER

LAMPIRAN C SKEMA RANGKAIAN ALAT

LAMPIRAN D FOTO RANGKAIAN ALAT

(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)

LAMPIRAN B

(18)

//Simplest universal VGA(20x20)/PAL(38x20) terminal //For sync used Timer0 Timer1

//To avoid flickering while receive UART data,recommend to send UART data after VSYNC #include <stddef.h> #include <string.h> #include "symbol_tbl.h"

#define true 1 #define false 0

#define NOP asm("nop")

//Global definitions for VGA render

#define vga_field_line_count 525 //standart VGA quantity lines #define vga_symbols_per_row 20 //symbols quantity per horizontal #define vga_row_count 20 //symbols quantity per vertical #define vga_symbol_height 24 //rendered symbol height

(19)

//Global defenitions for render PAL

#define pal_field_line_count 312 //standart PAL/SECAM quantity lines

(interlaced 625~312*2)

#define pal_symbol_height 12 //rendered symbol height #define pal_symbols_per_row 38 //symbols quantity per horizontal #define pal_row_count 20 //symbols quantity per vertical

//Makro for video handle //Video

#define video_off DDRB=0x90 #define video_on DDRB=0xB0

//HSYNC

//define hsync_off sbi(PORTD,3) #define hsync_off PORTD |=(1<<PD3);

//define hsync_on cbi(PORTD,3) #define hsync_on PORTD &=~(1<<PD3); //VSYNC

#define vsync_off PORTD |=(1<<PD2); //define hsync_off sbi(PORTD,2) #define vsync_on PORTD &=~(1<<PD3);

//define hsync_on cbi(PORTD,2)

//PAL Jumper

#define check_PAL_jumper bit_is_clear(PINC,1)

//Global variables

volatile unsigned char str_array

(20)

volatile unsigned char video_enable_flg; //flag for enable render

volatile unsigned char raw_render; //Current row at display buffer for render volatile unsigned int linecount; // current line for render

volatile unsigned char y_line_render; //Current Y-line at symbol for render

//Store strings data at Program Space, to avoid RAM leakage

const char str1[] PROGMEM = "Simple PAL terminal v1.2 UART-19200bps"; const char str2[] PROGMEM = "Kennery W.S Manurung";

const char str3[] PROGMEM = "0122088";

static void avr_init(void);

//All VGA sincronize made here.. SIGNAL(SIG_OVERFLOW0) {

TCNT0 = 0xC3; //reload counter value

//******Syncronization Handler********

//Count number of lines

if (++linecount == vga_field_line_count) {

linecount = 0;

//clear pointers for render display buffer raw_render = 0;

(21)

//Make Vsync length 2 VGA lines if ((linecount == 10 )||(linecount == 11 ))

{

//Make here vertical syncronization & HSYNC syncro level on vsync_on;

} else {

//.. & HSYNC syncro level on vsync_off; //Add to avoid flickering at top display

(22)
(23)

}

hsync_off; //HSYNC syncro level off

//******Syncronization Handler********

}

//All PAL sincronize made here..

SIGNAL(SIG_OUTPUT_COMPARE1A) {

//Count number of lines

if (++linecount == pal_field_line_count) {

linecount = 0;

//clear pointers for render display buffer raw_render = 0;

y_line_render = 0; }

//Invert HSYNC for VSYNC

if (linecount > 305 && linecount < 309) {

//Make here vertical syncronization

//sbi(PORTC,1); //inverted syncro level on PORTC|=(1<<PC1);

(24)

{ NOP;}

//And "black" = 8 mksk;

//cbi(PORTC,1); //inverted syncro level off PORTC&=~(1<<PC1);

}

else {

//Make HSYHC = 4 mksk;

//cbi(PORTC,1); //syncro level on PORTC&=~(1<<PC1); char i = 30;

while (--i)

{ NOP;}

//And "black" = 8 mksk;

//sbi(PORTC,1); //syncro level off PORTC|=(1<<PC1);

//Add to avoid flickering at top display NOP;

(25)
(26)

}

}

}

void spi_init (void) {

//Set SPI PORT DDR bits //sbi(DDRB, 7); //SCK //cbi(DDRB, 6); //MISO //sbi(DDRB, 5); //MOSI //sbi(DDRB, 4); //SS DDRB=0XB0;

SPSR = 1 << SPI2X;

SPCR = (1 << SPE) | (1 << MSTR); //SPI enable as master ,FREQ = fclk/2 //That's a great pity, that we can't work with SPI with FREQ = fclk,

//because may be possible build terminal up 40 symbol per row!!! }

static void uart_init(void) {

UCSRB = 0x00; //disable while setting baud rate UCSRA = 0x00;

UCSRC = 0x86; //8 bits data & 2 stop bits //UART SPEED 19200 bps

UBRRL = 0x33; //set baud rate lo UBRRH = 0x00; //set baud rate hi //UART SPEED 38400 bps

(27)

//UART SPEED 76800 bps

//UBRRL = 0x0C; //set baud rate lo //UBRRH = 0x00; //set baud rate hi //UART SPEED 115200 bps //UBRRL = 0x08; //set baud rate lo //UBRRH = 0x00; //set baud rate hi //UART RX Enable

UCSRB = (1 << RXEN); }

static void pal_terminal_handle(void) {

// Parser received symbols from UART while(UCSRA & (1<<RXC))

{

unsigned char current_line, received_symbol; received_symbol = UDR;

//Check for overflow display buffer

if(current_symbol == (pal_row_count*pal_symbols_per_row)) {

//Clear display buffer unsigned char i = pal_row_count;

char * ptr;

//Set pointers for clear string array ptr = &str_array[0];

while(i--) {

//Don't use here loop, to fastest clear display buffer

(28)
(29)

*ptr++ = 0x0;

if((current_symbol + 5) < (pal_row_count*pal_symbols_per_row)) {

//Add 5 Space

(30)

current_symbol += 5; }

break;

//RETURN

case 0x0D:

current_line = current_symbol / pal_symbols_per_row; if((current_line) < 19)

{

str_array[current_symbol] = 0x0;

current_symbol = current_line*pal_symbols_per_row + pal_symbols_per_row; }

break;

default: str_array[current_symbol++] = received_symbol; }

} }

void pal_render(void) {

unsigned char i; char * _ptr;

const char * _ptr1;

//Initialize display buffer with StartUp strings

strcpy_P(&str_array[pal_symbols_per_row*(pal_row_count-1)],&str1[0]);

(31)

//Wait compare interrupt signal from Timer1 sleep_mode();

//Check symbol on UART if (UCSRA & (1<<RXC))

{

//Parse received symbol pal_terminal_handle();

//Can easealy add here RX polling buffer //to avoid display flickering continue;

}

//To make horizontal shift rendered image i=14;

while(i--) NOP; //Check visible field if(video_enable_flg)

{

//OK, visible

//Main render routine

//Set pointer for render line (display bufffer)

_ptr = &str_array[raw_render * pal_symbols_per_row];

//Set pointer for render line (character generator) _ptr1 = &symbol[0][y_line_render];

//Cycle for render line

(32)

video_on; while(i--)

{

SPDR = pgm_read_byte(_ptr1 + (* _ptr++)*pal_symbol_height);

//That's a great pity can't shift data faster (8Mhz at FOSC=16Mhz)!! //Can do something else..

(33)

str_array[current_symbol] = ' '; }

else {

str_array[current_symbol] = 0x7F; }

//******Cursor handle******

//You can add here your own handlers.. }

}//for(;;)

}

static void vga_terminal_handle(void) {

// Parser received symbols from UART while(UCSRA & (1<<RXC))

{

unsigned char current_line, received_symbol; received_symbol = UDR;

//Check for overflow display buffer

(34)

//Clear display buffer

unsigned char i = vga_row_count;

char * ptr;

//Set pointers for clear string array ptr = &str_array[0];

while(i--) {

//Don't use here loop, to fastest clear display buffer

(35)

};

if((current_symbol + 5) < (vga_row_count*vga_symbols_per_row)) {

current_line = current_symbol / vga_symbols_per_row; if((current_line) < 19)

(36)

str_array[current_symbol] = 0x0;

current_symbol = current_line*vga_symbols_per_row + vga_symbols_per_row; }

break;

default: str_array[current_symbol++] = received_symbol; }

} }

void vga_render() {

unsigned char i; char * _ptr;

const char * _ptr1;

//Initialize display buffer with StartUp strings

strcpy_P(&str_array[vga_symbols_per_row*(vga_row_count-2)],&str2[0]); strcpy_P(&str_array[vga_symbols_per_row*(vga_row_count-1)],&str3[0]);

//Enable global interrupt asm ("sei"); for(;;) {

//Wait compare interrupt signal from Timer1 sleep_mode();

//Check symbol on UART if (UCSRA & (1<<RXC))

(37)

//Parse received symbol

vga_terminal_handle(); continue;

}

//Check visible field

if(video_enable_flg) {

//OK, visible

//Main render routine

//Set pointer for render line (display bufffer)

_ptr = &str_array[raw_render * vga_symbols_per_row];

//Set pointer for render line (character generator)

_ptr1 = &symbol[0][y_line_render >> 1];

//Cycle for render line

i = vga_symbols_per_row; while(i--)

{

SPDR = pgm_read_byte(_ptr1 + (* _ptr++)*vga_symbol_height/2);

video_on;

//That's a great pity can't shift data faster (8Mhz at FOSC=16Mhz)!! NOP;

NOP; }

//Delay for draw last symbol NOP;

(38)

NOP; //Can do something else..

//******Cursor handle******

str_array[current_symbol] = 0x7F; }

//******Cursor handle******

(39)

}//for(;;)

(40)

//Set power mode

set_sleep_mode(SLEEP_MODE_IDLE);

//Check pin mode VGA/PAL if(check_PAL_jumper) {

TCCR1B = (1<<WGM12)|(1<<CS10);//full speed; clear-on-match TCCR1A = 0x00; //turn off pwm and oc lines

(41)

//VSYNC //sbi(PORTD,2); PORTD=(1<<PD2); //sbi(DDRD,2);

DDRD=(1<<DDD2);

// Initialize Sync for VGA TCCR0 = 0x00; //stop

TCNT0 = 0xC3; //set count, One VGA line 31.77us TCCR0 = 1<<CS01; //start timer with prescaler select 1/8 TIMSK = 1<<TOV0; //enable interrupt from Timer0 overflow }

(42)

LAMPIRAN C

(43)
(44)
(45)

LAMPIRAN D

(46)
(47)

Rangkaian Alat Untuk Menampilkan Karakter Ke Layar TV

(48)
(49)

(50)
(51)
(52)

BAB I

PENDAHULUAN

Pada bab I laporan tugas akhir ini akan dijelaskan mengenai latar belakang, identifikasi masalah, tujuan, pembatasan masalah dan sistematika penulisan.

I.1 Latar Belakang

Adanya kemajuan teknologi dibidang Video/Visual membuat Kartu Grafik sangat dibutuhkan. Karena dengan instrumen ini gambar atau tulisan yang muncul pada layar dapat dinikmati sesuai dengan yang diinginkan. Merk dan harganya yang bervariasi dipasaran membuat kualitas instrumen ini berbeda-beda, semakin tinggi harganya semakin bagus kualitas gambar yang dihasilkan. Melihat masalah ini penyusun mencoba untuk membuat alat sederhana yang dapat menampilkan karakter ke layar TV.

Aplikasi alat ini bisa digunakan di tempat-tempat umum seperti di bandara udara, rumah sakit, apotik atau juga di stasiun. Selain karakter aplikasi alat ini bisa juga dikembangkan untuk menampilkan gambar baik diam ataupun bergerak. Tapi pada penulisan laporan Tugas Akhir ini, alat ini hanya diaplikasikan untuk menampilkan karakter saja yang berupa angka dan huruf ke layar TV. Alat ini akan dirancang dengan menggunakan sebuah Mikrokontroller AVR ATMega16.

(53)

I.2 Identifikasi Masalah

ƒ Bagaimana bentuk sinyal yang dapat diterima oleh Televisi ?

ƒ Bagaimana mengubah output dari Mikrokontroler menjadi Composite Video Signal agar dapat ditampilkan di layar TV ?

I.3 Tujuan

Tujuan pelaksanaan tugas akhir ini adalah merancang dan merealisasikan alat sederhana berbasis mikrokontroler AVR untuk menampilkan karakter ke layar Televisi.

I.4 Pembatasan Masalah

ƒ Mikrokontroler yang digunakan adalah AVR AT Mega16. ƒ Output pada TV berupa karakter (angka dan huruf).

ƒ Tampilan pada TV berupa karakter hitam putih tanpa background. ƒ Karakter yang ditampilkan adalah 20 baris 38 karakter.

ƒ Jenis sinyal yang ditampilkan adalah Video Monokrom PAL. ƒ Menggunakan TV sebagai output display.

(54)

I.5 Sistematika Penulisan

Laporan tugas akhir ini terdiri atas lima bab dengan penyusunan sebagai berikut :

BAB I PENDAHULUAN

Bab ini berisi penjelasan mengenai latar belakang, identifikasi masalah, tujuan, pembatasan masalah, dan sistematika pembahasan untuk memberikan gambaran secara umum mengenai tugas akhir yang dilakukan.

BAB II DASAR TEORI

Pada bab ini akan diuraikan tentang mikrokontroler AVR, arsitektur AT Mega16, sinyal video, teknik pengulasan (scanning), bentuk pulsa sinkronisasi, standar sistem televisi.

BAB III PERANCANGAN

Pada bab ini akan diuraikan mengenai perancangan perangkat keras, perangkat lunak, cara kerja alat, spesifikasi alat yang digunakan, diagram alir serta langkah kerja program yang digunakan untuk merealisasikan alat sederhana yang dapat menampilkan karakter ke layar televisi berbasis mikrokontroler.

BAB IV PENGUJIAN DAN ANALISA

Pada bab ini berisi tentang pengujian masing-masing rangkaian dari alat untuk menampilkan karakter ke layar televisi beserta analisa datanya.

Bab V KESIMPULAN DAN SARAN

(55)

BAB V

KESIMPULAN DAN SARAN

Bab ini berisi tentang kesimpulan dari data pengamatan dan saran.

V.1 Kesimpulan

1. Setelah melakukan percobaan dan analisa maka dapat disimpulkan bahwa bentuk sinyal yang dapat diterima oleh televisi adalah bentuk sinyal analog yang dihasilkan dari gabungan proses encode sinkronisasi, intensitas dan warna dalam satu kawat.

2. Beberapa komponen yang digunakan dalam pengerjaan Tugas Akhir ini sudah berfungsi dengan semestinya. Namun ada beberapa hal yang menyebabkan mikrokontroler belum dapat menampilkan karakter dengan baik yaitu sulitnya pengaturan sinkronisasi dan delay yang benar-benar tepat.

3. Untuk dapat mengubah output dari Mikrokontroler menjadi Composite Video Signal agar dapat diterima oleh TV maka diperlukan suatu interface

(56)

V.2 Saran

1. Agar tampilan keluaran yang dihasilkan oleh mikrokontroller benar-banar baik maka perlu ditambahkan beberapa komponen lagi, seperti IC LM1880 yang dapat mengatur dan mengontrol sistem proses sinkronisasi dan delay lebih akurat lagi sesuai dengan standar proses sinkronisasi pada televisi .

2. Alat ini dapat dikembangkan dengan menggunakan keypad sebagai input karakter yang akan ditampilkan ke layar televisi.

LAMPIRAN A

Referensi

Dokumen terkait

Data kuantitatif merupakan data yang digunakan untuk mengetahui ada tidaknya peningkatan kemampuan berpikir kreatif dan logis matematis siswa yang mendapat

Pada tugas akhir ini memiliki batasan masalah antara lain, menggunakan ember dengan ketinggian 32 cm, lebar atas 32 cm, dan lebar bawah 26 cm sebagai media penampung air

Tertanggung atau pegawai yang mengajukan klaim adalah peserta atau tertanggung yang menjadi anggota pembayar resmi asuransi kesehatan yang dikelola oleh pemegang

2, 2020 Berdasarkan hasil analisis data pada penelitian ini, maka dapat disimpulkan bahwa terdapat hubungan yang negatif signifikan antara harga diri terhadap kecenderungan

Laju fotosintesis, laju transpirasi, dan konduktivitas stomata berlangsung secara optimal pada kondisi tanah dengan adanya peningkatan bahan organik dalam tanah sebagai

Kesimpulan dari hasil penelitian ini didapatkan bahwa proses dekomposisi basa menggunakan NaOH cukup efektif untuk penghilangan pengotor minor seperti Al dan Si, dilihat dari persen

Kinerja jaringan umumnya ditentukan dari berapa rata-rata dan persentase terjadinya tundaan (delay) terhadap aplikasi, jenis pembawa (carriers), laju bit

Bahan yang digunakan dalam penelitian ini yaitu ekstrak etanol daun buni (Antidesma bunius L. Spreng), Escherichia coli dan Staphylococcus aureus sensitif dan