UART Problem mit Mega16 auf STK500

OP #479536
Lesenswert?
• ▲
▼
Hallo Forum,

erstmal muß ich an dieser Stelle anbringen, dass ich dieses Forum super 
finde. Ihr habt mir schon soo häufig bei diesen genialen Hobby helfen 
können. Also, danke ans Forum und an die Leute die Ihr Wissen und ihre 
Erfahrung  bereitwillig anderen zur Verfügung stellen.

Zu meinen Problem.
Ich verwende den Mega16 im STK500 nun habe ich mal den den SPARE mit den 
Rx und Tx von meinen Mega16 verbunden und wollte mit folgenden Code ein 
Echo am Hyperterm erzielen.



#include <avr/io.h>
#include <stdint.h>

#ifndef F_CPU
#define F_CPU 3686400
#endif
#define UART_BAUD_RATE 9600
#define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) 
((F_CPU)/((UART_BAUD_RATE)*16L)-1)

unsigned char get;

int uart_putc(unsigned char c)
{
  while (!(UCSRA & (1<<UDRE)));
  UDR = c;
  return 0;
}

int main(void)
{

  UCSRB |= (1<<TXEN);  //Transmitter Enabled
  UCSRC |= (1<<URSEL) | (3<<UCSZ0);  //Asynchron 8N1

  UCSRB |= (1<<RXEN);  //Emfpang enabl

  UBRRH=(uint8_t) (UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8);
  UBRRL=(uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU);

  DDRB = 0xFF;
  PORTB = 0xFF;

  while(1)
  {

    while(!(UCSRA & (1<<RXC)))
    {
      PORTB = ~get;
    }
    get = UDR;
    uart_putc(get);

  }
}


Denke da sollte alles richtig eingestellt sein. Im Hyperterm kommen aber 
nur so Sachen wie "8888888888>888" an. Hat da jemand nen Plan was ich 
falsch mache?? Da passt doch was mit dem Takt ned, oder?? Wie kann ich 
daran was rumstellen. Und vor allem welchen soll ich einstellen? Ist bei 
mir evtl der interne Oszillator (der ungenaue) aktiv? Wie schalte ich 
den ab?

Danke schon im voraus.
Timo

OP #481813
Lesenswert?
• ▲
▼
Dake für den Hinweis Rahul!!

Hab nun die Fusebits so eingestellt, dass der ext. Oszillator verwendet 
wird und schon geht die Sache.

Also hier nun der Hinweis für alle die auf den STK500 einen UART mit dem 
Mega16 aufbauen möchten.

- Fuses beim Mega16 stehen bei Auslieferzustand auf internen Oszillator. 
Mit diesen Oszillator ist ein UART kaum möglich weil der Takt zu ungenau 
ist. Man sollte deshalb den Oszillator von intern auf extern mit Hilfe 
der Fusebits (siehe Datenblatt bzw. Checkboxen beim AVRStudio im 
Programmodus)stellen und hat somit den sehr genauen Takt von 3686400Hz 
bei Verwendung des STK500.

- Der Code oben funktioniert dann so und gibt das was man im Hyperterm 
eingibt als Echo zurück. Besser ist allerdings die Bib von Fleury. 
http://homepage.hispeed.ch/peterfleury/.

Timo

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.