Sabtu, 25 September 2010

Komunikasi Serial 2 Mikro dengan USART


Hey guys,, kembali lagi dengan artikel tentang mikrokontroller. Kali ini saya akan mencoba membahas komunikasi serial 2 mikrokontroller dengan menggunakan UART. Kali ini saya akan mencoba mengkomunikasikan antara 2 buah mikrokontroller ATMega 8535.Yang perlu disiapkan adalah :
  • 2 Buah Mikrokontroller ATMega 8535.
  • 2 buah kabel untuk jalur Tx dan Rx.
  • LCD, jika masih bingung tentang kofigurasi LCD silahkah lihat dipostingan saya sebelumnya, monggo
  • CodeVisionAVR C Compiler, jika belum memiliki silahkan download disini
  • Supply mikro.
Ok sekarang kita mulai, bagaimana cara menkomunikasikan 2 buah mikrokontroller tersebut yang harus kamu lakukan adalah
  • Hubungkan Tx Mikro A dengan Rx Mikro B, konfigurasinya seperti ini

Karena kita akan mengirim data dari Mikro A ke Mikro B jadi Mikro A sebagai pengirim data (Transmitter) dan Mikro B sebagai penerima data (Receiver).
  • Setelah sambungan sudah benar, maka kita buka CodeVisionAVR dan kita akan memprogram dari segi Transmitter lebih dahulu.
  
  • Setelah itu Pilih Settingan USART, kita centang mode Transmitter dengan BaudRate 9600
  
  •  Kemudian Pilih Generate Save and Exit, dan Ketik Program dibawah ini. 
#include <mega8535.h>

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// 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=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
PORTB=0x00;
DDRB=0x00;

// 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;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// 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;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=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: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

while (1)
      {
       putchar(255); // putchar merupakan fungsi untuk mengirim data, nilainya saya beri 255

      };
}
  • Kemudian Compile program tersebut ke Mikro A.
  • Setelah kita memprogram bagian Transmit, sekarang kita memprogram bagian Receive
  • Jika mikro A kita pilih mode Transmit maka mikro B kita pilih mode receive dan centang Rx Interupt
Mengapa kita memilih Rx_Interrupt, karena kita akan mengambil data jika ada data masuk dari sisi Tx, dan prosesnya akan lebih cepat.
  • Kemudian pilih mode LCD untuk menampilkan data, saya gunakan PORTC sebagai PIN LCD.
  • Untuk Program sisi Receiver yakni :

#include <mega8535.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.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 

char buf[33];
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;   // data kiriman Tx akan disimpan diregister UDR
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
   {
   rx_buffer[rx_wr_index]=data;
   //==============menampilkan data===========
   lcd_gotoxy(0,0);
   sprintf(buf,"data serial:%d",data);
   lcd_puts(buf);
   //===========================================
   if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
   if (++rx_counter == RX_BUFFER_SIZE)
      {
      rx_counter=0;
      rx_buffer_overflow=1;
      };
   };
}

#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)
{
// Declare your local variables here

// 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=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
PORTB=0x00;
DDRB=0x00;

// 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;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// 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;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=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: Off
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x90;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D;

// 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")

while (1)
      {
      // Place your code here

      };
}
 Jika anda melakukan langkah-langkah dengan benar maka pada sisi penerima akan muncul tampilan pada LCD yakni  "data serial: 255".. Selamat Mencoba,,

Nb. Pembaca yang baik selalu meninggalkan komentar

Stumble
Delicious
Technorati
Twitter
Facebook

4 Comments:

Anonim said...

PERTAMAX diamankan.......
Nice info kang

redo said...

Selamat Kang...

Thanks y..

Anonim said...

JASA DOWNLOAD EBOOK LUAR NEGERI ( IMPOR )

Bingung cari ebook yang diinginkan ?

Sudah ketemu, tapi harganya mahal banget ?

Tenang aja Bro and Sis. Aku bakal bantu kamu sampai dapetin deh !!!!
Disamping itu harganya gak mahal kq CUMA Rp 5.000 / Ebook ( Pesen 10 Ebook, aku kasih harga 3500 / Ebook ) Murah kan !!!! Daripada nyari atau beli langsung. Kalau sekedar ingin tanya - tanya juga boleh kirim aja pertanyaan kamu VIA EMAIL andyholics@gmail.com

**KHUSUS EBOOK DENGAN UKURAN DIATAS 50 MB, HARGA EBOOK RP. 20.000 / EBOOK**

**KHUSUS BAGI YANG REQUEST MAGAZINE, KONFIRMASI AJA TERLEBIH DAHULU VIA EMAIL andyholics@gmail.com


Dibawah ini ada beberapa kategori yang bisa aku bantu download

Architecture
Articles / Whitepapers
Arts / Cinema / Entertainment
Astronomy / Astrophysics
Audio Books
Biographies
Biology / Zoology / Life Sciences
Business / Commerce
Chemistry
Children's
Comics / Graphic Novels
Communication / Relationship / Self-help
Computers / IT
Crafts / Hobbies
Culture / Pop / Fashion
Dictionaries / Encyclopedias
Documentaries
Economics
Education / Exams / Teaching / Lectures
eMagazines / eJournals
Engineering
Environmental / Agricultural Science
Finance / Investing
Food / Beverages
Games / Card / Puzzles
Geography / Travel / Adventure
Graphics / Photography
Health / Mind / Body
History
Home / Garden
Humor / Comedy / Satire / Wit
Instruction / Study
Language / Linguistics / Grammar
Law
Literature / Fiction
Management / Logistics
Manuals / Handbooks
Martial Arts / Self Defense
Mathematics
Medicine
Military
Music
Pharmaceutical
Philosophy / Ethics
Physics
Politics
Psychology
Religion / Spirituality
Science Classics
Science General
Social Sciences
Sports / Recreation
Statistics
Systems Science
Transportation / Navigation
UnCategorized
Video Training
Writing / Journalism

Cara pemesanan

1. Kirim judul buku yang kamu download VIA EMAIL ke andyholics@gmail.com

2. Kemudian aku crosscheck, Tunggu Konfirmasi dari aku minimal 1/2 Hari - 1 Hari

3. Transaksi Pembayaran Deh

4. Tunggu Ebook kamu minimal 1 Hari - 2 Hari

5. Dapet Deh ebook yang kamu cari selama ini, selamat !!!!

SYARAT DAN KETENTUAN BERLAKU

1. MELAYANI WILAYAH DOMISILI SURABAYA & SEKITARNYA ( UNTUK WILAYAH DILUAR SURABAYA TETAP DILAYANI )
2. ONGKOS KIRIM DITANGGUNG PENGGUNA JASA DOWNLOAD EBOOK

CONTACT PERSON

email : andyholics@gmail.com

TERIMA ORDER 24 JAM / 7 HARI

Anonim said...

:kk9

Posting Komentar

Entri Populer

 

Menanam Ilmu Copyright © 2010 LKart Theme is Designed by Lasantha