Forum: Mikrocontroller und Digitale Elektronik JPEG Bilder mit serieller Schnittstelle übertragen


von macke_a (Gast)


Lesenswert?

Hallo !
Gibt es irgendwelche Einschränkungen, wenn ich JPEG Bilder über die 
serielle Schnittstelle übertrage? Ich möchte von meinem Rechner, Bilder 
an meinen ARM9 µC übertragen, diese dort auf einer externen 
Speicherkarte ablegen und auf einem 4" TFT Farbdisplay darstellen.

Wie sind Eure Erfahrungen damit ?
Gibt es solch ein Projekt vielleicht schon?

Freundliche Grüsse
macke_a

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Über serielle Schnittstellen lassen sich jedwede Art von Daten 
übertragen, ob das nun JPEG-, GIF-, TIFF- oder sonstwas-Daten sind, das 
ist der Schnittstelle vollkommen egal. Du musst nur nacheinander jedes 
einzelne Byte übertragen.

Gut, Du solltest Dir noch ein Rahmenprotokoll drumherum ausdenken, damit 
der Empfänger der Daten weiß, wann die Nutzdaten anfangen und wann sie 
aufhören, aber auch das ist vollkommen unabhängig von der Art der 
versendeten Daten.

Google mal nach den Protokollen X-MODEM, Y-MODEM, Z-MODEM und KERMIT.

von Kola (Gast)


Lesenswert?

Rufus hat Recht, allerdings müssen die Bilder als "binäre Daten" 
übertragen werden, nicht als Texte!

von Severino R. (severino)


Lesenswert?

Die Protokolle X-MODEM, Y-MODEM, Z-MODEM (und ev. KERMIT) kennen keinen 
Text-Modus, sie übertragen alles mit 8 Bit.

(Bei FTP kann man zwischen ASCII und Binary wählen.)

Severino

von Matthias (Gast)


Lesenswert?

Probleme gibt es nur, wenn die Gegenstelle ASCII Zeichen aus dem
Steuerzeichenbereich als Steuerzeichen interpretiert.

Ein X-Modem geht nicht, da die ASCII Zeichen 0x01, 0x04, 0x06, und 0x15
als "Steuerzeichen" interpretiert werden.
Du kannst Dir aber auch eine eigene Implementierung schreiben.
Dabei musst Du dann sogenannte Zeichenstopfen verwenden.
Wenn z.B. ein Zeichen 0x01 im Datenstrom vorkommt, dann musst Du
"0x01 0x01" senden. Und auf der anderen Seite wieder ein 0x01 entfernen.
Dann werden nur einzelne Vorkommen von z.B. 0x01 als Steuerzeichen
interpretiert und im Doppelpack als ein Zeichen des Datenstroms.

Ansonsten müsstest Du Dir ein eigenes Protokoll überlegen.
Z-Modem ist soweit ich weiss etwas komplizierter. Kann aber auch mit
"Binärdaten" umgehen (wird wahrscheinlich mit Zeichenstopfen arbeiten).





von Severino R. (severino)


Lesenswert?

@ Matthias

X-Modem geht sehr wohl für Binärdaten, da jeder Block eine definierte 
Länge hat und der Empfänger somit klar feststellen kann, was 
Steuerzeichen und was Blockinhalt ist.
Wenn die Leitung eine gute Qualität hat, ist X-Modem absolut genügend.
Will man aber Dateinamen und Änderungsdatum und -zeit mit übertragen, 
ist mindestens Y-Modem nötig.
Über eine schlechte Telefonleitung hat X-Modem jedoch tatsächlich den 
Nachteil, dass bei verlorener Synchronisation durch Störungen ein 
Nutzdatenbyte als Steuerzeichen interpretiert werden könnte, was aber 
meistens "nur" zum Abbruch führt, kaum jedoch zu einer fehlerhaft 
empfangenen Datei.

Dafür ist X-Modem sehr einfach zu implementieren.

Severino

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Im Zusammenhang mit dem Übertragen von Dateien auf ein System, das 
ebenfalls etwas mit Dateien anfangen kann, ist das Z-Modem-Protokoll das 
reizvollste, da dieses auch Dateinameninformationen übermitteln kann.
Alle von mir genannten Protokolle werden von üblichen 
Terminalprogrammen* wie Hyperterminal unterstützt, so daß auf PC-Seite 
kein spezielles Programm entwickelt werden muss.


*) nein, weder "Bray" noch "HTerm" sind Terminalprogramme, diese sind 
Analyse- und Testprogramme für serielle Übertragung.
Terminalprogramme aber emulieren serielle Terminals, werten also 
übertragene Steuerzeichen zur Bildschirmsteuerung aus, wie es VT100, 
TVI950 etc. alle auch taten.

von macke_a (Gast)


Lesenswert?

Hallo ! Erstmal Danke für Eure Beiträge.
Nun soweit ich das verstanden habe, bin ich in der Lage mit dem Y-Modem 
ein JPEG Bild über meine serielle Schnittstelle zu übertragen.

Was mir etwas mehr Sorgen bereitet ist, dass die Datei ja in 8Bit 
Schritten übertragen wird, auch wieder vollständig und in der richtigen 
Reihenfolge zusammengesetzt wird! Nun, die Daten werden unmittelbar auf 
einer SD-Karte abgespeichert. Mmmh, da stellt sich für mich nur die 
Frage, ob ich einen Puffer für das JPEG Bild erstellen soll und dann die 
vollständigen Daten an die SD-Karte transportiere.

Was wird eigentlich passieren, wenn ich für mein 4" Zoll Display, eine 
JPEG von einer anderen Größe 480x640 übertragen. Irgendwo wird es dann 
wohl Probleme geben. Fehlt ein Stück vom Bild, oder wie kann sich so 
etwas auswirken?

Freundliche Grüsse
macke_a


von Walter (Gast)


Lesenswert?

hast du dir schon überlegt wie du das jpeg-Bild decodierst?
Ich denke nicht, denn sonst würdest du die Frage mit der Auflösung nicht 
stellen ...

von Karl H. (kbuchegg)


Lesenswert?

macke_a wrote:
> Was mir etwas mehr Sorgen bereitet ist, dass die Datei ja in 8Bit
> Schritten übertragen wird, auch wieder vollständig und in der richtigen
> Reihenfolge zusammengesetzt wird!

Das ist dein geringstes Problem.
Da implementierst du einfach ein Hardware-Handshake, also
die RS232 Leitungen RTS/CTS und schon kann der µC dem PC
mitteilen: "Warte mal, ich muss das bis jetzt gesendete
erst mal verarbeiten. - So, ich bin jetzt soweit fertig, es
kann weitergehen"

> Nun, die Daten werden unmittelbar auf
> einer SD-Karte abgespeichert. Mmmh, da stellt sich für mich nur die
> Frage, ob ich einen Puffer für das JPEG Bild erstellen soll und dann die
> vollständigen Daten an die SD-Karte transportiere.

Wie du willst. Der Puffer belegt halt eine Menge SRAM-Speicher
und der ist auf einem µC sowieso notorisch knapp.

> Was wird eigentlich passieren, wenn ich für mein 4" Zoll Display, eine
> JPEG von einer anderen Größe 480x640 übertragen. Irgendwo wird es dann
> wohl Probleme geben. Fehlt ein Stück vom Bild, oder wie kann sich so
> etwas auswirken?

Kommt auf deine Anzeige Funktionen an: Es kann ein Stück
fehlen, die Zeilen können rundum wrappen, das Programm hängt
sich auf, weil es damit nicht umgehen kann, ...

Das ist aber auch noch nicht wirklich dein Problem. Dein
Hauptproblem ist: Wo krieg ich eine JPEG Dekodierung her,
die auf meinem µC noch vernünftig läuft.

von peter (Gast)


Lesenswert?

https://sourceforge.net/projects/mb-jpeg/

ach ja, muss es unbeding RS232 sein?
das ist nämlich super langsam :(

von macke_a (Gast)


Lesenswert?

Hallo !
Ok besten Dank an alle...
Ich denke ich werde mit euren Informationen weiterkommen und hoffentlich 
morgen gegen Abend ne Antwort bzw. ein lauffähiges Programm haben !

Ich melde mich !!

Freundliche Grüsse
macke_a

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.