www.mikrocontroller.net

Forum: Compiler & IDEs USART Problem beim ATMEGA644P


Autor: Christoph K. (klemze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich verwende beide usart schnittstellen des controllers

sobald ich die globalen interrupts im main file freigebe resetet sich 
der controller

was zum henker mache ich falsch?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph K. schrieb:

> was zum henker mache ich falsch?

Den Code nicht zu posten.

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph K. schrieb:
> ich verwende beide usart schnittstellen des controllers
>
> sobald ich die globalen interrupts im main file freigebe resetet sich
> der controller
>
> was zum henker mache ich falsch?

Zeile 42 in deinem Programm ist falsch...

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Zeile 42 in deinem Programm ist falsch...

und in dieser Zeile gibst du einen Interrupt frei, für den es keine ISR 
gibt.

Oliver

Autor: Christoph K. (klemze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe den code abgegrenzt, der fehler scheint hier zu liegen:


  //Serielle Schnittstelle 0

    //Enable TXEN im Register UCR TX-Data Enable

  UCR =(1 << TXEN | 1 << RXEN | 1<< RXCIE);

  // 0 = Parity Mode Disabled

  // 1 = Parity Mode Enabled, Even Parity

  // 2 = Parity Mode Enabled, Odd Parity

  //UCSRC = 0x06 + ((parity+1)<<4);

  //UCSRC |= (1<<USBS);

  //Teiler wird gesetzt

  UBRR=(F_CPU / (baudrate * 16L) - 1);

  usart_status.usart_disable = 0;


  #if USART1
  //Serielle Schnittstelle 1

    //Enable TXEN im Register UCR TX-Data Enable

  UCR1 =(1 << TXEN1 | 1 << RXEN1 | 1<< RXCIE1);

  // 0 = Parity Mode Disabled

  // 1 = Parity Mode Enabled, Even Parity

  // 2 = Parity Mode Enabled, Odd Parity

  //UCSRC = 0x06 + ((parity+1)<<4);

  //UCSRC |= (1<<USBS);

  //Teiler wird gesetzt

  UBRR1 =(F_CPU / (baudrate * 16L) - 1);
  #endif

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph K. schrieb:
> habe den code abgegrenzt, der fehler scheint hier zu liegen:
>
> ...

Und damit soll jemand was anfangen können?

Autor: Christoph K. (klemze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nachdem ich die usart initialisiert habe resettet der controller von 
sich aus

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du Interrupt Handler für beide USART?

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph K. schrieb:
> nachdem ich die usart initialisiert habe resettet der controller von
> sich aus

ich zitiere mich mal selbst:

> Und damit soll jemand was anfangen können?

Solange du keinen vollständigen Code postest, wird dir niemand helfen 
können und auch nicht wollen. Meine Glaskugel vermutet, dass Oliver 
recht hat, aber die arbeitet nicht wirklich zuverlässig...

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>   //Enable TXEN im Register UCR TX-Data Enable

>  UCR =(1 << TXEN | 1 << RXEN | 1<< RXCIE);

Kommentare sind häufig Unsinn, wie man hier mal wieder deutlich gezeigt 
bekommt. Du gibst nicht nur TXEN frei, sondern auch alle anderen 
Interrupts der UART. Und ich wette, daß es dazu keine passenden ISR's 
gibt.

Oliver

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver schrieb:
>>   //Enable TXEN im Register UCR TX-Data Enable
>
>>  UCR =(1 << TXEN | 1 << RXEN | 1<< RXCIE);
>

 Komisch, in meinem Datenblatt zum Mega644p gibt erst gar kein 
UCR-Register...

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

> Du gibst nicht nur TXEN frei, sondern auch alle anderen
>Interrupts der UART. Und ich wette, daß es dazu keine passenden ISR's
>gibt.

Nein. TXEN und RXEN geben lediglich Sender und Empfänger frei. Keine 
Interrupts. Das macht lediglich RXCIE.

MfG Spess

Autor: Christoph K. (klemze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat irgendwer einen lösungsansatz?

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, lern etwas über die Prozessorregister und schau' Dir das Datenblatt 
an.

Das hat Dir doch Justus bereits geschrieben: es gibt kein UCR oder UCR1 
Register, außer Du hast selbst eines definiert.

Das zuständige Register dafür wäre das UCSRnB. Und dann noch dafür 
sorgen, daß es für das RXCIE auch eine passende ISR gibt.

Und benutz ab und zu die Shifttaste...

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>hat irgendwer einen lösungsansatz?

Wie wäre es damit, die bisher gegeben Antworten mal zu lesen?

Oliver

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein Beispiel für alle AVRs:

Beitrag "AVR-GCC: UART mit FIFO"


So schlimm ist das garnicht, ein paar Defines und gut is.

Ganz stur nach der Methode entwickelt: anderen AVR-Typ auswählen und 
dann die Fehlermeldung ansehen und dann im Datenblatt, wie das Register, 
Bit oder ISR dort heißt.


Peter

Autor: Christoph K. (klemze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab den fehler gefunden

UCR war falsch definiert

danke für die hilfe

nur das nechste mal bitte etwas freundlicher....

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.