Forum: Mikrocontroller und Digitale Elektronik Bascom - Stringübergabe an RS232 als Wert (Zahl)


von Michael H. (trinity4711)


Lesenswert?

Hallo zusammen,
Ich gebe mit Print einen String im ASCII-Format aus. Möchte diesen aber 
als Zahlenwert (1 = 1) ausgeben und nicht ASCII 1.
Wer kann mir helfen, da ich gar nicht weiß, wo ich anfangen soll. Kann 
mir jemand helfen?

Codeausschnitt:

Dim Stopzeit As Byte
Dim Strstopzeit As String * 3
Dim Strsekunden As String * 2
Dim Strminuten As String * 2

'Ausgabe

'*********************************************************************** 
********
Sub Ausgeben
'*********************************************************************** 
********
'Ausgeben der Stopzeit auf das LCD Display

    'Hundertstel Sekunden formatieren
    Strstopzeit = Str(stopzeit)
    If Len(strstopzeit) = 1 Then Strstopzeit = "0" + Strstopzeit

   'Sekunden formatieren
    Strsekunden = Str(sekunden)
    If Len(strsekunden) = 1 Then Strsekunden = "0" + Strsekunden

    'Minuten formatieren
    Strminuten = Str(minuten)
    If Len(strminuten) = 1 Then Strminuten = "0" + Strminuten

'Auf dem Display ausgeben


    Lcdtext Strminuten , 20 , 30 , 2 , 0 , 0
    Lcdtext ":" , 50 , 30 , 2 , 0 , 0
    Lcdtext Strsekunden , 60 , 30 , 2 , 0 , 0
    Lcdtext ":" , 90 , 30 , 2 , 0 , 0
    Lcdtext Strstopzeit , 100 , 30 , 2 , 0 , 0

'Ausgeben der Stopzeit auf Grossdisplay

    Print Strminuten ; ":" ; Strsekunden ; ":" ; Strstopzeit ;
    'Dieser String soll nicht im ASCII übertragen werden
    'Aber wie !!!!!!!!!!!!!

    Cursor Off
End Sub
Return

Gruss trinity4711

von Karl H. (kbuchegg)


Lesenswert?

Michael Hamacher schrieb:
> Hallo zusammen,
> Ich gebe mit Print einen String im ASCII-Format aus. Möchte diesen aber
> als Zahlenwert (1 = 1) ausgeben und nicht ASCII 1.
> Wer kann mir helfen, da ich gar nicht weiß, wo ich anfangen soll. Kann
> mir jemand helfen?

Das ist ganz einfach.
Du drückst in BASCOM auf F1 oder gehst alternativ zu Tante Google und 
gibst "BASCOM Online Hilfe" ein oder hast dir gleich in deinem Browser 
einen Link drauf
http://avrhelp.mcselec.com/
bei den Favoriten gesetzt.

In der Hilfe gehst du links in der blauen Leiste auf "BASCOM Language 
Reference", klappst den Punkt auf und suchst dir in der LIste erst mal 
den PRINT Befehl - deinen Ausgangspunkt.

Entweder du liest dir dessen Beschreibung mal durch und findest im 
Abschnitt 'Siehe auch' eine Referenz auf einen Befehl namens PRINTBIN 
oder du hast beim Suchen des PRINT Befehls bemerkt, dass der nächste 
Befehl gleich darunter PRINTBIN heisst. Und das BIN (wie binär) in 
PRINTBIN klingt erst mal interessant genug, dass man sich die 
Beschreibung dieses Befehls erst mal reinzieht.

Und siehe da:  Bingo!


Du hast Doku zur Verfügung. Benutze sie!

von Michael H. (trinity4711)


Lesenswert?

Hallo,
danke erstmals, aber printbin mag keine Strings.

Gruss trinity4711

von Karl H. (kbuchegg)


Lesenswert?

Michael Hamacher schrieb:
> Hallo,
> danke erstmals, aber printbin mag keine Strings.

Na was jetzt.
Willst du Zahlen in ihrer Binärform ausgeben oder willst du das nicht?
Du musst dich schon entscheiden ob du jetzt Strings hast oder ob du 
keine Strings hast.

von Michael H. (trinity4711)


Lesenswert?

Karl Heinz Buchegger schrieb
> Na was jetzt.
> Willst du Zahlen in ihrer Binärform ausgeben oder willst du das nicht?
> Du musst dich schon entscheiden ob du jetzt Strings hast oder ob du
> keine Strings hast.

Also mein Problem zur Weiterverarbeitung sind ja die Stringvariablen. 
Ich möchte diese gern umwandeln, das diese mit meinem Grossdisplay 
(7-Segmentanzeigen)weiterverarbeitet werden können. Ich weis nicht ob 
binär geeignet ist !

Gruss trinity4711

von Karl H. (kbuchegg)


Lesenswert?

Michael Hamacher schrieb:

> Also mein Problem zur Weiterverarbeitung sind ja die Stringvariablen.
> Ich möchte diese gern umwandeln, das diese mit meinem Grossdisplay
> (7-Segmentanzeigen)weiterverarbeitet werden können. Ich weis nicht ob
> binär geeignet ist !

Dann gib mal einen Link zum Display.
Ehe man einem Gerät etwas schicken kann, muss man doch erst mal genau 
wissen, was das Teil überhaupt haben will.

von Fox Mulder (Gast)


Lesenswert?


von Michael H. (trinity4711)


Lesenswert?

Fox Mulder schrieb:
> Da war doch noch was:
>
> http://bascom-forum.de/showthread.php?5083-Problem...

Ja, dieser Beitrag stammt auch von mir. Aber helfen konnte mir keiner; 
deshalb habe ich in diesem Forum gepostet.

Gruß trinity4711

von Michael H. (trinity4711)


Lesenswert?

Karl Heinz Buchegger schrieb:

> Dann gib mal einen Link zum Display.
> Ehe man einem Gerät etwas schicken kann, muss man doch erst mal genau
> wissen, was das Teil überhaupt haben will.

Leider kann ich dir keinen Link schicken, weil das Display Eigenbau ist. 
Es funktioniert mit festen Zahlen als Test im Display. das Listing steht 
unter 
http://bascom-forum.de/showthread.php?5083-Probleme-mit-6-stellige-7Segmentanzeige-im-Multiplexbetrieb/page2&s=4f81e62c9eed40af938779038bab469d

von Steffen W. (derwarze)


Lesenswert?

Ein Blick in die Bascon Hilfe bringt der Befehl x = VAL(s)
Details nachlesen kannst Du ja selbst.

von Steffen W. (derwarze)


Lesenswert?

Michael Hamacher schrieb:
> weil das Display Eigenbau ist

Da ja der Empfänger sicher auch ein Controller ist und Du dafür zugriff 
auf die Software hast ist es doch Wurscht was Du überträgst. Musst ja 
ohnehin im Empfänger das für 7Segment entsprechend codieren.

von Karl H. (kbuchegg)


Lesenswert?

Sorry, musste mal weg

Michael Hamacher schrieb:

> Karl Heinz Buchegger schrieb:
>
>> Dann gib mal einen Link zum Display.
>> Ehe man einem Gerät etwas schicken kann, muss man doch erst mal genau
>> wissen, was das Teil überhaupt haben will.
>
> Leider kann ich dir keinen Link schicken, weil das Display Eigenbau ist.


Wie?
Du baust selber ein Display, programmierst selber die Empfangsroutine 
vom Display und schaffst es dann nicht, auf der Senderseite das richtige 
auf den Weg zu schicken?

> Es funktioniert mit festen Zahlen als Test im Display. das Listing steht
> unter
> 
http://bascom-forum.de/showthread.php?5083-Probleme-mit-6-stellige-7Segmentanzeige-im-Multiplexbetrieb/page2&s=4f81e62c9eed40af938779038bab469d

Na ja. Das ist aber noch nicht sehr viel.

von Karl H. (kbuchegg)


Lesenswert?

Spinn ich?

Du empfängst doch als String
1
STRG = Inkey()
2
3
Zeit = STRG 'Zerlegen des empfangenen Strings
4
5
1_sek = Mid(zeit , 8 , 1)
6
10_sek = Mid(zeit , 7 , 1)
7
8
1_min = Mid(zeit , 5 , 1)
9
10_min = Mid(zeit , 4 , 1)
10
11
1_std = Mid(zeit , 2 , 1)
12
10_std = Mid(zeit , 1 , 1)
13
14
Zl_sekunde = Val(1_sek)
15
Zh_sekunde = Val(10_sek)
16
17
Zl_minute = Val(1_min)
18
Zh_minute = Val(10_min)
19
20
Zl_stunde = Val(1_std)
21
Zh_stunde = Val(10_std)

nur dass du mit INKEY keinen String empfängst, sondern ein einzelnes 
Zeichen. Aber ASCII ist ASCII.

Fang halt mal damit an, dass du dir ein Endezeichen definierst, an dem 
der EMpfänger erkennen kann "Jetzt ist der String zu ende".

Der Empfänger holt sich dann Zeichen um Zeichen von der Seriellen bis er 
die Ende-Kennung sieht und damit weiß, dass der String vollständig ist. 
Und das testest du mal, in dem du von einem Terminal aus an dein Display 
Kommandos schickst, um die anzuzeigende Zeit einzustellen!

Oder wenn du besser damit zurecht kommst, dann eben in kleineren Happen. 
Sagt ja kein Mensch, dass du zum Einstellen der Zeit den String 
"15:37:00" zum Displayy schicken musst.
Du kannst ja auch den String
"H15;" schicken und das heißt dann: stelle die Stunden auf 15
Und "M37;" heißt: Minuten auf 37 stellen.
Der Buchstabe sagt dem Display welcher WErt zu verändern ist. Nach dem 
Buchstaben kommen die Ziffern und wenn das Display den ';' empfängt weiß 
es, dass jetzt die 'Zahl' vollständig übertragen wurde und dass es die 
interne Variable jetzt mit dem Wert updaten soll.

Dein Sendecode für den AVR in diesem Thread, den legst du erst mal zur 
Seite. Das hat doch keinen Sinn da jetzt einen 2 Frontenkrieg zu führen, 
wenn dein Display-Code noch nicht mal fertig ist! Die Sache wird doch 
nicht einfacher, indem du noch eine Baustelle und noch eine Baustelle 
aufmachst.

Und lies die Doku von INKEY. Das ist doch lächerlich, dass man den 
BASCOM Leuten das immer wieder sagen muss!

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.