mikrocontroller.net

Forum: PC-Programmierung RXTX Java AT89C5131


Autor: Dennis Hoh (hoh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,

für ein kleines Testprogramm für eine Selfmade-IO-Platine benötige ich 
etwas Hilfe!
Auf der Platine sitzt ein AT89C5131. Dieser sendet per RS232 
(9600,8,1,N) ein "Protokoll", das wie folgt aufgebaut ist:
Empfängt der Controller ein 's', so beginnt er dem Zustand der 32 Pin´s 
aller 4 PORT´s zusenden.
Z.B.:
"00101111011100000111110010101010" so zu lesen im Hyperterminal!
Die Kommunikation zwischen Hyperterminal und Controller funktioniert 
einwandfrei!

Diese Kette möchte ich nun mittels Java darstellen!
In einem JFrame habe ich 32 TextField`s

Ist ein String dieser Kette 0 so soll ein entsprechendes TextField rot, 
ist er 1 soll es grün hinterlegt sein.

Meine erster Ansatz ist:
Java sendet ein 's' zum Controller, dieser antwortet mit der erste '0' 
oder '1' und wartet!
Hat Java den ersten Wert verarbeitet ( eine Boolean wird gesetzt), so 
soll Java ein '#' senden, worauf der Controller den nächsten Zustand 
sendet.

Ist es Möglich, die empfangenen 0er und 1er erst mal irgendwo 
"abzulegen"?
Bzw. je 8 Strings (nur 0 oder 1) in ein Byte zuwandeln?

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dennis Hoh schrieb:
> Ist es Möglich, die empfangenen 0er und 1er erst mal irgendwo
> "abzulegen"?
> Bzw. je 8 Strings (nur 0 oder 1) in ein Byte zuwandeln?

Ja.

Autor: hoh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat jemand evt. ein brauchbares Beispiel?

Meine Idee z.B., die auch schon fast geht ist, ein 32 Byte 
serial.buffer, welcher vorm überschreiben transferiert wird...

Ein 2ter Weg wäre, vom Controller, die 4 Portzustände als hex-Wert 
direkt zu empfangen, dann jeweils int to binaryString auf 8 Bits 
formatiert!

Jetzt meine Frage:
WIE (evt diesmal mit Sourcecode) kann ich das binaryString Muster auf 8 
Boolean aufteilen und zuordnen?
Komme ich da mit BitSet weiter? Wenn ja, WIE?

Gruß
hoh

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeig doch einfach mal wo in deinem Code du Probleme hast, oder sollen 
wir jetzt raten wie du es den am liebsten hättest?
Strings zu "bytes" kann man z.B. mit Integer.parseInt("0001110", 2) 
umwandeln... das hat aber erstmal nix mit RXTX zu tun.

Autor: hoh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Da ich seit gestern Mittag auf dem verzweifelten Weg von Dublin nach 
Mannheim bin, und nichtmal weiss, ob ich bis heute Abend zuhause bin, 
die letzte Nach grade mal 1h in nem Terminal geschlafen habe, mein Akku 
am Notebook leer is, meine Koffer seit 5h eingecheckt sind und sich 
darin das Netzteil befindet, muss ich von Telefon aus schreiben...

Und da habe ich leider kein Sourcecode zur Hand ;-)

Kann nur das bieten:
8 Boolean deklariert: pin00 bis pin07
String inBin = "00000000"
String inByte=""

mySerial.Read(inByte);      ;kommt zB ne "FF"

inByte = Byte.toStringBinary(inByte);

Syntaxfehler ausgeklammert steht dann in inBin "11111111"

Wie bekomme ich da dann je eine 1 auf pin00, pin01, pin02, usw.??

Gruß
hoh

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also... erstmal brauchst du das Byte nicht nochmal als "String" 
konvertieren. Statdessen kannst du direkt Prüfen welche Bits gesetzt 
sind z.B. so:
        InputStream mySerial = ...;
        int b = mySerial.read();
        boolean[] bits = new boolean[8];
        for (int i = 0; i < bits.length; i++) {
            bits[i] = ((1 << i) & b) != 0;
        }

        for (int i = 0; i < bits.length; i++) {
            System.out.println("Bit " + i + " ist " + bits[i]);
        }

hoh schrieb:
> die letzte Nach grade mal 1h in nem Terminal geschlafen habe
Schlaf dich halt erstmal aus und las' die Elektronik ruhen, trotzdem ein 
frohes Fest.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.