www.mikrocontroller.net

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


Autor: Michael Krause (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!

Autor: Michael Krause (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.