Forum: Mikrocontroller und Digitale Elektronik UART Problem mit Mega16 auf STK500


von Tseug H. (tseug)


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


von 1001. Rahul (Gast)


Lesenswert?

>Wie schalte ich den ab?

Guck dir im Programmier-Werkzeug des AVRStudios die Fuses an und dann 
guckst du dir das Datenblatt in Bezug auf die Fuses an.

von Tseug H. (tseug)


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

von Rahul, der Trollige (Gast)


Lesenswert?

Schön, dass mal jemand nicht nur schreibt "Es funktioniert! Danke!".

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.