mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit UART


Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, wollte eine UART bei einem ATMega8 einrichten und bin nachdem 
Tutorial auf der Hauptseite geangen. Das senden eines Zeichens klappt 
auch Problemlos,  jedoch will das Senden einer Zeichenkette nicht, da 
ich nur irgendwelche kryptischen Zeichen empfange.
Mein Code währe folgender:

#include <avr/io.h>

#ifndef F_CPU
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 
12000000"
#define F_CPU 12000000L    // Systemtakt in Hz, das L am Ende ist 
wichtig, NICHT UL verwenden!
#endif

#define BAUD 9600L          // Baudrate, das L am Ende ist wichtig, 
NICHT UL verwenden!

// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille

#if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu 
hoch!
#endif


void putc(char c)
{
  while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich 
*/
  {
  }

  UDR = c;                    /* schreibt das Zeichen x auf die 
Schnittstelle */
}

void puts (char *s)
{
    while (*s)
    {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
        putc(*s);
        s--;
    }
}

int main(void)
{

  UCSRB |= (1<<TXEN);                // UART TX einschalten
  UCSRC |= (1<<URSEL)|(3<<UCSZ0);    // Asynchron 8N1

  UBRRH = UBRR_VAL >> 8;
  UBRRL = UBRR_VAL & 0xFF;

  puts('Hallo');

  return 0;

}

Wo ist das Problem?

Autor: Steffen K. (steffen3)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
versuch doch mal
void puts (char *s)
{
    while (*s)
    {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
        putc(*s);
        s++;
    }
}

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So hatte ich es vorher, klappte jedoch auch nicht.

Autor: David Madl (md2k7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem liegt hier:
  puts('Hallo');

In C werden in einfache Anführungszeichen '' einzelne Zeichen 
eingeschlossen 'a'. Ein String wird durch doppelte Anführungszeichen 
"Hallo" dargestellt. Daraus wird/das entspricht einem char-Array {'H', 
'a', 'l', 'l', 'o', '\0'}

P.S. bei der Ausgabe musst du in der Schleife natürlich den Pointer 
erhöhen, also s++

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Argh, verdammter Pascal-Syntax. Danke dir.

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.