USART yang saya buat ini hanya untuk TX nya saja yaitu yang mengirim (transmit) data serial ke device lain. Intinya untuk melakukan pengiriman sinyal data perlu dirancang keluaran dari port sama persis seperti TX yang sebenarnya. Teknik ini dinamakan bit-banging. Di bawah ini adalah sinyal data dari USART yang saya kutip dari datasheet mikrokontroler AVR,
Intinya ada beberapa konfigurasi pada data USART yang perlu di atur. Parameter utama adalah nilai baudrate karena ini akan mewakili berapa timing sinyal dari data yang dikirimkan. Kemudian adalah jumlah data bit, parity bit dan stop bit. Misalkan jika menggunakan baudrate 9600 bps, jumlah data bit 8 dimana data yang dikirimkan adalah 0b01010110 = 0x56, tidak ada parity bit , dan stop bit 1 maka sinyal datanya adalah
Agar sinyal high dan low memiliki lebar pulsa yang sama maka perubahannya diatur dengan menggunakan timer. Lebar pulsa ini ditentukan dari baud rate UART yang digunakan, yaitu 9600 bps. Sehingga periodenya adalah 1/9600 = 0.104 ms. Dengan mengatur pembacaan register counter timer maka akan diperoleh sinyal data high dan low mirip dengan gambar di atas. Berikut adalah kutipan kode programnya
#define bit_tx PORTC.0 //port yang ingin di bit-banged, inisialisasi low di set sebagai output
// clock mikon 11.059200 MHz, timer clock 230.400KHz
// delay = 104 ms, counter = 230400/9600 = 24
// setelah dicoba-coba melalui simulasi memenuhi di antara 21-23
void delay_104us()
{
TCNT0 = 0;
while(TCNT0<=22);
}
//fungsi mengirimkan data character UART
void putchar_bitbanged(char c)
{
unsigned char i;
bit_tx = 1;
delay_104us();
bit_tx = 0;
delay_104us();
for(i=0;i<8;i++)
{
if(c&(1<<i))
bit_tx = 1;
else
bit_tx = 0;
delay_104us();
}
bit_tx = 1;
}
Semoga bermanfaat.
No comments:
Post a Comment