Hey leute, Ich sitz grad an einer sache und komm nich auf die Lösung: Ich möchte über putty eine zahl einlesen und diesen zahlenwert als pwm-signal ausgeben. Aber putty kann keine zahlen erkennen, sondernacht aus der 65 z.b. ein großes a. Wie schafft man es, dass putty zahlen erkennt? Also, dass ich z.b. 127 eingebe und bei der pwm genau die Hälfte, also 2.5 volt rauskommt?! Danke bereits im voraus!
putty ist zualler erst einmal ein Terminalprogramm. Die Aufgabe eines Terminalprogramms ist es, jeden Tastendruck weiterzuleiten. Und das macht es, in dem es den entsprechenden Character weiterleitet. Ja, selbst wenn du auf die Taste 1 drückst, ist das nichts weiter als ein Zeichen. Eben das Zeichen '1'. Dieses Zeichen wird als (ich schätze mal char, da du in C programmierst) an dein Programm weiter gegeben, welches dann aus den einzelnen Zeichen wieder die Zahl als numerische Zahl zusammen setzen kann. Genauso auch umgekehrt. Um eine dir numerisch vorliegende Zahl auf einem Terminal auszugeben, musst du dir von der Zahl erst mal die Textrepräsentierung erzeugen. Und die kannst du dann Zeichen für Zeichen an das Terminal weitergeben. Ein Terminal weiss nichts von 'Zahlen'. Ein Terminal hat nur mit Texten zu tun. Für ein Terminal ist der Text "125" nicht irgendwie anders oder spezieller als der Text "Hugo". In dem einen Fall hat es eben die Zeichen '1', '2' und '5' gekriegt und angezeigt, am anderen Fall eben die Zeichen 'H', 'u', 'g' und 'o'. Aber Zeichen ist Zeichen. Wenn du wissen willst, warum bei deiner Übertragung von 65 das Terminal ein 'A' hingemalt hat, dann studier mal eine ASCII Tabelle und bedenke, dass im Rechner alles eine Zahl ist. AUch Zeichen werden im Rechner derart dargestellt, dass es für jedes Zeichen eine Code-Zahl gibt, eben den ASCII Code. Wenn ein Programm ein Terminal dazu veranlassen will, ein 'B' hinzumalen, dann muss es ihm die entsprechende Codezahl dafür schicken. Denn: In einem Computer System ist prinzipiell alles eine Zahl, die möglicherweise für etwas steht. In diesem Fall sind die Zahlen (die Bytes) die vom Programm zum Terminal laufen eben die Codezahlen, die laut ASCII Tabelle für jeweils bestimmte Zeichen (Buchstaben) stehen.
:
Bearbeitet durch User
Dass der pc alles in zahlen umwandelt ist mir klar. Aber wie schafft man es jetzt in putty eine '127' einzugeben und genau das als pwm-signal auszugeben?!
klarofix schrieb: > Dass der pc alles in zahlen umwandelt ist mir klar. > Aber wie schafft man es jetzt in putty eine '127' einzugeben und genau > das als pwm-signal auszugeben?! Wie schon gesagt, indem du dich davon löst, dass du in putty eine Zahl eingibst. Du gibst dort einen Text ein. Das Programm (welches), das auf deinem µC (welcher?) läuft muss dann die einzelnen Zeichen wieder zu einem Text zusammensetzen und den in eine Zahl umwandeln.
:
Bearbeitet durch User
Wenn Deine Beschreibung doch auch nur "klarofix" wär... 1.) PuTTY läuft üblicherweise auf einem Rechner mit Betriebssystem, also z.B. einem PC. 2.) Eine PWM läuft üblicherweise eher auf einem Mikrocontroller. Also zwei völlig unterschiedliche Systeme. Wie sind die miteinander verbunden? Generell gilt: Teile und herrsche. Also teile Dein Gesamtproblem in kleinere Teilprobleme auf. Und verfasse in Zukunft bitte nicht solche wirre Beschreibungen.
Karl Heinz schrieb: > Das Programm (welches), das auf deinem µC (welcher?) läuft muss dann die > einzelnen Zeichen wieder zu einem Text zusammensetzen und den in eine > Zahl umwandeln. Man kanns auch direkt machen und den Zwischenschritt über den String auslassen. Aber ohne dein Programm zu sehen, kann man da herzlich wenig konkreter werden.
Mathias O. schrieb: > Vielleicht atoi? :-) Ich fürchte, da muss man noch vieeeeel weiter vorne anfangen
klarofix schrieb: > Aber putty kann keine zahlen erkennen, sondernacht > aus der 65 z.b. ein großes a. Aber 65 ist ja auch ein A.
Karl Heinz schrieb: > :-) > Ich fürchte, da muss man noch vieeeeel weiter vorne anfangen Na dann los (seufz): PuTTY ist eine Terminalemulation. Ein Terminal ist ein Ein-/Ausgabegerät für einen Rechner. In den Anfangsjahren der Rechentechnik nahm man das, was es damals schon gab, und das waren Fernschreiber. Das TTY in PuTTY steht bis heute für Tele TYpe (writer), dem amerikanische Ausdruck für Fernschreiber. Diese Geräte haben einfach jede gedrückt Taste als ASCII-Code an den Rechner geschickt und das, was vom Rechner zurück kam, auf Papier ausgedruckt. Daher kommen auch heute noch die Bezeichnungen für einige Steuerzeichen her, wie z.B. CR = Carriage Return = Wagenrücklauf oder LF = Line Feed = Zeilenvorschub. Später ersetzte man die Fernschreiber durch Geräte mit Bildschirm. Das sparte jede Menge Papier, blieb im Prinzip aber das Gleiche. Heute verwendet man Terminalemulationen, um Bildschirm und Tastatur des heimischen PCs als Ein/Ausgabegerät für einen Rechner zu nutzen, der dies entweder nicht hat (wie Dein μC) oder aber weit entfernt ist. Dazu muss der PC natürlich irgendwie mit dem Rechner verbunden sein, über ein serielles Kabel, ein USB-Kabel oder das Internet. (In den ersten beiden Fällen kann über zwei Modems auch noch eine Telefonleitung dazwischen hängen, aber das ist eine andere Geschichte.) Das Prinzip ist aber immer noch gleich. Das Fenster, das PuTTY aufmacht, ist der Bildschirm Deines μC und wenn es den Fokus hat wird einfach jedes Zeichen, das Du tippst, als ASCII-Code an den μC weiter gereicht. Umgekehrt wird jedes Zeichen, das der μC sendet, als ASCII-Zeichen interpretiert und erscheint entsprechend seiner Bedeutung entweder als sichtbares Zeichen auf dem Bildschirm oder wird als Steuerkommando ausgeführt. Damit ergibt sich die Antwort auf Deine Frage fast von selbst: Wenn Du in PuTTY nacheinander die Ziffern '1', '2' und '7' drückst, dann werden diese (einzeln und nacheinander) als ASCII-Zeichen an den μC gesendet. Du musst nun ein Programm schreiben, das diese Zeichen einsammelt, daraus eine Binärzahl macht (da kommt dann das schon erwähnte atoi ins Spiel) und diese dann an den Timer des μC ausgibt, der dann das entsprechende PWM-Signal generiert. Alles klarofix? Schnapp Dir die ASCII-Tabelle (steht im Internet) und ein gutes C-Buch und los geht’s.
Er hat ja noch nicht verraten was für ein Zielsystem er verwendet. AVR-, PIC- oder ARM-Microkontroller oder ein C-Control mit Basic-Interpreter oder ein Embedded Linux SoC ???
Das Zielsystem ist in diesem Fall ja unerheblich. Ich gehe mal davon aus, dass klarofix putty nicht als ssh-client, sondern lediglich als Terminal für die serielle Schnittstelle verwendet. Daher kommt eigentlich jedes System infrage. Das "Problem" liegt nicht am Putty, sondern am Programm auf dem Zielsystem. Wenn ich den Wortlaut der Anfangsfrage so lese, kommt mir irgendwie Arduino in den Sinn - also AVR in C++.
Noch eine Ergänzung zu einer Sache, die oft Verwirrung stiftet: Wundere Dich nicht, wenn Du etwas in PuTTY tippst aber nichts siehst. Dann macht PuTTY genau das, was oben beschrieben ist: Es sendet den Code der gedrückten Taste an den μC, mehr aber nicht. Es ist typischerweise die Aufgabe des angeschlossenen Rechners dafür zu sorgen, dass dieses auch auf dem Bildschirm erscheint. (Andernfalls wäre es sehr schwer, z.B. beim Tippen eines Passwortes statt der Zeichen Sternchen auszugeben, denn woher sollte PuTTY wissen, dass gerade ein Passwort eingegeben wird?) Diese Funktion nennt sich Echo. Erste Aufgabe des μC beim Empfang eines Zeichens wäre also, dieses an das Terminal zurück zu schicken, damit der Nutzer sieht, das es (richtig) angekommen ist. PuTTY kann ein solches Echo auch lokal erzeugen und versucht, in Abhängigkeit von der Verbindung zu erraten, was der richtige Weg ist. Ich weiß nicht, wie es sich bei einer seriellen Verbindung entscheidet, würde aber z.B. wegen des oben erwähnten Problems erwarten, dass das lokale Echo standardmäßig ausgeschaltet ist. Du kannst die Einstellung auf jeden Fall überschreiben. Wenn Du einmal jedes getippte Zeichen doppelt sehen solltest liegt das daran, dass auf beiden Seiten der Verbindung eine Echo erzeugt wird. (OK, es sind auch andere Ursachen denkbar, wenn man Dinge doppelt sieht :-) Schließlich hat PuTTY auch noch einen eingebauten Zeileneditor. Man kann also eine Zeile komplett tippen und ggfs. korrigieren, bevor das erste Zeichen an den μC geschickt wird. Dabei ist das lokale Echo natürlich sinnvollerweise eingeschaltet. Ob der μC auch in diesem Fall noch ein Echo erzeugen sollte (was deutlich weniger stört, da die Zeile komplett ein zweites mal erscheint) hängt von der Anwendung ab.
Blaurock schrieb: > Wenn ich den Wortlaut der Anfangsfrage so lese, kommt mir irgendwie > Arduino in den Sinn - also AVR in C++. Nach dem Motto: Dumm, dümmer, Arduino? Mathias O. schrieb: > Ich nehme lieber HTerm. Das ist benutzerfreundlicher. Interessant. Und was hat das genau mit dem Thema des Threads zu tun? Versteht der µC dann die Zahl 127 besser, weil "das ist benutzerfreundlicher"? Mit HTerm wär das nicht passiert? Immer diese nichtssagenden Mitteilungen...
:
Bearbeitet durch Moderator
Wie sagte es ein Kollege mal so treffend? Null ist nicht gleich Null! Diese stehen an völlig unterschiedlicher Stelle der ASCII Tabelle
senke schrieb: > Wie sagte es ein Kollege mal so treffend? > Null ist nicht gleich Null! Entweder hast Du Deinen Kollegen falsch zitiert oder er weiß es auch nicht besser. Das eine Zeichen heisst NUL (mit einem 'L') an der Stelle 0x00, das andere heisst NULL (mit zwei 'L') an der Stelle 0x30.
Frank M. schrieb: > Nach dem Motto: Dumm, dümmer, Arduino? Nee! - sondern: Dumm, dümmer, Arduino-Hasser. Frank M. schrieb: > Immer diese nichtssagenden Mitteilungen...
hey leute, danke an alle, die vernünftige antworten gaben!! habs mit atoi gelöst!
klarofix schrieb: > danke an alle, die vernünftige antworten gaben!! Danke an alle, die ihr Problem vernünftig beschreiben!
Frank M. schrieb: > Interessant. Und was hat das genau mit dem Thema des Threads zu tun? > Versteht der µC dann die Zahl 127 besser, weil "das ist > benutzerfreundlicher"? Mit HTerm wär das nicht passiert? nun ja immerhin kann man mit HTerm nicht nur Text senden sondern auch Dezimal- u. Hex-Werte. Damit würde dann bei Eingabe von 127 tatsächlich das entsprechende Byte 0x7F auf der Schnittstelle übertragen werden. Geht natürlich nur wenn der Wertebereich eines Bytes nicht überschritten wird. Sascha
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.