Forum: Mikrocontroller und Digitale Elektronik Atmega USART: es kommt nur schrott raus


von dili (Gast)


Angehängte Dateien:

Lesenswert?

Code:
#include <avr/io.h>

#define F_CPU 4000000
#define USART_BAUD_RATE 9600
#define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16)-1)

void USART_Init(void) {
    UCSRB =  (1<<RXEN) | (1<<TXEN);
    UBRRL = (unsigned char) USART_BAUD_SELECT;
}

void usart_writeChar(unsigned char c)// Zeichen mit dem USART senden {

   while (!(UCSRA & (1<<UDRE))) {}
   UDR = c;
 }


void usart_writeString(unsigned char *string)// String mit dem USART
senden
{
    while (!(UCSRA & (1<<UDRE))) {}
   while ( *string)
      usart_writeChar(*string++);
 }


void usart_crlf(void) // CarriageReturn + LineFeed = Neue Zeile
 {
   usart_writeChar(0x0D);  // CR #13
   usart_writeChar(0x0A); //  LF #10
 }


unsigned char usart_readChar(void) // Interrupt-unabhängig ein Zeichen
lesen
 {
    while(!(UCSRA & (1<<RXC))) {}
    return UDR;
 }

int main(void){
  USART_Init();
  for (;;) {
      usart_writeChar ('a');
  }
}

wenn ich nun ein "a" an das terminal von bray senden will, dann
empfange ich nichts schlaues.
mit dem hyperterminal von windows kann ich gar nichts empfangen.
kann mir jemand weiterhelfen?
danke für die mithilfe!!!!!!!!!!!!!!!

von Rahul (Gast)


Lesenswert?

du musst erst etwas (0) in ins UBRRH schreiben.
Steht aber auch im  Datenblatt. Das Datenblatt ist dein Freund

von dili (Gast)


Lesenswert?

danke!

UBRRH= (unsigned char) (USART_BAUD_SELECT>>8);

habe ich vom datenblatt entnommen, hat aber keinen einfluss!

etwas anderes streikt, aber keine ahnung!

von Rahul (Gast)


Lesenswert?

Läuft der Controller wirklich mit 4MHz?
Den "{" würde ich eine Zeile spendieren, und nicht in einem Kommentar
schreiben. Wenn dann davor, sonst sind sie Kommentar.
Ich kenne das Terminal-Programm nicht. Such doch sonst mal nach Comtest
von B&B-Electronics. Das benutze ich immer.

von dili (Gast)


Lesenswert?

der oszillator weist eine frequenz von 4mhz, das ist schon ok.in meinem
programm ist"{" schon richtig, nur hier ist es nicht richtig.
was kann man den mit diesem comtest machen? kenne ich gar nicht.

Danke!

von Rahul (Gast)


Lesenswert?

sicher, dass nicht der interne Oszillator läuft? Einer der häufigsten
Fehler überhaupt

von dili (Gast)


Lesenswert?

wie ist den das möglich???

ich habe den doch nicht aktiviert oder?

ich habe nur einen externen angeschlossen

von thkais (Gast)


Lesenswert?

Der interne Oszillator ist im Auslieferungszustand aktiviert, dann läuft
der Controller mit 1Mhz - egal, was außen angeschlossen ist.
Der externe Quarz muß erst per Fuse freigeschaltet werden.
Steht aber auch alles im Datenblatt ;)

von dili (Gast)


Lesenswert?

was ist den fuse? wie kann man das einstellen?
hat das was mit register zu tun??
damit ich den exterenen oszi aktivieren will muss
CKSEL=0x00,
sein oder?

wie kann man das anstellen?
habe so was wirklich nie gemacht:(

wenn das bloss der fehler ist, dann huuu

zu schön um wahr zu sein.

aber wie kann man bloss fuse setzen oder was es auch ist?

von Tobi (Gast)


Lesenswert?

lies mal das tutorial durch...

von thkais (Gast)


Lesenswert?

Was ein Fuse ist -> steht im Datenblatt.
Wie man die Programmiert -> steht im Datenblatt und in der Anleitung
Deiner Programmiersoftware.
ABER VORSICHT!
Durch falsche Programmierung der Fuse-Bits kannst Du den Controller so
konfigurieren, daß Du nicht mehr ohne Aufwand herankommst.
Welche Programmiersoftware benutzt Du? Welchen Controller genau benutzt
Du?
Ich würde es erstmal mit einer Änderung in der Software auf 1 MHz
Taktfrequenz versuchen, evtl. funktioniert das, kann noch
Timingprobleme bringen, weil der interne Oszillator nicht ganz so genau
wie ein Quarz ist. Wäre aber die sichere Methode.

von dili (Gast)


Lesenswert?

merci !

habe es endlich geschafft.

alles läuft nun einwandfrei.

hatte gestern noch eine lange nacht gehabt.

hehehe :)

danke nochmals für eure hilfe!!!!!

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.