mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Empfangen mehrerer Zeichen


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich hoffe jemand kann mir helfen.
Ich möchte mit einem ATMEGA32 mehrere Zeichen empfangen.
das funktioniert jedoch nicht.Senden funktioniert.

Was mache ich falsch?

Ich habe meinen Code im Dateianhang.

Danke

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sieht korrekt aus. Bis auf diese Zeile:

UBRRL = 25;//(unsigned char) baud;

Bist du sicher mit den 2400 Baud? Mir sieht das eher wie 9600 Baud bei
4 MHz F_CPU aus.

Hardwaremäßig alles richtig beschaltet? PC Terminalprogramm korrekt
eingestellt?

Autor: Robert Weber (rweber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein input buffer benötigt mindestes eine Größe von 3 bytes. 2 für
deine Daten + 1 Byte für \0 sonst könnte dein strcmp ins nirwana
laufen.
Oder du verwendest einen strncmp.

Gruß,
rweber

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
UBRRL = 25; stimmt weil ich den internen 1 MHz Oszillator verwende.

Und Hardwaremäßig müsste auch alles ok sein da ich einen STring senden
kann.
Ich kann ein einzelnes Zeichen Empfangen nur sobald es mehr als eines
sind funktioniert es nicht mehr.

Jedoch verwende ich wenn ich ein einzelnes Zeichen empfange nicht diese
Schleife.

for (i = 0;i<=1;i++)
{
input[i]= USART_Receive();


}

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Jedoch verwende ich wenn ich ein einzelnes Zeichen empfange nicht
>diese Schleife.

Wie sieht das sonst aus?

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kurze Zwischenfrage:

Wie oft, denkst du, wird diese Schleife durchlaufen:

    for (i = 0;i<=1;i++){

Nimm mal die Finger zuhilfe, spiel in Gedanken Computer
und arbeite deinen Code mal ab.

Hinweis: Die Schleife wird solange durchlaufen, wie der
2. Ausdruck im for wahr ist!

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nehm alles zurück (wasn heute los? heut passieren mir die
lächerlichsten Fehler).

Der Fehler ist, dass du den String nicht mit einem '\0'
Zeichen abschliesst. Das heist: Deine 2 empfangenen Zeichen
bilden noch keinen String! Daher kannst du auch keinen
strcmp zum Vergleichen benutzen.

Autor: Robert Weber (rweber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Darauf hatte ich auch schon hingewiesen.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> UBRRL = 25; stimmt weil ich den internen 1 MHz Oszillator verwende.

Das wäre mir zu unzuverlässig. Wenn ich UART nutze, verwende ich auch
grundsätzlich einen baudratentauglichen Quarz.

...

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso benutzt Du nicht den Interrupt (RX-Complete)? Mit dem hatte ich
noch nie Probleme, macht den Rest des Programmes auch weniger
zeitkritisch (Polling). Freigeben und sperren kann man den USART durch
setzen und löschen von RXEN, nicht RXCIE. Wenn möglich sollte man die
Benutzung der Interrupts immer vorziehen.

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.