Bascom - Stringübergabe an RS232 als Wert (Zahl)

OP #3062555
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
#3062565
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!
OP #3062591
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
#3062598
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.
OP #3062632
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
#3062788
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.
#3062794
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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren