PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATtiny2313 + USART = am verzweifeln :-(



Dirk M
15.06.2007, 15:09
Hallo

Bekomme es mit dem ATtiny2313 einfach nicht hin Daten an den PC zusenden [-(

Es soll eine 8-N-1 Verbindung mit einem 9600 Baud sein.

Hier mein bisheriger Code:


#include <avr/io.h>


#define F_CPU 7372800 // 7,3728 Mhz

#include <util/delay.h>

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




void usart_putc(unsigned char c)
{
// warten bis UDR bereit ist
while(!(UCSRA & (1 << UDRE)));
UDR = c; // sende Zeichen
}

int main(void)
{

UCSRC = (1<<USBS)|(3<<UCSZ0);
UCSRB = (1 << TXEN);

UBRRH = (uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8);
UBRRL = (uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU);

while(1)
{
usart_putc('M');
_delay_ms(300);
}
}


Es kommt einfach garnichts an...

Hardware scheint aber ok zu sein, wenn ich den Controller aus dem Sockel entferne und TX/RX Verbinde, empfängt der PC das was er auch sendet...

Schonmal vielen Dank :-)

Gruß
Dirk

Relaxxo
15.06.2007, 15:30
im datenblatt steht, dass wenn USBS=1 ist, zwei stop bits verwendet werden. du möchtest doch nur 1 Stopbit. ändere das mal.

Dirk M
15.06.2007, 15:50
Hab nun nur UCSRC = (3<<UCSZ0); passiert aber leider noch immer nichts :-(

wkrug
15.06.2007, 16:57
Mal ne blöde Frage,
nen Schnittstellenwandler, MAX 232 oder Transistorschaltung hast Du schon zwischen dem Tiny und dem PC ?

Relaxxo
15.06.2007, 16:58
schreib anstatt: UCSRC = (1<<USBS)|(3<<UCSZ0);
UCSRB = (1 << TXEN);

dies: UCSRC |= (1<<USBS)|(3<<UCSZ0);
UCSRB |= (1 << TXEN);

Dirk M
15.06.2007, 20:02
bringt leider nichts...

@wkrug:
verwende einen MAX232.

Hab nochmal ein Screenshot von den Fuse Bits angehängt.. kann es evtl auch daran liegen?

weiter oben ist noch ein Haken bei:
"Serial programm downloading"
"Brown-out detection disabled"
"Divide clock by 8 internally"

//EDIT: hatte bei früheren Versuchen bei UBRRH und UBRRL mal irgendetwas reingeschrieben. dann wurde wilder Zeichensalat gesendet.. Evtl die Berechnung falsch?

Hubert.G
15.06.2007, 20:51
Es könnte das schuld sein "Divide clock by 8 internally" da wird doch der Takt durch 8 geteilt.

Hubert

Dirk M
15.06.2007, 23:23
YEAH es geht nun :shock:

@Hubert.G: es lag wirklich an dem "Divide clock by 8 internally" 8-[

VIELEN DANK an euch alle :-)