Serielle Ausgabe auf AtMega88

16/05/2011 - 13:27 von Josef Moellers | Report spam
Main,

Also isch werd' noch mal ...

Ich versuche verzweifelt einfach einen String über den seriellen Ausgang
eines AtMega88 auszugeben:
* Chip ist "jungfràulich" (interner Takt, /8-Prescaler enable-t)
* Initialisierung wie im Datenblatt:
UBRR0H/L auf 51 (bei 1MHz Takt sollte das 1200 Baud ergeben)
UCSR0B = (1 << RXEN0) | (1 << TXEN0);
UCSR0C = (1 << USBS0) | (3 << UCSZ00); /* 8n1 */
* Ausgaberoutine: while (!(UCSR0A & (1 << UDRE0))); UDR0 = ch;
* main(): USART_Init(51);
while (1) for (s = greeting; *s != '\0'; s++)
USART_Transmit(*s);

Aber es kommt ... nix! Der Ausgang PD1 bleibt auf log. 1! Ich hab's mit
mehreren Abnehmern versucht: über einen USB-Seriell-Adapter (i.W. ein
FT232RL) und über einen XPORT Seriell-auf-LAN-Baustein (sebstverfreilich
mit TTL-Pegeln!)

1) Der Port ist noch OK: wenn ich einfach DDRD=0xff und dann
while (1) PORTD++;
mache, sehe ich auf dem Oszilloskop jeweils Takte mit halber
Geschwindigkeit, wenn ich die PDx entlangfahre. Insbesondere sehe ich
auf PD1 einen Takt.
2) Wenn ich DDRB = 0x02 und nach jedem Zeichen PORTB ^= 2 mache, sehe
ich auf PB1 einen Takt.
3) Wenn ich die lfuses auf 0x22 setze, sehe ich auf PB0 den 1MHz Takt.

Wie kriege ich was ausgegeben!?! Hat der AtMega88 was Besonderes?

Josef
These are my personal views and not those of Fujitsu Technology Solutions!
Josef Möllers (Pinguinpfleger bei FTS)
If failure had no penalty success would not be a prize (T. Pratchett)
Company Details: http://de.ts.fujitsu.com/imprint.html
 

Lesen sie die antworten

#1 Uwe Hercksen
16/05/2011 - 14:23 | Warnen spam
Josef Moellers schrieb:

Main,

Also isch werd' noch mal ...

Ich versuche verzweifelt einfach einen String über den seriellen Ausgang
eines AtMega88 auszugeben:
* Chip ist "jungfràulich" (interner Takt, /8-Prescaler enable-t)
* Initialisierung wie im Datenblatt:
UBRR0H/L auf 51 (bei 1MHz Takt sollte das 1200 Baud ergeben)
UCSR0B = (1 << RXEN0) | (1 << TXEN0);
UCSR0C = (1 << USBS0) | (3 << UCSZ00); /* 8n1 */
* Ausgaberoutine: while (!(UCSR0A & (1 << UDRE0))); UDR0 = ch;
* main(): USART_Init(51);
while (1) for (s = greeting; *s != '\0'; s++)
USART_Transmit(*s);

Aber es kommt ... nix! Der Ausgang PD1 bleibt auf log. 1! Ich hab's mit
mehreren Abnehmern versucht: über einen USB-Seriell-Adapter (i.W. ein
FT232RL) und über einen XPORT Seriell-auf-LAN-Baustein (sebstverfreilich
mit TTL-Pegeln!)



Hallo,

hast Du auch das berücksichtigt:
"20.6 Data transmission – The USART transmitter
The USART Transmitter is enabled by setting the Transmit Enable (TXEN)
bit in the UCSRnB Register. When the Transmitter is enabled, the normal
port operation of the TxDn pin is overridden by the USART and given the
function as the Transmitter’s serial output."

Der TxDn pin muß als UART Ausgang extra enabled werden!

Bye

Ähnliche fragen