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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren