Hallo noch mal,
hab den Takt mal auf 1MHz eingestellt. Nun bekomme ich im HyperTerminal
auch permanent Daten gesendet. Jedoch haben die Daten nichts mit dem zu
tun was der AVR sendet(bzw. senden soll).
Das müsste ja mal fürs erste heißen das das UART mit dem internen Oszi
arbeitet, oder? Wenn ja wie kann ich das abstellen?
Komisch ist auch noch das, wenn ich dem uC den Saft klaue und in dan
wieder anklemme, immer mal ein paar Zeichen richtig ankommen s.U.
òiaì Data f⥲©¡¬ ¡´¡¡´¡ ¦²¯ ¶ ²¥£¥©¶¥¤££¬ ¤¡´¡ æ²ï ¡ receiv
^^^^^^ ^^^^^^
Woran kann das liegen.
Es werden immer die gleichen 32 Zeichen gesendet, nur nicht die, die
kommen sollten.
Bin für jeden Hinweis Dankbar, der Jochen
Hier mal noch mein C-Code den ich verwende.
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define F_CPU 1000000 /* 4Mhz */
#define UART_BAUD_RATE 9600 /* 9600 baud */
#define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1)
typedef unsigned char u08;
typedef char s08;
typedef unsigned short u16;
typedef short s16;
/* uart globals */
static volatile u08 *uart_data_ptr;
static volatile u08 uart_counter;
SIGNAL(SIG_UART_TRANS)
/* signal handler for uart txd ready interrupt */
{
uart_data_ptr++;
if (--uart_counter)
outp(*uart_data_ptr, UDR); /* write byte to data buffer
*/
}
SIGNAL(SIG_UART_RECV)
/* signal handler for receive complete interrupt */
{
register char led;
led = inp(UDR); /* read byte for UART data buffer */
outp(~led, PORTB); /* output received byte to PortB (LEDs) */
}
void uart_send(u08 *buf, u08 size)
/* send buffer <buf> to uart */
{
if (!uart_counter) {
/* write first byte to data buffer */
uart_data_ptr = buf;
uart_counter = size;
outp(*buf, UDR);
}
}
void uart_init(void)
/* initialize uart */
{
/* enable RxD/TxD and ints */
outp((1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN),UCSRB);
/* set baud rate */
outp((u08)UART_BAUD_SELECT, UBRRL);
outp(0, UBRRH);
}
int main(void)
{
outp(0xff ,DDRB); /* PortB output */
outp(0x00, PORTB); /* switch LEDs on */
uart_init();
sei(); /* enable interrupts */
for (;;) { /* loop forever */
uart_send("Serial Data from AVR received###", 32);
}
}