Hallo Leute,
ich weiss mittlerweile gar nicht mehr mit meinem Problem weiter.
Ich verwende das STK500 mit einem external Chrystal 7,3238Mhz (extra nen
optimalen RS232 Quarz) und der Jumper auf OCSEL natürlich umgesteckt und
habe natürlich auch das Fusebit für den externen Takt gesetzt.
Pins vom PD0 und PD1 auf RX und TX sind auch entsprechend gesteckt.
Für die Kommunikation verwende ich 2 Serial to USB Adapter von Digitus,
die auch tadelfrei beim flashen funktionieren.
Ich habe mir einige Beispiele zum verwenden der UARTs durchgelesen und
das PDF an der entsprechende stelle vom Atm16.
Aber egal was ich mache, es kommt zu gar keinem Datenaustausch. Dazu
verwende ich die Codestücke aus dem avr-gcc-tutorial zum Thema UART.
Zur simulation im AVR studio(neuste version am Montag installiert):
Ist ja schön das man da die ganzen Register sehen kann, weniger schön
ist es aber das speziell das UCSRC sich nicht beschreiben lassen will.
UBRR und das UCSRB funktionieren noch tadellos.
(Baudraten 9600 und 19200 ausprobiert)
ich verwende dafür:
1 | void uart_init(void)
|
2 | {
|
3 | UBRRH = UBRR_VAL >> 8;
|
4 | UBRRL = UBRR_VAL & 0xFF;
|
5 |
|
6 | UCSRB |= (1<<TXEN); // UART TX einschalten
|
7 | UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // Asynchron 8N1
|
8 | }
|
Da UCSRC und UBRRH die selbe I/O location haben, muss man sich ja
zwischen URSEL = 1/0 entscheiden um die jeweiligen Register zu selecten,
soweit schon klar.
Nach dieser Befehlszeile bleibt das Register jedoch unberührt.
Wenn ich die entsprechenden Flags manuell im UCSRC beschreibe, so werden
dieselben auch im UBRRH gesetzt O_o, blöder simulationsfehler ?
naja soweit so schlecht...UDR wehrt sich ebenfalls
ich denke mal es liegt schon an dem UCSRC/UBRRH Problem, das
entsprechend auch das UDR nicht gesetzt werden will.
hierfür verwende ich:
1 | while (!(UCSRA & (1<<UDRE)))
|
2 | {
|
3 | }
|
4 |
|
5 | UDR = 'x';
|
Ich möchte lediglich ein Zeichen bekommen im hterm
Was läuft hier nun Falsch ?
Ultra Dank im Voraus