i Universitas Kristen Maranatha
APLIKASI WEB EMBEDDED MICROCONTROLLER UNTUK PENGINFORMASIAN KONDISI LALU LINTAS BERUPA TULISAN
MENGGUNAKAN WEB BROWSER MELALUI JARINGAN GPRS
Nama : Hardianto Puji Utama Nrp : 0622028
Jurusan Teknik Elektro, Fakultas Teknik, Universitas Kristen Maranatha Jl. Prof. Drg. Suria Sumantri, MPH. no. 65, Bandung, Indonesia
email : hardiantoutama@yahoo.com
ABSTRAK
Pengiriman informasi secara jarak jauh dapat dilakukan dengan menggunakan dua buah PC (Personal Computer) yang harus terhubung melalui jaringan Internet secara terus menerus. Hal ini kurang efisien dari segi biaya. Penggunaan web embedded microcontroller, web browser pada PC atau telepon seluler, dan jaringan GPRS (General Packet Radio Service) merupakan salah satu solusi agar dapat dilakukan pengiriman informasi secara cepat, efisien, serta dapat dilakukan setiap saat.
Pada tugas akhir ini dirancang suatu sistem untuk penginformasian kondisi lalu lintas berupa tulisan menggunakan web browser pada PC / telepon seluler melalui jaringan GPRS. Model sistem berupa display LCD 16x2 yang terhubung langsung dengan mikrokontroler ATmega16, sedangkan web embedded microcontroller digunakan sebagai web server. Informasi yang akan diumumkan, dimasukkan melalui textfield yang terdapat pada halaman web di web browser PC ataupun telepon seluler kemudian tekan tombol PUBLISH pada halaman web
tersebut.
Dari hasil uji coba, aplikasi untuk penginformasian kondisi lalu lintas berupa tulisan dengan menggunakan web embedded microcontroller dan jaringan GPRS sebagai media komunikasi data dapat direalisasikan dan berfungsi sesuai dengan rancangan.
Kata kunci : Web Embedded Microcontroller, Web Browser, GPRS (General
ii Universitas Kristen Maranatha
WEB EMBEDDED MICROCONTROLLER APPLICATION TO INFORM THE TRAFFIC CONDITIONS
IN THE FORM OF TEXT USING WEB BROWSER VIA GPRS NETWORK
Name : Hardianto Puji Utama
Nrp : 0622028
Department of Electrical Engineering, Maranatha Christian University Jl. Prof. Drg. Suria Sumantri, MPH. no. 65, Bandung, Indonesia
email : hardiantoutama@yahoo.com
ABSTRACT
Sending information can be done remotely by using two PCs (Personal Computers) which must be connected through the Internet network continuously. This is less efficient in term of cost. The usage of web embedded microcontroller, web browser on PC or mobile phone, and GPRS network (General Packet Radio Service) is one of solution for sending information quickly, efficiently, and can be done at any time.
In this final project, a system to inform the traffic conditions in the form of text using a web browser on a PC or mobile phone via GPRS network is designed. The system model is 16x2 LCD display which linked directly to the ATmega16 microcontroller and web embedded microcontroller is used as a web server. The information which will be announced is inserted through the textfield on web page in PC or mobile phone web browser and then press the PUBLISH button on this web page.
The application that inform the traffic conditions in the form of text using a web embedded microcontroller and GPRS networks as a medium of data communication has been realized and the results from testing show that it works as it should.
Key words : Web Embedded Microcontroller, Web Browser, GPRS (General
iii Universitas Kristen Maranatha
DAFTAR ISI
Halaman
ABSTRAK ... i
ABSTRACT ... ii
KATA PENGANTAR ... iii
DAFTAR ISI ... v
DAFTAR TABEL ... viii
DAFTAR GAMBAR ... ix
BAB I PENDAHULUAN 1.1. Latar Belakang ... 1
1.2. Perumusan Masalah ... 2
1.3. Tujuan ... 2
1.4. Batasan Masalah ... 2
1.5. Spesifikasi Sistem ... 3
1.6. Sistematika Penulisan ... 3
BAB II LANDASAN TEORI 2.1. Web Embedded Microcontroller TINI400 ... 4
2.1.1. Perangkat Keras TINI400 ... 5
2.1.1.1 Perangkat Keras TINIs400 ... 5
2.1.1.2 Perangkat Keras TINIm400 ... 6
2.1.2 Perangkat Lunak TINI400 ... 9
2.1.2.1 JAVA API (Application Programming Interface) ... 10
2.1.2.2 Java Virtual Machine ... 11
2.1.2.3 Native Methods ... 12
2.1.2.4 Sistem Operasi TINI400 ... 12
2.2. Mikrokontroler ATmega16 ... 13
2.2.1. Arsitektur Mikrokontroler ATmega16 ... 14
iv Universitas Kristen Maranatha
2.2.3. Komunikasi Serial USART Mikrokontroler ATmega16 ... 18
2.3. Web Browser ... 20
2.4. GPRS (General Packet Radio Service) ... 22
2.5. HTTP (HyperText Transfer Protocol) ... 24
BAB III PERANCANGAN DAN REALISASI 3.1. Perancangan Sistem ... 26
3.1.1. Diagram Blok Sistem ... 26
3.1.2. Diagram Sistem Kerja ... 28
3.2. Perancangan Perangkat Keras ... 29
3.2.1. LCD 16x2 ... 30
3.2.2. Rangkaian Antarmuka RS-232 to TTL ... 31
3.3. Perancangan Perangkat Lunak ... 34
3.3.1. Perangkat Lunak TINI400 ... 34
3.3.1.1 Thread Sistem ... 36
3.3.1.2 Thread Modem ... 38
3.3.2. Perangkat Lunak Mikrokontroler ATmega16 ... 39
3.3.2.1 Sub Rutin LCD baris 1 ... 41
3.3.2.2 Sub Rutin LCD baris 2 ... 42
BAB IV DATA PENGAMATAN DAN ANALISIS DATA 4.1. Data Pengamatan ... 44
4.1.1. Waktu dari pemanggilan alamat IP sampai halaman login terbuka ... 48
4.1.2. Waktu dari penekanan tombol Publish pada web browser PC sampai informasi tampil di halaman web yang baru ... 49
4.1.3. Waktu dari penekanan tombol Publish pada web browser PC sampai informasi tampil di LCD ... 50
v Universitas Kristen Maranatha 4.1.5. Waktu dari penekanan tombol Publish pada web browser
Telepon Seluler sampai informasi tampil di LCD ... 52 4.2. Analisis Data ... 53
BAB V KESIMPULAN DAN SARAN
5.1. Kesimpulan ... 55 5.2. Saran ... 55
DAFTAR PUSTAKA ... 56
vi Universitas Kristen Maranatha
DAFTAR TABEL
Halaman Tabel II.1 Fungsi Khusus Port B ... 17 Tabel II.2 Fungsi Khusus Port C ... 17 Tabel II.3 Fungsi Khusus Port D ... 18 Tabel IV.1 Pengujian Contoh Informasi yang dimasukkan pada halaman
web ... 45 Tabel IV.2 Hasil Percobaan tingkat kelengkapan informasi yang tampil pada
LCD ... 47
Tabel IV.3 Hasil Pengujian Waktu dari pemanggilan alamat IP sampai
halaman web login terbuka ... 48 Tabel IV.4 Hasil Pengujian waktu dari penekanan tombol Publish pada
web browser PC sampai informasi tampil di halaman web
yang baru ... 49 Tabel IV.5 Hasil Pengujian waktu dari penekanan tombol Publish pada
web browser PC sampai informasi tampil di LCD ... 50 Tabel IV.6 Hasil Pengujian waktu dari penekanan tombol Publish pada
web browser Telepon Seluler sampai informasi tampil di
halaman web yang baru ... 51 Tabel IV.7 Hasil Pengujian waktu dari penekanan tombol Publish pada
web browser Telepon Seluler sampai informasi tampil di
vii Universitas Kristen Maranatha
DAFTAR GAMBAR
Halaman
Gambar II.1 Perangkat Keras TINIs400 ... 5
Gambar II.2 Perangkat Keras TINIm400 ... 6
Gambar II.3 Diagram Blok Arsitektur Mikrokontroler DS80C400 ... 7
Gambar II.4 TINI Runtime Environtment ... 10
Gambar II.5 Diagram Blok Arsitektur Mikrokontroler ATmega16 ... 15
Gambar II.6 Konfigurasi Pin ATmega16 ... 16
Gambar II.7 Diagram Blok USART Mikrokontroler ATmega16 ... 19
Gambar II.8 Contoh tampilan sebuah web browser ... 21
Gambar II.9Jaringan GSM-GPRS... 24
Gambar III.1 Diagram Blok Sistem ... 26
Gambar III.2 Diagram Sistem Kerja ... 28
Gambar III.3 Diagram Blok Pengendali Model Sistem ... 29
Gambar III.4 Konfigurasi pin pada LCD 16x2 ... 31
Gambar III.5 Rangkaian Antarmuka RS-232 to TTL ... 32
Gambar III.6 Rangkaian Keseluruhan Model Sistem ... 33
Gambar III.7 Diagram Alir Proses Utama ... 35
Gambar III.8 Diagram Alir Thread Sistem ... 37
Gambar III.9 Diagram Alir Thread Modem ... 38
LAMPIRAN A
Foto 1
–
Modul Mikrokontroler ATmega16 & LCD 16x2
Foto 3 - Modem GPRS
LAMPIRAN B
Foto 1 - Tampilan Halaman Web pada Web Browser PC
LAMPIRAN C
Utama.java
import java.util.*; import java.io.*; import java.net.*; import java.lang.*;
import com.dalsemi.system.*; import com.dalsemi.shell.server.*; public class Utama
{
Sistem sistem; Modem modem;
int port = 80;
int info1; int info2;
boolean IsiPertama =false; boolean IsiKedua =false; static boolean login =false; Object lock;
static String user = ""; static String pass = ""; static String variabel1 = ""; static String variabel2 = ""; public Utama(){}
public static void writePage(BufferedWriter wr) {
try {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
String timestring = new String("Waktu Sekarang : " + hour + ":"); if(minute < 10) timestring += "0";
timestring += Integer.toString(minute); timestring += ":";
String jam = new String("pukul : " + hour + ":"); if(minute < 10) jam += "0";
jam += Integer.toString(minute); jam += ":";
if(second < 10) jam += "0"; jam += Integer.toString(second); wr.write("HTTP/1.0 200 OK\n"); wr.write("Content-type: text/html\n\n"); wr.write("<HTML>\n");
wr.write("<HEAD>\n");
wr.write("<TITLE>Tugas Akhir Hardianto (0622028)</TITLE>\n"); wr.write("</HEAD>\n");
wr.write("<BODY COLOR='green' BGCOLOR='white'>\n");
wr.write("<h2 ALIGN='CENTER'><font COLOR='red'>Server Penginformasian Kondisi Lalu Lintas </font></h4>\n");
wr.write("<form>"); if(!login)
{
wr.write("<h4 ALIGN='CENTER'> Name: <INPUT TYPE='text' NAME='Name'>\n");
wr.write("<h4 ALIGN='CENTER'> Password: <INPUT TYPE='password' NAME='Password'>\n");
wr.write("<h4 ALIGN='CENTER'><INPUT TYPE='submit' NAME='login' VALUE='OK'><br>\n");
} else {
wr.write("<font color='blue'>\n");
wr.write("<h4 ALIGN='CENTER'> Informasi 1 : <INPUT TYPE='TEXT' NAME='info1' MAXLENGTH='32'>\n");
wr.write("<h4 ALIGN='CENTER'> Informasi 2 : <INPUT TYPE='TEXT' NAME='info2' MAXLENGTH='32'>\n");
wr.write("<h4 ALIGN='CENTER'><INPUT TYPE='submit' NAME='tombol1' VALUE='PUBLISH'><br>\n");
wr.write("<h4 ALIGN='CENTER'>info pertama : " + variabel1 + " <br>\n"); wr.write("<h4 ALIGN='CENTER'>info kedua : " + variabel2 + " <br>\n"); wr.write("</font>\n");
}
wr.write("<form><br>\n\n"); wr.write("</font></h4>\n");
wr.write("<h4 ALIGN='CENTER'>"+timestring+"</h4>\n"); wr.write("</CENTER></BODY></HTML>\n");
wr.flush();
}
public void Running() {
try {
modem.setSerialPort(new Integer("4")); modem.setUsername("wap");
modem.setPassword("wap123"); modem.setPhoneNumber("*99***1#"); Thread sistemClass = new Thread(sistem); sistemClass.setName("Sistem");
Thread modemClass = new Thread(modem); modemClass.setName("Modem");
sistemClass.start(); modemClass.start(); Thread.sleep(2000);
ServerSocket srv = new ServerSocket(port); while(true)
{ try {
Socket mySocket = srv.accept(); BufferedWriter serverResponse =
newBufferedWriter(newOutputStreamWriter(mySocket.getOutputStream())); BufferedReader clientRequest =
newBufferedReader(newInputStreamReader(mySocket.getInputStream())); String str, temp, result = "";
str=clientRequest.readLine(); System.out.println(str); sistem.setConnectionWeb(4);
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE);
String jam = new String("_pk." + hour + ":"); if(minute < 10) jam += "0";
jam += Integer.toString(minute); if (str.startsWith("GET /?info1")) {
temp = str; int i=0;
temp = temp.substring(12);
char[] tempChar = temp.toCharArray(); while(tempChar[i] != '&'){
result += tempChar[i]; i++;
}
if(variabel1 != "") {
variabel1 = result + jam; }
while(tempChar[i] != '&') {
result += tempChar[i]; i++;
}
variabel2 = result; if(variabel2 != "") {
variabel2 = result + jam; }
System.out.println("variabel1 : "+ variabel1); System.out.println("variabel2 : "+ variabel2); sistem.setDataInfo(variabel1, variabel2); writePage(serverResponse);
}
else if(str.startsWith("GET /?Name")) {
temp = str; int i=0;
temp = temp.substring(11);
char[] tempChar = temp.toCharArray(); while(tempChar[i] != '&')
{
result += tempChar[i]; i++;
while(tempChar[i] != '&') {
i++; }
pass = result;
System.out.println("user : "+ user); System.out.println("pass : "+ pass);
if(user.equals("root")&&pass.equals("tini")){
catch(Exception e) {
System.out.println("Connection Socket Error !!"); System.out.println(e.toString());
} } }
catch(Exception e) {
System.out.println("Error to Initial Thread !!"); System.out.println(e.toString());
} }
public static void main(String[] args) {
catch(Throwable t){} }
Sistem.java
import java.io.*; import javax.comm.*; import java.util.*;
public class Sistem implements Runnable {
String info1 = ""; String info2 = "";
int WebConnect = 0;
boolean plant = false;
boolean WebConnection = false;
InputStream in;
OutputStream output;
SerialPort sp;
static Enumeration portList; static CommPortIdentifier portIdTemp; public Sistem()
{ try {
portList = CommPortIdentifier.getPortIdentifiers(); while (portList.hasMoreElements())
{
portIdTemp = (CommPortIdentifier) portList.nextElement(); System.out.println(portIdTemp.getName());
}
CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("serial0"); sp = (SerialPort)portId.open("PLANT", 2000);
sp.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
sp.setFlowControlMode(sp.FLOWCONTROL_NONE); System.out.println();
System.out.println();
System.out.println("Open Serial with System...."); }
catch(Exception e){System.out.println(e.toString());} }
public void initwritetoport() {
try {
output = sp.getOutputStream(); }
System.out.println(e.toString());} return;
}
public void setData() {
try {
String str; if(info1 != "") {
str = "1" + info1 ; if(str.length() < 32) {
i += info1.length()+1; }
}
byte[] data = str.getBytes(); output.write(data); if(str.length() < 32) {
i += info2.length()+1; }
}
byte[] kata = str.getBytes(); output.write(kata);
output.flush(); }
}
catch(IOException e){
} }
public void setConnectionWeb(int Web) {
WebConnection=true; WebConnect=Web; }
public void setDataInfo(String info1, String info2) {
this.info1=info1; this.info2=info2; }
public void run() {
System.out.println("System Model Connected"); }
else {
Thread.sleep(20); if (WebConnection) {
if (x==75) {Thread.sleep(20);x=0; }
}
catch(Throwable t){}//System.out.println(t.toString()) }
Modem.java
import java.io.*; import java.util.*; import javax.comm.*;
import com.dalsemi.system.*; import com.dalsemi.tininet.ppp.*;
public class Modem extends Thread implements PPPEventListener, CommPortOwnershipListener
{
private CommPortIdentifier portId;
static SerialPort serialPort = null; private InputStream modemInputStream; private OutputStream modemOutputStream; private int portNumber;
PPP ppp = null;
private boolean connected = false; private boolean running = true;
private byte[] localAddress = new byte[] {0, 0, 0, 0}; private byte[] remoteAddress = new byte[] {0, 0, 0, 0}; private String interfaceName = "pppClient";
public String username; public String password; public String phoneNumber;
private boolean haveControlLines = false; private boolean carrierLost = false; private boolean interfaceActive = false; private ModemCommand[] dialSequence = {
new ModemCommand("AT\r", "OK", 5), new ModemCommand("ATZ\r", "OK", 5), new ModemCommand("ATM1L0\r", "OK", 5), };
public void run() {
boolean callServer = false; boolean closeConnection = false; String optionParam;
System.out.println("Starting PPP...."); ppp = new PPP();
if (openSerialPort(portNumber) == false) {
return;
catch(Exception e) {
System.out.println("Exception adding event listener"); }
ppp.setLocalAddress(localAddress); ppp.setRemoteAddress(remoteAddress); ppp.setRemoteAccm(0x00000000); ppp.setLocalAccm(0x00000000); ppp.setAuthenticate(false, true); try
{
ppp.setUsername(username); ppp.setPassword(password); }
catch(Exception e) {
System.out.println("Exception setting username/password"); }
System.out.println("Dialing ISP...."); for (int i = 0; i < dialSequence.length; ++i) {
if (!atCommand(dialSequence[i])) {
System.out.println("Modem did not respond to command " + dialSequence[i].command);
System.out.println();
System.out.println("Please Shutdown Modem GPRS and Restart TINI400 Module !!");
if (!atCommand(new ModemCommand("ATDT" + phoneNumber + "\r", "CONNECT", 45)))
{
closeSerialPort();
System.out.println();
System.out.println("Please Shutdown Modem GPRS and Restart TINI400 Module !!"); System.out.println();
System.out.println(); return;
}
System.out.println("Connected to ISP"); connected = true;
ppp.up(serialPort); while (running) {
try { Thread.sleep(1000); } catch (Exception e){} if (connected && haveControlLines && !carrierLost) {
if (!serialPort.isCD()) {
ppp.close(); carrierLost = true; }
}
if (!connected) {
System.out.println("closePPP"); closePPP();
closeSerialPort(); running = false; }
} }
public void pppEvent(PPPEvent ev) {
switch (ev.getEventType()) {
case PPPEvent.UP:
System.out.println("PPP IS UP"); System.out.println();
System.out.println();
System.out.println("System Model Ready to Control and Monitor"); System.out.println();
System.out.println();
ppp.addInterface(interfaceName); ppp.setDefaultInterface(true); interfaceActive = true;
case PPPEvent.CLOSED:
System.out.println("PPP IS DOWN"); if (interfaceActive)
{
interfaceActive = false;
ppp.removeInterface(interfaceName); }
connected = false; break;
default: break; } }
private void closePPP() {
ppp.freePort(); ppp.finish();
try{Thread.sleep(2000);} catch (Exception _){}
ppp.removeEventListener(this); }
private void closeSerialPort() {
resetModem(); serialPort.close();
portId.removePortOwnershipListener(this); }
private boolean openSerialPort(int portNum) {
try {
if ( portNum > 0 && portNum < 4 )
TINIOS.setSerial(TINIOS.SERIAL_SET_ENABLE, portNum, true); }
catch (UnsupportedCommOperationException _) {
System.out.println("Exception enabling serial port " + portNum); return false;
} try {
portId = CommPortIdentifier.getPortIdentifier("serial" + portNum); serialPort = (SerialPort)portId.open(interfaceName, 5000);
SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
portId.addPortOwnershipListener(this); if (haveControlLines)
{
TINIOS.setSerial(TINIOS.SERIAL_SET_RTSCTS_FLOW_CONTROL, 4, false);
TINIOS.setSerial(TINIOS.SERIAL_SET_RTSCTS_FLOW_CONTROL, 1, false);
TINIOS.setSerial(TINIOS.SERIAL_SET_RTSCTS_FLOW_CONTROL, 0, false);
TINIOS.setSerial(TINIOS.SERIAL_SET_RTSCTS_FLOW_CONTROL, portNum, true);
serialPort.setFlowControlMode(serialPort.FLOWCONTROL_RTSCTS_IN | serialPort.FLOWCONTROL_RTSCTS_OUT);
modemInputStream = serialPort.getInputStream(); modemOutputStream = serialPort.getOutputStream(); long available = modemInputStream.available(); if (available > 0)
modemInputStream.skip(available); modemOutputStream.flush(); resetModem();
}
catch (Exception e) {
System.out.println(e.toString()); return false;
}
return true; }
private boolean waitFor(String expect, String response, int timeout) {
boolean done = false;
boolean returnValue = false; int numBytes;
byte[] readBuffer = new byte[40]; int bytesAvailable;
while (done == false) {
try {
Thread.sleep(500);
if ((bytesAvailable = modemInputStream.available()) > 0) {
numBytes = modemInputStream.read(readBuffer, 0, bytesAvailable); buffer = buffer.concat(new String(readBuffer, 0, numBytes));
if (buffer.indexOf(expect) != -1) {
catch(Exception e) {
System.out.println(e.toString() + " during write"); }
returnValue = true; done = true;
returnValue = true; done = true;
} } } }
catch (Exception e) {
System.out.println(e.toString()); }
}
return returnValue; }
boolean returnValue = false; String response = new String(); int timeout = mc.timeout * 2;
catch(Exception e) {
System.out.println("atCommand write " + e.toString()); return false;
}
boolean done = false; while (done == false) {
Thread.sleep(500);
int bytesAvailable = modemInputStream.available(); if (bytesAvailable > 0)
{
byte[] readBuffer = new byte[bytesAvailable];
int numBytes = modemInputStream.read(readBuffer, 0, bytesAvailable); response = response.concat(new String(readBuffer, 0, numBytes)); if (response.indexOf(mc.response) != -1)
{
returnValue = true; done = true;
} } else {
// If not waiting forever if (timeout > 0)
{
// Decrement seconds counter if (--timeout == 0)
{
returnValue = false; done = true;
{
System.out.println("atCommand all " + e.toString()); }
return returnValue; }
private void resetModem() {
if (haveControlLines) {
serialPort.setDTR(false); serialPort.setRTS(false); try { Thread.sleep(2000); }
catch(Exception _){} serialPort.setDTR(true); serialPort.setRTS(true); try
{ Thread.sleep(2000); }
catch(Exception _){} }
else {
try { Thread.sleep(2000); } catch(Exception _){}
atCommand(new ModemCommand("+++", "", 2)); try { Thread.sleep(2000); }
catch(Exception _){}
atCommand(new ModemCommand("ATH\r", "OK", 2)); }
}
public void ownershipChange(int ev) {
switch (ev) {
case CommPortOwnershipListener.PORT_OWNED: break;
case CommPortOwnershipListener.PORT_OWNERSHIP_REQUESTED: ppp.close();
closePPP(); try
{
portId.removePortOwnershipListener(this); }
catch(Exception _){} break;
case CommPortOwnershipListener.PORT_UNOWNED: break;
default: break; } }
public void setUsername(String username) {
this.username = username; }
public void setPassword(String password) {
this.password = password; }
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber; }
public void setSerialPort(Integer portNumber) {
this.portNumber = portNumber.intValue(); }
}
class ModemCommand {
String command; String response; int timeout;
private ModemCommand(){};
public ModemCommand(String command, String response, int timeout) {
this.command = command; this.response = response; this.timeout = timeout; }
}
LAMPIRAN D
#include <mega16.h>
// Alphanumeric LCD Module functions #asm
.equ __lcd_port=0x15 ;PORTC #endasm
#include <lcd.h> #include <delay.h> #include <stdio.h> #include <stdlib.h> unsigned int j;
signed char rf1[32],rf2[32],isi[2]; int z,y;
#define RXB8 1 #define TXB8 0 #define UPE 2 #define OVR 3 #define FE 4 #define UDRE 5 #define RXC 7
#define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC)
// USART Receiver buffer #define RX_BUFFER_SIZE 8 char rx_buffer[RX_BUFFER_SIZE]; #if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter; #else
unsigned int rx_wr_index,rx_rd_index,rx_counter; #endif
// This flag is set on USART Receiver buffer overflow bit rx_buffer_overflow;
interrupt [USART_RXC] void usart_rx_isr(void) {
char status,data; status=UCSRA; data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0; if (++rx_counter == RX_BUFFER_SIZE)
{
#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer #define _ALTERNATE_GETCHAR_
#pragma used+ char getchar(void) {
char data;
while (rx_counter==0); data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0; #asm("cli")
--rx_counter; #asm("sei") return data; }
#pragma used- #endif
// Standard Input/Output functions #include <stdio.h>
// Declare your global variables here void main(void)
{
char text[32];
// 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=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1 PORTB=0xFF;
DDRB=0xFF;
// 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;
// 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;
// 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;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On
// USART Transmitter: On // USART Mode: Asynchronous // USART Baud rate: 9600 UCSRA=0x00;
UBRRL=0x47;
// 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);
// Global enable interrupts #asm("sei")
if (isi[0]=='1')goto lcd1; if (isi[0]=='2')goto lcd2; else
{
lcd_putsf("Tunggu Info"); delay_ms(100);
goto scan; lcd2:
for(j=0;j<32;j++) {
scanf("%c",&rf2[j]); }
for (y=0;y<17;y++) {
lcd_gotoxy(0,1);
sprintf(text,"%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",rf2[y],rf2[y+1], rf2[y+2],rf2[y+3],rf2[y+4],rf2[y+5],rf2[y+6],rf2[y+7],rf2[y+8],rf2[y+9], rf2[y+10],rf2[y+11],rf2[y+12],rf2[y+13],rf2[y+14],rf2[y+15]);
lcd_puts(text); delay_ms(500); lcd_clear(); }
goto scan; };
1 Universitas Kristen Maranatha
BAB I
PENDAHULUAN
1.1. Latar Belakang
Dewasa ini jumlah kendaraan di suatu perkotaan semakin meningkat. Hal ini dapat ditandai dengan semakin tingginya tingkat kepadatan lalu lintas. Namun mobilitas masyarakat yang tinggi serta kebutuhan untuk berpindah dari tempat yang satu ke tempat yang lain dalam waktu yang cepat menyebabkan diperlukannya informasi yang akurat mengenai keadaan lalu lintas. Untuk itu kondisi lalu lintas perlu diinformasikan setiap saat kepada para penggunanya, termasuk salah satunya mengenai keadaan ruas jalan tol serta kondisi terkini mengenai gerbang tol.
Salah satu cara yang dapat digunakan adalah dengan memberikan informasi kondisi lalu lintas berupa display tulisan berjalan. Informasi yang akan ditampilkan akan selalu berubah-ubah sesuai dengan kondisi lalu lintas yang sedang terjadi. Oleh karena itu, display ini harus terhubung dengan jaringan komunikasi agar dapat dilakukan pengiriman informasi secara cepat, efisien dan dapat dilakukan setiap saat.
Dengan adanya jaringan Internet, pengiriman informasi dapat dilakukan dengan menggunakan dua buah PC (Personal Computer), satu PC berperan sebagai Web Server yang terhubung langsung dengan display, dan PC lainnya sebagai Web Client untuk memberikan informasi. Namun pada kenyataanya, hal ini kurang efisien karena PC sebagai Web Server harus dalam keadaan nyala terus menerus untuk dapat menerima informasi.
Bab I Pendahuluan 2
Universitas Kristen Maranatha penginformasian kondisi lalu lintas menggunakan web browser. Pada sistem penginformasian ini, akan digunakan jaringan GPRS (General Packet Radio Service) sebagai media komunikasi data antara Web Server dan Web Client.
1.2. Perumusan Masalah
Permasalahan yang akan dibahas dalam tugas akhir ini meliputi:
1. Bagaimana merancang dan merealisasikan suatu sistem yang dapat digunakan untuk menginformasikan kondisi lalu lintas berupa tulisan dengan menggunakan web embedded microcontroller TINI400 dan GPRS sebagai media komunikasi data ?
2. Bagaimana membuat model suatu sistem penginformasian kondisi lalu lintas ?
1.3. Tujuan
Tujuan yang hendak dicapai dalam pengerjaan tugas akhir ini adalah: 1. Merancang dan merealisasikan suatu sistem yang dapat digunakan untuk
menginformasikan kondisi lalu lintas berupa tulisan dengan menggunakan
web embedded microcontroller TINI400 dan GPRS sebagai media komunikasi data.
2. Membuat model suatu sistem penginformasian kondisi lalu lintas.
1.4. Batasan Masalah
Pembatasan masalah pada tugas akhir ini meliputi: 1. Jaringan GPRS diasumsikan dalam keadaan baik. 2. Alamat IP model sistem diasumsikan tidak berubah.
3. Pemrograman web embedded microcontroller TINI400 menggunakan bahasa pemrograman JAVA.
4. Pemrograman mikrokontroler ATmega16 dilakukan dengan perangkat lunak Code Vision.
Bab I Pendahuluan 3
Universitas Kristen Maranatha
1.5. Spesifikasi Sistem
Spesifikasi sistem yang dikerjakan pada tugas akhir ini adalah: 1. Display yang digunakan berupa LCD 16x2.
2. Jumlah maksimal karakter informasi yang dapat dimasukkan dibatasi sampai 32 karakter.
3. Beberapa karakter seperti : !, @, #, $, %, ^, &, *, ”, <, >, ?, dan spasi tidak dapat dimasukkan sebagai bagian dari sebuah informasi.
1.6. Sistematika Penulisan
Agar dalam penulisan laporan Tugas Akhir dapat lebih terarah dan terstruktur, maka laporan ini dibagi dalam lima bab, yaitu :
BAB I PENDAHULUAN
Membahas latar belakang, perumusan masalah, tujuan, batasan masalah, spesifikasi sistem, dan sistematika penulisan.
BAB II LANDASAN TEORI
Membahas teori penunjang mengenai web embedded microcontroller
TINI400, mikrokontroler ATmega16, web browser, jaringan GPRS, dan HTTP.
BAB III PERANCANGAN DAN REALISASI
Membahas perancangan dan realisasi sistem, perangkat keras sistem, dan perangkat lunak sistem.
BAB IV DATA PENGAMATAN DAN ANALISIS DATA
Membahas pengamatan sistem dan menganalisa data.
BAB V KESIMPULAN DAN SARAN
55 Universitas Kristen Maranatha
BAB V
KESIMPULAN DAN SARAN
5.1. Kesimpulan
1. Sistem untuk penginformasian kondisi lalu lintas berupa tulisan dengan menggunakan web embedded microcontroller TINI400 dan GPRS sebagai media komunikasi data telah berhasil dibuat dan berfungsi sesuai dengan rancangan.
2. Dari pengujian yang telah dilakukan, semua informasi yang akan diumumkan berhasil ditampilkan pada display LCD tanpa ada data / karakter yang hilang.
5.2. Saran
1. Menggunakan modem dengan kemampuan 3G / 3.5G supaya waktu yang diperlukan untuk mengirimkan informasi menjadi lebih cepat serta dapat mengirimkan data yang lebih besar seperti gambar atau video.
2. Menggunakan display running text / moving sign yang berukuran besar agar sistem dapat benar-benar diaplikasikan.
56 Universitas Kristen Maranatha
DAFTAR PUSTAKA
Daftar pustaka sebagai referensi dalam pengerjaan tugas akhir ini adalah : 1. –, ATmega16, Atmel, USA, 2004.
2. –, DS80c400 Network Microcontroller, Maxim, Sunnyvale, 2007. 3. –, DSTINIm400 Networked Microcontroller Evaluation Board, Maxim,
Sunnyvale, 2006.
4. –, DSTINIs400 Sockets Evaluation Board, Maxim, Sunnyvale, 2006. 5. –, Power Point Standar GSM-GPRS, Insitut Teknologi Telkom, Bandung,
2008.
6. Andersson, Christoffer, GPRS and 3G Wireless Applications, John Wiley & Sons Inc, 2001.
7. Deitel, H.M, Internet & World Wide Web How to Program, Prentice-Hall International, 2000.
8. Fiati, Rina, Akses Internet via Ponsel, Andi Yogyakarta, 2005.
9. Halonen, Timo, GSM, GPRS and Edge Performance, John Wiley & Sons Ltd, 2003.
10.Loomis, Don, The TINI™ Specification and Developer’s Guide, Dallas Semiconductor Corporation, 2001.
11.http://id.wikipedia.org/wiki/GPRS, 7Januari 2010. 12.http://id.wikipedia.org/wiki/HTTP, 7Januari 2010.