Atmega USART: es kommt nur schrott raus

Gast #156702
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!!!!!!!!!!!!!!!
Angehängte Dateien:
Gast #156704
danke!

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

habe ich vom datenblatt entnommen, hat aber keinen einfluss!

etwas anderes streikt, aber keine ahnung!
Gast #156705
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.
Gast #156706
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!
Gast #156709
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 ;)
Gast #156710
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?
Gast #156712
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.
Gast #156713
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.