Debugging AVR, with Asynchronous UART with LINUX

the case :

if you want to get sumthing controlled by computer or you need a data aquition for your microcontroller device….

ok!!

——–indonesia aja deh—–HIDUP INDONESIA!!!

okeh, now asumsikan bahwa smua pack untuk AVR udah kamu install smua, dan kamu telah bisa meng-compile dan men-download the hex file to modul kamu!!

register di AVR yang menangani masalah UART adalah

UCSRA  = 0x00;
UCSRB  = 0x18; pilihan mode
UBRRH = 0x00;
UBRRL  = 0x19; pilihan baud rate

silahkan liat fungsi masing2 bit di Datasheet 🙂 jangan males ya!!

nah untuk meng-konekan antara komputer dan tuh modul, perlu di initialisasikan

standart io di linux.

stdin n stdout

ni adalah initialisinya :

static int uart_putchar(char ch, FILE* stream);
static int uart_getchar(FILE* stream);
static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar,NULL,_FDEV_SETUP_WRITE);

static FILE mystdin  = FDEV_SETUP_STREAM(NULL, uart_getchar, _FDEV_SETUP_READ);

static int uart_putchar(char ch, FILE* stream) {

if (ch == ‘\n’) {
uart_putchar(‘\r’, stream);
}
loop_until_bit_is_set(UCSRA, UDRE);
UDR = ch;

return 0;
}


static int uart_getchar(FILE *stream) {

char temp;
loop_until_bit_is_set(UCSRA,RXC);
temp = UDR;
uart_putchar(temp, stream);
return(temp);
}

nah itu adalah initialisasi dan fungsi untuk file stream io.

nih main programmnya:

int main(void) {
init_uart();
stdout = &mystdout;
stdin  = &mystdin;
while(1) {
printf(“Hello World UNIX \n”);
delay_ms(1000);
}
return (0);
}

________________________________________________________

PROGRAM LENGKAPNYA

/*
*
*
* Tommy Agustianto
* Progname : Hello World…
* Asych 19200 bps.
*
*/

#define F_CPU 4000000UL
#include <avr/io.h>
#include <avr/iom16.h>
#include <util/delay.h>
#include <stdio.h>

static int uart_putchar(char ch, FILE* stream);
static int uart_getchar(FILE* stream);
static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar,NULL,_FDEV_SETUP_WRITE);

static FILE mystdin  = FDEV_SETUP_STREAM(NULL, uart_getchar, _FDEV_SETUP_READ);

static int uart_putchar(char ch, FILE* stream) {

if (ch == ‘\n’) {
uart_putchar(‘\r’, stream);
}
loop_until_bit_is_set(UCSRA, UDRE);
UDR = ch;

return 0;
}

static int uart_getchar(FILE *stream) {

char temp;
loop_until_bit_is_set(UCSRA,RXC);
temp = UDR;
uart_putchar(temp, stream);
return(temp);
}

void init_uart() {

UCSRA = 0x00;
UCSRB = 0x18;
UBRRH = 0x00;
UBRRL = 0x19;

}

void delay_ms(int ms) {
unsigned int i;
for (i=0; i<=ms; i++) {
_delay_ms(1);
}
}

int main(void) {
init_uart();
stdout = &mystdout;
stdin  = &mystdin;
while(1) {
printf(“Hello World UNIX \n”);
delay_ms(1000);
}
return (0);
}

nah konekin PD0 dan PD1 di AT16, (tx,rx,+gnd) ke komputer..

configuring terminal di linux…

kamu bisa bikin sendiri terminalnya, ini bisa di buat pake lib. termios.h

atau klo ga mau pusing, pke aja minicom…

# sudo apt-get install minicom

nah klo udah, masuk ke terminal dan ketik minicom…

konfigurasi minicom dengan pencet ctrl+a+o

setting parameternya…

trs jalankan program yang tadi…(download dulu)…

dah liat apa yang terjadi di mincom…

* klo karakternya aneh, itu brati baud rate antara si mikon n si komputer blm sama, silahkan setting minicom lagi!!

BEST REGARDS

TOMMY

Tulisan ini dibuat untuk menyukseskan Lomba Blog Open Source P2I-LIPI dan
Seminar Open Source P2I-LIPI 2009.

http://www.informatika.lipi.go.id/seminar/lombablog/
http://www.informatika.lipi.go.id/seminar/

Advertisements
Debugging AVR, with Asynchronous UART with LINUX

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s