30
64 V dengan 2 resistor seperti tampak pada Gambar III.30 (a) di atas. Pin-pin masukan CC1100 yang dimaksud adalah SI, CS, dan SCK. Sehingga konfigurasi antar muka pin-pin pada mikrokontroler dan transceiver dapat dilihat pada Gambar III.30 (b) di atas. Semua interkoneksi dari ATMega128 ke CC1100 diberi tanda kotak dengan artian interkoneksi tersebut membutuhkan rangkaian pada Gambar III.30 (a). Pin GDO2 CC1100 terhubung ke mikrokontroler pada 2 pin, pin masukan (PINB.5) dan pin interupsi (INT0). Maksud interkoneksi ini akan dijelaskan lebih lanjut pada bagian perancangan perangkat lunak. Skematik PCB antarmuka dapat dilihat pada Gambar III.31 di bawah ini. Gambar III.31. Desain rangkaian sub-sistem transceiver RF. III.7.2 Implementasi Gambar III.32. Tata letak komponen sub-sistem transceiver RF.

Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

Embed Size (px)

Citation preview

Page 1: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

64

V dengan 2 resistor seperti tampak pada Gambar III.30 (a) di atas. Pin-pin

masukan CC1100 yang dimaksud adalah SI, CS, dan SCK. Sehingga konfigurasi

antar muka pin-pin pada mikrokontroler dan transceiver dapat dilihat pada

Gambar III.30 (b) di atas. Semua interkoneksi dari ATMega128 ke CC1100 diberi

tanda kotak dengan artian interkoneksi tersebut membutuhkan rangkaian pada

Gambar III.30 (a). Pin GDO2 CC1100 terhubung ke mikrokontroler pada 2 pin,

pin masukan (PINB.5) dan pin interupsi (INT0). Maksud interkoneksi ini akan

dijelaskan lebih lanjut pada bagian perancangan perangkat lunak. Skematik PCB

antarmuka dapat dilihat pada Gambar III.31 di bawah ini.

Gambar III.31. Desain rangkaian sub-sistem transceiver RF.

III.7.2 Implementasi

Gambar III.32. Tata letak komponen sub-sistem transceiver RF.

Page 2: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

65

Implementasi rangkaian antarmuka transceiver RF dilakukan secara manual

dengan menggunakan PCB Matriks dengan pertimbangan kesederhanaan

rangkaian dan waktu implementasi. Sedangkan untuk PCB modul transceiver

CC1100, tata letak dan daftar komponennya dapat dilihat pada Gambar III.32 dan

Tabel III.7 di bawah ini. Implementasi sub-sistem transceiver berupa rangkaian

antarmuka dan interkoneksi dengan modul CC1100 dapat dilihat pada Gambar

III.33 di bawah ini. Setelah semua sub-sistem terimplementasi, langkah

selanjutnya adalah proses interkoneksi antar sub-sistem dan integrasi sistem.

Tabel III.7. Daftar komponen sub-sistem transceiver RF.

Komponen Nilai @ 433 MHz Keterangan C51 100 nF Decoupling capacitor C81, C101 27 pF Crystal loading capacitor C121, C131 3.9 pF RF balun / matching capacitor C122 8.2 pF RF LC filter capacitor C123 5.6 pF RF LC filter capacitor C124, C125 220 pF RF DC blocking capacitor L121, L131 27 nH RF balun / matching inductor L122 22 nH RF LC filter inductor L123 27 nH RF LC filter inductor R171 56 kΩ Internal bias resistor for current reference XTAL 26 MHz Crystal oscillator

Gambar III.33. Implementasi sub-sistem transceiver RF.

Page 3: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

66

III.8 Integrasi dan Interkoneksi Perangkat Keras

Langkah terakhir dalam perancangan dan implementasi perangkat keras adalah

interkoneksi antar sub-sistem dan integrasi sistem. Catu tegangan dari sub-sistem

catu daya yang disalurkan melalui sub-sistem pengolah data, menjadi masukan

pada sub-sistem sensor dan pengondisi sinyal, transceiver RF, dan penyimpan

data. Untuk jalur data, data sensor-sensor terkondisi pada sub-sistem sensor dan

pengondisi sinyal, data 4-wire transceiver CC1100, dan data memori eksternal,

terhubung dengan sub-sistem pengolah data. Bentuk fisik interkoneksi antar sub-

sistem, dengan menggunakan kabel pita, dapat dilihat pada Gambar III.34.

(a) Sub-sistem sensor (b) Sub-sistem catu daya

(c) Sub-sistem transceiver RF (d) Sub-sistem penyimpan data

Gambar III.34. Interkoneksi antar sub-sistem dengan sub-sistem pengolah data.

Integrasi sub-sistem menjadi sistem perangkat keras (node sensor) secara

keseluruhan dapat dilihat pada Gambar III.35 di bawah ini. Setelah implementasi

satu node, maka dilakukan ekspansi dengan mengimplementasi 3 node tambahan

untuk membangun jaringan satu klaster. Dalam jaringan satu klaster ini, satu node

akan bertindak sebagai kepala klaster dan ketiga node lainnya sebagai anggota

klaster. Secara fungsional, pada kepala klaster terdapat sub-sistem penyimpan

Page 4: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

67

data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi

ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun fungsi sub-

sistem penyimpan data ini belum tentu dibutuhkan. Sedangkan untuk sub-sistem

lain, kepala klaster dan node sensor memiliki konfigurasi yang sama.

Gambar III.35. Integrasi sub-sistem.

Hasil implementasi empat node tersebut dapat dilihat pada Gambar III.36 di

bawah ini. Pada pengujian sub-sistem di Bab IV, keempat node ini disebut dengan

Board-1 hingga Board-4.

Gambar III.36. Implementasi empat node.

Page 5: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

68

III.9 Perangkat Lunak

Perangkat lunak sistem yang dibuat adalah program untuk mikrokontroler.

Pembuatan program dilakukan pada software CodeVision AVR, seperti tampak

pada Gambar III.37 (a). Bahasa program yang digunakan adalah bahasa C. Untuk

memindahkan program yang telah dibuat ke memori flash mikrokontroler, maka

setelah program tersebut di-compile, seperti tampak pada Gambar III.37 (b), bebas

kesalahan bahasa pemrograman, maka program ditransfer menuju mikrokontroler

melalui koneksi pemrograman ISP dengan alat STK200. Jika terdapat kesalahan

pemrograman, maka software CVAVR akan memberitahu letak kesalahannya.

(a) CodeWizard AVR (b) Hasil compile program

Gambar III.37. Tampilan Code Vision AVR.

Pada dasarnya perangkat lunak mikrokontroler yang dikembangkan dengan Code

Vision AVR memiliki bagian-bagian utama sebagai berikut:

- Header dan definisi

- Deklarasi variabel dan fungsi

- Modul-modul fungsi

- Inisialisasi modul perangkat keras

- Program utama

Page 6: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

69

#include <mega128.h> #include <math.h> #include <mem.h> #include <delay.h> // Standard Input/Output functions #include <stdio.h> #include <stdlib.h> // Pin I/O For CC1100 Config #define CS PORTB.0 #define SCK PORTB.1 #define DOUT PORTB.2 #define DIN PINB.3 #define GDO0 PINB.4 #define GDO2 PINB.5 // Pin Output For LED #define LED0 PORTD.5 #define LED1 PORTD.6 #define LED2 PORTD.7 // Variable Declaration bit flag_int0,flag_int1,flag_timer0,flag_timer1,flag_timer2,flag_timer3,flag_cs; char m,n,chipstat,datread,datstat,datrburst,packet,crc; char temp[8],display[16],data_sync[8],data_ack[6],sampah[16]; ---dan seterusnya---

Program C di atas adalah contoh header, definisi, dan deklarasi variabel pada

perangkat lunak. Header memuat file-file panduan (library) yang terkait dengan

program yang dibuat. Bagian definisi memuat interkoneksi pin-pin mikrokontroler

dengan variabel-variabel pada program. Bagian modul fungsi dan program utama

akan dijelaskan dengan rinci di bagian selanjutnya. Sedangkan untuk perangkat

keras, modul-modul fungsional mikrokontroler yang harus diinisialisasi, terkait

dengan pengaturan sebagai berikut.

- Pin keluaran pada PORTB.0,1,2 dan PORTD.5,6,7

- Interupsi eksternal pada INT0 dan INT1 (rising edge)

- Timer-0, clock 250 kHz, interupsi overflow, nilai awal = 0x05 (1ms)

- Timer-1, clock 8 MHz, fungsi ICP (rising edge)

- Timer-2, clock 8 MHz, interupsi overflow, nilai awal = 0xF7 (1us)

- Timer-3, clock 125 kHz, interupsi overflow, nilai awal = 0x9E57 (200ms)

- Transmitter USART dengan baud-rate 9600bps

- ADC dengan clock 62.500 kHz dan referensi AREF sebesar 4.6 V

Sesuai dengan segmentasi sistem di awal bab ini, maka perancangan perangkat

lunak dibagi secara bertahap menjadi beberapa proses, yaitu algoritma

pengukuran dan format data sensor, konfigurasi register CC1100, komunikasi 1

dan 2-arah, dan perancangan protokol MAC. Berikut adalah penjelasannya.

Page 7: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

70

III.9.1 Algoritma Pengukuran dan Format Data Sensor

Data analog sensor yang sudah terkondisi harus diubah menjadi data digital oleh

ADC. Kanal ADC yang terpakai adalah 2 buah untuk data tekanan dan

temperatur. Implementasi program C dapat dilihat di bawah ini.

#define ADC_VREF_TYPE 0x00 // Read the AD conversion result unsigned int read_adc(unsigned char adc_input) ADMUX=adc_input|ADC_VREF_TYPE; // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCW; void baca_adc(void) //read all adc input in one time directly dtk=0; ratadc1=0; ratadc2=0; read_adc(0x0E); while(dtk<32) adc1=read_adc(0); //pressure adc2=read_adc(1); //temperature ratadc1=ratadc1+adc1; ratadc2=ratadc2+adc2; dtk++; ratadc1=ratadc1/32; ratadc2=ratadc2/32;

Untuk mengurangi fluktuasi nilai akibat kesalahan konversi ADC, maka

digunakan teknik perata-rataan pada data integer hasil konversi. Data yang telah

dirata-rata, diubah menjadi data rentang analog dengan tipe float. Offset sebesar 5

mV akibat teknik perata-rataan dikompensasikan terhadap data digital. Langkah

terakhir adalah mengubah kembali data digital tegangan menjadi data sensor

dengan hubungan masukan-keluaran yang telah diketahui. Untuk data tekanan,

data tegangan diubah menjadi satuan mbar, sedangkan untuk data temperatur, data

tegangan dibagi penguatan op-amp dan diubah menjadi satuan celcius.

Implementasi program C untuk data tekanan dan temperatur dapat dilihat di

bawah ini.

Page 8: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

71

void baca_press(void) vadc1=ratadc1*4.60/1024L; vadc1=vadc1+0.0051; //kompensasi ofset averaging volt1=vadc1-0.5; //kompensasi ofset sensor tekanan=volt1*258.5; //tekanan udara dalam mbar void baca_temp(void) vadc2=ratadc2*4.60/1024L; vadc2=vadc2+0.0051; //kompensasi ofset averaging volt2=vadc2*0.1282; //dibagi 7.8 kali gain op-amp suhu=volt2*100; //suhu udara dalam celcius

Sedangkan untuk data sensor kelembaban terkondisi berupa gelombang pulsa,

digunakan fungsi ICP mikrokontroler untuk menghitung frekuensi pulsa tersebut.

Ketika rising edge dari pulsa level positif, program interupsi Timer-1

memasukkan isi register ICR1 pada variabel, begitu pula yang terjadi pada rising

edge pulsa positif berikutnya di variabel yang berbeda, misalkan isi_reg1 dan

isi_reg2. Periode pulsa adalah selisih isi_reg2 dan isi_reg1. Berdasarkan

persamaan pada Gambar III.6, maka nilai kelembaban ( %RH) dapat dihitung.

void baca_hum(void) unsigned int a,temp_L,temp_H,isi_reg1,isi_reg2,selisih; float perioda,waktu,frequency; flag_timer1=0; a=0; waktu=0; while (flag_timer1!=1); //abaikan 1st conversion flag_timer1=0; while (a<32) while (flag_timer1!=1); //nunggu sampai satu temp_L = ICR1L; temp_H = ICR1H; isi_reg1=((temp_H<<8)|temp_L); flag_timer1=0; wile (flag_timer1!=1); temp_L = ICR1L; temp_H = ICR1H; isi_reg2=((temp_H<<8)|temp_L); flag_timer1=0; selisih=isi_reg2-isi_reg1; waktu+=selisih; a++; waktu= waktu/32; perioda= waktu*0.000000125; frequency=1/perioda; //freq=f(RH), y = -13,351x + 7389 lembab=7389-frequency; lembab=lembab*0.0749; //humidity dalam %RH

Page 9: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

72

Setelah data digital 3 sensor telah siap, maka hal yang dipikirkan selanjutnya

adalah format data sensor tersebut. Format ini terkait urutan data dan tipe data

yang digunakan. Mengacu pada singkatan PTU untuk Pressure, Temperature, dan

Humidity, maka urutan data yang dirancang adalah data tekanan, data temperatur,

dan data kelembaban. Sedangkan untuk tipe data, ada beberapa pilihan, yaitu:

• Tipe data heksadesimal

Dengan tipe data heksadesimal, maka panjang data yang dirancang adalah

10-bit (tekanan) + 10-bit (temperatur) + 16-bit (kelembaban) = 36-bit = 6 byte.

Panjang data yang dihasilkan minimal, namun pada sisi penerima data,

diperlukan proses untuk mengubah data heksa ini menjadi data displai sensor.

Kesulitan juga terjadi pada masing-masing node untuk melakukan kompensasi

offset sensor, karena karakteristik masing-masing sensor berbeda-beda.

• Tipe data ASCII

Dengan tipe data ASCII, 1 karakter direpresentasikan sebesar 1 byte. Sehingga

untuk rentang data tekanan 0 – 1034 mbar, rentang data temperatur 0.0 –

100.0 oC, dan rentang data kelembaban 0 – 100 %RH, panjang data adalah 12

byte. Panjang data yang dihasilkan maksimal, namun tidak diperlukan proses

tambahan pada sisi penerima data sehingga data dapat langsung ditampilkan.

Kelemahan tipe ini adalah kebergantungan panjang data pada rentang data

sensor yang digunakan.

• Tipe data IEEE-754 (floating point 32-bit)

Dengan tipe data floating point ini, tiap bilangan data direpresentasikan sama

panjang yaitu 4 byte. Sehingga untuk 3 data sensor, panjang data total adalah

12 byte. Selain panjang data yang dihasilkan maksimal, masih diperlukan juga

proses tambahan pada sisi penerima data. Kelebihan tipe ini adalah, panjang

data yang sama untuk data bilangan apapun. Hal ini menyebabkan

mikrokontroler dapat mengolah data sensor apapun tanpa pengaturan ulang.

Berdasarkan kelebihan dan kekurangan tiap pilihan, maka tipe data yang dipilih

adalah tipe data IEEE-754 (floating point 32-bit) karena fleksibilitasnya

menangani berbagai data sensor dengan representasi yang sama, yaitu 4 byte.

Panjang data yang sama ini akan memberi keuntungan pada implementasinya.

Page 10: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

73

Dengan menggunakan IEEE-754 Calculator [20], dapat disimulasikan proses

konversi data sensor ke tipe floating point sebagai berikut.

o Data tekanan : 910,208 44 63 8D 52

o Data temperatur : 26,959 41 D7 AD BB

o Data kelembaban : 73,127 42 92 41 3C

Implementasi program C dapat dilihat di bawah ini. Fungsi single adalah adalah

untuk mengubah data tekanan, temperatur, dan kelembaban menjadi tipe floating

point dan memasukkan data-data tersebut pada variabel deret bertipe char.

Sedangkan fungsi elgnis berlaku sebaliknya, untuk mengubah data floating point

pada variabel-variabel deret menjadi data sensor yang siap ditampilkan.

void single(void) unsigned int addr1,addr2,addr3; unsigned char i; int k; addr1=&tekanan; addr1+=3; for(k=0;k<4;k++) i=peekb(addr1); display[k+2]=i; addr1--; ; addr2=&suhu; addr2+=3; for(k=0;k<4;k++) i=peekb(addr2); display[k+6]=i; addr2--; ; addr3=&lembab; addr3+=3; for(k=0;k<4;k++) i=peekb(addr3); display[k+10]=i; addr3--; ;

void elgnis (int z) unsigned int addr4,addr5,addr6; int k; addr4=&nanaket; addr4+=3; for(k=0;k<4;k++) pokeb(addr4,display[k+z]); addr4--; ; addr5=&uhus; addr5+=3; z=z+4; for(k=0;k<4;k++) pokeb(addr5,display[k+z]); addr5--; ; addr6=&babmel; addr6+=3; z=z+4; for(k=0;k<4;k++) pokeb(addr6,display[k+z]); addr6--; ; //Setting printf features: //float,width,precision printf("%-8.0f ",nanaket); printf("%-8.1f ",uhus); printf("%-8.0f ",babmel);

III.9.2 Konfigurasi Register Transceiver RF

Karena menggunakan transceiver yang berupa evaluation kit, maka untuk

menggunakannya, diperlukan akses untuk mengisi register internal transceiver

dan memberi perintah sesuai protokol MAC yang dikembangkan. Diagram

pewaktuan untuk mengakses register CC1100 dapat dilihat pada Gambar III.38.

Page 11: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

74

Gambar III.38. Diagram pewaktuan akses register CC1100.

Untuk dapat menulis ke dan membaca dari register CC1100, diperlukan 2 pin

kontrol (CSn dan SCLK) dan 2 pin data (SI dan SO). Pada sisi mikrokontroler, pin

CSn, SCLK, dan SI adalah keluaran, dan pin SO adalah masukan. Terdapat 2

bagian akses, yaitu penulisan alamat register ke CC1100, dan penulisan /

pembacaan isi register oleh mikrokontroler. Pin CSn adalah penanda aktivitas

baca / tulis register dapat dilakukan. Setiap bit data yang ditulis oleh pin SI atau

dibaca oleh pin SO, dilakukan saat clock pada pin SCLK naik positif. Berdasarkan

diagram pewaktuan di atas, maka urutan aksi yang dilakukan untuk mengakses

register CC1100 dapat dirinci sebagai berikut.

1. Inisialisasi

– CSn (1) CSn (0), pertanda aksi dapat dilakukan

– Waktu tunda 200 µs

2. Penulisan alamat register

– SI = A7 = 0 (R/W bit)

– Waktu tunda 5 µs

– SCLK (0) SCLK (1), clock naik

– Waktu tunda 5 µs

– SCLK (1) SCLK (0), clock turun

3. Perulangan no.2 untuk bit alamat A6 sampai A0

4. Waktu tunda 10 µs (antara alamat dan data)

5. Perulangan no.2 dan no.3 untuk bit data D7 sampai D0

6. CSn (0) CSn (1)

Page 12: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

75

void write_single_CC1100(char addwrite, char datwrite) char temp1,temp2; char s,t; addwrite=addwrite | 0x00; //Write Bit = 0, Burst Bit = 0 chipstat=0x00; CS=0; delay_us(200); while (DIN!=0); for (s=0;s<8;s++) temp1=addwrite & 0x80; if(temp1==0x80) DOUT=1; else DOUT=0; delay_us(5); SCK=1; addwrite=addwrite << 1; if(temp1==0x80) addwrite=addwrite | 0x01; else addwrite=addwrite & 0xFE; chipstat=chipstat <<1; if(DIN==1) chipstat=chipstat | 0x01; else chipstat=chipstat | 0x00; delay_us(5); SCK=0; delay_us(5); //Delay between Address and Data chipstat=0x00; for (t=0;t<8;t++) temp2=datwrite & 0x80; if(temp2==0x80) DOUT=1; else DOUT=0; delay_us(5); SCK=1; datwrite=datwrite << 1; if(temp2==0x80) datwrite=datwrite | 0x01; else datwrite=datwrite & 0xFE; chipstat=chipstat <<1; if(DIN==1) chipstat=chipstat | 0x01; else chipstat=chipstat | 0x00; delay_us(5); SCK=0; delay_us(5); CS=1;

Implementasi program C dapat dilihat di atas. Proses tersebut merupakan

konfigurasi aksi untuk menulis data ke suatu register secara single. Secara umum,

terdapat beberapa macam konfigurasi akses register CC1100 yaitu:

– Read / Write Single byte Register

– Read / Write Burst Register

– Write Command Strobe

– Read Status Register

Page 13: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

76

Perbedaan antar akses register di atas adalah pada nilai bit alamat A7 sebagai bit

tulis (A7=0) atau bit baca (A7=1), dan bit alamat A6 sebagai bit aksi secara single

(A6 =0) atau bit aksi secara konsekutif atau burst (A6=1). Hasil implementasi

setiap macam akses register tersebut dapat dilihat di Lampiran C, dan

performansinya akan diuji pada Bab IV.

Setelah semua register dapat diakses dengan berbagai macam cara, maka langkah

selanjutnya adalah menentukan nilai/isi dari setiap register CC1100. Penentuan

ini berkaitan dengan karakteristik transceiver yang diinginkan. Terdapat 33 buah

register yang harus ditentukan nilainya, baik melalui perancangan maupun

menggunakan nilai awalnya. Parameter-parameter penting transceiver yang

menentukan nilai dari register adalah sebagai berikut.

• Panjang paket variabel dengan panjang maksimum 16 byte

• Perhitungan CRC pada akhir paket

• Skema Modulasi = FSK

• Deviasi frekuensi = 20 kHz

• Frekuensi sinyal pembawa = 433 MHz

• Lebar kanal tapis penerima = 100 kHz

• Data-rate = 38,4 kbps

• Jarak antar kanal = 200 kHz

• Nomer kanal = 0

• Daya keluaran = -10 dBm

Tidak semua register harus diubah nilainya, namun ada beberapa register yang

cukup mengandalkan nilai awalnya. Dalam proses penentuan nilai register dari

parameter-parameter di atas, digunakan bantuan software SmartRF Studio v.6.9.

Nilai lengkap semua register CC1100 dapat dilihat pada Tabel III.8 di bawah ini.

Selain nilai register, dirancang pula format paket data yang digunakan untuk

proses pertukaran data, seperti dapat dilihat pada Gambar III.39 di bawah ini.

Pengaturan Preambule, Sync word, dan CRC dilakukan di level register. Data

field berisi data 3 sensor (tekanan, temperatur, kelembaban) ditambah 2 byte

informasi berisi level RSSI, kualitas LQI, dan status CRC.

Page 14: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

77

Gambar III.39. Format paket data.

Tabel III.8. Nilai register-register CC1100. No. Register Alamat Nilai No. Register Alamat Nilai 1. IOCFG2 0x00 0x07 7. CHANNR 0x0A 0x00 IOCFG0 0x02 0x0A 8. DEVIATN 0x15 0x34 2. SYNC1 0x04 0xD3 9. MCSM2 0x16 0x07 SYNC0 0x05 0x91 MCSM1 0x17 0x0E 3. PKTLEN 0x06 0x10 MCSM0 0x18 0x18 PKTCTRL1 0x07 0x0C 10. FOCCFG 0x19 0x15 PKTCTRL0 0x08 0x05 BSCCFG 0x1A 0x6C4. FSCTRL1 0x0B 0x08 11. AGCCTRL2 0x1B 0x03 FSCTRL0 0x0C 0x00 AGCCTRL1 0x1C 0x40 5. FREQ2 0x0D 0x10 AGCCTRL0 0x1D 0x91 FREQ1 0x0E 0xA7 12. FREND1 0x21 0x56 FREQ0 0x0F 0x62 FREND0 0x22 0x10 6. MDMCFG4 0x10 0xCA 13. FSCAL3 0x23 0xE9 MDMCFG3 0x11 0x83 FSCAL2 0x24 0x2A MDMCFG2 0x12 0x83 FSCAL1 0x25 0x00 MDMCFG1 0x13 0x22 FSCAL0 0x26 0x1F MDMCFG0 0x14 0xF8 14. PATABLE Index-0 0x26

void init_CC1100(void) CS=1; SCK=0; LED0=1; LED1=1; LED2=1; printf("CC1100 Configuration - Adam / 23205342\r\n"); delay_ms(1000); //Wait for Chip to be ready void endconfig_CC1100(void) delay_ms(1000); //end of config LED0=0; printf("End of Configuration\r\n");

Page 15: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

78

Modul tambahan untuk inisialisasi dan penutup proses, diimplementasi pada

program C di atas. Hasil implementasi program C untuk proses konfigurasi

register CC1100 secara keseluruhan dapat dilihat di bawah ini. Setelah inisialisasi,

IC CC1100 di-reset terlebih dahulu untuk menghapus nilai register sebelumnya.

Penulisan nilai register dilakukan dengan cara single, sedangkan penulisan

pengaturan daya keluaran dilakukan dengan cara burst.

init_CC1100(); write_strobe_CC1100(0x30); //Reset Chip delay_ms(1); write_single_CC1100(0x00, 0x07); //Setting IOCFG2 (CRC Detect) write_single_CC1100(0x02, 0x0A); //Setting IOCFG0 (PLL Locked) write_single_CC1100(0x04, 0xD3); //Setting SYNC1 write_single_CC1100(0x05, 0x91); //Setting SYNC0 write_single_CC1100(0x06, 0x10); //Setting PKTLEN (16 Bytes) write_single_CC1100(0x07, 0x0C); //Setting PKTCTRL1 write_single_CC1100(0x08, 0x05); //Setting PKTCTRL0 (Variable Length) write_single_CC1100(0x0A, 0x00); //Setting CHANNR write_single_CC1100(0x0B, 0x08); //Setting FSCTRL1 write_single_CC1100(0x0C, 0x00); //Setting FSCTRL0 write_single_CC1100(0x0D, 0x10); //Setting FREQ2 write_single_CC1100(0x0E, 0xA7); //Setting FREQ1 write_single_CC1100(0x0F, 0x62); //Setting FREQ0 write_single_CC1100(0x10, 0xCA); //Setting MDMCFG4 write_single_CC1100(0x11, 0x83); //Setting MDMCFG3 write_single_CC1100(0x12, 0x83); //Setting MDMCFG2 write_single_CC1100(0x13, 0x22); //Setting MDMCFG1 write_single_CC1100(0x14, 0xF8); //Setting MDMCFG0 write_single_CC1100(0x15, 0x34); //Setting DEVIATN write_single_CC1100(0x16, 0x07); //Setting MCSM2 write_single_CC1100(0x17, 0x0E); //Setting MCSM1 write_single_CC1100(0x18, 0x18); //Setting MCSM0 write_single_CC1100(0x19, 0x15); //Setting FOCCFG write_single_CC1100(0x1A, 0x6C); //Setting BSCCFG write_single_CC1100(0x1B, 0x03); //Setting AGCCTRL2 write_single_CC1100(0x1C, 0x40); //Setting AGCCTRL1 write_single_CC1100(0x1D, 0x91); //Setting AGCCTRL0 write_single_CC1100(0x21, 0x56); //Setting FREND1 write_single_CC1100(0x22, 0x10); //Setting FREND0 write_single_CC1100(0x23, 0xE9); //Setting FSCAL3 write_single_CC1100(0x24, 0x2A); //Setting FSCAL2 write_single_CC1100(0x25, 0x00); //Setting FSCAL1 write_single_CC1100(0x26, 0x1F); //Setting FSCAL0 //Setting PATABLE Output Power -10 dBm temp[0]=0x26; //-10 dBm CC1100 temp[1]=0x00; temp[2]=0x00; temp[3]=0x00; temp[4]=0x00; temp[5]=0x00; temp[6]=0x00; temp[7]=0x00; write_burst_CC1100(0x3E, temp, 8); delay_us(5); write_strobe_CC1100(0x33); //SCAL delay_ms(1); endconfig_CC1100();

Page 16: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

79

III.9.3 Komunikasi 1 dan 2-arah

Untuk melakukan komunikasi nirkabel dalam pertukaran data, perlu disusun

algoritma proses pengiriman dan penerimaan paket data. Ada beberapa hal yang

dijadikan pertimbangan desain, antara lain:

Keadaan dasar (default state) dari transceiver adalah mode IDLE.

Kapasitas buffer RX dan TX FIFO sebesar 64 byte.

Kalibrasi PLL transceiver.

Fungsi pin serbaguna GDO0 dan GDO2.

Berdasarkan pertimbangan di atas, maka algoritma pengiriman paket data yang

dirancang dapat dirinci sebagai berikut.

1. Pembersihan buffer FIFO RX dan TX untuk mencegah penumpukan akibat

adanya data yang tertinggal.

2. Transfer data 3 sensor yang pada awalnya terletak di variabel deret ke buffer

FIFO TX.

3. Kalibrasi PLL transceiver.

4. Pindah keadaan dari IDLE ke TX, transceiver mulai mengirim paket data.

5. Cek status pengiriman paket melalui pin serbaguna GDO2.

6. Kembali ke keadaan IDLE.

Hasil implementasi program C untuk proses pengiriman paket data dapat dilihat di

bawah ini.

void RFSendPacket(char *txbuffer, char length) //IDLE STATE write_single_CC1100(0x00, 0x06); // Setting IOCFG2 (Sync TX'ed) write_strobe_CC1100(0x3A); // Flush RX FIFO Buffer write_strobe_CC1100(0x3B); // Flush TX FIFO Buffer write_burst_CC1100(0x3F, txbuffer, length); // Write TX data //TX STATE write_strobe_CC1100(0x31); // SFSTXON with AUTOCAL delay_ms(1); write_strobe_CC1100(0x35); // Change state to TX delay_ms(1); while (GDO0!=1); // PLL Lock Detector Check while (GDO2!=1); // Wait GDO2 to go high while (GDO2!=0); // Wait GDO2 to clear //BACK TO IDLE STATE write_strobe_CC1100(0x36); // Change state to IDLE delay_us(1); write_single_CC1100(0x00, 0x07); // Setting IOCFG2 (CRC Detect)

Page 17: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

80

Sedangkan algoritma penerimaan paket data, dapat dirinci sebagai berikut.

1. Cek status penerimaan paket melalui pin serbaguna GDO2.

2. Ambil data 3 sensor yang pada buffer FIFO RX ke suatu variabel deret.

3. Cek status pemindahan paket melalui pin serbaguna GDO2.

4. Kembali ke keadaan IDLE.

5. Pembersihan buffer FIFO RX dan TX untuk mencegah penumpukan akibat

adanya data yang tertinggal.

Hasil implementasi program C untuk proses penerimaan paket data dapat dilihat

di bawah ini.

char RFReceivePacket(char *rxbuffer) char pktlen; // Length(1)+Type(1)+Payload //RX STATE while (GDO2!=1); // Wait GDO0 to go high read_single_CC1100(0x3F); // Read the packet length pktlen=datread+2; // Add 2 bytes append status read_burst_CC1100(0x3F, rxbuffer, pktlen); // Read RX data while (GDO2!=0); // Wait GDO0 to clear //BACK TO IDLE STATE write_strobe_CC1100(0x36); // Change state to IDLE delay_us(1); write_strobe_CC1100(0x3A); // Flush RX FIFO Buffer write_strobe_CC1100(0x3B); // Flush TX FIFO Buffer return datread;

Terdapat pula modul tambahan untuk menghitung nilai RSSI, seperti dapat dilihat

di bawah ini. Level RSSI pada paket terima, berupa data heksadesimal sehingga

harus diubah ke bentuk yang dapat mudah dibaca. Proses komunikasi 1 dan 2-

arah, sebagai penerapan algoritma di atas, dilakukan melalui pengujian di Bab IV.

void rssi(int rssidec) if (rssidec>=128) rssidec = (int) (rssidec-256); rssidec = rssidec/2; rssidbm = rssidec-75; else rssidec = rssidec/2; rssidbm = rssidec-75;

Page 18: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

81

III.9.4 Protokol MAC

Protokol MAC yang dikembangkan adalah berbasis TDMA. Proses pertukaran

data antar node dilakukan berdasarkan pewaktuan-pewaktuan yang disepakati dan

dimengerti semua node dalam jaringan. Pada topologi tipe klaster, anggota

jaringan adalah kepala klaster dan node-node sensor disekitarnya. Secara garis

besar, seperti tampak pada Gambar III.40 di bawah ini, protokol ini terdiri dari 3

bagian, yaitu round, frame, dan timeslot.

Gambar III.40. Protokol MAC berbasis TDMA.

Secara fungsional, protokol MAC ini terdiri dari 2 fase, yaitu fase set-up dan fase

steady-state. Pada fase set-up, terjadi pembentukan jaringan antara kepala klaster

dan node sensor disekitarnya. Fase ini terdiri dari 3 frame, yaitu:

1. Kepala klaster mengirim pesan SETUP ke semua node dengan tujuan untuk

memberi tahu keberadaan kepala klaster dan untuk proses sinkronisasi node.

2. Masing-masing node sensor, yang menerima pesan SETUP, melakukan

sinkronisasi dan kemudian membalas dengan mengirim pesan JOIN ke kepala

klaster sebagai bentuk keikutsertaan node sensor tersebut dalam jaringan.

3. Berdasarkan jumlah pesan JOIN yang diterima, kepala klaster membentuk

frame-frame yang merupakan jadwal untuk tiap-tiap node dalam melakukan

pertukaran data dengan kepala klaster. Jadwal ini kemudian disebar kembali

melalui pesan SLOT ke semua node untuk dimengerti dan diikuti.

Sedangkan pada fase steady-state, node sensor yang berkewajiban, melakukan

pertukaran data dengan kepala klaster dengan skema SYNC-DATA-ACK. Node

lain yang tidak berkepentingan, memasuki mode tidur untuk menghemat daya.

Page 19: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

82

Dalam 1 frame, terdapat 10 timeslot yang merupakan pewaktuan aksi protokol

MAC. Satu timeslot memiliki panjang waktu 200 ms (timer value: 9e57h),

sehingga 1 frame memiliki panjang waktu 2 detik. Aksi protokol berupa kirim dan

terima paket data dilakukan dengan skema 1 aksi / timeslot. Jadi, ketika node-1

mengirim paket ke node-2 pada timeslot-1 dan kedua node sudah sinkron satu

sama lain, maka node-2 akan menerima data pada timeslot-2.

Definisi “menerima data” dalam hal ini bukanlah berarti transceiver menerima

gelombang termodulasi data, namun berarti data dari buffer FIFO RX transceiver

diambil ke variabel internal mikrokontroler. Karena skema validasi data terima

adalah CRC filtering, maka ketika transceiver sedang dalam mode RX, data

apapun dengan CRC benar, akan masuk ke buffer FIFO RX. Jadi sebenarnya

dalam kasus node-1 mengirim data ke node-2 di atas, paket data node-1 pada

timeslot-1 sudah diterima oleh node-2 sesaat setelah paket tersebut terkirim,

dengan asumsi waktu tunda propagasi gelombang diabaikan. Namun paket

tersebut baru diambil oleh mikrokontroler pada timeslot-2.

Gambar III.41. Fase SET-UP bagian-1.

Gambar III.41 di atas adalah penjelasan lebih rinci mengenai fase set-up bagian

pertama. Format paket data SETUP adalah | Length | Type | Head ID | Time Slot |.

Head ID merupakan nomer node dari kepala klaster. Kita pilih ID = 00 sebagai

identitas dari kepala klaster. Time Slot berisi nilai yang menunjukkan jumlah

timeslot tersisa dalam 1 frame setelah dikurangi timeslot pengiriman paket SETUP

tersebut. Karena 1 frame = 10 timeslot dan paket dikirim di timeslot-1, maka isi

variabel Time Slot = 10 – 1 = 9.

Page 20: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

83

Konsep kerja protokol MAC pada fase SET-UP bagian-1 ini adalah node sensor

ibarat seekor anak ayam yang mencari-cari induknya. Node sensor berada pada

mode RX di sepanjang frame dan mengecek data terima di buffer FIFO RX pada

setiap timeslot. Ketika node sensor menerima pesan SETUP dari kepala klaster,

maka node sensor mengetahui bahwa telah ada kepala klaster yang ingin

membangun jaringan dan langkah selanjutnya adalah sinkronisasi untuk

menyamakan pewaktuan timeslot node sensor dengan kepala klaster.

Gambar III.42. Proses sinkronisasi node.

Gambar III.42 di atas adalah metode sinkronisasi yang dirancang. Timeslot x dan

timeslot x+1 adalah pewaktuan node sensor, sedangkan timeslot 1 adalah milik

kepala klaster. Ketika pesan SETUP diterima node sensor saat a,diantara x dan

x+1, maka akan dijalankan program interupsi, sesuai Gambar III.30 (b), untuk

memasukkan nilai pewaktu timeslot pada variabel tertentu. Ketika node tiba pada

timeslot x+1 dan mengetahui ada pesan SETUP yang diterima, maka dilakukan

perhitungan sebagai berikut.

(III.1)

Inti perhitungan di atas adalah menghitung selisih waktu timeslot node sensor dan

kepala klaster. Pada timeslot x+2, nilai y ini digunakan sebagai waktu tunda node

untuk menyamakan dengan timeslot kepala klaster. Setelah itu, node sensor

dikatakan sudah sinkron dengan kepala klaster.

Pada implementasi perangkat lunak, perlu dibuat fungsi-fungsi berbasis pewaktu

mikrokontroler dengan nilai waktu tertentu. Pewaktu mikrokontroler yang

digunakan adalah Timer-0, Timer-2, dan Timer-3. Fungsi ini diperlukan untuk

Page 21: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

84

pewaktuan timeslot dalam frame dan satuan waktu tunda. Fungsi pewaktuan yang

dibuat adalah pewaktu 1 ms, 1 µs, dan 200 ms. Hasil implementasi program C

dapat dilihat di bawah ini.

void timer0_1ms (unsigned int loop1) TCCR0=0x03; //Start Timer with clock 250kHz flag_timer0=0; k=0; while (k<loop1) while (flag_timer0!=1); //nungu sampai satu flag_timer0=0; k++; TCCR0=0x00; //Stop Timer void timer2_1us (long int loop2) TCCR2=0x01; //Start Timer with clock 8MHz flag_timer2=0; j=0; while (j<loop2) while (flag_timer2!=1); //nungu sampai satu flag_timer2=0; j++; TCCR2=0x00; //Stop Timer void timer3_200ms (char loop3) n=0; while (n<loop3) while (flag_timer3!=1); //nungu sampai satu flag_timer3=0; n++;

Untuk aksi protokol MAC berupa pengiriman dan penerimaan pesan SETUP,

implementasi program C dapat dilihat di bawah ini. Tipe data SETUP adalah 01

dengan panjang paket 4 byte.

void Send_SETUP (char head, char time) //Packet Data Array data_setup[0]=0x03; // Packet Length 3 bytes data_setup[1]=0x01; // Type of Data = 01 data_setup[2]=head; // Cluster Head ID data_setup[3]=time; // Timeslots Remaining //Transmitt SETUP Data timer3_200ms(1); // Start timeslot-1

Page 22: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

85

m=data_setup[0]+1; RFSendPacket(data_setup, m); printf("Head ID: %02x\r\n",data_setup[2]); LED1=!LED1; timer3_200ms(1); // Start timeslot-2 void Receive_SETUP (void) //Receive SETUP Message packet=(RFReceivePacket(data_setup))+2; sync_sender=data_setup[1]; //Get Sender ID sync_count=data_setup[2]-2; //Get 9, 9-2=7 sync=(int)sync_count; sync=sync*200; //SETUP Calculation timer_sync=timer_high; timer_sync=((timer_sync<<8)|timer_low); timer1=abs(timer_sync-40535); //200 ms timer2=timer1*8; //t dalam us //Synchronization timer3_200ms(1); //Goto next timeslot TCCR3B=0x00; //Stop Timer-3 timer2_1us(timer2); //sync timeslot-3 timer0_1ms(sync); //Goto timeslot-10 TCCR3B=0x03; //Start Timer-3

Untuk mengakomodasi mode tidur (sleep mode) dari node ketika tidak ada

aktivitas jaringan, perlu diimplementasi fungsi penghematan daya pada

transceiver. Mode tidur yang dibuat ada 2 macam, SLEEP-1 dengan waktu tidur

800 ms dan SLEEP-2 dengan waktu tidur 1600 ms. Konsumsi arus saat tidur

adalah 1/100 kali saat aktif (XOFF = 0,2mA, TX / RX = 15 – 30 mA).

void Sleep_1 (void) LED1=!LED1; write_strobe_CC1100(0x32); // SXOFF timer3_200ms(2); // Start timeslot-7 to 8 write_strobe_CC1100(0x36); // IDLE write_strobe_CC1100(0x33); // SCAL delay_ms(1); timer3_200ms(2); // Start timeslot-9 to 10 LED2=!LED2; void Sleep_2 (void) LED1=!LED1; write_strobe_CC1100(0x32); // SXOFF timer3_200ms(6); // Start timeslot-3 to 8 write_strobe_CC1100(0x36); // IDLE write_strobe_CC1100(0x33); // SCAL delay_ms(1); timer3_200ms(2); // Start timeslot-9 to 10 LED2=!LED2;

Page 23: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

86

Gambar III.43. Fase SET-UP bagian-2.

Gambar III.43 di atas adalah penjelasan lebih rinci mengenai fase set-up bagian

kedua. Format paket data JOIN adalah | Length | Type | Head ID | Node ID |.

Konsep kerja protokol MAC pada fase SET-UP bagian-2 ini adalah kepala klaster

mencari node sensor yang ingin bergabung dalam jaringan. Node sensor yang

ingin bergabung, mengirim pesan JOIN ke kepala klaster pada timeslot ke-x. Nilai

x ditentukan oleh ID masing-masing node dengan hubungan x = 2(ID) – 1. Jadi

node ID = 2 akan beraksi pada timeslot ke-3, dan begitu seterusnya. Hal ini

dimaksudkan agar tidak terjadi tabrakan antar node dalam mengirim paket data.

Untuk aksi protokol MAC berupa pengiriman dan penerimaan pesan JOIN,

implementasi program C dapat dilihat di bawah ini. Tipe data JOIN adalah 02

dengan panjang paket 4 byte.

void Send_JOIN (char head, char member) //Packet Data Array data_join[0]=0x03; // Packet Length 3 bytes data_join[1]=0x02; // Type of Data = 02 data_join[2]=head; // Cluster Head ID data_join[3]=member; // Join Member ID //Transmitt JOIN Data right=(member*2)-1; // Collision Avoidance left=9-right; // For Delay m=data_join[0]+1; timer3_200ms(right); // Start timeslot-1 delay_ms(20); RFSendPacket(data_join, m); printf("Member ID: %02x\r\n",data_join[3]); LED1=!LED1; timer3_200ms(1); // Start timeslot-2 void Receive_JOIN (void)

Page 24: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

87

//RX Sequence packet=(RFReceivePacket(data_join))+2; printf("Member ID: %02x ",data_join[2]); //RSSI Display i=(int) data_join[packet-2]; rssi(i); printf("RSSI=%i\r\n",rssidbm); LED1=!LED1;

Gambar III.44. Fase SET-UP bagian-3.

Gambar III.44 di atas adalah penjelasan lebih rinci mengenai fase set-up bagian

ketiga. Konsep kerja protokol MAC pada fase SET-UP terakhir ini adalah

penyebaran jadwal transfer data untuk node anggota jaringan. Format paket data

SLOT adalah | Length | Type | Head ID | Slot-1 | Slot-2 | Slot-3 | Slot-4 | Slot-5 |.

Algoritma pembentukan jadwal / frame / slot ini adalah pengurutan nomer ID

node sensor yang mengirimkan pesan JOIN. Jadi jika kepala klaster secara

berurutan menerima pesan JOIN dari node dengan ID = 01, 03, dan 06, maka dari

5 slot yang tersedia, hanya 3 slot awal yang terisi, yaitu Slot-1 = 01, Slot-2 = 03,

dan Slot-3 = 06, dan begitu seterusnya. Sedangkan pada sisi node sensor, pada

pesan SLOT yang diterima, jadwal / frame node sensor dalam transfer data adalah

sama dengan urutan Slot yang isinya ID node tersebut. Node-3 akan mengirim

data pada frame ke-5 jika ternyata ID node berada pada Slot-5, dan seterusnya.

Dengan terbentuknya formasi frame / slot ini, maka jaringan sudah dikatakan

terbentuk, dan kemudian semua node memasuki fase steady-state.

Untuk aksi protokol MAC berupa pengiriman dan penerimaan pesan SLOT,

implementasi program C dapat dilihat di bawah ini. Tipe data SLOT adalah 03

dengan panjang paket 8 byte.

Page 25: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

88

void Send_SLOT (char head, char slot1, char slot2, char slot3, char slot4, char slot5) //Packet Data Array data_slot[0]=0x07; // Packet Length 7 bytes data_slot[1]=0x03; // Type of Data = 03 data_slot[2]=head; // Cluster Head ID data_slot[3]=slot1; // Member Slot-1 data_slot[4]=slot2; // Member Slot-2 data_slot[5]=slot3; // Member Slot-3 data_slot[6]=slot4; // Member Slot-4 data_slot[7]=slot5; // Member Slot-5 //Transmitt JOIN Data m=data_slot[0]+1; timer3_200ms(1); // Start timeslot-1 delay_ms(20); RFSendPacket(data_slot, m); printf("SLOT: "); for(i=3;i<m;i++) printf("%02x ",data_slot[i]); printf("\r\n"); printf("\r\n"); LED1=!LED1; timer3_200ms(1); // Start timeslot-2 void Receive_SLOT (void) //RX Sequence packet=RFReceivePacket(data_slot); printf("SLOT: "); for(i=2;i<packet;i++) printf("%02x ",data_slot[i]); printf("\r\n"); printf("\r\n"); LED1=!LED1;

Gambar III.45. Fase Steady-state.

Gambar III.45 di atas adalah penjelasan lebih rinci mengenai fase steady-state dari

protokol yang dikembangkan. Node sensor yang sedang memiliki jadwal transfer

data, akan melakukan skema SYNC-DATA-ACK dengan kepala klaster

kemudian menuju mode tidur-1, sedangkan node sensor lain yang tidak

berkepentingan akan menuju mode tidur-2.

Page 26: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

89

Format paket data pada skema SYNC-DATA-ACK yang digunakan adalah:

SYNC : | Length | Type | Head ID | Period | Frame | Round |

DATA : | Length | Type | Pressure | Temperature | Humidity |

ACK : | Length | Type | Head ID | Counter |

Pesan SYNC memiliki tipe data = 4 dengan panjang paket 6 byte. Paket ini berisi

data trafik jaringan pada bagian Period, Frame, dan Round. Period berisi

informasi mengenai periode aggregasi data node. Frame dan Round berisi status

urutan frame dalam satu round dan jumlah round yang sudah dijalankan.

Siklus jaringan yang dirancang terdiri dari 6 round. Round pertama adalah fase

set-up yang terdiri dari 3 frame seperti telah dijelaskan sebelumnya. Lima round

berikutnya adalah fase steady-state. Setelah round ke-6, maka jaringan kembali ke

round ke-1 untuk melakukan pembentukan ulang jaringan. Pembentukan ulang ini

terkait dengan skalabilitas sistem terhadap penambahan atau pengurangan jumlah

node. Pada 6 round berikutnya, frame node sensor lama yang mati akan terganti,

dan sebaliknya, node sensor baru akan bergabung dan mendapatkan frame / slot.

Dalam 5 round fase steady-state, tiap round terdiri dari 10 frame, yang terdiri dari

5 frame periode data, dan 5 frame periode tanpa data. Pada jaringan yang lebih

besar, jumlah frame periode data dapat ditambah untuk mengakomodasi

kebutuhan node-node dalam jaringan. Karena perangkat keras node sensor yang

diimplementasi sebanyak 3 buah, maka 5 frame periode data sudah cukup dengan

2 frame kosong untuk kemungkinan penambahan node. Pada frame periode tanpa

data, semua node memasuki mode tidur-2 setelah menerima pesan SYNC.

Paket DATA memiliki tipe data = 5 dengan panjang paket 14 byte. Paket ini berisi

data 3 sensor (tekanan, temperatur, kelembaban) dengan masing-masing data

memiliki panjang 4 byte. Pesan ACK memiliki tipe data = 6 dengan panjang paket

4 byte. Paket ini berisi notifikasi penerimaan data dari kepala klaster ke node

pengirim dan informasi jumlah data yang sudah diterima oleh kepala klaster. Pada

pengembangan layer di atas data-link, terutama pada protokol routing, salah satu

cara untuk mengukur kinerja jaringan adalah dengan membandingkan jumlah data

Page 27: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

90

yang diterima kepala klaster dengan jumlah round yang telah dijalankan.

Implementasi program C paket-paket data pada fase steady-state dapat dilihat di

bawah ini.

void Send_SYNC_Data (char sync_from, char data, char slot_right, char slot_left) //Packet Data Array data_sync[0]=0x05; // Packet Length 5 bytes data_sync[1]=0x04; // Tipe Data = 4 data_sync[2]=sync_from; // Cluster Head ID data_sync[3]=data; // Data:01, No Data:00 data_sync[4]=slot_right; // Current Timeslot data_sync[5]=slot_left; // Remaining Timeslot //Transmitt SYNC Data m=data_sync[0]+1; timer3_200ms(1); //Start timeslot-1 delay_ms(20); RFSendPacket(data_sync, m); printf("SYNC "); for(i=4;i<m;i++) printf("%02x ",data_sync[i]); LED1=!LED1; timer3_200ms(1); //Start timeslot-2 void Receive_SYNC (void) //RX Sequence packet=RFReceivePacket(data_sync); printf("SYNC "); for(i=3;i<packet;i++) printf("%02x ",data_sync[i]); LED1=!LED1; void Send_DATA (void) //Packet Data Array display[0]=0x0D; // Packet Length 13 bytes display[1]=0x05; // Type of Data = 05 baca_adc(); baca_press(); baca_temp(); baca_hum(); single(); //Sensor Data Section// m=display[0]+1; timer3_200ms(1); //Start timeslot-3 delay_ms(20); RFSendPacket(display, m); printf("DATA: "); elgnis(2); timer3_200ms(1); //Start timeslot-4 void Receive_DATA (void) //RX Sequence packet=RFReceivePacket(display); printf("DATA: "); elgnis(1); void Send_ACK (char ack_from) //Packet Data Array data_ack[0]=0x03; // Packet Length 3 bytes data_ack[1]=0x06; // Type of Data = 06

Page 28: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

91

data_ack[2]=ack_from; // Cluster Head ID data_ack[3]=temp[7]; // Data Counter temp[7]++; //Transmitt ACK Data m=data_ack[0]+1; timer3_200ms(1); //Start timeslot-5 delay_ms(20); RFSendPacket(data_ack, m); printf("ACK %02x\r\n",data_ack[3]); LED2=!LED2; timer3_200ms(1); //Start timeslot-6 void Receive_ACK (void) //RX Sequence packet=RFReceivePacket(data_ack); printf("ACK %02x\r\n",data_ack[2]); LED2=!LED2;

Jika penjelasan pada Gambar III.41 – 45 didasarkan pada tahapan proses pada

protokol MAC berbasis TDMA dan implementasinya berupa modul-modul

generator paket-paket data yang digunakan pada protokol, maka pada program

utama mikrokontroler, proses implementasi didasarkan pada fungsional node, baik

sebagai kepala klaster, maupun node sensor.

Perancangan program utama berupa diagram alir untuk node sensor dan kepala

klaster secara berurutan dapat dilihat pada Gambar III.46 dan Gambar III.47 di

bawah ini. Sedangkan bentuk implementasi program C dapat dilihat pada

Lampiran C. Metode pengembangan program utama ini didasarkan pada keadaan

(state) pada protokol MAC dan syarat / kondisi yang menyertainya. Suatu proses

dapat berpindah ke proses lainnya jika satu atau lebih kondisi telah dipenuhi.

Selain itu, jalannya proses pada protokol diatur oleh modul-modul pewaktuan

yang telah dijelaskan sebelumnya.

Dengan demikian maka proses perancangan dan implementasi bagian perangkat

keras dan perangkat lunak dari sistem pemantauan tanaman yang dikembangkan.

Proses selanjutnya adalah pengujian dan karakterisasi sub-sistem, baik pada

perangkat keras dan perangkat lunak, dan pengujian sistem secara keseluruhan.

Page 29: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

92

Gambar III.46. Diagram alir program utama untuk Node Sensor.

Page 30: Bab III Perancangan dan Implementasi data yang tidak terdapat pada node lain. Hal ini dilakukan sebagai antisipasi ketidakcukupan kapasitas memori utama pada mikrokontroler. Namun

93

Gambar III.47. Diagram alir program utama untuk Kepala Klaster.