www.mikrocontroller.net

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


Autor: dili (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!!!!!!!!!!!!!!!

Autor: Rahul (Gast)
Datum:

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

Autor: dili (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke!

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

habe ich vom datenblatt entnommen, hat aber keinen einfluss!

etwas anderes streikt, aber keine ahnung!

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: dili (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Rahul (Gast)
Datum:

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

Autor: dili (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie ist den das möglich???

ich habe den doch nicht aktiviert oder?

ich habe nur einen externen angeschlossen

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: dili (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lies mal das tutorial durch...

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: dili (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!!!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.