Hallo liebe Forengemeinde.
Ich habe mal eine frage bezüglich HTerm.
Ich empfange über einen COM Port Daten von einem Mikroprozessor, die
Daten sind aufgeteilt in ein Highbyte und einem Lowbyte.
Diese werden alle nacheinander ohne Trennzeichen oder ähnliches gesendet
und auch empfangen.
Das sieht ungefähr so aus: 010401ff01450167 usw...
Die ersten beiden zahlen ist das Highbyte, die zwei folgenden Lowbyte,
und so weiter.
Diese Daten möchte ich mit der Taste "save output" speichern und in
Excel bearbeiten, einen Grapfen bilden.
Nun möchte ich High und Lowbyte zusammen in einer Zeile stehen haben,
und das alles untereinander.
Also so:
0104
01ff
0145
0167, usw.
Neben der Taste kann man noch einige save output Optionen vornehmen,
ebensp etwas von mfsting.
Was muss ich dort eingeben, damit mir die Daten in meinem gewünschten
Format gespeichert werden?
Vielen Dank schonmal, würdet mir echt helfen.
Liebe grüße, Daniel
Harald schrieb:> Funktioniert nur auf dem Bildschirm.
Richtig. Das ist ja mein Problem. Das was ich auf dem Bildschirm sehe,
wenn ich newline every x character mache, hatte ich gerne in der
erstellten Datei.
Hallo Aniel,
Aniel schrieb:> Diese Daten möchte ich mit der Taste "save output" speichern und in> Excel bearbeiten, einen Grapfen bilden.
wenn Du Deine Daten sowieso in Excel zum Karpfen aufbereiten willst,
wieso liest Du die Quelldatei nicht gleich mit VBA ein?
Das ist gerade mal eine Schleife mit byteweisem Einlesen + Dateihandling
(Aufmachen und Schließen).
Hallo. Vielen Dank für eure Antworten.
Hab mal nach VBA gesucht und auch einiges gefunden. Nur steige ich da
irgendwie nicht so recht durch.
Hätte evtl. Jemand einen Beispielcode, der soetwas kann?
Bin mir c und konsorten nicht vertraut... Bin ein mittelmäßiger
Avr-Assembler programmierer :-D
Ich mag es einfach zu wissen, was mein kleiner Chip macht, deswegen hab
ich noch scheu vor C und C++, ebenso Basic.
Hallo,
Aniel schrieb:> Ich mag es einfach zu wissen, was mein kleiner Chip macht, deswegen hab> ich noch scheu vor C und C++, ebenso Basic.
dann laß doch Deinen kleinen Chip gleich selber das NewLine mitschicken
bzw \r\n wenn es sowieso für Windows ist.
Gruß aus Berlin
Michael
Aniel schrieb:> Bin mir c und konsorten nicht vertraut...
Dann mach's in C, ist auch kein Problem ;-)
- Zwei Zeichen einlesen
- Zwei Zeichen rausschreiben
- \r\n rausschreiben
- wieder von vorne bis eof
Hallo Aniel,
Aniel schrieb:> Ich mag es einfach zu wissen, was mein kleiner Chip macht, deswegen hab> ich noch scheu vor C und C++, ebenso Basic.
Das ist eine durchsichtige Schutzbehauptung aus dem Paket
Arbeitsvermeidungsstrategie.
Anbei erhältst Du ein lauffähiges, aber unfertiges Stück Code zum
Spielen.
In Excel machst Du folgendes:
=> Taste ALT F11 Einfügen Neues Modul
Den Rest kannst Du Dir anhand der Hilfe in VBA erarbeiten.
Das ist nur noch Umsetzen von ein bisschen Logik, die Du ja als
AVR-Programmierer beherrschst.
Alles wesentliche, also Dateihandling und Zellzugriff ist schon drin.
Achtung: Die VBA-Hilfe im VBA-Editor ist nicht mit der Excel-Hilfe
identisch!
1
Sub log_lesen()
2
Dim y As Long 'Zeilenzähler in Excel-Tabelle
3
Dim beit As Byte 'Puffer für gelesenes Byte der Eingabedatei
4
Dim ffile As Long 'Handle für den Dateizugriff
5
Dim hier As Object 'Object, um Zellwerte beschreiben zu können
6
7
Set hier = ThisWorkbook.Sheets("Tabelle1") 'hier ist eine Objectvariable
8
9
ffile = FreeFile() 'Handle holen
10
Open "E:\hilfe\transfer.txt" For Binary Access Read Lock Read As ffile
11
12
y = 1
13
Do Until EOF(ffile)
14
Get ffile, , beit
15
'Das gelesene Byte als Attribut "Value" in die mit der Cells-Methode spezifizierte Zelle schreiben
Vielen lieben Dank für deine Antwort :-)
Ich probiere es demnächst mal aus.
Bis dahin habe ich das Problem auf andere Art ersteinmal umschifft...
Ich wandele die Werte in den Registern in Ascii-Zahlen um und schicke
die über UART an den PC. Hinter jedem Wert hänge ich CR+LF an.
Nur ist jetzt mein Baudrate nicht mehr ausreichend. 115200 Baud ist nun
zu langsam. Hoffe, das sich das mit einem Bluetooth Modul und einer
Baudrate annähernd 1000000 lösen lässt.
Mal schauen, sonst habt ihr mir schon gute Ideen gegeben, z.b. wusste
ich bislang nichts von VBA :-)
Hallo,
Daniel schrieb:> Ich wandele die Werte in den Registern in Ascii-Zahlen um und schicke> die über UART an den PC. Hinter jedem Wert hänge ich CR+LF an.> Nur ist jetzt mein Baudrate nicht mehr ausreichend. 115200 Baud ist nun> zu langsam. Hoffe, das sich das mit einem Bluetooth Modul und einer> Baudrate annähernd 1000000 lösen lässt.
UART über USB-RS232/TTL-Adapter?
FTDI, CP2102, CH340 usw. können da auch bis 921600 bzw. 500kBit/1Mbit.
Uaf der PC-Seite hängt es vom terminalprogramm ab, ob diese Baudraten
setzen kann.
500kBit mit FTDI-USB-Adapter und einem Mega32 mit Baudratenquarz habe
ich selbst schon in einem alten VB6.0-Programm genutzt.
Gruß aus Berlin
Michael
Aniel schrieb:> Ich empfange über einen COM Port Daten von einem Mikroprozessor, die> Daten sind aufgeteilt in ein Highbyte und einem Lowbyte.> Diese werden alle nacheinander ohne Trennzeichen oder ähnliches gesendet> und auch empfangen. Das sieht ungefähr so aus: 010401ff01450167 usw...> Die ersten beiden zahlen ist das Highbyte, die zwei folgenden Lowbyte,
Daß dieses "Protokoll" inhärent kaputt ist, ist Dir klar?
Rufus Τ. F. schrieb:> Daß dieses "Protokoll" inhärent kaputt ist, ist Dir klar?
Wie meinst du das? Denke mir, solange ich weiß, wie ich die Daten
interpretiere, ist das doch ok oder nicht? Bitte um Aufklärung :-)
Entschuldigung wenn ich ein zweites Mal schreibe...
Ist das evtl. So gemeint, falls ein Byte bei der Übertragung ausfällt,
ich alle folgenden nicht mehr richtig interpretieren kann?
Dann wäre der Ansatz in Ascii umzuwandeln und mit Zeilenumbruch zu
versehen tatsächlich besser, da ein Zeilenumbruch nach einem kompletten
umgewandelten 16 Bit wert kommt.
Daniel schrieb:> Ist das evtl. So gemeint, falls ein Byte bei der Übertragung ausfällt,
Auch. Aber das Problem tritt bereits auf, wenn Du das sendende Gerät vor
dem Start von HTerm bereits einschaltest. Woher willst Du wissen,
welches der empfangenen Bytes welche Bedeutung/welchen Stellenwert hat?
Du kannst Deine Daten nur dann halbwegs zuverlässig empfangen, wenn Du
immer erst HTerm (und die Aufzeichnung damit) startest und dann Dein
sendendes Gerät einschaltest.
Deutlich besser ist die Verwendung eines eindeutigen Trennzeichens, um
einzelne Telegramme/Datensätze voneinander zu trennen.
Anhand Deiner Beschreibung ist nicht eindeutig zu erkennen, ob Du
Binärdaten sendest oder eine hexadezimale Text-Repräsentation der Daten.
In letzterem Falle liegt Deine "ASCII-Konvertierung" ja schon vor, da
ist dann nur noch das Trennzeichen erforderlich:
Statt