Pages: [1]   Go Down
Author Topic: Messwert seriell einlesen  (Read 726 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 2
Posts: 33
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo liebes Forum,

Ich habe ein kleines Problem mit der seriellen Kommunikation. Ich möchte mit dem Arduino Messergebnisse eines Agilent Multimeters auswerten. Dieses sendet nun die Messdaten nicht im Integer Format, sondern als byte (oder float).
Code:
Serial.read();
liefert aber immer bloß ein int Wert zurück (konkret: -1 egal was gemessen wurde). Gibt es noch andernweitig Möglichkeiten seriell Daten einzulesen?
Das Multimeter liefert die korrekten Werte zurück, hab es mit HTerm überprüft.

Bin für jede Idee oder Denkanstoß dankbar

LG MAX

hier mal die Funktion, die die Messwerte einlesen soll:
Code:
float messen()
{
  float ergebnis;
  Serial1.print("READ?\n");
  ergebnis = Serial1.read();
  return ergebnis;
}

wenn ich noch
Code:
if(Serial1.available())
einfüge überspringt er das einlesen komplett
« Last Edit: April 02, 2013, 09:13:58 am by hypermax » Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So wie Du den Fall beschreibst, bekommst Du gar keine Daten. Wenn ein Serial.Read() eine "-1" zurück liefert, bedeutet das, das keine Daten vorhanden sind.

Da Du Serial1 verwendest, stellt sich die Frage welchen Arduino Du hast? Soweit ich weiss hat nur der Mega mehr als eine serielle Schnittstelle.
Weiterhin ist die Frage mit welche Baud-Rate das Messgerät sendet und wie Du das Gerät angeschlossen hast? Falls das Gerät RS232 spricht, ist z.B. auch wichtig ob es das mit TTL-Pegel (5V) oder mit RS232 Pegel (+/- 12V) macht. Im zweiten Fall hast Du die serielle Schnittstelle Deines Arduino vermutlich bereits gegrillt.
Hier würde ich die entsprechenden Pins per Taster und LED mal prüfen, ob die als Eingang und Ausgang noch funktionieren.

Zusätzlich zur Baudrate gibt es noch weitere Parameter für eine serielle Verbindung (Stop-Bits, Paritäts-Bits, etc.) Default ist in der Regel 8N1.

Mario.
Logged

Offline Offline
Newbie
*
Karma: 2
Posts: 33
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

danke erst mal für die Antwort

aber die Probleme die du da ansprichst habe ich alle schon überprüft. Wenn ich vom Arduino (Leonardo) Befehle an das Multimeter sende, kommen diese auch ordnungsgemäß an und werden ausgeführt. Wenn ich von meinem Rechner aus den "READ?" Befehl (direkt an das Messgerät) sende, dann bekomme ich auch eine zufriedenstellende Antwort (am PC).
das Problem besteht meiner Meinung nach nur darin, das das Arduino mit dem ankommenden format schwierigkeiten hat.

LG Max
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 111
Posts: 5236
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ändere

Code:
  Serial1.print("READ?\n");

mal nach:

Code:
  Serial1.println("READ?");

Gibt das etwas anderes raus?

Füge die IF-Abfrage wieder ein, die muss sein, aber Du solltest vielleicht etwas länger warten. Füge zum Test doch mal ein

Code:
delay(500);

nach dem println() ein, damit das Multimeter Zeit kriegt, eine Antwort zu senden. Wenn Du sicher bist, dass das Multimeter antwortet, kannst Du auch

Code:
while (!Serial1.available());

einfügen, dann wartet der Code immer, bis er antwort bekommt.
Logged

Offline Offline
Newbie
*
Karma: 2
Posts: 33
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nochmals danke für die Antworten

Heute hat sich allerdings herausgestellt, dass das Problem doch nicht softwareseitig zu suchen ist.
Nachdem ich einige Zeit mit dem Oszi herumgemessen habe, bin ich zu den folgenden Erkenntnissen gekommen:
1. am  Arduino kommt kein Signal an
2. es liegt nicht am Pegelwandler (MAX3232), den hab ich zum einen gewechselt, zum anderen kommt dort auch kein richtiges Signal an. Sonstige Beschaltung des MAX 3232 ist auch i.o.
3. Kommunikation zwischen PC und Multimeter funktioniert tadellos (wunderschönen Oszibildern)
4. Kommunikation zwischen PC und Arduino funktioniert auch tadellos (ebenfalls super Oszibilder)
5. Wenn das Multimeter am Arduino angeschlossen ist, ist zwar am TX des Arduino alles i.o. aber am RX kommt nix an und vom Multimeter geht auch nix Vernünftiges weg. (man erkenn am Oszi zwar etwas aber zum einen nix was nach Daten aussieht und zum anderen stimmen die Pegel auch nicht, es wird kein HIGH - Pegel erreicht. LOW -> ~ -7.5V das ist ja gut, aber HIGH -> ~ -1V/0V)

Ich weiß, dass das wahrscheinlich hier nicht so ganz das richtige Forum ist aber vllt. hat jemand ne Idee oder schon mal ein ähnliches Problem gehabt und kann mir in irgendeiner Weise weiterhelfen.

wäre für jeden Vorschlag dankbar.

LG Max
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 111
Posts: 5236
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Es würde helfen, wenn Du Dein Multimeter verlinken würdest, Agilent stellt einige Typen her.

Ich könnte mir vorstellen, dass ein RS232-Signal die Schnittstelle aktiviert, DTR wäre dafür z.B. sehr geeignet. Hast Du das schon mal versucht?
Logged

Offline Offline
Newbie
*
Karma: 2
Posts: 33
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sorry hab ich vergessen, es handelt sich um das
Agilent 34401a http://www.home.agilent.com/en/pd-1000001295%3Aepsg%3Apro-pn-34401A/digital-multimeter-6-digit?&cc=DE&lc=ger

Das DTR - Signal ist dauerhaft auf HIGH gelegt

EDIT: Sorry, hab mich vertan, das DSR ist auf HIGH, am DTR kommt vom Agilent etwas zurück
« Last Edit: April 04, 2013, 05:03:17 am by hypermax » Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 111
Posts: 5236
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das Gerät verwendet die seriellen Parameter 8N2. Wie hast Du das auf dem Arduino eingestellt? Poste den vollständigen Code!
Logged

Pages: [1]   Go Up
Jump to: