Forum: PC Hard- und Software HTerm "save output" konfigurieren


von Aniel (Gast)


Lesenswert?

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

von Icke ®. (49636b65)


Lesenswert?

Setz einfach "New line every .. characters" auf zwei.

von Harald (Gast)


Lesenswert?

Icke ®. schrieb:

> Setz einfach "New line every .. characters" auf zwei.

Funktioniert nur auf dem Bildschirm.

von Aniel (Gast)


Lesenswert?

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.

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Warum nicht ein z.B. Pythonscript schreiben was dir die Daten in dein 
gewuenschtes Format konvertiert?

von Peter M. (r2d3)


Lesenswert?

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).

von Aniel (Gast)


Lesenswert?

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.

von Michael U. (amiga)


Lesenswert?

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

von Wolfgang (Gast)


Lesenswert?

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

von Peter M. (r2d3)


Lesenswert?

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
16
        hier.Cells(y, 1).Value = beit
17
        y = y + 1
18
    Loop
19
    
20
    Close ffile
21
    
22
End Sub

: Bearbeitet durch User
von Daniel (Gast)


Lesenswert?

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 :-)

von Michael U. (amiga)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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?

von Daniel (Gast)


Lesenswert?

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 :-)

von Daniel (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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
1
010401ff01450167

so:
1
0104\n
2
01ff\n
3
0145\n
4
0167\n

etc.

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.