Forum: PC-Programmierung Raspberry Serielle Schnittstelle


von Donni D. (Gast)


Lesenswert?

Hey Leute,
ich habe folgendes Problem:
Ich greife per Java mit einem FileWriter auf /dev/ttyAMA0 zu.
Nun rufe ich die .write() Methode auf und übergebe ihr z.B. 112, so 
funktioniert alles normal. Wenn ich nun 255 übergebe, kommen 2 Bytes an, 
nämlich 195 und 191. Hab es dann mit 127 und 128 probiert, also wenn in 
Java das Byte zu Ende geht. Und so ist es, bei 127 sendet er 1 Byte, bei 
128 wieder 2, nämlich 194 und 128.
Bevor ich den Raspberry neu installiert habe ging alles problemlos.. 
Verwendet wird Raspbian Wheezy.
Woran kann das liegen, was müsste ich da umstellen?

von Peter II (Gast)


Lesenswert?

Donni Donis schrieb:
> Woran kann das liegen, was müsste ich da umstellen?

sieht mir nach einen Zeichensatz Problem aus. Kann sein das Java es als 
Unicode senden will?

von Donni D. (Gast)


Lesenswert?

Sowas hab ich mir auch gedacht.. Die Frage ist wo ich soetwas umstellen 
kann?

von TestX .. (xaos)


Lesenswert?

Du solltest zB libRXTX oder die nativen com.sun.serial schnittstellen 
benutzen um solche probleme zu vermeiden. Unter C/C++ geht das öffnen 
von chardev userspace treibern zwar problemlos, unter java und anderen 
hochsprachen kann es jedoch aufgrund von zechenkodierung usw. zu 
unerwarteten problemen kommen.

von Donni D. (Gast)


Lesenswert?

Vorher hat es noch alles funktioniert :/
Das defaultCharset steht auf UTF-8, hab es mir grad mal ausgeben lassen

von Rolf Magnus (Gast)


Lesenswert?

Andi D. schrieb:
> Unter C/C++ geht das öffnen
> von chardev userspace treibern zwar problemlos, unter java und anderen
> hochsprachen kann es jedoch aufgrund von zechenkodierung usw. zu
> unerwarteten problemen kommen.

Kann man denn in Java Dateien nicht im Binary-Modus öffnen?

von Donni D. (Gast)


Lesenswert?

Ich hab nun die RXTXlib eingebunden, trotzdem das Selbe Problem. Denke 
also das es an Linux/Einstellungen der Seriellen Schnittstelle liegt.. 
Hat noch wer Ideen?

von Peter II (Gast)


Lesenswert?

Donni Donis schrieb:
> Denke
> also das es an Linux/Einstellungen der Seriellen Schnittstelle liegt..

dann mache doch einfach ein test.

Lege eine Datei an und schicke sie per USB raus:

cat Datei > dev/ttyAMA0

von Donni D. (Gast)


Lesenswert?

Hab in die Datei "Testÿ" geschrieben, ÿ ist das Zeichen für den Wert 
255.
So, ankommen tut: 84, 101, 115, 116, 195, 191
Dann scheint es wohl irgendwie ein der Schnittstelle zu hapern...
84 - 116 ist das Wort Test, hinten kommen wieder diese 2 Bytes an, 
anstatt 255..

von bluppdidupp (Gast)


Lesenswert?

Rolf Magnus schrieb:
> Kann man denn in Java Dateien nicht im Binary-Modus öffnen?

Ja schon seltsam, dauernd versuchen Leute Binärdaten über 
Klassen/Funktionen die eigentlich für Text gedacht sind zu versenden - 
und das nicht nur bei Java ;D

Es gibt da OutputStream, das wird auch z.B. hier genutzt:
http://www.mikrocontroller.net/articles/Serielle_Schnittstelle_unter_Java

von Donni D. (Gast)


Lesenswert?

Ok dann hab ich noch was komisches..
Wenn ich per Terminal "echo -e "\xFF" >> dev/ttyAMA0" ausführe kommt die 
255 an. Ich verstehe so langsam garnichts mehr ://

von Peter II (Gast)


Lesenswert?

sicher das du in die Testdatei nicht auch schon Unicode eingefügt 
hattest? schau doch mal auf die größe der Datei.

von Donni D. (Gast)


Lesenswert?

Die Datei ist 7 Byte groß
Dann wird Test denke ich 4 Byte sein, das 255 Zeichen 2 und 
Zeilenumbruch 1 Byte..

von Tom K. (ez81)


Lesenswert?

Das lässt sich einfach herausfinden:
1
$cat 1.txt
2
Testÿ
3
4
$file 1.txt
5
1.txt: UTF-8 Unicode text
6
7
$hd 1.txt 
8
00000000  54 65 73 74 c3 bf 0a                              |Test...|
9
00000007

: Bearbeitet durch User
von Donni D. (Gast)


Lesenswert?

Genau so sieht es aus.. ich frag mich aber warum er das jetzt so 
abspeichern :/ In der raspi-config hab ich als Zeichensatz de_DE UTF8 
genommen und damit hatte es bisher, so meine ich jedenfalls, immer 
geklappt. Was muss ich denn nun umstellen dass dort 255 gespeichert 
wird?

von Tek (Gast)


Lesenswert?

Passt doch eigentlich alles, du schreibst mit einem FileWrite auf die 
Schnittstelle und das System steht auf UTF8. Klar das er Dir die Zeichen 
dann auch in  Unicode codiert.

Wenn Du explizit 255 binär auf die Schnittstelle schreibst funktioniert 
das dann natürlich: "echo -e "\xFF" >> dev/ttyAMA0"

Dein Problem ist also nicht die Schnittstelle sondern die FileWrite 
Funktion die abhängig vom Zeichensatz schreibt.

von Donni D. (Gast)


Lesenswert?

Ich bin mir nur sicher das es vorher funktioniert hat.. Welchen 
Zeichensatz muss ich denn wählen, dass mein Vorhaben gelingt?

von Peter II (Gast)


Lesenswert?

Donni Donis schrieb:
> Ich bin mir nur sicher das es vorher funktioniert hat.. Welchen
> Zeichensatz muss ich denn wählen, dass mein Vorhaben gelingt?

gar keinen - du darfst nicht mit text arbeiten du musst binary 
verarbeiten, dort gibt es keinen Zeichensatz.

FileWriter  ist also schon falsch.

http://www.javapractices.com/topic/TopicAction.do?Id=245

von Donni D. (Gast)


Lesenswert?

So, hab als Zeichensatz nun ISO-8859-15 gewählt, funktioniert wieder 
alles ;) Werde aber trotzdem auf den FileOutputStream umschwenken, man 
weiß ja nie.

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.