www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART zahl auslesen


Autor: Tobias Domhöfer (tobias92)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich bin gerade dran mit dem uart eine zahl auszulesen, die ich mit Hterm 
an den microcontroller sende. ich nutze ein mega16. bei zahlen bis 255 
klappt das auch ganz hervorragend, aber dann reicht das UDR register 
leider nicht mehr aus, in dem die ganzen zahlenwerte gespeichert werden, 
da es nur ein 8 bit register ist. das heißt, ich muss erst die higher, 
dann die lower bits ein einem regiter speichern und dann die zahlen 
zusammenfügen. aber wie mach ich das?
villt in einer interruptroutine, wenn ein zeichen erfolgreich empfangen 
wurde?

mfg
tobias

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias Domhöfer schrieb:
> aber wie mach ich das?
Jetzt brauchst du eine Anfangs- und/oder Ende-Kennung.
Am besten überträgst du die Zahl gleich in ASCII (wie das der Rest der 
Welt eigentlich auch macht), dann kannst du die "üblichen" Zeichen wie 
z.B. CR, LF als Zeilenende und Zahlenende hernehmen. Und dann wandelst 
du den empfangenen String mit atio() in einen Integerwert um.

Autor: Tobias Domhöfer (tobias92)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie kann ich diese zeichen ans zeilenende ernehmen? ich versteh nicht so 
richtig, wie du das meinst...hast du evtl. da mal einen beispielcode 
für?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles fängt schon mal damit an, dass du mitteilen solltest in welcher 
Sprache du programmierst.

Autor: Tobias Domhöfer (tobias92)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich programmiere in C

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK.
Was Lothar meint:
Deine erste Priorität ist es jetzt erst mal nicht ein Byte zu empfangen, 
sondern einen String. Einen Text.

Dazu empfängt man solange Zeichem bis ein Zeilenende Zeichen ('\n') 
daher kommt, welches dem Empfänger mitteilt dass die Eingabe jetzt zu 
Ende ist. Die empfangenen Zeichen werden in einem char-Array 
zwischengespeichert.

Der auswertende Teil, der sich nach dem Zeilenende den String vornimmt, 
weiß jetzt, dass es sich um die Textdarstellung einer Zahl handelt und 
benutzt die Funktion atoi um daraus dann eine echte Zahl zu machen.


Einen String per UART zu empfangen findet sich jeden Tag mindestens 5 
mal hier im Forum. Und auch im AVR-GCC-Tutorial findet sich dazu eine 
Routine.

Autor: Tobias Domhöfer (tobias92)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so, ich habe jetzt die funktion und habe den string empfangen. doch kann 
ich ihn leider nicht umwandeln, es will nicht mit atoi funktionieren.

hab schon viele beispiele gefunden, aber die funktionieren alle nicht. 
hat jemand villt mal ein codebeispiel für atoi?

tobias

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias Domhöfer schrieb:
> so, ich habe jetzt die funktion und habe den string empfangen. doch kann
> ich ihn leider nicht umwandeln, es will nicht mit atoi funktionieren.

und das heisst jetzt was genau?

> hab schon viele beispiele gefunden, aber die funktionieren alle nicht.
> hat jemand villt mal ein codebeispiel für atoi?

char tmp[] = "1234";

int value = atoi( tmp );


Hinweis: Wenn atoi nichts liefert, ist wahrscheinlich schon den String 
im A....

Also: Lass dir zunächst den String wieder ausgeben und überprüf, ob der 
µC auch tatsächlich das empfangen hat, was du ihm gesendet hast.

NB: du schickst jetzt nicht mehr Binärzahlen durch die Gegend. Um dem µC 
die Zahl 532 zu übermitteln, drückst du in deinem Terminalprogramm die 
Tasten 5  3 und 2 gefolgt von einem Return.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias Domhöfer schrieb:
> so, ich habe jetzt die funktion und habe den string empfangen. doch kann
> ich ihn leider nicht umwandeln, es will nicht mit atoi funktionieren.
Ein String in C muß mit einer 0 (Null) abgeschlossen sein. Diese 0 wirst 
du selber in die Zeichenkette einfügen müssen (z.B. wenn ein CR kommt, 
wird das durch 0 ersetzt und in den String eingetragen)...

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.