"Kembali Ke Dasar Elektronika Digital ... "

Sabtu, 01 Juni 2013

Tutorial : Komunikasi serial pada microcontroller (praktek via attiny 2313)

Microcontroller memiliki metode untuk berkomunikasi dengan perangkat diluarnya. Salah satu metode komunikasi yang standarnya masih banyak dipakai dan umum digunakan adalah komunikasi asynkronous / UART. 


Terminal Serial Tahun 70-an

Apakah itu UART?


UART adalah mode komunikasi serial secara asynchronous, dimana data dikirim secara satu persatu melalui kabel ganda ( twisted pair Tx & Rx)







UART memiliki kecepatan transfer data yg ditentukan oleh pihak pengirim & penerima yg dinamakan BAUDRATE

Pengirim akan mengirimkan data secara serial, dan penerima akan mengolah data BIT (umumnya 8bit) menjadi data 1byte yg digunakan sesuai keperluan

UART memiliki level TTL 5 volt, dan menggunakan 2 buah I/O port (Tx & Rx)

Sebuah UART biasanya berisi komponen-komponen berikut:

Generator clock : biasanya kelipatan dari bit rate untuk memungkinkan pengambilan sampel di tengah periode bit.
Register Input Output
Kontrol kirim (TX) dan terima (RX)
Kontrol logika read write
Buffer I/O (opsional)
Paralel Bus Buffer (opsional)
Buffer First In First Out (FIFO) (opsional)



Apakah itu RS232 ?


RS 232 adalah standar signaling dari sebuah komunikasi serial. Pada umumnya PC keluaran sebelum 2010-an akan memiliki sebuah port serial/RS232. Komunikasi RS232 terbatas hanya untuk beberapa meter saja, dan jika membutuhkan jarak lebih maka membutuhkan protokol lain seperti RS485




Tegangan dari RS232 tidak mengikuti level TTL/5V tetapi seperti gambar



Bagaimana Mengubah level UART ke RS232 ?


Untuk mengubahnya diperlukan level converter sejenis MAX-232. Prinsipnya adalah dengan menggunakan charge pump capasitor.








Alternatifnya adalah menggunakan rangkaian sederhana menggunakan transistor yang pernah dibahas juga di sini


klik untuk memperjelas



Ayo kita berlanjut ke Praktek sebenarnya , karena metode belajar yang paling cepat adalah dengan terjun langsung ke permasalahan dilapangan.



(klik buat memperjelas)


PART LIST :

ATTiny2313
Max232
Xtal7.3278 MHz (xtal lain bisa juga dengan catatan akan timbul error rate beberapa % sesuai datasheet)
Led
Push button
beberapa capasitor/resistor
DB-9 Female
Kabel Serial (untuk PC jadul) 
USB to RS232 converter untuk Laptop masa kini




SOURCE CODE akan  kita bahas satu persatu

inisialisasi awal


#define F_CPU 7372800UL //frek xtal yang dipake

#include <avr/io.h>

#include <util/delay.h>

#include <inttypes.h>

#include <avr/interrupt.h>

#include <avr/pgmspace.h> 





//rumus penentuan baudrate



#define USART_BAUDRATE 9600  // baudrate 9600 bps

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









//deklarasi menu & tulisan .

// digunakan memori flash(PROGMEM) karena attiny cukup kecil RAM nya



const char menu[] PROGMEM = " 





\r* AVR ATTiny2312 - Rs232 COM  by: ahocool@gmail.com * 

\r Petunjuk: 

\r ** TRANSMIT: Tekan Tombol Keyboard 1 & 2 untuk On/Off LED 1 & 2 

\r ** RECEIVE: Tekan Tombol Switch untuk Menerima Data dari Micro

\r" ;

const char tombol[] PROGMEM ="

\r Tombol Ditekan 

\r" ; 

const char led1on[] PROGMEM ="

\r LED 1 ON 

\r" ; 

const char led1off[] PROGMEM ="

\r LED 1 OFF 

\r" ; 

const char led2on[] PROGMEM ="

\r LED 2 ON 

\r" ; 

const char led2off[] PROGMEM ="

\r LED 2 OFF 

\r" ; 



int led1, led2 ; //variabel untuk led







Inisialisasi USART dari attiny2313


void init_usart(void)

{



cli();



   UCSRB |= (1 << RXEN) | (1 << TXEN);   // kirim & terima

   UCSRC |= (1 << UCSZ0) | (1 << UCSZ1); 

   UBRRL = BAUD_PRESCALE; 

   UBRRH = (BAUD_PRESCALE >> 8);

   UCSRB |= (1 << RXCIE);  //interupt serial usart

sei();

  }






Routine pengiriman text lewat progmem/flash memory


//function untuk mengirim text single



void USART_Tx(unsigned char data)

{   

    

   while (!(UCSRA & (1<<UDRE)));{} // wait till transmit Data register is empty

    UDR = data; // Send data to the computer



}



//function untuk kirim kalimat



void kirim_text(const char *data)

{

   while (pgm_read_byte(data) != 0x00)

     USART_Tx(pgm_read_byte(data++));

} 








Interupt saat menerima input data serial dari PC


ISR(USART_RX_vect)

{ 

 char databyte;

 

  

 databyte = UDR;  



 

     switch (databyte) // pemilah data yg diterima dari PC       



{



     

    case 0xD : {   // jika yg diterima ENTER (0xD)

             kirim_text(menu) ;

 break; }

    case '1' : {  //jika diterima karakter 1

     

             if(led1 == 0)  // jika kondisi awal 0

             { 

 PORTB ^=(1<<0); //toogle dari kondisi sebelumnya

             kirim_text(led1on) ;//kirim kalimat

 led1=1;

 }

 else

 {

 PORTB ^=(1<<0); //toogle dari kondisi sebelumnya

             kirim_text(led1off) ; //kirim kalimat

 led1=0;

 }

 break; }

    case '2' : {

             if(led2 == 0) // jika kondisi awal 0

             { 

 PORTB ^=(1<<1); //toogle dari kondisi sebelumnya

             kirim_text(led2on) ; //kirim kalimat

 led2=1;

 }

 else

 {

 PORTB ^=(1<<1); //toogle dari kondisi sebelumnya

             kirim_text(led2off) ; //kirim kalimat

 led2=0;

 }

 break; }

      



}  

}  










Interupt saat Tombol ditekan dan mengirim data ke PC


SIGNAL (SIG_INT0) 

{



kirim_text(tombol);  //kirim kalimat bahwa tombol ditekan



}






Program utama / main


int main(void)

{

 



    

 DDRB=0b11;  //B0,B1 = Output ke led



 MCUCR |= (1<<ISC01) | (1<<ISC00) ; //inisialisai interupt 0 rise edge



 GIMSK |= (1<<INT0) ; // tombol ada di INT 0

  



 led1=0;  //kondisi awal led1

 led2=0;  //kondisi awal led2



 init_usart();



 kirim_text(menu) ;



 PORTB=0b00; // matikan LED







while(1) //muter tiada henti

 {

    



 }



return 0;

}











Jika sudah di compile & didownload ke AVR, maka hubungkan output MAX232 ke PORT Serial PC ato port USB-serial Converter. Gunakan Hyperterminal/putty/secureCrt untuk melakukan koneksi ke COM PORT dari serial port/Usb-serial converter dengan setting BAUDRATE 9600bps

Video berikut menampilkan contoh komunikasi serial UART dan RS232 ke PC untuk mengontrol nyala LED dan membaca penekanan tombol.


Share:

0 komentar:

Posting Komentar

Kontak Langsung



12179018.png (60×60)
+628155737755

HP: 081331339072
Mail : ahocool@gmail.com

ANTI SPAM !



Blog Ini Mendukung Blogger Indonesia Yang Jujur dan Memberikan Informasi Sebenarnya, Bukan Menyampah Demi $Rp$ Yang Hanya Merendahkan Blogger Indonesia

Site View

Categories

555 (6) 7 segmen (3) adc (3) amplifier (1) analog (9) android (11) attiny (1) attiny2313 (16) blog (1) bluetooth (1) cmos (1) dasar (31) display (2) gcc (1) infrared (2) Input Output (3) jam (6) jualan (10) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (9) komputer (3) komunikasi (1) kontrol (2) lain-lain (8) lcd (2) led (9) led matrix (6) line tracer (1) lm35 (1) memory (1) metal detector (4) microcontroller (48) mikrokontroller (1) mikrotik (4) paket belajar (19) palang pintu otomatis (1) pcb (2) project (33) proyek (1) radio (3) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (1) sharing (2) sms (5) software (16) tachometer (2) telepon (7) televisi (16) transistor (1) troubleshoot (3) tulisan (34) tutorial (67) vu meter (1) vumeter (1) wav player (3) wayang (1) wifi (1)

Diskusi


kaskus
Forum Hobby Elektronika