Forum: Compiler & IDEs USART mit Mega16


von Moritz Veit (Gast)


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

von Florian Pfanner (Gast)


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

von Moritz Veit (Gast)


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

von Moritz Veit (Gast)


Lesenswert?

HI,
ich habs es lag nicht am programm sonder an der Hardware ;-) Jetzt
funktioniert es einwand frei g
Trotzdem danke für dei antworten.
Moritz

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.