Initialisierung UART an Atmega 16

Gast #484428
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 ?
Gast #484482
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);;


}
#484492
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.
1
#ifndef F_CPU
2
#define F_CPU 7372800UL
3
#endif
4

5
#include <avr/io.h>
6

7

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

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

15
  UBRRH = (unsigned char)( Baud >> 8 );
16
  UBRRL = (unsigned char)Baud;
17
}
18

19
void uart_putc( const char c )
20
{
21
  while( !( UCSRA & (1<<UDRE) ) )
22
    ;
23
  UDR = c;
24
}
25

26
int main()
27
{
28
  InitUart( 4800U );
29

30
  while( 1 ) {
31
    uart_putc( 'X' );
32
  }
33
}
Gast #484493
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 */

}
Gast #484496
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...
#484548
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...)
Gast #484551
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...
Gast #484556
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.