W
Wolfgang Meier
Guest
Hallo,
um einem Atmel ATmega32 (AVR) das Sprechen mit dem Computer zu
vereinfachen habe ich einen MAX232 an die Pins RXD und TXD meines AVR
gehängt.
Der Versand von Nachrichten zum PC klappt hervorragend, es sind
nichtmal Einbrüche in der Spannungsversorgung sichtbar, aber beim
Empfang passiert auf den Leitungen etwas eigenartiges:
Der Pegel bricht auf TTL-Seite mit jedem Zeichen von +5V Ruhepegel nur
kurz auf ca. +4.9V ein. Schalte ich einen zweiten Transceiver dazu,
bekomme ich +4.8V - das ist zwar richtiger, aber noch nicht ganz in
Ordnung
Erst wenn ich den Microcontroller abklemme (oder mittels Jumper im
Reset halte) bekomme ich saubere Pegel von +5V und 0V - hat der AVR
also einen gigantischen Pull-Up auf 5V aktiv, zu groß für den MAX232?
Die Beschaltung des MAX232 ist (für ein Null-Modem-Kabel) wie folgt:
AVR MAX232 RS232
RXD -- 9 8 -- TX
TXD -- 10 7 -- RX
GND -- 15 15 -- GND
zusätzlich gibt's noch die obligatorischen +5V an Bein 16 des MAX232
und jeweils einen 1uF-Kondensator an den Beinchen 1->3, 2->GND, 4->5
und GND->6.
Die Initialisierung des USARTS passiert mit folgendem Code-Schnipsel:
UCSRB |= (1<<RXEN) | (1<<TXEN); // activate RX, TX
UCSRC |= (1<<URSEL) | (3<<UCSZ0); // Asyc. 8N1
uint16_t ubrr = F_CPU / (USART_BAUD * 16L) - 1;
UBRRH = (uint8_t)(ubrr >> 8);
UBRRL = (uint8_t)(ubrr >> 0);
....soweit also auch keine schwarze Magie. Selbst ein vorgeschaltetes...
bit_clear(DDRD, PD0);
bit_clear(PORTD, PD0);
....bringt keine Linderung. Kein Wunder - sagt das Datenblatt ja, dass
bei aktiviertem RXEN das Beinchen sowieso nicht mehr auf DDRD hört.
Aber was könnte dann los sein?
Vielleicht hat ja jemand von euch schon einmal etwas ähnliches erlebt
und kann mir einen Tip geben.
Help me, d.s.e! You are my only hope...
Wolf
um einem Atmel ATmega32 (AVR) das Sprechen mit dem Computer zu
vereinfachen habe ich einen MAX232 an die Pins RXD und TXD meines AVR
gehängt.
Der Versand von Nachrichten zum PC klappt hervorragend, es sind
nichtmal Einbrüche in der Spannungsversorgung sichtbar, aber beim
Empfang passiert auf den Leitungen etwas eigenartiges:
Der Pegel bricht auf TTL-Seite mit jedem Zeichen von +5V Ruhepegel nur
kurz auf ca. +4.9V ein. Schalte ich einen zweiten Transceiver dazu,
bekomme ich +4.8V - das ist zwar richtiger, aber noch nicht ganz in
Ordnung
Erst wenn ich den Microcontroller abklemme (oder mittels Jumper im
Reset halte) bekomme ich saubere Pegel von +5V und 0V - hat der AVR
also einen gigantischen Pull-Up auf 5V aktiv, zu groß für den MAX232?
Die Beschaltung des MAX232 ist (für ein Null-Modem-Kabel) wie folgt:
AVR MAX232 RS232
RXD -- 9 8 -- TX
TXD -- 10 7 -- RX
GND -- 15 15 -- GND
zusätzlich gibt's noch die obligatorischen +5V an Bein 16 des MAX232
und jeweils einen 1uF-Kondensator an den Beinchen 1->3, 2->GND, 4->5
und GND->6.
Die Initialisierung des USARTS passiert mit folgendem Code-Schnipsel:
UCSRB |= (1<<RXEN) | (1<<TXEN); // activate RX, TX
UCSRC |= (1<<URSEL) | (3<<UCSZ0); // Asyc. 8N1
uint16_t ubrr = F_CPU / (USART_BAUD * 16L) - 1;
UBRRH = (uint8_t)(ubrr >> 8);
UBRRL = (uint8_t)(ubrr >> 0);
....soweit also auch keine schwarze Magie. Selbst ein vorgeschaltetes...
bit_clear(DDRD, PD0);
bit_clear(PORTD, PD0);
....bringt keine Linderung. Kein Wunder - sagt das Datenblatt ja, dass
bei aktiviertem RXEN das Beinchen sowieso nicht mehr auf DDRD hört.
Aber was könnte dann los sein?
Vielleicht hat ja jemand von euch schon einmal etwas ähnliches erlebt
und kann mir einen Tip geben.
Help me, d.s.e! You are my only hope...
Wolf