UART will nicht...

Trechi

Neues Mitglied
03. Jan. 2010
3
0
0
Sprachen
Hi!

Ich habe seit kurzem damit angefangen mich mit Mikrocontrollern auseinander zu setzen und möchte nun den UART vom AtMega16 zum laufen bringen.

Ich benutze:
-STK 500 (RXD und TXD sind mit den richtigen Pins verbunden)
-AtMega16
-USB-Serial-Adapter
-den SW-Oscillator vom STK ( eingestellt mit 3686400 MHZ)

Leider bekomme ich durch das Terminal nur kryptische Zeichen oder Smileys zurück.

Ich habe schon etliche Fuse-Bits für die Clock-Source ausprobiert ,ohne Erfolg.
Muss ich etwas besonderes einstellen für den Software-Quarz des STK´s ?

Im Pc ist eingestellt:
BAUD : 19200
Stopbits: 1
Datenbits:8
Flusssteuerung : Keine
Parität: Keine

Der Code:

Code:
#include <avr/io.h>
#include <inttypes.h>


#define F_CPU   3686400UL

#define BAUD    19200UL
#define UBRR_BAUD ((F_CPU/(16UL*BAUD))-1)


void uart_init(void)
{

  UBRRH = (uint8_t) (UBRR_BAUD>>8);
  UBRRL = (uint8_t) (UBRR_BAUD & 0x0ff);

 
  UCSRB = (1<<RXEN)|(1<<TXEN);

 
  UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}

int main(void)
{
  uint8_t buffer;

 
  uart_init();
  buffer=1;
  while (1)
  {
    

   
    while ( !( UCSRA & (1<<UDRE)) )
      ;

    
    UDR = buffer;
  }
}

Gruß
Johan
 
Versuch mal damit:

Code:
UBRRL = (uint8_t)(UBRR_BAUD);

Also nur diese eine Zeile ersetzen.

Grüsse
Heinrich
 
hey! das ging ja schnell :)
Habe die Zeile ersetzt , hat aber leider nichts gebracht außer einen Haufen Smileys im Terminal :rolleyes:

Hier mal die Fuse-Bit-Einstellung in AVRStudio :Ext.Clock; Start-up time:6 CK +64ms
 
Versuch mal damit:

Code:
	uint16_t ubrr = (uint16_t) ((uint32_t)F_CPU / (16*BAUD)-1);

	UBRRH = (uint8_t)(ubrr >> 8);
	UBRRL = (uint8_t)(ubrr);

Ich glaube, an der Initialisierung ist was faul.

Also, diese drei Zeilen in die uart_init () einfügen, bzw. die zwei Zeilen UBRRH und UBRRL überschreiben.

Grüsse
Heinrich
 
Habs geändert, leider wieder nichts.
Mittlerweile denke ich immer mehr ,dass es am Quarz liegt.

So sieht er nun aus:
Code:
#include <avr/io.h>
#include <inttypes.h>


#define F_CPU   3686400UL

#define BAUD    19200UL
//#define UBRR_BAUD ((F_CPU/(16UL*BAUD))-1)


void uart_init(void)
{

    uint16_t ubrr = (uint16_t) ((uint32_t)F_CPU / (16*BAUD)-1);

	UBRRH = (uint8_t)(ubrr >> 8);
	UBRRL = (uint8_t)(ubrr);

 
  UCSRB = (1<<RXEN)|(1<<TXEN);

 
  UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}

int main(void)
{
  uint8_t buffer;

 
  uart_init();
  buffer=1;
  while (1)
  {
    

   
    while ( !( UCSRA & (1<<UDRE)) )
      ;

    
    UDR = buffer;
  }
}
 
:( :( Hi
Das ihr auch immer in diesem C arbeiten müßt.... :(
Allerdings sind mir folgende Aussagen aufgefallen:

Mittlerweile denke ich immer mehr ,dass es am Quarz liegt.

und

eingestellt mit 3686400 MHZ

Also 3,6 THz, wirklich ? Ich weiß nicht, ob der Atmega 16 so hoch kann...
Gut, ist albern. Also, da ich zum Code nix sagen kann bleibt lediglich die Frage nach den Fuses und der Beschaltung von RxD und TxD. Diese müssen gekreuzt sein. Allerdings denk ich, da du ja was empfängst, ist's richtig. Nun bleibt die Einstellung der Schnittstelle: Baud, Datenbits, Stoppbits, Parity
Wenn alles Ok, dann GND verbunden und ist ein MAX 232 eingesetzt. Bisher hab ich mit Atmegas in der Richtung noch keine Probleme gehabt, allerdings bevorzuge ich ASM .
Gruß oldmax
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)