Selasa, 05 Agustus 2008

Atmega32 dan RS-232

Sebuah mikrokontroller tentu saja perlu berkomunikasi dengan dunia luar, misalnya dengan PC. Interface yang populer untuk keperluan ini adalah Serial Port RS-232. Untuk melengkapi serial port RS-232 ke mikrokontroller atmega anda, gunakan IC TTL to RS232 converter, yang dikeluarkan oleh Maxim MAX232, atau ICL232. Rangkaiannya:



Di sisi PC, anda dapat menggunakan software Hyperterminal yang terdapat di Accessories, atau, apabila ingin yang lebih bagus, gunakan software Docklight (www.docklight.de). Atau, jika anda mau membuat aplikasi under Delphi yang membaca port serial, gunakan komponen cport yg bisa di download di http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/c/co/comport/


Software di avr-gcc untuk mengakses port serial ini adalah.

#include < avr/io.h>
#include < avr/interrupt.h>
#include < inttypes.h>
#include < avr/iom32.h>
#include < stdio.h>
#include < math.h>
#include < avr/pgmspace.h>
#include < avr/eeprom.h>
#include < avr/wdt.h>

#define F_OSC 11059200
#define UART_BAUD_RATE 9600
#define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) ((F_OSC)/((UART_BAUD_RATE)*16l)-1)

volatile unsigned char ser[22]; // variabel buffer serial rx

SIGNAL (SIG_UART_RECV)
{
unsigned char c;
unsigned char a;

c = UDR;

for(a=0;a<21;a++) ser[a]=ser[a+1];
ser[21]=c;
}


void usart_putc(unsigned char c) // kirim ke serial 1 char
{
while(!(UCSRA & (1 << UDRE)));
UDR = c;
}

void usart_puts (char *s) // kirim ke serial 1 string
{
while (*s)
{
usart_putc(*s);
s++;
}
}

int main(void)
{
DDRD=0xfe;

UBRRH = (unsigned char)(UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) >> 8);
UBRRL = (unsigned char)UART_BAUD_CALC(UART_BAUD_RATE,F_OSC);
UCSRB = (1 << RXEN)|(1 << TXEN)|(1 << RXCIE);
UCSRC = (1 << URSEL)|(3 << UCSZ0);

while (1)
{
usart_puts(“Serial ready\r\n”);
}
}

Keterangan source code:

1. Setiap kali RX menerima data, maka data tersebut disimpan di variabel ser[21], data sebelumnya bergeser. Lihat fungsi interupsi serial SIGNAL (SIG_UART_RECEIVE)
2. Untuk mengirim 1 karakter ke TX, gunakan fungsi usart_putc();
3. Untuk mengirim 1 string ke TX, gunakan fungsi usart_puts();
4. Setting baud date di #define UART_BAUD_RATE 9600

Tidak ada komentar: