Aplikasi Serial




1. Dasar Teori [kembali]
SERIAL PADA ATMEGA 16

Universal synchronous dan asynchronous pemancar dan penerima serial adalah suatu alat komunikasi serial sangat fleksibel. Jenis yang utama adalah :
  • Operasi full duplex ( register penerima dan pengirim serial dapat berdiri sendiri )
  • Operasi Asychronous atau synchronous
  • Master atau slave mendapat clock dengan operasi synchronous
  • Pembangkit boud rate dengan resolusi tinggi
  • Dukung frames serial dengan 5, 6, 7, 8 atau 9 Data bit dan 1 atau 2 Stop bit
  • Tahap odd atau even parity dan parity check didukung oleh hardware
  • Pendeteksian data overrun
  • Pendeteksi framing error
  • Pemfilteran gangguan ( noise ) meliputi pendeteksian bit false start dan pendeteksian low pass filter digital
  • Tiga interrupt terdiri dari TX complete, TX data register empty dan RX complete.
  • Mode komunikasi multi-processor
  • Mode komunikasi double speed asynchronous
INISIALISASI USART
USART harus diinisialisasi sebelum komunikasi manapun dapat berlansung. Proses inisialisasi normalnyaterdiri daripengesetan boud rate, penyetingan frame format dan pengaktifan pengirim atau penerimatergantung pada pemakaian. Untuk interrupt menjalankan operasi USART , global interrupt flag ( penanda ) sebaiknya dibersihkan ( dan interrupt global disable ) ketika inisialisasi dilakukan. Sebelum melakukan inisialisasi ulang dengan mengubah boud rate atau frame format, untuk meyakinkan bahwa tidak ada transmisi berkelanjutan sepanjang peiode register yang diubah. 
Flag TXC dapat digunakan untuk mengecek bahwa pemancar telah melengkapi semua pengiriman, dan flag RXC dapat digunakan untuk mengecek bahwa tidak ada data yang tidak terbaca pada buffer penerima. Tercatat bahwa flag TXC harus dibersihkan sebelum tiap transmisi ( sebelum UDR ditulisi ) jika itu semua digunakan untuk tujuan tersebut. USART sederhana inisialisasi kode contoh berikut menunjukan fungsi satu assembly dan satu C itu mempunyai kesamaan dalam kemampuan. Pada contoh tersebit mengasumsikan bahwa operasi asinkron menggunakan metode poling ( tidak ada interrupt enable ) frame format yang tetap. Boud rate diberikan sebagai fungsi parameter. 
Untuk kode assembly, parameter boud rate diasumsikan untuk di simpan pada register r16, r17. Ketika menulis fungsi pada register UCSRC, bit URSEL (MSB) harus diset dalam kaitan dengan pembagian penempatan I/O oleh UBRRH dan UCSRC. Lebih mengedepankan inisialisasi rutin dapat dibuat seperti itu meliputi frame format sebagai parameter, disable interrupt dan lain-lain. Bagai manapun juga banyak aplikasi menggunakan seting tetap boud dan register control, dan untuk aplikasi jenis ini dapat ditempatkan secara langsung pada keseluruhan routine, atau dikombinasikan dengan inisialisasi kode untuk modul I/O yang lain.

MENGIRIM DATA MELALUI PORT SERIAL
Proses pengiriman data serial dilakukan per byte data dengan menunggu register UDR yang merupakan tempat data serial akan disimpan menjadi kosong sehingga siap ditulis dengan data yang baru. Proses ini menggunakan bit yang ada pada register UCSRA, yaitu bit UDRE (USART Data Register Empty). Bit UDRE merupakan indikator kondisi register UDR. Jika UDRE bernilai 1 maka register UDR telah kosong.

MENERIMA DATA MELALUI PORT SERIAL
Proses penerimaan data serial diakukan dengan mengecek nilai bit RXC (USART Receive Complete) pada register UCSRA. RXC akan bernilai satu jika ada data yang siap dibaca di buffer penerima, dan bernilai nol jika tidak ada data pada buffer penerima. Jika penerima USART dinonaktifkan maka bit ini akan selalu bernilai nol.

2. Hardware [kembali]


3. Rangkaian Simulasi [kembali]


4. Flowchart [kembali]

5. Listing Program [kembali]
#include <mega16.h>                          // PEMANGGILAN FUNGSI ATMEGA16
#include <stdio.h>                           // fungsi input/output
#include <alcd.h>      // pemanggilan fungsi lcd

char  usart_character='0';                   // deklarasi variabel usart_character tipe char

interrupt [EXT_INT2] void ext_int2_isr(void) // interrup eksternal
{                    
 lcd_clear();                               // membersihkan layar lcd
 lcd_gotoxy(0,0);                           // meletakkan pointer lcd
}

interrupt [USART_RXC] void ISR_receiver ()  // interrup usart
{
 usart_character = getchar();               // pemanggilan variabel usart
 lcd_putchar (usart_character);             // menampilkan variabel pada lcd
}

void main(void)                             // program utama
{

GICR|=(0<<INT1) | (0<<INT0) | (1<<INT2);    // mengaktifkan INT 2                                // pengaktifan interrup INT2
MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
MCUCSR=(1<<ISC2);
GIFR=(0<<INTF1) | (0<<INTF0) | (1<<INTF2);  // mengaktifkan INT 2  

UCSRA=(1<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);                   // penerima serial
UCSRB=(1<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);        // bit pengatur interupsi penerimaan data serial 
UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);       // bit pemilih akses antara ucsrc & ubrr
UBRRH=0x00;                           // UBRRH tidak aktif
UBRRL=0x47;                           // mengatur kecepatan tranmisi data pada UBRRl

lcd_init(16);                         // menggunakan karakter lcd 16

#asm("sei")

while (1)                             // program akan berulang, karena syarat while bernilai 1 (true)
      {
    

      }
}
6. Vidio [kembali]

7. Link Download [kembali]
<rangkaian simulasi>
<listing program>
<html>

Tidak ada komentar:

Posting Komentar