Vous êtes sur la page 1sur 20

Sistem Tertanam Antar Muka TCP/IP dengan ATMEGA 8535

DISUSUN OLEH: AKBAR KURNIA PUTRA (21060111120016) YUSUF HIDAYANA (21060111120025)

JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK UNIVERSITAS DIPONEGORO SEMARANG 2012

KATA PENGANTAR

Dengan mengucapkan puji syukur atas kehadirat Allah SWT, karena dengan rahmat dan karunia-Nya kami masih diberi kesempatan untuk menyelesaikan makalah ini. Tidak lupa kami mengucapkan terima kasih kepada dosen pembimbing dan teman-teman yang telah memberikan dukungan dalam menyelesaikan makalah ini. Kami menyadari bahwa dalam penulisan makalah ini masih banyak kekurangan, oleh sebab itu, kami sangat mengharapkan kritik dan saran yang membangun. Semoga dengan selesainya makalah ini dapat bermanfaat bagi pembaca dan teman-teman.

BAB I PENDAHULUAN

1.1 Latar Belakang Kemajuan ilmu pengetahuan dan teknologi dari masa ke masa berkembang pesat terutama di bidang otomtisasi. Perkembangan ini tampak jelas terutama di industri manufaktur, di mana sebelumnya banyak pekerjaan menggunakan tangan manusia, kemudian beralih menggunakan mesin, berikutnya dengan electro-mechanic (semi otomatis) dan sekarang sudah menggunakan robotic (full automatic). Model apapun yang digunakan dalam sistem otomatisasi industri sangat tergantung kepada keandalan sistem kendali yang dipakai. Hasil penelitian menunjukan secanggih apapun sistem kendali yang dipakai akan sangat tergantung kepada sensor dan transduser yang digunakan dan juga sistem transmisi kontrolnya. Penggunaan TCP/IP merupakan salah satu antarmuka dalam sistem kontrol. Pada dasarnya sistem ini digunakan demi kemudahan pengguna karena nantinya dapat digunakan secara wireless dengan menggunakan koneksi Internet.

1.2 Tujuan Tujuan dari penulisan makalah ini adalah untuk lebih memahami mengenai konsep setting pada 8535 untuk antar muka TCP/IP, jenis-jenis hardware yang digunakan, kerja dan kegunaannya. Selain itu makalah ini juga dibuat untuk memenuhi tugas dari Dosen Pengampu Mata Kuliah Sistem Tertanam.

BAB II PEMBAHASAN

2.1 Hardware yang Digunakan 2.1.1 TCP/IP TCP/IP adalah singkatan dari Transmission Control Protocol/Internet Protocol. TCP/IP adalah gabungan dari protokol TCP (Transmission Control Protocol) dan IP (Internet Protocol) sebagai sekelompok protokol yang mengatur komunikasi data dalam proses tukar-menukar data antar komputer di dalam jaringan internet dan akan memastikan pengiriman data sampai ke alamat yang dituju. Protokol ini tidak dapat berdiri sendiri, karena protokol ini berupa kumpulan protokol (protocol suite). Protokol ini juga merupakan protokol yang paling banyak digunakan saat ini, karena protokol ini mampu bekerja dan diimplementasikan pada perangkat lunak (software) di berbagai sistem operasi. Istilah yang diberikan kepada perangkat lunak ini adalah TCP/IP stack. Protokol TCP/IP dikembangkan pada akhir dekade 1970-an hingga awal 1980-an sebagai sebuah protokol standar untuk menghubungkan komputerkomputer dan jaringan untuk membentuk sebuah jaringan yang luas (WAN). TCP/IP merupakan sebuah standar jaringan terbuka yang bersifat independen terhadap mekanisme transport jaringan fisik yang digunakan, sehingga dapat digunakan di mana saja. Protokol ini menggunakan skema pengalamatan yang sederhana yang disebut sebagai alamat IP (IP Address) yang mengizinkan hingga beberapa ratus juta komputer untuk dapat saling berhubungan satu sama lainnya di Internet. Protokol ini juga bersifat routable yang berarti protokol ini cocok untuk menghubungkan sistem-sistem berbeda (seperti Microsoft Windows dan keluarga UNIX) untuk membentuk jaringan yang heterogen.

2.1.2 ATmega8535 ATmega8535 adalah sebuah mikrokontroler CMOS 8 bit dengan dayarendah berdasarkan arsitektur RISC yang telah diperkaya AVR. Dengan

menjalankan instruksi dalam satu siklus clock, ATmega8535 dapat melakukan 1 MIPS per MHz memungkinkan perancang sistem untuk mengoptimasikan konsumsi daya dan kecepatan pemrosesan. Atmega 8535 menyediakan fitursebagai berikut : Programmable Flash 8K bytes dengan kemampuan Read-While Write, EEPROM 512 bytes, SRAM 512 bytes, 32 line I/O untuk keperluan umum, 32 register untuk keperluan umum, 3 buah Timer/Counter yang fleksibel dengan mode compare, interup internal dan eksternal, sebuah USART seri yang dapat diprogram, sebuah interface seri duakabel yang berorientasi byte, sebuah 8-channel, ADC 10-bit dengan pilihan kondisi input differensial dengan gain yang dapat diprogram dalam paket TQFP, sebuah Watchdog Timer dengan internal oscilator, sebuah serial port SPI, dan 6 mode hemat daya yang bisa dipilih dengan perangkat lunak. Mode idle menghentikan CPU sementara SRAM, Timer/Counters, port SPI dan sistem interupsi tetap berfungsi. Mode power-down menyimpan isi register tetapi menghentikan ascilator, mematikan semua fungsi chip hingga interupsi selanjutnya atau reset hardware. Dalam mode power-save, timer asynchronous tetap berjalan, memungkinkan pengguna untuk menjaga sebuah timer dasar saat semua devais sedang tidur. Mode Noise Reduction ADC menghentikan CPU dan seluruh modul I/O selain timer asynchrone dan ADC, untuk mengurangi noise switching saat konversi oleh ADC. Dalam mode Standby, oscilator kristal/resonator berjalan, selam devais lain sedang tidur. Hal ini memungkinkan start-up yang sangat cepat dengan konsumsi daya yang rendah.Dalm mode Standby yang di ekstensi, oscilator dan timer asynchrone tetap berjalan.

2.1.3 SIM700 SIM700 adalah sebuah modul yang dapat digunakan sebagai penerima dalam komunikasi TCP. Module SIM700 sudah mempunyai TCP/IP stack, yang mendukung aplikasi TCP dan UDP baik sebagai server maupun client. Module SIM700 sudah mempunyai TCP/IP stack, yang mendukung aplikasi TCP dan UDP baik sebagai server maupun client. Dalam contoh aplikasi ini, SIM700 akan difungsikan sebagai client. Berikut adalah langkah-langkah untuk aplikasi TCP client dan AT commandnya: 1. Set APN, user name dan password (tergantung SIM Card yang digunakan): AT+CSTT=APN,USER NAME,PASSWORD

2. Mulai koneksi GPRS AT+CIICR

3. Jika sudah terkoneksi, baca IP address yang diberikan oleh provider, jawaban SIM700 adalah IP address AT+CIFSR AT+CIPSTART=TCP,SERVER IP,PORT

4. Koneksi ke TCP server

5. Jika koneksi dengan server OK, SIM700 akan membalas dengan CONNECT OK

AT Command adalah sebuah perintah Command Promt yang bisa digunakan untuk mengatur perintah dan program lain untuk dijalankan di waktu tertentu. Berbeda dengan modem wavecom, yang menggunakan mode tranparent setelah koneksi ke server, SIM700 bisa juga difungsikan di mode transparent dan non-transparent.

2.2 Aplikasi Mikrokontroler dan GPRS Pembahasan ini menggunakan SIM700 (menggunakan evaluation board SIM700) dengan mikro tetap ATMEGA8535. Contoh program menggunakan AVR GCC dan bisa diaplikasikan kepada module GPRS buatan SIMCOM lainnya, misalnya SIM300 atau SIM900.

Gambar 1. Modul SIM700

Seperti yang sudah dijelaskan sebelumnya, modul SIM700 sudah mempunyai TCP/IP stack, yang mendukung aplikasi TCP dan UDP baik sebagai server maupun client. Dalam contoh aplikasi ini, SIM700 akan difungsikan sebagai client. Sedangkan programnya menggunakan TCP Client.

Contoh Aplikasi Berikut adalah contoh aplikasi GPRS dengan menggunakan ATMEGA8535 dan SIM700.

Gambar 2. Simulasi pada Proteus

Dalam contoh aplikasi ini, 8 buah LED yang terhubung ke PORTA dan 8 DIP Switching yang terhubung ke PORTC akan dikendalikan melalui GPRS dengan protocol TCP/IP. Menggunakan command 1 karakter: A untuk menyalakan LED B untuk memadamkan LED C untuk membaca DIP SW

Setiap kali menerima command, modul akan menjawab sesuai command yang diterima, misal jika menerima A, maka LED ON akan dikirim ke server. Secara sederhana program berjalan sebagai berikut. UART0 digunakan untuk berkomunikasi dengan SIM700 pada 9600 bps. Proses penerimaan serial dilakukan melalui interupsi penerimaan data serial, agar tidak ada data yang hilang. Oleh karena itu disediakan modem_buffer untuk menampung data 100 byte. Seperti diketahui, AT command akan selalu diakhiri dengan karakter 0x0A, oleh karena itu program akan selalu mengetahui bahwa telah menerima satu frame data dari modem.

ATMEGA8535 akan selalu menunggu reply dari modem setiap kali mengirimkan AT command, tapi tetap ada time outnya, agar saat SIM700 tidak menjawab, MCU tidak hang. Setelah mendeteksi SIM700 dengan mengirimkan AT0, MCU akan mengaktifkan koneksi GPRS, setelah mendapat IP, MCU akan melakukan koneksi ke TCP server. Hal ini dilakukan terus menerus sampai tersambung ke server. Setelah tersambung, MCU akan menunggu perintah yang dikirimkan oleh server. Jika server di-shutdown, dengan diterimanya CLOSED, MCU akan memulai koneksi dari awal. SIM700, memerlukan sinyal kendali POWER ON. Namun karena contoh ini menggunakan EVB SIM700, maka hal ini tidak diimplementasikan dalam program. SIM700 dianggap sudah ON.

TCP Server Dalam membuat contoh aplikasi GPRS ini, digunakan sebuah program IP tool. Program ini cukup bagus untuk simulasi aplikasi TCP/IP.

Gambar 3. Program TCP Server

Komputer terhubung ke internet melalui modem 3G. Nah, IP address yang didapat kemudian dimasukan ke program AVR GCC. Karena IP address ini

dinamis, maka tiap kali koneksi ke internet, program AVR GCC harus dikompail ulang dengan mengganti IP yang baru. Jika komputer server terhubung ke internet melalui sebuah ruter dan mempunyai IP statis, maka harus dilakukan sesuatu dulu di dalam ruter, yang dinamakan dengan Port Forwading. Sesuai dengan namanya, fungsi port forwarding adalah untuk meneruskan suatu Port di komputer lokal agar dapat diakses dari internet. Misal suatu komputer yang sudah terinstall website didalamnya akan diforward agar bisa diakses melalui internet melalui IP Public yang diberikan oleh ISP, maka kita perlu memforward port 80 (HTTP). bila kemudian kita ingin forward port SSH (22) maka kita hanya perlu menambahkan port tersebut di modem. port forwarding ini hanya berfungsi bila modem melakukan dial up internet secara langsung. Namun dengan port forwading, ada sedikit masalah dengan keamanan jaringan, sebaiknya dikonsultasikan dengan pihak Admin jaringan.

Berikut ini adalah contoh coding yang digunakan pada gambar simulasi sebelumnya,
* File Name : SimpleAVRGPRS.c ******************************************* #include "uart.h" #include "avr/io.h" #include "avr/interrupt.h" #include <stdio.h> #include "avr/pgmspace.h" #include "util/delay.h" #include "gprs.h"

#define LED1OFF PORTB |=(1<<0) #define LED1ON PORTB &=~(1<<0) #define LED2OFF PORTB |=(2<<0) #define LED2ON PORTB &=~(2<<0)

unsigned char tcp_status;

void proceed_command(); void echo_data();

int main () { unsigned char x; InitUART(); sei(); DDRA = 0xFF; //PORTA as output PORTA = 0xFF;//LED OFF DDRB = 0xFF; PORTB = 0xFF; //PORTB as output DDRC = 0; //PORTC as input

while(!modem_init()); while(1) { while(!connect_gprs("telkomsel","wap","wap123")) //sesuaikan apn, user name dan password LED1OFF; LED1ON; if(!connecttoserver("182.0.129.80","80")) { LED2OFF; tcp_status =0; } else { LED2ON; tcp_status =1; } _delay_ms(1000); clearbuffer(); PORTA=0xFF; while(tcp_status) { x=0; _delay_ms(1000); clearbuffer(); while(!x) { x=modem_rx_complete; LED2ON; _delay_ms(300); LED2OFF; //sesuaikan IP server dan port // sesuai dengan simcard yang dipakai

_delay_ms(300); proceed_command(); void proceed_command() { unsigned char sw;

} } }}

if ((modem_buffer[0]=='C')&& (modem_buffer[1]=='L')&&(modem_buffer[2]=='O')&&(modem_buffer[3]=='S')) //Check if server is closed { tcp_status=0; return } if (modem_buffer[0]=='A') { PORTA = 0; gprssenddata("LED ON"); return;} if (modem_buffer[0]=='B') { PORTA = 0xFF; gprssenddata("LED OFF"); return; } if (modem_buffer[0]=='C') { PORTA = 0xFF; sw=PINC; printf("AT+CIPSEND\n"); _delay_ms(1000); clearbuffer(); printf ("DIP SW VALUE %02X",sw); sw=26; printf("%c",sw); if(!waitmodemreply("SEND OK",3000)) return; } } void echo_data() { gprssenddata("COMMAND OK");}

* gprs.c ******************************************************* #include "uart.h" #include "avr/pgmspace.h" #include "util/delay.h" #include "gprs.h"

#include "avr/io.h" #include <stdio.h> /* * modem init, just send ATE0 to cancel echo, if get OK return 1 */ unsigned char modem_init() { printf("ATE0\n"); if (!waitmodemreply("OK",2000)) { return 0; }

else return 1;}

unsigned char connect_gprs(char* apnname, char* username, char* password) { printf("AT+CIPSHUT\n"); _delay_ms(2000); clearbuffer(); printf("AT+CSTT=\""); for (;*apnname;++apnname) printf("\",\""); for (;*username;++username) printf("\",\""); for (;*password;++password) printf("\"\n"); if(!waitmodemreply("OK",5000)) return 0; printf("AT+CIICR\n"); if(!waitmodemreply("OK",15000)) return 0; printf("AT+CIFSR\n"); _delay_ms(3000); clearbuffer(); return 1;} printf ("%c",*password); printf ("%c",*username); printf ("%c",*apnname);

unsigned char connecttoserver(char* ipaddr, char* port) { printf("AT+CIPSTART=\"TCP\",\""); for (;*ipaddr;++ipaddr) printf ("%c",*ipaddr); printf("\",\"");

for (;*port;++port) printf("\"\n");

printf ("%c",*port);

//if(!waitmodemreply("OK",2000)) // return 0; _delay_ms(1700); clearbuffer(); if(!waitmodemreply("CONNECT OK",10000)) return 0; return 1;}

unsigned char gprssenddata(char *data) { unsigned char x; x=26; printf("AT+CIPSEND\n"); _delay_ms(1000); clearbuffer(); for (;*data;++data) printf("%c",x); if(!waitmodemreply("SEND OK",3000)) return 0; return 1;} printf ("%c",*data);

int waitmodemreply(char* thestring, unsigned long timeout) { int l=0; int flag=0; char test; test=0; while ((!test)&& (timeout>0)&&(modem_buffer_size==0)) { timeout--; test=modem_rx_complete; _delay_ms(1); } if(timeout==0) { return 0; }

modem_rx_complete=0; for (l=0;l<sizeof(thestring);l++){ if (modem_buffer[l]== thestring[l]){

flag=1; break; else { flag=0; break; return flag;} } } }

* gprs.h * File Description: ********************************************** #ifndef GPRS_H_ #define GPRS_H_

unsigned char modem_init(); int waitmodemreply(char* thestring, unsigned long timeout); unsigned char connect_gprs(char* apnname, char* username, char* password); unsigned char connecttoserver(char* ipaddr, char* port); unsigned char gprssenddata(char *data); #endif /* GPRS_H_ */

* File Name : uart.c * File Description: *************************************** #include "uart.h" #include "avr/io.h" #include "avr/interrupt.h" #include <stdio.h> #include "avr/pgmspace.h" #include "util/delay.h" #include <stdio.h>

static int uart_putchar(char c, FILE *stream);

static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);

unsigned char direct;

void InitUART() { UBRR0L = (unsigned char)BAUD_PRESCALE; UBRR0H = (unsigned char)(BAUD_PRESCALE>>8); /* Set frame format 8data, 1stop bit */ UCSR0C = (1<<URSEL0)|(1<<UCSZ01)|(1<<UCSZ00);

UCSR0B = (1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0); DDRD = 0b0000010; stdout = &mystdout;} //////////////////////////////////////////////////////////////// static int uart_putchar(char c, FILE *stream) { clearbuffer(); if (c == '\n') uart_putchar('\r', stream); loop_until_bit_is_set(UCSR0A, UDRE); UDR0 = c; return 0; }

///////////////////////////////////////////////////////////////////// // USART Receiver interrupt service routine ISR(USART0_RXC_vect) //interrupt [USART_RXC] void usart_rx_isr(void) {char status,data; status=UCSR0A; data=UDR0; if(data==10){ modem_buffer_index=0; modem_rx_complete=1; } else{ if (data!=13){ modem_buffer[modem_buffer_index]=data;

modem_buffer_index++; modem_buffer_size++; }}} /////////////////////////////////////////////////////////////// void clearbuffer() { //com_out =0; modem_buffer_index=0; modem_buffer_size=0; modem_rx_complete=0; }

* File Name : uart.h * File Description: ************************************ #ifndef UART_H_ #define UART_H_

/* UART Buffer Defines */ #define F_CPU 11059200UL

#define USART_BAUDRATE 9600 #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)

#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)

#define RXB8 1 #define TXB8 0 #define UPE 2 #define OVR 3 #define FE 4 #define UDRE 5 #define RXC 7

// USART Receiver buffer #define RX_BUFFER_SIZE 100 volatile char modem_buffer[RX_BUFFER_SIZE]; volatile int modem_buffer_index, modem_buffer_size; volatile unsigned char modem_rx_complete;

unsigned char modem_buffer_overflow; unsigned char proba; void InitUART(); void clearbuffer();

#endif /* UART_H_ */

BAB III PENUTUP

3.1 Kesimpulan 1. Modul SIM700 sudah mempunyai TCP/IP stack, yang mendukung aplikasi TCP dan UDP baik sebagai server maupun client. 2. Pada perancangan pemanfaatan TCP/IP ini memerlukan modul SIM700 sebagai client server. 3. Digunakan AT Command dalam pengaturan APN dan lainnya untuk koneksi. 4. Jika komputer server terhubung ke internet melalui sebuah ruter dan memiliki IP statis, maka harus dilakukan sesuatu dulu di dalam ruter, yang dinamakan dengan Port Forwading.

DAFTAR PUSTAKA
http://u2technologies.wordpress.com/2010/11/04/aplikasi-mikro-dan-gprs/ http://u2technologies.wordpress.com/2011/03/09/aplikasi-mikrokontroler-dan-gprs-iiavr-gprs/

Vous aimerez peut-être aussi