www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Initialisierung UART an Atmega 16


Autor: Strippi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

ich habe ein Problem mit der Initialisierung der UART Schnittselle am 
Atmega16.

Wärend der Initialisierungsphase soll das UCSRC gelesen Beziehungsweise 
die Steuerbits geschaltet werden. Diese fuktioniert leider nicht ich 
habe schon so ziemlich alles versucht.
Das UBRRH Register was die gleich Adresse verwendet läßt sich auch nicht 
beschreiben.

Hat jemand einen Tipp ?

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hat jemand einen Tipp ?

USREL-Bit

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guckst Du Datenblatt: URSEL gesetzt -> UCSRC wird geschrieben
                      URSEL nicht gesetzt -> UBRRH wird geschrieben

Autor: Strippi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

danke für eure Antworten habe ich schon getestet funzt  leider nicht.

URSEL habe ich gelöscht und gesetzt leider alles zecklos.


Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeigen!

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum gibt sich Atmel eigentlich immer solche Mühe mit den 
Datenblättern, wenn keiner reinguckt?

Auf Seite 148 ist die USART-Initialisierung inklusive Beispiel 
beschrieben.

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Bit heisst USBS...

Autor: Strippi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier der Code


void init_uart (unsigned char baud   )
{

// baud = 51

 UBRRH = (unsigned char)(baud>>8);

 UBRRL = (unsigned char)baud;

 /* Enable  Transmitter */

 UCSRB = (1<<TXEN);
 UCSRC = (1<<USBS)|(1<<UCSZ0);;


}

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> UCSRC = (1<<USBS)|(1<<UCSZ0);
Und wo hast Du da URSEL gesetzt? Es muss heißen
UCSRC = (1 << URSEL) | (1 << USBS) | (1 << UCSZ0);

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
baud sollte eigentlich eher einen grösseren Datentyp haben.
Tut hier aber nichts zur Sache.

Welche Taktfrequenz und Baudrate hast du denn?

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und woran merkst du, dass es nicht funktioniert?

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

Bewertung
0 lesenswert
nicht lesenswert
Bei F_CPU musst du noch deine tatsächliche Taktfrequenz
einstellen.

Die Initialisierung des Baudratenregisters klappt bei mir
nur dann, wenn ich sie nach dem Beschreiben von UCSCRC mache.

#ifndef F_CPU
#define F_CPU 7372800UL
#endif

#include <avr/io.h>


void InitUart( unsigned int Baud )
{
  UCSRB |= (1<<TXEN) | (1<<RXEN);
  UCSRC |= (1<<URSEL)| (1<<USBS) | (3<<UCSZ0);

  Baud = F_CPU / (Baud * 16L) - 1;

  UBRRH = (unsigned char)( Baud >> 8 );
  UBRRL = (unsigned char)Baud;
}

void uart_putc( const char c )
{
  while( !( UCSRA & (1<<UDRE) ) )
    ;
  UDR = c;
}

int main()
{
  InitUart( 4800U );

  while( 1 ) {
    uart_putc( 'X' );
  }
}

Autor: Strippi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe ich hier nochmal sder neue Code mit URSEL

P.s ich verwende einen JTAG von Atmel und AVR Studio mit Sp2

void init_uart (unsigned char baud   )
{

// baud = 51

 UBRRH = (unsigned char)(baud>>8);

 UBRRL = (unsigned char)baud;

 /* Enable Receiver and Transmitter */

 UCSRB = (1<<TXEN);
 UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ0);;
 /* Set data Frame 8 Data Bits 1 Parity */

}

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ich verwende einen JTAG von Atmel und AVR Studio mit Sp2

Was soll uns das sagen?

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...Und, klappt es? Vermutlich nicht. Aber wenn Du jetzt noch, wie von 
Karl Heinz angemerkt, erst die Steuerregister und dann die 
Baudratenregister schreibst, dann sollte es gehen, vorausgesetzt, Du 
hast die korrekte Taktfrequenz eingestellt...

Autor: Strippi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke
an alle funzt leider nicht

UBRRH und UCSRC werden nicht beschieben


Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird das Unterprogramm denn überhaupt (korrekt) aufgerufen?

Autor: Strippi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja wir es, UCSRB = (1<<TXEN) wird ausgeführt

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

Bewertung
0 lesenswert
nicht lesenswert
Strippi wrote:
> ja wir es, UCSRB = (1<<TXEN) wird ausgeführt

Woher weist du das?
Simulator? Vergiss ihn!

Welches Program?
Das das ich gepostet habe stammt von gestern abend
direkt von meinem Mega16. Das geht nachweislich.
Wenn du damit am PC keinen Empfang hast, dann hast du
ein anderes Problem. (Kabel gekreuzt, MAX232 geht nicht,
flasche Taktfrequenz, etc...)

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Woher weist du das?
>Simulator? Vergiss ihn!

>ich verwende einen JTAG von Atmel und AVR Studio mit Sp2

Nix Simulator...Emulator!
Solange die Baudrate und die Taktfrequenz unbekannt sind, ist das wieder 
nur Rumgestochere...

Autor: Strippi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich messe direkt an dem TX Pin vom ATmega 16.

Taktfrequenz ist 8 MHz intern.

Kabel sind auch nicht gekreuzt.

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>// baud = 51

Würde zu 2MHz und 2400Baud (0,2%Fehler) oder 8MHz und 9600baud oder 
16MHz und 19,2kbaud oder 16MHz, 38,4kbaud und U2X=1 passen...

Mehr dazu findet man in Tabelle 68ff im Datenblatt...

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.