Hallo, ich habe eine Hardcopy von meinem Grafikdisplay mit dem Prozessor generiert und sende diese über die RS232-Schnittstelle. Die Daten sind schon so aufbereitet, daß diese dem Bitmap-Format entsprechen. Ich benötige nun ein Programm, das die RS232-Daten empfängt und die Daten als BMP-Datei speichert. Bisher habe ich zwar eine Lösung für dieses Problem, aber das Ganze ist recht umständlich: Ich benutze das Programm Bintherm, um die Daten der RS232-Schnittstelle aufzuzeichnen. Die Zeichen stelle ich in HEX dar und kopiere diese dann in die Zwischenablage (siehe angehängte Datei). Als zweiten Schritt nehme ich den HEX-Editor "Hex-Editor MX" und kopiere da den Inhalt der Zwischenablage rein. Danach wird die Datei gespeichert. Kennt jemand ein entsprechendes Programm, wo das einfacher geht? Gruß Martin
und so sieht die Datei aus, wenn man sie über den beschriebenen Weg als BMP speichert... (siehe Anhang).
Wenn ich Dich recht verstehe, kommt über die Rs232 schon eine komplette Datei rein? Du must also "nur" die Daten in eine Datei schreiben? Geht das nicht mit so jedem Terminal-Program ("Datei empfangen"). Du könntest auch mal ein simples "copy com1 bitmap.bmp /B" vesuchen (wenn Dein letztes gesendetes Zeichen ein EOF bzw. EOT (ASCII-Zeichen hab ich nicht im Kopf)
> Die Daten sind schon so aufbereitet, daß diese dem Bitmap-Format > entsprechen. dann schick doch einfach einen BMP header vorweg und dann hast du dein BMP. ;-)
@Micha: Ja, die Daten müssen nur noch gespeichert werden. Die kommen schon so komplett vom Prozessor. Am PC ist keine Datenwandlung erforderlich. Bei Windows XP gibt es zwar das Hyperterminal, aber damit bin ich nicht klar gekommen. Ich weiß nicht, ob das überhaupt mit diesem gehen könnte. Wie soll das mit "copy com1 bitmap.bmp /B" gehen?
@Peter: Der BMP-Header ist schon in den Daten vom Prozessor enthalten. Es gibt nur ein Problem, das ganze auf der PC-Seite zu empfangen und 1:1 zu speichern...
> Der BMP-Header ist schon in den Daten vom Prozessor enthalten. Es gibt > nur ein Problem, das ganze auf der PC-Seite zu empfangen und 1:1 zu > speichern... ach so... na, dann könntest du die daten byteweise einlesen, auf dem pc den header interpretieren und dann weisst du ja, wieviele bytes noch kommen. du müsstest allerdings ein kleines progrämmchen für den pc schreiben, das ist aber trivial. ...oder du packst um das ganze noch ein protokoll, ähnlich diesem hier: http://en.wikipedia.org/wiki/Type-length-value dann könntest du auch noch andere objekte, ausser BMP's senden. :-)
Peter wrote: > du > müsstest allerdings ein kleines progrämmchen für den pc schreiben, das > ist aber trivial. ... das möchte ich vermeiden, denn mit Dateihandling auf dem PC bin ich nicht so fit. Ich programmiere nicht so oft. Und wenn, dann nur Controller. Ich bin froh, daß das mit der Hardcopy-Funktion im ATMega128 inkl. Einarbeitung in das Bitmap-Thema in einem Tag geklappt hat.... Gibt es denn nicht ein Terminalprogramm, das empfangene Daten "vernünftig" speichern kann?
@Martin Ich habe dir grad mal fix ein kleines Programm geschrieben, was den ankommenden Datenstrom in eine Datei schreibt. Ist zwar quick&dirty, aber ich hoffe, dass es trotzdem deinen Wünschen gerecht wird. Gruß Kai
> Wie soll das mit "copy com1 bitmap.bmp /B" gehen?
Falls Du Windows bzw. MS-Dois benutzt: Du machst ein Dos-Fenster auf
(Start --> Ausführen --> "cmd" bzw. Windows-Taste & "R" --> "cmd"). Dann
gibst Du die Befehlszeile ein und startest den Transfer vom µC. Unter
den meisten Betriebssystemen kann man die Schnittstellen als Datei
ansprechen. "com1" ist die erste serielle Schnittstelle, "com2" die
zweite ("lpt1" entsprechned die parallele, "con" die Konsole also
Tastatur). Die Befehlszeile kopiert also die Datei von der angegeben
Stelle in die neue Datei. Der Schalter "/B" bedeutet, das binär-Dateien
kopiert werden sollen.
@Kai F. Vielen Dank für das Programm. Funktioniert super! Ich habe bisher noch nie was für Windows programmiert. Habe nur vor ca. 8 Jahren ein paar kleine DOS-Programme geschrieben (unter C, C verwende ich nun auch für den AVR). Mich würde mal interessieren, wie der Quellcode für das Programm aussieht. Was für eine Programmiersprache verwendest Du? Visual Basic? Ich bin am überlegen, ob ich auch mal ein paar kleine Programme selber schreiben soll. Welche Programmiersprache zur Windows-Programmerstellung ist einfach zu erlernen? Und wieviel kostet ein Compiler hierfür? Gruß Martin
Martin Müller wrote:
> DOS-Programme geschrieben (unter C [...]
Du hast vermutlich keine DOS-Programme geschrieben, sondern
Konsolenprogramme... Was hindert dich daran sowas nochmal zu tun? ;)
Simon Küppers wrote: > Du hast vermutlich keine DOS-Programme geschrieben, sondern > Konsolenprogramme... Was hindert dich daran sowas nochmal zu tun? ;) EXE-Dateien waren das damals..... Zum einen müßte ich den C-Compiler erst mal installieren (hab nur uralte Disketten und mein aktueller PC hat kein Diskettenlaufwerk mehr). Zum anderen sehen Windows-Programme schöner aus g. Das hat mich schon immer gereizt, so was mal selber zu machen.
> Welche Programmiersprache zur Windows-Programmerstellung ist einfach zu > erlernen? Und wieviel kostet ein Compiler hierfür? wenn du schon C kannst: es gibt viele freie C-compiler für windoofs, z.b. MSVC express edition, diverse borland compiler, den watcom, pelles-C, LCC-Win32 usw. zur not tuts auch ein GCC (mingw). für GUI anwendungen könntest du C#/VB/.NET oder Java nehmen. mit C geht es zwar auch, ist aber eine ganze ecke komplexer. kostenlose sprachen wären dann noch Python (auch GUI fähig) und diverse BASIC und Pascal implementationen. es gibt verdammt viel kostenloses zeug, das kann man alles gar nicht aufzählen. :-)
Ist in Delphi 5 programmiert. Das nutze ich sehr häufig für so kleine Programme, oder wenn es von der Arbeit her so sein soll. Größeres mache ich mittlerweile fast nur in C++. Im Code steckt nicht viel drin, Port öffnen, Datei öffnen und alles was am Port reinkommt in die Datei schreiben. Die wichtigste Funktionalität steckt in eine COM-Port-Komponente, die das ganze Handling der Schnittstelle übernimmt. http://sourceforge.net/projects/comport/ Drum herum ist halt noch etwas Fehlerbehandlung.
Ich habe mir nun "Visual C++ 2005 Express Edition" bei Microsoft downgeloaded. Ich denke aber, daß man ohne fremde Hilfe bzw. ein gutes Buch nicht viel auf die Reihe bekommt. Bisher fehlt mir jeder Durchblick, wie das funktioniert.... Kennt jemand ein gutes Buch für Einsteiger von C++?
Martin Müller wrote: > Ich habe mir nun "Visual C++ 2005 Express Edition" bei Microsoft > downgeloaded. Wenn du noch Sachen wie serielle Schnittstelle auslesen, musst du das PSDK installieren: http://www.c-plusplus.de/forum/viewtopic-var-t-is-143003.html
Martin Müller wrote: > Ich denke aber, daß man ohne fremde Hilfe bzw. ein gutes > Buch nicht viel auf die Reihe bekommt. Schnapp dir doch einfach mal ein paar kleine OpenSource Programme, und pass mal ein paar Kleinigkeiten deinen Wünschen an (Menüs verändern oder so), sowas find ich super lehrreich. www.sf.net ist dafür erstmal ne gute Anlaufstelle. -wiebel
Danke für die Antworten und Tipps. Ich werde mich mal bei Gelegenheit mit der Windows-Prgrammierung auseinandersetzen. Da fehlt mir gerade etwas die Zeit und Lust....
ähm, da muss noch der Header der BMP Datei geschrieben werden sonst geht da garnix, eine Alternative dazu wäre sicher in Borland C oder in Delphy den sogenannten Canvas zu benutzen und einfach den Pixelstrom ( sozusagen ein Array ) in das Pixel Array des Canvas zu Transportieren ... hab mal vor vielen vielen Jahren einen eigenen PCX Generator programmiert der mir Fraktale erzeugt hat ... nunja was ich mich erinnern kann waren das so 128 Bytes an Headerinformationen wie Breite und Länge des Bildes sowie Farbauflösung und ob es eine Kompression gab ( PCX is ja im prinzip nur ein BMP nur halt mit 192 Farbwerten funktioniert = 0xC0, alles darüber ist die anzahl der Folgenden "gleichen" farbinformation ) in borland würde es ca. so funktionieren (nix Quick & Dirty sondern Sauber): for(x=0;x<xmax;x++) for(y=0;y<ymax;y++) Canvas.Pixels[x][y] = DatenArrayFromSerial[x+xmax*y]; Canvas.SaveToFile(AnsiString("Display.bmp")); das Canvas schreibt dir dann völlig automatisch den Header und den Abschluss.. lg Jan
@Jankey: der Header der Bitmap-Datei wird schon vom Controller erzeugt! Auf der PC-ist nur das Speichern der empfangenen Daten angesagt... Gruß Martin
Kai F. schrieb: > Ich habe dir grad mal fix ein kleines Programm geschrieben... Danke. Das Programm funktioniert prima. Einziger Mangel: Die Einstellungen werden nicht gespeichert, aber damit kann man gut leben: http://www.roboternetz.de/phpBB2/viewtopic.php?p=494573#494573 Gruß mic
Ich benutze das Programm auch sehr gerne. Ich bin dem Programmierer auch sehr dafür dankbar. Es wäre noch gut, wenn der Bytezähler gelöscht würde, wenn man eine neue Aufzeichnung startet. Dann würde man gleich anhand der Dateigröße sehen, ob die Daten alle angekommen sind (oder man einen Fehler sichen muß). Anbei ein Bild einer Hardcopy eines Farbdisplays von Electronic Assembly. Ich erzeuge mit dem Conroller eine BMP-Datei, die ich zum PC schicke. Ich habe diese im Anhang beigefügt (mit PC zuvor als PNG gewandelt, da die BMP-Datei 256k hat). Gruß Martin
Hatte grad zufällig das Programm selbst einmal verwendet und dacht mir ich schaue mal in diesen alten Thread wieder rein. Tatsächlich gibt es einige Nutzer und ein paar Verbesserungsvorschläge/-wünsche. Hier also einen neue Version mit folgenden Änderungen: -Einstellungen (Port, Baudrate und Dateiname) werden in der Registry gespeichert -Bytezähler wird zurück gesetzt, wenn einen neue Aufnahme gestarten wird Ich hoffe, dass es für den Einen oder Anderen jetzt noch etwas nützlicher ist.
Wen du die Einstellungen dann nicht mehr in der Registry unterbringst, sondern im gleichen Ordner des Programms bzw. der aktuellen Projektdatei, dann biste mein Held. Auch wenn ich das Prog selbst nicht brauche. Registry nur im Notfall!!!
Naja, ich muß sagen, das Argument mit den verschiedenen Projekten hat was. Darum hier nochmal eine geänderte Version, die die Einstellungen in einer ini-Datei im Programmverzeichnis speichert.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.