- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 3 von 3

Thema: [gelöst] Sharp Develop VB-Wert aus Textbox in Byte umwandeln

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    27.08.2007
    Alter
    34
    Beiträge
    324

    [gelöst] Sharp Develop VB-Wert aus Textbox in Byte umwandeln

    Leider bin ich unfähig eine passende Rubrik zu finden, deswegen stelle ich miene Frage jetzt hier. Ich habe mir mit SharpDevelop VB ein kleines Terminalprogramm geschrieben, das in einer Textbox ankommende Daten von der RS232 Schnittstelle ausgibt und einer zweiten Textbox, deren Inhalt über RS232 an AVR geschickt wird. Das empfangen klappt wunderbar und vollkommen verlustfrei. Nur das verschicken der Daten noch nicht. Ich vermute, dass es daran liegt, dass man den Inhalt der Textbox sich standartmäßig in einer String Variable befindet. Deswegen wollte ich mir mit der val() Funktion abhilfe verschaffen. Nur leider scheint er nur das erste Zeichen in der Textbox zu übertragen
    ->wenn ich 24 schicke meldet mir mein AVR eine 2 zurück, ist es 114 bekomme ich eine 1, usw.

    Das Programm auf dem Mikrocontroller (ATTINY13) schickt lediglich den von der RS323 Schnittstelle empfangenen Wert unverändert zurück.

    Der fürs verschicken zuständige Code im Terminalprogramm sieht so aus:
    Code:
    Sub Button2Click(ByVal sender As Object, ByVal e As EventArgs)
    	serialport1.WriteLine(val(textbox2.Text))
    End Sub
    Der Code auf dem AVR sieht so aus:
    Code:
    $hwstack = 22
    $regfile = "attiny13.dat"
    $crystal = 9600000
    Baud = 9600
    
    Open "comb.1:9600,8,n,1,INVERTED" For Output As #1
    Open "comb.2:9600,8,n,1,INVERTED" For Input As #2
    
    Dim Num As Byte
    
    Do
    Get #2 , Num
    Put #1 , Num
    Wait 1
    
    Loop
    
    End
    Vielen herzlichen dank schon im Vorraus und ich hoffe, dass mir niemand die falsche Rubrik all-zu böse nimmt

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.02.2006
    Beiträge
    982
    val() sagt mir spontan nichts.
    Aber hast du mal versucht deinen String in einzelne Zeichen zu splitten und an val() zu übergeben?

    So Richtung.. serialport1.WriteLine(val(erstes Zeichen) & val(zweites Zeichen) & val(drittes Zeichen) & .......)

    Wär mal so'n Schuß ins Blaue von mir
    Nam et ipsa scientia potestas est..

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    27.08.2007
    Alter
    34
    Beiträge
    324
    ok, ich denke ich hab das Problem gefunden. Wenn ich sage serialport1.WriteLine(textbox2.Text) und sich in textbox2.text eine 2stellige Zahl befindet so betrachtet VB jede Stelle als ein eigenes Byte. Mein AVR empfängt allerdings nur ein Byte und nicht 2. Konvertiere ich mittels val() den Inhalt eines Strings in eine Zahl, so konvertiert er sie in eine Integervariable. Diese benötigt allerdings auch zwei Bytes. Man kann es drehen und wenden wie man will, aber der Datenverlust ist vorprogrammiert. Nur leider fehlt mir noch die Lösung...

    Aber auch das war nicht das Problem. Das Problem liegt darin, dass die writeline() Funktion nur Strings annimmt, beim verschicken also die ASCII Codes verschickt. Wenn man also serialport1.writeline(1) ausführt so empfängt der AVR nicht 1 sondern den ASCII code von 1 -> 49. Aus meinen Programmieranfängen mir Free/QBasic kannte ich zum Glück aber noch die CHR Funktion, mit der man einen ASCII Code in sein zugeordnetes Zeichen umwandeln kann. Somit kann man mit
    serialport.writeline(CHR(X)) jede beliebige Zahl übertragen, ohne immer auf die ASCII Tabelle schauen zu müssen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad