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
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.
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?
Alles fängt schon mal damit an, dass du mitteilen solltest in welcher Sprache du programmierst.
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.
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
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.
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)...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.