- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: Senden & Empfangen via VB Programm "Auswertung"

  1. #11
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.02.2006
    Beiträge
    982
    Anzeige

    E-Bike
    Ich werf einfach mal 2-3 Zeilen aus nem altem Projekt in die Runde

    Zuerst mußt du dir eine Buffer variable anlegen..
    Code:
    Dim Uart_buffer(100) As Byte
    Dim Uart_buffer_str As String * 100 At Uart_buffer Overlay
    In meinem Fall war dieser 100 Bytes groß und hatte ein String Overlay,
    was nichts anderes bedeutet, als dass Uart_buffer_str nur eine Art Maske ist.
    Damit habe ich den split Befehl direkt auf den Buffer angewendet.
    Code:
    Dim Uart_buffer_splitstr(20) As String * 10
    Dim Uart_buffer_splitctr As Byte
    Das war mein String-Array..20 Strings a 10 Zeichen..
    Uart_buffer_splitctr bekommt später den Rückgabewert von split() ab.
    Code:
    Uart_buffer_splitctr = Split(uart_buffer_str , Uart_buffer_splitstr(1) , ",")
    Wenn du deinen Buffer gefüllt hast und dein End-Byte kommt..(ich nehm dazu gerne CR&LF)..
    kannst du den String splitten.. split(dein_buffer_string,dein_string_array(start_i ndex),"dein_separator")
    Die Rückgabe von split ist die Anzahl der gefüllten Array Felder.
    Mit Val() kannst du dann deine Strings in Zahlen konvertieren.

    Ich hoffe das hilft bissl weiter.
    Gruß,BastelWastel
    Nam et ipsa scientia potestas est..

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    40
    Beiträge
    647
    Hi,

    achso ich dachte, dass auch die VB kommunikation noch nicht 100% klappt.

    Die Lösung von BastelWastel setzt, wie ich das sehe vorraus, das du aus VB heraus als bytes sendest. Was mir da nicht ganz klar ist, was passiert wenn ein Wert > 256 ist. Oder sehe ich das falsch?

    Gruß Daniel
    Geändert von DanielSan (06.04.2011 um 23:45 Uhr)
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.02.2006
    Beiträge
    982
    Nein, das Beispiel wäre für einen String
    Nam et ipsa scientia potestas est..

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von BastelWastel Beitrag anzeigen
    Nein, das Beispiel wäre für einen String
    Was auch immer gerne so gemacht wird, siehe z.B. GPS Empfang. Da kommt auch ein recht langer String der anschließend passend zerlegt wird so dass die benötigten Werte an festen Adressen zu finden sind.

    Gruß Richard

  5. #15
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    (50Var's+Wert im 100ms Takt an den Mega 16 senden)
    Das wird aber haarig vom Timing her mit den vielen Textkonversionen und der Übertragung als String.

    Auch bitte beachten: Baudratenquarz. 16MHz sind zwar schön für die Ausführungsgeschwindigkeit, kann aber Übertragungsfehler geben.

    Rechne mal die minimale Baudrate durch die Du brauchst um das alles schnell genug über die UART zu bringen
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    40
    Beiträge
    647
    Er kann die Geschwindigkeiten:

    4800
    9600
    19200
    38400

    verwenden. Diese haben alle einen Fehler von 0,16% bei 16Mhz. Ich denke damit kann man Leben.

    Jetzt müsste man nurnoch wissen, wie lang eine Übertragung ist.
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  7. #17
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Ja, das dacht ich auch schon mal ... "Ach was mit dem kleinen Fehler kann man leben ..."
    Hab da auch schon Lehrgeld bezahlt

    Bei der Länge, die er alle 100ms rüber schieben will plus der Umwandlung der Strings in Integer ... sportlich.
    Das puffernd im Ringpuffer würd ich bleiben lassen und direkt "inline" umwandeln, sprich immer wenn ein Abschnitt komplett ist direkt.
    Ginge recht einfach ... per uart-interrupt Zeichen einlesen.
    Wenn ist Trennzeichen Pointer zurücksetzen, dann die nachfolgenden Zeichen in Puffer, beim nächsten
    Trennzeichen den Puffer kopieren, Parametercounter erhöhen,
    die Kopie umrechnen lassen und Ergebnis in Array mit Stelle des Parameterzählers speichern.
    Am Ende der Zeichenfolge dann ein End-Zeichen um den Parameterzähler zurückzusetzen (CR-LF z.B.)

    Der Haken dabei ist halt, für nen Integer kanns dann mal locker 5 Zeichen werden um 2 Bytes zu übertragen.

    Bei sagen wir mal 20 Parametern die er übertragen möchte sind das dann 100 Zeichen plus 20 Trenner, also 120 Zeichen.
    8 Bit, plus Start, plus Stopbit sind dann 1200 Baud mal 10, weil ja alle 100ms sind das dann Minimum 12000 Baud/s, die er erreichen muss.

    oder andersrum 19200 Baud / 1200 = 16
    1/16 = 0,0625 -> 62,5ms bräuchte in dem Falle bei 19200 die Übertragung mindestens. 4800 und 9600 kannst Du ergo schonmal abhaken.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  8. #18
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    40
    Beiträge
    647
    Ja deswegen würde ich das Byteweise machen.

    Also das erste Byte ist Wert1, usw.
    Dadurch spart man sich alle Trennzeichen. Durch Start und Stop bits wird der Parameterzähler resetet und controlliert. Wenn er sich beim Stopbit verzählt hat, zählt der gesamte Durchgang nicht und es wird auf den nächsten gewartet.
    Zudem brauchst du nichts mehr umrechnen und keine Strings zerlegen. Das einzige Problem, wäre wenn einer der Werte > 255 ist. Dann musst du 2 Bytes verwenden und die dann passend zusammenrechnen. Mit 2 Bytes kommst du erstmal bis 65535. Bei 3Bytes bis 16,7mio.

    Wenn alle Werte in ein Byte passen, solltest du schon mit 4800Baud auskommen. Ich würde aber mindestens 9600 oder 19200 nehmen.

    Achja zu deinem Problem mit dem Fusen, um den Controller auf 16Mhz laufen zu lassen, würde ich mal die Suche oder eine Suchmaschine befragen. Du bist nicht der erste der das Problem hat und es gibt viele gute Anleitungen dazu.

    Gruß Daniel
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  9. #19
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    In dem Falle ginge ich gleich generell auf 2 Bytes, als Int ist das dann -32768 bis +32768 als Word eben 0 bis 65535, + nochmal nen CRC8 dahinter, macht pro Wert 3 Bytes.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. [C#] Daten von Programm über USB senden und empfangen
    Von PCF8574P im Forum Open Source Software Projekte
    Antworten: 5
    Letzter Beitrag: 02.12.2008, 23:15
  2. GP1A030 Drehgeber - Auswertung mit "C-Programm"
    Von Phoenix2k im Forum Sensoren / Sensorik
    Antworten: 3
    Letzter Beitrag: 06.06.2008, 16:26
  3. Auswertung eines "3D Kompass"
    Von MrNiemand im Forum Sensoren / Sensorik
    Antworten: 18
    Letzter Beitrag: 06.04.2007, 18:49
  4. UArt "verschluckt" beim Senden den Wert 0x00 ( AT9
    Von LotharM im Forum Assembler-Programmierung
    Antworten: 1
    Letzter Beitrag: 02.12.2006, 12:24
  5. Im " Rahmen senden " bei RS485
    Von emulein im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 20
    Letzter Beitrag: 13.09.2005, 14:55

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress