23 October 2014

Komunikasi Data Serial

Komunikasl Data Serial
Komunikasi serial adalah salah satu metode komunikasi data di mana hanya satu bit data yang dikirimkan melalui sebuah kabel pada waktu tertentu


Ada dua cara komunikasi data secara serial, yaitu komunikasi data serial secara sinkron dan komunikasi data serial secara asinkron.· Pada komunikasi data serial "sinkron, clock dikirimkan bersama-sama dengan data serial, sedangkan komunikasi data serial asinkron,merupakan kebalikannya karena clock tidak dikirimkan bersama data Serial, tetapi dibangkitkan secara sendiri-sendiri baik pada sisi pengirim(transmitter) maupun pada sisi penerima (receiver).Komunikasi data serial ini dilakukan oleh UART (Universal Asynchronous Receiver/Transmitter) dan USART (Universal Synchronous Asynchronous Reciever Transmiter). IC UART dan USART berfungsi untuk mengubah data paralel menjadi data serial dan menerima data serial yang kemudian diubah kembali menjadi data paralel. Pada UART,kecepatan pengiriman data (baud rate) dan fase clock pada sisi  transmitter dan pada sisi receiver harus sinkron. Agar sinkron maka perlu  sinkronisasi antara transmitter dan receiver. Hal ini dilakukan oleh bit ' Start' dan bit ' Stop ' .Ketika saluran transmisi dalam keadaan on, output UART adalah dalam keadaan logika  '1 ' . Ketika transmitter ingin mengirimkan data, output UART akan diset lebih dulu ke logika '0' untuk waktu satu bit. Sinyal ini pada receiver akan dikenali sebagai sinyal 'Start' yang digunakan untuk mensinkronkan fase clocknya sehingga sinkron dengan fase clock transmitter. Selanjutnya, data akan dikirimkan secara serial dari bit paling rendah (bit 0) sampai bit tertinggi. Selanjutnya, akan dikirim sinyal 'Stop' sebagai akhir dari pengiriman data serial. Cara pemberian kode data yang disalurkan tidak ditetapkan secara pasti.

Karakteristik Sinyal Port Serial
Standar sinyal serial RS232 memiliki ketentuan level tegangan sebagai berikut:
1. Logika 'I ' disebut 'mark' terletak antara -3 Volt hingga 25 Volt.
2. Logika ' 0' disebut ' space' terletak antara +3 Volt hingga +25 Volt.
3. Daerah "tegangan antara - 3 Volt hingga +3 Volt adalah invalid level, yaitu daerah tegangan yang tidak. Memiliki level logika pasti sehingga harus dihindari.Demikian juga. level tegangan lebih negatif dari - 75 Volt atau lebih positif dari +25 VoIt juga harus dihindari karena tegangan tersebut dapat merusak line driver pada saluran RS232.

Port Serial DB 9

Gambar dibawah ini adalah gambar konektor port serial DB-9 


Keterangan
· Pin 1 = Data Carrier Detect (DCD)
· Pin 2 = Received Data (RxD)
· Pin 3 = Transmitted Data (TxD)
· Pin 4 = Data Terminal Ready (DTR)
· Pin 5 = Signal Ground (common)
· Pin 6 = Data Set Ready (DSR)
· Pin 7 = Request To Send (RTS)
· Pin 8 = Clear To Send (CTS)
· Pin 9 = Ring Indicator (RI)
Keterangan mengenai fungsi saluran RS232 pada konektor DB9 adalah sebagai berikut:.
      Data Terminal Ready, pada saluran ini memberitahukan kesiapan terminalnya. Jika terjadi masalah dengan port COM, maka sinyal ini tidak diaktifkan
     Data set ready DSR Ini adalah sinyal dari modem ke PC, dan berjenis aktif low. Sinyal ini tidak akan dikeluarkan modem, jika modem dalam masalah atau rusak.
     Signal Ground, saluran ground.
     Clear To Send ,CTS sinyal pemberitahuan bahwa komputer sudah bisa mengirmkan data
     Reques To Send, RTS sinyal peringatan bahwa akan ada pengiriman data dari komputer.
     Data Carrier Detect (DCD), sinyal yang menginformasikan bahwa ada perangkat yang solid yang bisa menerima data
     Ring  indicator (RI), adalah sinyal untuk menginfomasikan bahwa saluran telah dihubungi
     Received data (RxD) adalah sinyal yang diterima dari perangkat lain, pada perangkat lain tersebut sinyal didapat dari sinyal TxD ( Transmitted data)
     Transmitted Data (TxD) adalah sinyal actual yang dikirimkan dari satu perangkat ke perangkat lain,

Port serial sering digunakan untuk interfacing komputer dan mikrokontroler, karena kemampuan jarak pengiriman data dibandingkan port paralel. Untuk komunikasi serial antara 2 PC anda cukup menghubungkan :
1.                  Pin TxD ke pin RxD computer lain
2.                  Pin RXD dihubungkan ke pin TxD komputer lain
3.                  RTS dan CTS dihubung singkat
4.                  DSR dan DTR dihubung singkat
5.                  GND dihubungkan ke GND komputer lain
Bila anda bandingkan cara komunikasi yang dilakukan secara paralel dengan cara komunikasi yang dilakukan secara serial, maka masing-masing akan memiliki keuntungan dan kelebihan yang tersendiri. Komunikasi yang dilakukan secara serial mempunyai keuntungan dari sisi pengkabelan, karena hanya memerlukan tiga buah kabel, TX, RX dan Ground.

Keuntungan menggunakan  Port Serial

Selain keuntungan – keuntungan yang telah disebutkan di atas masih ada lagi keuntungan lainnya jika menggunakan port serial. Berikut ini keuntungan-keuntungan penggunaan port serial dibandingkan penggunaan port paralel:
a)                Pada kornunikasi dengan kabel yang panjang, masalah kable loss tidak akan menjadi masalah besar daripada menggunakan kabel paralel. Port serial mentransmisikan level tegangan -3 Volt sampai -25 Volt dan '0' pada level tegangan +3 Volt sampai +25 Volt, sedangkan port paralel mentransmisikan '0' pada level tegangan 0 Volt dan  ‘1’ pada level tegangan 5 Volt.
b)                Dibutuhkan jumlah kabel yang lebih sedikit, bisa hanya menggunakan tiga kabel, yaitu saluran Transmit Data, saluran Receive Data, dan saluran Gound (konfigurasi Null Modern).
c)                 Saat ini penggunaan mikrokontroler semakin populer. Kebanyakan mikrokontroler sudah dilengkapi dengan SCI (Serial Communication Interface)yang dapat digunakan untuk komunikasi dengan port serial komputer.

























admux_registerregister data hasil konversi ADC
adch_adcl_register
register control dan flag ADCSRA
adcsra_reg
SFIOR register
sfior_adc
Sample Circuit
adc_circuit
Kode Sample
#include <mega32.h>
#include <stdlib.h>
#include <lcd.h>
#include <delay.h>
unsigned int data_adc, data_adc1;
char temp[16],temp1[16];
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0X15;
#endasm
#define mode_adc 0×00 ;
#define ADC_VREF_TYPE 0×00
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=( (adc_input | ADC_VREF_TYPE) & 0xff);
//ADMUX=ADC_VREF_TYPE | adc_input;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0×40;
// Wait for the AD conversion to complete
while(ADCSRA & 0X10==0); //
ADCSRA |= 0X10;
return ADCW;
}
void main(void)
{
PORTD=0xff;
DDRD=0X07;
// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
//ADMUX = ADC_VREF_TYPE & 0xff;
ADMUX=ADC_VREF_TYPE;
ADCSRA=0xA3;
SFIOR&=0x1F;
// LCD module initialization
lcd_init(16);
while (1)
{
lcd_clear( );
lcd_gotoxy(0,0);
lcd_putsf(“kelas-mikrokontrl”);
lcd_gotoxy(0,1);
lcd_putsf(“nilai ADC”);
//=========================================
data_adc=read_adc(0); //baca ADC channel(x)
itoa(data_adc,temp); // converts integer data_adc characters in string temp.
lcd_gotoxy(10,1) ;
lcd_puts(temp);
delay_ms(700);
//=========================================
data_adc1=read_adc(1); //baca ADC channel(x)
itoa(data_adc1,temp); // converts integer data_adc characters in string temp.
lcd_gotoxy(14,1);
lcd_puts(temp);
delay_ms(700);
};
}
Rate this:






Rate This
Posted by pccontrol
AVR USART (Universal Synchronous Asynchronous Receiver Transmitter) adalah komunikasi serial dua arah yang terdapat di AVR yang melibatkan register register sbb:
AVR_USART
1. Register  Data (UDR), menyimpan data yg dikirim dan diterima.
2. Register Control (UCSRA,UCSRB danUCSRC)
UCSRA
• Bit 7 – RXC: USART Receive Complete
RXC  otomatis akan bernilai  1, jika ada data baru di bufer penerima. RXC otomatis akan bernilai 0, jika data sudah dibaca atau bufer penerima kosong.
• Bit 6 – TXC: USART Transmit Complete
TXC otomatis akan bernilai 1, jika data di buffer selesai dikirim.
• Bit 5 – UDRE: USART Data Register Empty
UDRE  otomatis akan bernilai 1 , jika register  UDR kosong . receiver siap menerima data.  UDRE=0, UDR ada isinya .
• Bit 4 – FE: Frame Error
FE  otomatis akan bernilai  1, jika ada frame  eror.
• Bit 3 – DOR: Data OverRun
DOR otomatis akan bernilai 1, jika data datang ketika bufer penuh(terjadi antrian).
• Bit 2 – PE: Parity Error
PE otomatis akan bernilai 1, jika terjadi parity eror.
• Bit 1 – U2X: Double the USART Transmission Speed
kita set U2X=0, kecepatan normal. U2X=1  kecepatan 2xbaudrate.
• Bit 0 – MPCM: Multi-processor Communication Mode
kita set MCM=1  byte pertama yg diterima  harus 9 bit , jika tdk data byte akan diabaikan.bit ini terjadi hanya untuk penerimaan saja pd komunikasi banyak microcontroller.
UCSRB
• Bit 7 – RXCIE: RX Complete Interrupt Enable
kita set RXCIE=1 , interupsi receive complete aktif.
• Bit 6 – TXCIE: TX Complete Interrupt Enable
kita set TXCIE=1, interupsi transmit complete aktif.
• Bit 5 – UDRIE: USART Data Register Empty Interrupt Enable
kita set UDRIE=1,  interupsi UDRE aktip.
• Bit 4 – RXEN: Receiver Enable
kita set RXEN=1, USART receiver aktif. micon bisa mnerima data.
• Bit 3 – TXEN: Transmitter Enable
kita set TXEN=1, Usart Transmiter aktif. micon bisa mengirim data.
• Bit 2 – UCSZ2: Character Size
kita set UCSZ2:UCSZ1:UCSZ0 = 011 ,  panjang data 8 BIT. (bit UCSZ1 dan UCSZ0  ada di register UCSRC)
tabel_ucsz
• Bit 1 – RXB8: Receive Data Bit 8
RXB8 menjadi bit ke-9 jika panjang data yg diterima 9 bit .
• Bit 0 – TXB8: Transmit Data Bit 8
TXB8 menjadi bit ke-9 jika panjang data yg dikirim 9 bit.
UCSRC
• Bit 7 – URSEL: Register Select . memilih UCSRC atau UBRRH
kita set URSEL=1 , UCSRC aktif  ,UBRRH tdk aktif,
kita set URSEL=0 , UBRRH aktif ,  UCRSC tdk aktif.
• Bit 6 – UMSEL: USART Mode Select
kita set UMSEL=1 , mode synceonous. UMSEL=0 mode asyncronous
• Bit 5:4 – UPM1:UMP0:    Parity Mode
kita set :
tabel_ump
• Bit 3 – USBS: Stop Bit Select
kita set USBS=0, stop bit =1 bit ,  USBS=1 panjang stop bit = 2 bit.
• Bit 2:1 – UCSZ1:0: Character Size
kita set UCSZ2:UCSZ1:UCSZ0 = 011 ,  panjang data 8 BIT.  (bit UCSZ2 ada di register UCSRB)
• Bit 0 – UCPOL: Clock Polarity  bit ini digunakan untuk mode syncoronous saja.
kita set UCPOL=0 trnasmisi clock naik, UCPOL=1 transmisi clock turun. (khusus yg ini don’t care krn kita menggunakan mode asyncronous)
Detail penjelasan tiap bit pd register register di atas ada disini
3. Register  8 bit UBRRH dan 8 bit UBRRL , menyimpan parameter baudrate  16 bit UBRR register.  Rumus untuk menghitung nilai UBRR adalah sbb:
setting_ubrr
Contoh menghitung nilai UBRR :   diketahui baudrate = 9600  dan frekwensi cristal yg digunakan  11.059.200 hz , berapa nilai UBBRH dan UBRL nya?
UBRR =  ( (11.59200)/(16*9600) ) – 1 = 71.
maka nilai UBRR adalah 71 atau 0047H. (dlm bentuk 16 bit hexa). penulisan nilai  UBRR di  program (ke dlm register UBRRH dan UBRRL)  menjadi:
UBRRH=0×00;
UBRRL=0×47;
Tips Pemilihan nilai frekwensi Xtal
nilai UBRR adalah integer ,  maka pilih lah nilai frekwensi  xtal yg menghasilkan perhitungan integer .  misal contoh diatas saya ganti nilai Xtalnya jadi 8 Mhz ,baudrate 9600.  maka nilai UBRR nya jadi 51,0833   yg dimasukan ke UBRR adalah 51.  nilai ini akan menghasilkan kemungkinan komunikasi  eror  sebesar0,2%. sedangkan jika menggunakan Xtal 11.059200 erornya 0%.
tabel_ubrr
Cara lain untuk meseting nilai UBRR adalah dgn menuliskan rumus perhitungan UBRR ke code program   biarkan compiler yg menghitung nilai UBRR,,  seperti contoh berikut ini:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#define Frekwensi_Xtal 11059200// Clock Speed
 #define BAUDRATE 9600
 #define MYUBRR  (Frekwensi_Xtal/(16*BAUDRATE))-1
 void main( void )
 {
 ...
 USART_Init ( MYUBRR );
 ...
 }
 void USART_Init( unsigned int ubrr)
 {
 /* Set baud rate  ubrr= 0047  */
 UBRRH = (unsigned char)(ubrr>>8);    //UBRH=00
 UBRRL = (unsigned char)ubrr;               //UBRRL=47

}
USART harus diinisialisasi sebelum komunikasi dilakukan. Proses inisialisasi
biasanya terdiri dari pengaturan baud rate, pengaturan format frame dan mengaktifkan(enable) Transmitter atau Receiver/Penerima tergantung pada penggunaan. Untuk operasi USART dgn interupsi, Global Interrupt Flag harus diclearkan  (dan interupsi dinonaktifkan secara global) ketika melakukan inisialisasi.
Bit Flag  TXC dapat digunakan untuk memeriksa bahwa Transmitter telah menyelesaikan semua transfer, dan bit flag RXC dapat digunakan untuk memeriksa bahwa tidak ada data yang belum dibaca dalam  buffer penerima.  Perhatikan bahwa Flag TXC harus diclearkan sebelum pengiriman (sebelum UDR ditulis) jika digunakan untuk pengiriman.
Berikut ini contoh inisialisasi dan program penerimaan dan pengiriman dgn AVR USART.
Pemrograman AVR USART dgn AVR  Studio
Pemrograman USART dgn codevision
Pada pemrograman dgn codevision anda tdk perlu pusing  menghitung nilai register control  UCSR dan register UBRR , cukup gunakan tool codewizard.
klik Tools ->Codewizard  , pilih tab USART sbb:
codevision_usart
Setelah  USART anda  setting sesuai kebutuhan pd tab USART , code template dan nilai seting register register USART otomatis akan dibuatkan oleh codevision setelah anda mengklik menu generate,save and exit , hasilnya  seperti  dibawah ini :
#include <mega32.h>
#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;
// USART Receiver interrupt service routine
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)
{rx_counter=0;
rx_buffer_overflow=1; };
//Ketik data anda disini
};
}
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On (RXEN=1)
// USART Transmitter: On (TXEN =1)
// Receive interupt aktif (RXCIE=1)
// USART Mode: Asynchronous (UMSEL=O)
// USART Baud rate: 9600
UCSRA=0×00;
UCSRB=0×98;     //10011000
UCSRC=0×86;     //10000110
UBRRH=0×00;
UBRRL=0×47;
// Global enable interrupts  “sei” , sebaliknya “cli” clear interupt.
#asm(“sei”)
while (1)
{
// Place your code here
};
}

No comments:

Post a Comment

20 Cara Membuat Artikel SEO Friendly

  20 Cara Membuat Artikel SEO Friendly Menulis artikel dengan baik belumlah cukup. Anda juga harus membuat artikel tersebut ramah mesin penc...