USART mit Mega16

Gast #75558
Lesenswert?

Hi,
ich hab ein kleines problem beim Senden über das UART des Mega16. Ich
habe das eigendlich so gemacht wie es im AVR-GCC Tutorial
vorgeschrieben ist nur die entsprechenden Register gegen die Richtigen
ausgetauscht so sieht der source aus


#include <avr/io.h>
#include <stdarg.h>
#include <ctype.h>
#include <string.h>


#define F_CPU                   8000000         // 16Mhz
#define UART_BAUD_RATE          9600            // Baud 9600

// Berechnen des Inahltes des UBBRL Registers
#define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1)

// Datentypedefinieren
typedef unsigned char   BYTE;
typedef unsigned short  WORD;

// Funktionsprototypen
void UartInit (void);
void UartWrite (BYTE c);

int main (void)
{
// Initalisieren des UARTs
UartInit ();

//for (;;) {
// sende ein t
outp ('t',UDR);
//}
}

void UartInit (void)
{
//UART Control Register Laden
outp ((1 << TXEN), UCSRB);
// Baudrate setzen
outp ((BYTE) UART_BAUD_SELECT, UBRRL);

}

Der MAX232 Arbeitet richtig und die Signale die rauskommen kommen auch
am pin 2 des kabels an. Also an der Hardware kanns eigendlich nicht
leigen ... ich benutze im moment noch den internen Oszilator mit 8Mhz
)

Moritz Veit
Gast #75559
Lesenswert?

Was kommt denn am PC an? - wenn nur verstümmelte zeichen ankommen deutet
das darauf hin, dass deine UART-Frequenz nicht ganz stimmt. Wenn du ein
OSZI hast, kannst du auch mal prüfen ob was herauskommt.
Noch was: bevor du ein zeichen in das sende-Register schreibst,
solltest du prüfen ob es leer ist. Also vorher UDRE im UCSRA auf log. 1
testen und dann erst byte in register schreiben.
Ich schreibe das immer so:

void send_char(unsigned char zeichen)
{
  while(!(UCSRA&(1<<UDRE)));

  UDR=zeichen;
}


Gruß, Florian
Gast #75560
Lesenswert?

HI,
es kommt leider gar nichts am PC an. mit dem Oszi hab ich es schon
durchgescheckt es kommt ein komisches signal an das nicht grad nach ne
com signal aussieht ist ne runde aufsteigende flanke und dann ne steile
abfallende. Gestern ahtte ich auch das Phenomen das das signal so
ausgesehen hat :
- -- - -- - -- - --
 - -- - -- - -- -

mfg
Moritz

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