vorweg ich bin völlig neu in der Welt der Microcontroller und habe von Elektrotechnik wenig Ahnung.
Ich habe hier einen Arduino Nano hingelegt bekommen und soll mittels Temperatursensor und Laborwaage Werte auslesen und speichern.
Einen ersten Test mit "Adafruit thermocouple" + "Adafruit Breakout Board+" und dem Beispielcode, konnte ich recht einfach Sensorwerte auslesen und auf microSD sichern.
Als nächstes muss ich nun eine Laborwaage von A&D Modell FX-5000i, die über eine RS232 Schnittstelle verfügt, anbinden. Vermutlich habe ich ein grundlegendes Vertsändnissproblem, aber nach nun drei Tagen "try & error" + ewig langes "googlen" bin ich praktisch kein Stück vorran gekommen.
Versucht habe ich eine direkte Verbindung so wie eine Verbindung über eine Zwischenplatine (RS232 -> TTL [selbst gebastelt, nicht von mir!]).
Egal welche Beispielcodes ich verwende, es erscheint nur "Müll" im seriellen Monitor. (Baudrate beachtet!)
Ziel des ganzen ist es, das Gewicht eines Werkstoffs bei steigender Temperatur aufzuzeichnen z.B. alle zehn Sekunden Gewicht:Temperatur.
Wenn es Fragen gibt werde ich versuchen sie so gut ich kann zu beantworten.
Wenn Du schon direkt die Waage an den arduino angeklemmt hast (wie auch immer, wissen wir nicht ), dann haste letzteren möglicherweise schon gehimmelt.
RS232 != TTL
Falls der arduino noch lebt dann zeig uns den Hardwareaufbau (Skizze, vernünftiges Foto oder so) und den Sketch.
Wie wird die Waage angesteuert? Oder schiebt die einfach zyklisch Daten raus?
Die Waage lässt sich doch bestimmt auch an einen PC über RS232 anschließen? Funktioniert sie dort?
RS232 arbeitet mit Spannungen zwischen 3-15V beider Polaritäten. Eine Null wird mit positiver, eine Eins wird mit einer negativen Spannung dargestellt. Direkter Anschluss ohne Converter auf TTL (0=0V, 1=5V) kann den Arduino aber auch die Waage beschädigen.
Du brauchst das Datenblatt der Waage. Mit welcher Datenrate sendet sie, irgendwelche Stop und Paritätsbits? Wie ist das Protokoll aufgebaut? Notfalls beim Hersteller erfragen.
Der Nano hat nur eine serielle Hardwareschnittstelle. Die ist mit der USB-Verbindung blockiert. Du brauchst eine zusätzliche Software-serielle Schnittstelle. Z.B. über Altsoftserial-Library. Einfacher geht es mit einem Arduino Mega, der mehrere serielle Schnittstellen hat oder mit dem etwas exotischen Leonardo, wo USB und serielle Schnittstelle getrennt sind.
Leben wird er hoffentlich noch^^ jedenfalls kann ich noch munter drauflos flashen.
So wie ich es verstanden habe, muss man "Q" senden um einen Wert zu erhalten.
Die weiteren Daten müssten sein:
Bits/s 2400
Datenbits 7
Stoppbits 1
Parität EVEN
10
Als Programmcode habe ich die zur Verfügung stehenden (seriellen) Beispiele genutzt. Dort habe ich nur noch RX auf 2 und TX auf 1 gesetzt, stand ursprünglich auf 10 und 11.
Pin1 kollidiert jedenfalls mit der USB-Schnittstelle des Nanos.
Die Drähte zwischen Kabel der Waage und TTL-Adapter sehen mir etwas wackelig aus.
Dein Sketch wäre bestimmt auch hilfreich.
@Uwe: Genau genommen gibt es auch noch eine Gewichtsveränderung durch den Auftrieb der verdrängten Luft. Kalter Körper ist kleiner also weniger Auftrieb als ein warmer. Dann kann man auch noch die Dichteveränderung der durch den Körper sich abkühlenden und erwärmenden Luft einbeziehen und Auswirkungen von Luftströmungen (Kamineffekt) untersuchen.
Nachtrag: Ich weiß nicht, ob man die seriellen Softwareschnittstellen auf das etwas unübliche Datenformat der Waage stellen kann. Die Hardwareschnittstelle kann man entsprechend einstellen (siehe: unter Parameter), aber dann ist der USB-Port blockiert.
Theseus:
Pin1 kollidiert jedenfalls mit der USB-Schnittstelle des Nanos.
Klingt logisch wenn nur eine vorhanden ist. Habe nun mal Pins 9 und 10 verwendet. Das sind also D6 und D7.
Theseus:
Die Drähte zwischen Kabel der Waage und TTL-Adapter sehen mir etwas wackelig aus.
Ein Provisorium.^^
Die Ummantelung der Drähte stecken ebenfalls ein Stück in den beiden weiblichen Steckern. Ohne aktiv daran zu ziehen fallen sie nicht raus.
Theseus:
Dein Sketch wäre bestimmt auch hilfreich.
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 9); // RX, TX
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(2400,SERIAL_7E1);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(2400);
mySerial.println("Hello, world?");
}
void loop() { // run over and over
if (mySerial.available()) {
Serial.println(mySerial.read());
}
if (Serial.available()) {
mySerial.println(Serial.read());
}
}
Hinzugekommen ist nun noch "SERIAL_7E1". Damit erscheint nicht einmal mehr "Goodnight moon!" sondern "Gooäîiçèt íooî!�".
Bei Betätigung der "PRINT" Taste der Waage passiert leider auch nichts.
Hinzugekommen ist nun noch "SERIAL_7E1". Damit erscheint nicht einmal mehr "Goodnight moon!" sondern "Gooäîiçèt íooî!�".
Dann ist 7E1 wohl nicht richtig, oder SoftwareSerial hat ein Problem damit
Bei "Good" sind bei den ersten 3 Buchstaben Even Parity Bits = 0, beim 'd' wird das Parity Bit gesetzt, was als 8N1 interpretiert das Zeichen 0xe4 wäre. ( 'ä' in mehreren 8-Bit Zeichensätzen, s. ISO/IEC 8859)
Nachtrag: (Richtig, Theseus!) wenn Serial auf 7E1 gesetzt wird, müsste der SerialMonitor damit klarkommen. Wenn der weiterhin 8N1 erwartet, zeigt er das auch an.
Bei den Pins spricht man eigentlich immer von den Arduinos Pins, da sie genau so auch bei den anderen Boardformen wie dem Uno vorhanden sind. Ich gehe davon aus, du hattest mit 1 und 2 D0 und D1 des Nanos gemeint. Diese Pins sind mit USB parallelgeschaltet. Sie kann man nur nutzen, wenn man nicht gleichzeitig mit dem Nano über USB kommunizierst. Du könntest die Werte z.B. über ein LCD anzeigen lassen.
Du initialisierst Serial über USB mit den exotischen Daten der Waage. Deshalb kommt nur Schrott am Computer an. Die Software-Serial initialisierst du, wie es der Computer, aber nicht die Waage haben will.
Ob du Software-Serial mit 7E1 initialisieren kannst, weiß ich nicht.
Dann stelle doch die Waage auf ein Format, passend zum Arduino. Wenn ich das richtig sehe, wird normalerweise 8bit, no parity, 1Stopbit verwendet. Die RS232-Schnittstelle der Waage sollte gemäß der technischen Daten so eingestellt werden können.
Wenn man die Hardware Schnittstelle für irgendwelche exotischen Datenformate braucht kann man sie auch dafür nehmen und die Kommunikation zum PC mit Software Serial und einem TTL/USB Adapter machen.
Laut Handbuch ist es aber in der Tat möglich das Datenformat zu ändern. Sowie ich das sehe muss man über die DIP-Schalter Mode 3 einstellen. So ganz klar ist es aber nicht.
Theseus: @Uwe: Genau genommen gibt es auch noch eine Gewichtsveränderung durch den Auftrieb der verdrängten Luft. Kalter Körper ist kleiner also weniger Auftrieb als ein warmer. Dann kann man auch noch die Dichteveränderung der durch den Körper sich abkühlenden und erwärmenden Luft einbeziehen und Auswirkungen von Luftströmungen (Kamineffekt) untersuchen.
Nehmen wir zB einen Aluminiumblock von 1dm^3 bei 20°C mit Gamma = 69,3 '10^-6*1/K der dehnt sich bei Erwärmung auf 21 °C um ca 70 mm^3 aus. Das entspringt einer Luftverdrängung 84,7 µg bei einem Gewicht des Aluminiums von 2,7kg.
Die Waage hat keine DIP-Schalter, vermutlich ist damit im Handbuch der Drucker gemeint. Eine Änderung der Konfiguration lässt sich aber über das Tastenfeld realisieren.
#include <SoftwareSerial.h>
SoftwareSerial mySerial(14, 15); // RX, TX
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(57600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(4800);
mySerial.println("Hello, world?");
}
void loop() { // run over and over
if (mySerial.available()) {
Serial.write(mySerial.read());
}
if (Serial.available()) {
mySerial.write(Serial.read());
}
}
Entscheidend ist das, was auf der Platine des Nano steht. Du meinst vermutlich D10 und 11 also, musst du 10 und 11 eintragen. Mit 14 und 15 würdest du die analogen Eingänge A0 und A1 ansprechen, was für den Zweck etwas exotisch wäre..
Am besten ist in der Tat erst mal das Teil direkt an den PC hängen und mit einem Programm wie HTerm testen. Dann hat man nur eine Baustelle und kann besser testen was da wirklich gesendet wird.