Forum: Mikrocontroller und Digitale Elektronik putty zahl einlesen


von klarofix (Gast)


Lesenswert?

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!

von Karl H. (kbuchegg)


Lesenswert?

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
von klarofix (Gast)


Lesenswert?

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?!

von Karl H. (kbuchegg)


Lesenswert?

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
von Mark B. (markbrandis)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Mathias O. (m-obi)


Lesenswert?

Vielleicht atoi?

von Karl H. (kbuchegg)


Lesenswert?

Mathias O. schrieb:
> Vielleicht atoi?

:-)
Ich fürchte, da muss man noch vieeeeel weiter vorne anfangen

von Mathias O. (m-obi)


Lesenswert?

bin2dec?

oder

an/aus2bin?

von Mathias O. (m-obi)


Lesenswert?

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.

von Mark B. (markbrandis)


Lesenswert?

ASCII heißt das Zauberwort
Kennst Du's nicht, dann geh doch fort ;-)

von A. H. (ah8)


Lesenswert?

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.

von Christian K. (the_kirsch)


Lesenswert?

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

???

von Blaurock (Gast)


Lesenswert?

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++.

von A. H. (ah8)


Lesenswert?

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.

von Mathias O. (m-obi)


Lesenswert?

Ich nehme lieber HTerm. Das ist benutzerfreundlicher.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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
von senke (Gast)


Lesenswert?

Wie sagte es ein Kollege mal so treffend?
Null ist nicht gleich Null!

Diese stehen an völlig unterschiedlicher Stelle der ASCII Tabelle

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

von Wolfgang E. (Firma: janeeisklar) (whattheheck)


Lesenswert?

Frank M. schrieb:
> Nach dem Motto: Dumm, dümmer, Arduino?

Nee! - sondern: Dumm, dümmer, Arduino-Hasser.

Frank M. schrieb:
> Immer diese nichtssagenden Mitteilungen...

von klarofix (Gast)


Lesenswert?

hey leute,

danke an alle, die vernünftige antworten gaben!!

habs mit atoi gelöst!

von Mark B. (markbrandis)


Lesenswert?

klarofix schrieb:
> danke an alle, die vernünftige antworten gaben!!

Danke an alle, die ihr Problem vernünftig beschreiben!

von Sascha W. (sascha-w)


Lesenswert?

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
Noch kein Account? Hier anmelden.