Forum: Mikrocontroller und Digitale Elektronik TXC-Flag macht Porbleme bei ATmega162


von Michael Krause (Gast)


Lesenswert?

Hallo!

Seit 2 Tagen suche ich schon nach dem Fehler und ich komme nicht mehr
weiter, hoffentlich kann mir jemand von euch helfen:

Ich habe ein kleines RS485-Netzwerk mit 4 ATmega8 mit einem Master. Das
Netzwerk funktioniert im Mutli-processor Mode. Bisher haben meine
Programme sehr gut funktioniert. Ich musste aber den Master wechseln
und habe nun einen ATmega162 mit 2 UART.

Dieser macht mir jetzt auch Probleme beim Senden über die UART:

SETBIT (UCSR1A, MPCM1);    /* Multiprocessor Communication Mode
aktivieren */
SETBIT (UMSCHALTPORT, UMSCHALTP); /* Treiber wird auf Senden gestellt
*/
SETBIT (UCSR1B, TXB81);   /* Adress-Daten werden gesendet */

bTemp = bSlaveAdresse;  /* 1. Sende-Byte : Highteil ist Adresse */
bTemp |= (SENDEPROZESSABBILD);  /* 1. Sende-Byte : Lowteil ist Befehl
*/

SETBIT (UCSR1A, TXC1);    /* TXC-Flag wird gelöscht */
UDR1 = bTemp;       /* 1. Sende-Byte wird versendet */
while (!CHECKBIT(UCSR1A, TXC1));/* warte, bis Daten gesendet */


Das TXC-Flag wird anscheinend nicht gesetzt, damit bleibt mein µC in
dieser while-Schleife.

Ich habe auch schon die andere UART benutzt, auch ohne Erfolg.

Hier noch meine UART-Initialisierung:

UBRR1H = (unsigned char) (UART_BAUD_SELECT>>8);  /* Baud-Rate einstellen
*/
UBRR1L = (unsigned char) (UART_BAUD_SELECT);

UCSR1B = (1 << RXEN1) | (1 << TXEN1);    /* UART sendet/empfängt */

UCSR1C = (1<<URSEL1)| (2<<UPM10) | (1<<USBS1) | (3<<UCSZ10);
UCSR1B |= (1<<UCSZ12);
                            /* Daten Format: 9 Bit Daten
                                             1 Bit Parity-Bit Even
Parity
                                             2 Bit Stopp-Bit */

UCSR1A |= (1 << MPCM1);  /* Multiprocessor Communication Mode aktivieren
*/

Ich bin für jeden Hinweis dankbar!!

von Michael Krause (Gast)


Lesenswert?

Hallo, ich nochmal,

es hat sich erledigt.

Ich hatte in meinem Code:

UCSR1B = (1<<UCSZ12);

statt

UCSR1B |= (1<<UCSZ12);

und damit habe ich die UART immer deaktiviert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.