Hi
Also folgende Situation:
PC --> FT232RL --> µC
Kommunikation funktioniert mit Putty einwandfrei. Aber mit meinem Java
Programm nicht. Es kommen falsche werte am µC an und es kommen auch
falsche Werte zurück (z.B.: aus 254 wird 252) Hardwarefehler
ausgeschlossen.
Verbindungsaufbau:
31250Baud, 1 Stoppbit, 8 Datenbit und keine Flusskontrolle(genau wie im
Putty eingestellt)
Eigentlich hab ich den Code von einem alten Projekt kopiert, bei dem das
so funktioniert hat. Aber jetzt wird aus dezimal 49 ('1') dezimal 60.
Hat jemand eine Ahnung was da falsch läuft?
mfg
Lukas
einen tipp: nimm JD2XX und nicht RXTX.org wenn du einen FTDI chip
verwendest. funktioniert zwar beides, aber die nativen treiber sind doch
etwas schicker ;)
@topic
das mit den werten hört sich nach falscher baudrate an...
JD2XX kenn ich ja noch gar nicht. Danke!
Baudrate doppelt und dreifach geprüft. Wenn da nicht noch irgendein
Parameter von RXTX reinpfuscht muss die stimmen. JD2XX werde ich gleich
morgen ausprobieren
Weitere Infos:
- Umstellen der Baudrate ändert nichts.
- Hardware-Echo (RX-TX Kurzschluss) funktioniert! ich schreibe 1 runter
und bekomme 1 zurück(im Java).
Nächster Schritt: Mit dem Oszi Signal analysieren :(
EDIT Ist der Server von JD2XX down? Ich komme nur auf den SVN, die
kompilierte Version ist nicht verfügbar.
Lukas H. schrieb:> Hardware-Echo (RX-TX Kurzschluss) funktioniert! ich schreibe 1 runter> und bekomme 1 zurück(im Java).
Also das hört sich doch nach irgeneinem Baudratenproblem an, was ist das
überhaupt für eine komische Baudrate? Nutzt du einen passende Quarz am
µC?
Ja es ist ein Baudratenproblem! Egal was ich einstelle es kommen
9600Baud (von Java)
Quarz ist 12MHz. Es funktioniertja mit Putty, nur mit Java nicht.
Kann RXTX das einfach nicht?
Wenn ich 62.5kBaud einstelle kommt auch nur 9600Baud raus
Leider auch nicht
Hab jetzt ftd2xx probiert --> funktioniert!
Also ist das Problem gelöst, auch wenn ich den Fehler nur zugern wüsste.
Vielen Dank für die Antworten
Lukas
Ich habe momentan ein ähnliches Problem, jedoch funktioniert bei mir die
Kommunikation gar nicht über den RXTX. Da wollte ich dann auch mal den
jd2xx probieren, jedoch finde ich nirgends eine Kopie die funktioniert.
Hab mir was aus einem SVN kopiert, jedoch bekomme ich dann einen
unstatisfied link error...
Wäre nett zu erfahren, was man alles wo runter laden muss, dass es
funktioniert. Am besten wäre ein kleines Projekt was nur HalloWelt oder
so raus schreibt, als Eclipse Project, was dann die Library nutzt...
Wenns keine Umstände bereitet, natürlich.
Grüße,
Christoph Kretzschmar
Nimm standartbaudraten 300,600,1200,4800,9600,19200,38400,115200. Der
FTDI kann zwar auch nicht standart Baudraten aber nur mit speziellen
Befehlen aus der dll (und ich glaube nicht das irgendeine JAVA app
dadrauf zugreift).
Die wird den standart Treiber benutzen und der akzeptiert nur die
standart Baudraten als Parameter (siehe Oben). Wenn er die Baudrate
nicht akzeptiert, nimmt er warscheinlich seine default Einstellung und
die ist 9600.
C. Kretzschmar schrieb:> unstatisfied link error
Dann mußt du den Lib-Pfad anpassen, das geht über Projekt -->
Eigenschaften --> Java Buildpath
Dort im Tab Source deinen scr Folder aufklappen und "Native Library
location" auf den Pfad zeigen lassen wo die dll/so/... liegt.
Ich greife jetzt auf ein älteres Thema zu, in der Hoffnung, das Ihr eine
funktionierende Lösung gefunden habt, auf die ich selbst nicht gestossen
bin.
Zu meiner Arbeit:
Ich schreibe gerade eine Technikerarbeit, in der ich einem uC Daten
sende und die der uC mir beantworten soll. Diese muss ich auswerten und
in einer Sinuskurve anzeigen lassen (Frequenzen). Mein Problem ist das
selbe, wie bereits oben beschrieben!
--> ich sende ein Char und bekomme vom uC das gleiche Char als Antwort
zurück. Wenn ich jetzt aber den Befehl sende, das er mir die Daten für
eine Frequenz senden soll, bekomme ich ein totales durcheinander, mit
dem ich nichts anfangen kann. Ich erwarte ungefähr 12500 Chars und
bekomme nur 768.
Es fehlen haufenweise Daten..... Bei Putty passt es ganz genau.
Ich verwende ebenso RxTx und davor hab ich JavaComm probiert.
"jd2xx" hab ich bereits in Eclipse mit eingebunden, brachte aber kein
Erfolg.
Einstellungen:
Bits pro Sekunde: 9600
Datenbits: 8
Parität: keine
Stoppbits: 1
Flusssteuerung: Hardware
Über eine Hilfe würde ich mich sehr freuen!
Vielen Dank!
VG
Peter
Bei mir war die Lösung jd2xx, weil rxtx einfach kein andere Baudrate
setzen wollte. Set/Get funktioniert zwar, mit dem Oszi gemessen war es
aber immer 9600 Baud!
Mach mal beim senden eine Pause zwischen den Werten.
Ansonst könntest du mal Java und uC Code posten
>"jd2xx" hab ich bereits in Eclipse mit eingebunden, brachte aber kein Erfolg.
Hats nicht funktioniert, oder war wieder das selbe Problem?
Also ich nutze RXTX mit Baudraten bis 200k das ist überhaupt kein
Problem, ein Problem ist nur "irgendwas" von "irgendwoher"
zusammenzukopieren und dann zu hoffen das es "irgendwie" funktioniert...
Peter schrieb:> Flusssteuerung: Hardware
Kann/Weiß dein uC auch davon?
@Läubi:
Ne, bei der Technikerarbeit ist nichts mit "zusammen kopieren!" Ich hab
von einem Lehrer nur ein PDF-Datenblatt über JavaComm erhalten. Den Rest
versuche ich selbst zu programmieren. Dazu muss ich alles Dokumentieren,
Verzeichnisse vermerken, Links angeben (wie diesen hier),......
Ja, der uC weiß davon! Hat unser Lehrer auch kontrolliert. Die Syntax
des uC ist einwandfrei. Das ist das Problem! Es kann nur am Java
liegen.... (uC ist ein MSP430 von TI)
@Lukas: Meinst Du Pausen beim Senden setzen oder Empfang? Kann ich
überhaupt beim Empfang Pausen setzten? Hm, OK, in der Schleife! Muss ich
noch testen...
Benutzt Ihr einen USB-Converter oder wie macht Ihr das? Ich muss einen
verwenden, da die Firma (für die ich das gleichzeitig programmiere)
alles über Converter verbindet. Laut Gerätemanager von Windows ist es
ein FTDI!
Danke vielmals für Eure Hilfe!
VG
Peter
Peter Peschel schrieb:> Es kann nur am Java> liegen
Dann zeig doch einfach mal deinen Code + Schaltplan...
Wie gesagt ich setze das "beruflich" ein und hatte noch nie Probleme mit
verlorenen Daten. Weder mit echten noch mit USB Schnittstellen. Ein
beliebter Fehler ist z.B. das beim lesen nicht alle Verfügbaren Zeichen
sonder immer nur eines gelesen werden was irgendwann zu Pufferüberläufen
führt.
Peter Peschel schrieb:> OK, in der Schleife!
Hört sich schon mal nicht sooo gut an...
>Wie gesagt ich setze das "beruflich" ein und hatte noch nie Probleme mit
verlorenen Daten.
Ich auch noch nie! Nur in diesem Fall. Hab sonst noch nie einen FT232
eingesetzt. Mit einem anderen USB-Seriell Konverter hat es noch immer
Funktioniert
Das mit der Pause kannst du vergessen! Du hast ja Flusssteuerung.
Ohne Schaltplan und Code kann man nicht sehr viel sagen.
Peter Peschel schrieb:> Bin mal gespannt, wo mein Fehler liegt!
Mal abgesehen von der etwas merkwürdigen Programmstruktur:
1
while(ins.available()>0)
2
{
3
intnumBytes=ins.read(readBuffer);
4
}
Hier wirfst du alle bytes bis auf das letzte weg solange Daten
Verfügbar sind...
Auch ist für kontinuierliche Datenströme ein Thread besser als ein
Eventlistener.
Ansosnten auch mal auf die Warnungen des Compiler hören (oder der SDK
falls du Eclipse benutzt o.ä.) du hast einige Variablen welche nicht
verwendet werden.
OK, werde ich testen! Danke! Aber wieso werfe ich sie weg? Die Schleife
besagt doch, das er solange in der Schleife bleiben soll, solange Daten
vorhanden sind..... Und dann lese ich den Buffer aus....
Die Variablen die nicht verwendet werden hab ich für weitere Dinge
vorgesehen. Das Programm ist noch nicht fertig!
Hast Du grad meinen Freudenschrei gehört? Wie konnte ich das so lange
übersehen?!?!
Wenn ich wüsste, das Du hier in der Nähe wohnen würdest, dann würde ich
Dich jetzt zu einem Bier einladen!
VIELEN VIELEN DANK! Boa eh! Jetzt fällt mir ein Stein vom Herzen!
Aber seltsam ist es schon, das ich doch einige Daten bekommen habe.
Danke Dir nochmal!
Gruß
Peter
Peter Peschel schrieb:> Aber seltsam ist es schon, das ich doch einige Daten bekommen habe.
Nein ist es nicht. Deswegen schrieb ich ja das es manchmal besser ist
nicht irgendwelche Beispiel zu kopieren.
Du liest einfach ein byte ein und solange weitere verfügbar sind
überschreibst du das zuvor gelesene Byte, also Beispiel:
1
A B C
Also können 3 Zeichen gelesen werden.
1.Durchlauf readBuffer = 'A'
2.Durchlauf readBuffer = 'B'
3.Durchlauf readBuffer = 'C' --> Abbruch da keine weiteren Zeichen
vorhanden.
Nun schreibst du den Inhalt von readBuffer in deine Liste (mommentan
Wert = 'C'), es sieht also so aus als hättest du 2 Zeichen nicht
empfangen. Da die Größe dieses Datenpuffers u.A. von der Auslastung des
Systems mit anderen Aufgaben abhängt hat es den Anschein als würden
zufällig Zeichen verloren gehen.
Das hat aber primär weder was mit Java noch mit RXTX zu tun sondern ist
einfach ein Programmierfehler welcher durch eine vernünftige
Programmstruktur und Debugging auffindbar sein sollte, in so einem
Fall hilft es auf jedenfall nicht den Fehler in der Programmiersprache
zu suchen.
Peter Peschel schrieb:> Wie konnte ich das so lange> übersehen?!?!
Wie gesagt die Programmstruktur ist nicht gerade optimal und es gibt in
dem Code noch eine ganze Menge Stolperfallen. Mein Tip wäre mal mit
deinem Betreuer über den Code drüberzugehen und sich ein paar Tips
abzuholen, das Internet ersetzt eine gewisse Erfahrung nicht.
Läubi .. schrieb:> Wie gesagt die Programmstruktur ist nicht gerade optimal und es gibt in>> dem Code noch eine ganze Menge Stolperfallen
Das ist noch recht milde ausgedrückt.
An welcher Schule wird die Technikerarbeit gemacht?
Na na na, jetzt mal langsam!! Das die Syntax jetzt gerade nicht die
schönste ist, und ich mir leichter tun würde, wenn sie strukturierter
wäre, ist mir vollkommen klar! Und da hat meine Technikerschule nichts
damit zu tun!! Auch nicht mein Lehrer!
Wie gesagt, bei dem Programm handelt es sich um meine Technikerarbeit!
Um einen Teil davon! Die eigentliche Technikerarbeit kommt erst noch!!
;)
Zur Erklärung:
Ich hab hier ein "Testboard", das wir (ein Kollege und ich)
programmieren, auslesen,....... Als"Vorarbeit!" Das eigentliche Gerät,
das wir erstellen, ist noch im Bau und in Planung. Er erstellt gerade
den Schaltplan usw..... Die Platine wird dann erst geätzt und bestückt.
DANN kann ich erst mit dem eigentlich Programm beginnen. Dieses wird
schon strukturierter. Mit eigenen Klassen und Threads...... Dann kann
ich einen Teil von der bestehenden Syntax kopieren, strukturieren,.....
OK?
Das ich den o.g. Fehler nicht gesehen habe war wirklich "blindheit!" ;)
Peter Peschel schrieb:> Das ich den o.g. Fehler nicht gesehen habe war wirklich "blindheit!" ;)
Richtig.
Ausreden für Programmierer:
- Das ist noch Beta. Später sieht alles besser aus
- Das ist erstmal ein grober Entwurf.
- Ja, bis dahin wird es fertig sein.
- Wie konnte denn das passieren?
- Man kann ja nicht alles testen.
- Abgesehen davon, dass es nicht läuft, wie findest Du es?
- Es ist fertig, nur noch nicht getestet.
Das ist der Beste:
Wahrscheinlich haben Sie eine alte Version.
An welcher Schule ist nun die Technikerarbeit?
Gruß
HP
Peter Peschel schrieb:> Benutzt Ihr einen USB-Converter oder wie macht Ihr das? Ich muss einen>> verwenden, da die Firma (für die ich das gleichzeitig programmiere)>> alles über Converter verbindet. Laut Gerätemanager von Windows ist es>> ein FTDI!
Wir verwenden heutzutage auch nur noch USB-Konverter. Wobei das keine
Rolle spielt. Wenn ich das alles so verfolge hat Läubi völlig recht. Da
wurde recht viel zusammengewürfelt ohne zu Wissen was wirklich passiert.
Am Besten Du ließt alles nochmal von Läubi durch und lässt Dir das durch
den Kopf gehen.
Ist immer schön, wenn der Programmcode gut dokumentiert ist :-D
//----- RS232 - nach Hr.Zilz -----
static CommPortIdentifier portID;
einfach mal googlen, dann kommst Du auf die Elektronikschule Tettnang
:-D
Kann den anderen Usern nur Zustimmen! Der Programmcode ist echt
grauenhaft. Nach langer Rechere hab ich erfahren, dass man in der
Elektronikschule schnell die Note 1 in der Technikerarbeit bekommt.
Dafür sind die Prüfungen schwer, bzw. es konnte nicht alles vermittelt
werden was abgefragt wurde. An deiner Stelle würde ich dennoch den
Programmcode anpassen. eventuell Hilfe bei jemanden suchen, der dir
weiterhelfen kann. In welcher Fachrichtung wird denn die Technikerarbeit
absolviert?
He, jetzt wird es aber gemein!
1. wer erzählt sowas herum? Das man so leicht eine 1,0 bekommt?
2. ich bin gelernter Kaufmann und bin daher Quereinsteiger. Ich möchte
mein Hobby zum Beruf machen. Ich lerne erst seit 3,5 Jahren das
Programmieren!
3. Die Schule hat einen sehr guten Ruf! Und nicht, das man leicht gute
Noten bekommt!
4. Ihr wisst schon, das ich Eure Hilfe in der Doku meiner
Technikerarbeit veröffentlichen "muss"
5. Es ist keine BETA! Das ist ein kleines Vorprogramm! Die eigentliche
Technikerarbeit kommt erst noch. Und da kann ich Programmteile von dem
o.g. übernehmen! Da muss ich besser strukturieren! KEINE AUSREDE! -->
MVC
6. Die Lehrer sind echt super!
7. Die TA ist verknüpft mit Kommunikationstechnik/µC und
Softwareentwicklung
usw...usw....
Keine Panik, lass Thomas G. reden wie sagt man so schön:"Konkurenz
belebt das Geschäft!" Es wird immer differenzen zwischen den einzelnen
Schulen geben bzw. wird es immer Leute geben, die meinen, dass sie etwas
besseres sind. deshalb bin ich für eine Objektive Lösung.
Werde in den nächsten Tagen eine emailadresse einrichten, bei der sich
jeder nach authentifizierung mit einem Schülerausweis einen acoount
unter meiner Joomla Homepage holen kann. Wie es auch in einem
Arbeitszeugnis üblich ist, will ich nicht, dass irgendeine Schule
negativ bewertet wird sondern nur mit Positiven Sernen, wer die meisten
positiven Sterne gesammelt hat, hat gewonnen!
für Vorschläge zu den einzelnen Kriterien wäre ich denoch dankbar.
@Peter
5. Das hört sich so an:
Ich bau mir ein Haus, erst aus Ästen und Stroh und schau ob es halten
würde. Danach fange ich mit Ziegelsteinen an. Diese Arbeitsweise hätte
in meinem Betrieb keine Chance. Man sieht schon sehr schnell ob jemand
was vom Handwerk versteht oder nicht.
Warum sind zwei Variablen auf static gesetzt?
static CommPortIdentifier portID;
static SerialPort serss;
Kannst Du mir das erklären?
so, die Email-Adresse wäre eingerichten, nach Authentifizierung mit
einem gültigen Schülerausweis bekommt man zugriff auf die Homepage. Hier
kann man sich über das Image der jeweiligen Schulen informieren.
Außerdem kann man dort Klassenarbeiten hoch und runterladen.
Viel Spass
s.stroebele@web.de
Stimmt! Das wollte ich Euch noch schreiben! Ich bin seit zwei Wochen
fertig und hab eine 1,0 für die Technikerarbeit bekommen! ;)
Und nein, es war NICHT einfach zu bekommen.......