Hallo! Bin noch recht neu auf dem Gebiet µC.
Habe mir zu Weihnachten das RNControl 1.4 gekauft und unter Windows mit Bascom lief auch alles wie geschmiert. Nun bin ich aber auf Linux und AVR-GCC umgestiegen und schon kamen die Probleme.
Der UART lief erst nicht, was an dem bekannten 16 Mhz Problem lag). Dies habe ich nach langen herumhacken aber endlich hinbekommen und konnte einzelne Zeichen versenden.
Wenn ich aber einen String versenden möchte kommt entweder überhaupt nichts oder nur "bekloppte" Zeichen.
Hat jemand Ahnung woran das liegen könnte? Auf dem Board ist ein Mega16 mit 16 Mhz.
Hier der Quellcode
Die Ausgabe gibt jede ist:Code:#include <avr/io.h> #include<avr/interrupt.h> #include<avr/signal.h> volatile unsigned int nTicks=0; void init_uart(void); void timer (void); void uart_putc(char c); void uart_puts (char *s); void init_uart (void){ UBRRL = 207; //set baud rate UBRRH = 207 >> 8; UCSRA = _BV(U2X); UCSRC = 1<<URSEL^1<<UCSZ1^1<<UCSZ0; //8 Bit UCSRB = 1<<TXEN; // TX*/ UBRRH = 0; UBRRL = 207; UCSRA = 1<<U2X; UCSRB = (1<<TXEN)|(1<<TXCIE); UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); } void uart_putc(char c) //gibt ein Zeichen aus { while( (UCSRA & 1<<UDRE) == 0 ); UDR = c; } void uart_puts (char *s) //soll einen String ausgeben { while (*s) { /* so lange *s != NULL */ uart_putc(*s); s++; } } void timer (void){ TIMSK = (1 << TOIE0); TCNT0 = 0; TCCR0 = (1<<CS00)|(1<<CS02); } SIGNAL (SIG_OVERFLOW0) { nTicks++; // 1/ ((16000000 / 1024) / 256) = 16,384ms * 61 = 999,424ms if(nTicks == 61) { uart_putc('H'); uart_putc('e'); uart_putc('l'); uart_putc('l'); uart_putc('o'); uart_putc(' '); uart_putc('W'); uart_putc('o'); uart_putc('r'); uart_putc('l'); uart_putc('d'); uart_putc('!'); uart_putc('\n'); } if(nTicks == 122) { uart_putc('1'); uart_putc('\n'); } if(nTicks == 183) { uart_putc('2'); uart_puts("HELLO WORLD"); uart_putc('\n'); } if(nTicks > 183) { nTicks = 0; } } int main (void) { init_uart(); timer(); sei(); for(;;) { } }
Hello World!
1
2²
héÊŒU8Á·
Lesezeichen