SoftwareSerial Kommunikation zur RS232-Gerät mit Arduino

Die Frage und Setup

Ich versuche meinen Arduino Pro Mini (w/ATmega328) die Kommunikation mit einem seriellen Gerät über RS232. Speziell möchte ich den arduino, um schließlich die Kommunikation mit einem BKPrecision 1785B Stromversorgung und der Steuerung von Spannung, Strom, etc.

Einen Nachteil. Ich bin mit meinem computer (über die einzige RS232-Anschluss auf dem arduino) Programmieren und Debuggen Sie den code, und mein arduino hat nur eine serielle Schnittstelle. Deshalb habe ich mich entschieden, mit der SoftwareSerial-Bibliothek, um das setup eine zusätzliche software RS232-Schnittstelle (an digitalen pins) für die Kommunikation mit dem Netzteil.

, Was ich getan haben, um das Datum

Ich habe versucht, die Umsetzung der oben, aber die BK1785 nicht zeigen keine Zeichen empfangen, oder das Verständnis der Befehle. Ich habe dann eingesteckt in einen zweiten computer in die SoftwareSerial port (anstelle des Netzteils) zu-monitor-Kommunikation und stellen Sie sicher, dass die Befehle korrekt gesendet werden. Der zweite Rechner (mit Docklight als serial monitor) bemerkt, dass Informationen empfangen werden, aber es hat nicht mit dem übereinstimmen, was gesendet wurde (siehe unten). Ich kann nur annehmen, dass das ich nicht der adruino richtig kommuniziert. Es scheint sehr wahrscheinlich, dass es entweder 1) die Software serial setup oder 2) mich falsch übertragung der Daten.

Zusätzliche info

Die Stromversorgung erfordert ein Paket von 26 bytes.

Docklight-setup als 9600, 8N1 (edit#1)

Arduino-Code

Dies ist der vereinfachte code, der ich bin läuft auf dem Arduino.

#include <SoftwareSerial.h>
SoftwareSerial port1(4,3);
byte output[26]={170, 0, 32, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203}; 

void setup()
{
  Serial.begin(9600);
  port1.begin(9600);
  digitalWrite(6,LOW); //Set ground pin on SoftwareSerial to LOW
  delay(5);
}

void loop()
{
   for (int i=0;i<26;i++){
     port1.write(output[i]);
   }
   delay(10000);
}

Output-und Input -

Ich bin Rundfunk die folgenden 26 bytes (siehe unten im Dez. format) aus dem arduino (siehe code oben) durch die SoftwareSerial-port:
170, 0, 32, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203

Meinen zweiten Rechner (verbunden mit der SoftwareSerial-port des arduino) erhält den folgenden 25 (nicht 26) Byte (siehe auch Dez. format):
149 191 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 105

Abschließende Gedanken

Ich habe versucht, mit sowohl die schreib-und print-Befehle in die arduino, aber keiner scheint zu arbeiten. Ehrlich gesagt, ich habe keine Ahnung, ob das mit der for-Schleife zum senden der 26 bytes ist die richtige Möglichkeit zum senden von Informationen wie das. Gibt es eine bessere Methode für den Versand eines Paketes von bytes? Ich stocherte im internet, aber ich konnte nichts dagegen ein ähnliches Beispiel.
Ich würde schätzen jedes feedback für die community. Danke!

Edit#2

Ersetzte ich die for-Schleife in meinem code folgende Zeile:

port1.write(output,26);

und erhalten einen identischen Satz von 25 bytes:
149 191 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 105

Edit#3

Ich versuche Bilder von meinem Oszilloskop-Spuren, aber ich habe nicht 10 Rufpunkte noch nicht.

Ist die serielle Kommunikation empfangen, die Linie soll zu hoch sein, wenn keine Daten gesendet?

  • Haben Sie stop-bits und Parität einstellen die gleiche auf beiden enden?
  • Docklight-setup als 9600, 8N1 (sorry, ich vergaß zu hinzufügen oben). Das arduino-setup ist wie im code gezeigt.
InformationsquelleAutor john | 2014-01-22
Schreibe einen Kommentar