Dann mal eine LED mit Vorwiderstand an den Sender_Enable_Pin löten.
Ich kann mir vorstellen, dass der "Sender" nicht (mehr) abgeschaltet wird.
Sollte also mind. 3 Leitungen zum RS485 Treiber gehen:
RxD, TxD und die RE,DE zum Sender und Empfänger (meist parallel).
Mobi kann das auch am Code erkennen.
@Mobi:
> Immer dieses "speziell für Arduino"
so funktioniert das "Marketing".
(Ich benutze den SN75176 auch wenn der ca. 50mA braucht, der Max so um 1mA.)
@Kayle: Wo hast du festgelegt, welcher Pin für die Sende-/Empfangsrichtung zuständig ist?
@Senator42: Das hat mich schon immer genervt. Auch beim Raspberry Pi.
Ich nutze übriegens den SN65HVD1786D von TI.
modbus_configure(9600, 1, 4, TOTAL_REGS_SIZE, 0);
modbus_configure(&Serial1, baud, SERIAL_8N2, SlaveID, TxEnablePin, HOLDING_REGS_SIZE, holdingRegs);[/FONT][/COLOR][COLOR=#333333][FONT="]
[TABLE="class: highlight tab-size js-file-line-container"]
[TR]
[TD="class: blob-code blob-code-inner js-file-line"][COLOR=#A71D5D]void[/COLOR] [COLOR=#795DA3]setup[/COLOR]()[/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"]{[/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"] [COLOR=#969896]/* parameters(long baudrate, [/COLOR][/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"][COLOR=#969896] unsigned char ID, [/COLOR][/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"][COLOR=#969896] unsigned char transmit enable pin, [/COLOR][/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"][COLOR=#969896] unsigned int holding registers size,[/COLOR][/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"][COLOR=#969896] unsigned char low latency)[/COLOR][/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"][COLOR=#969896] [/COLOR][/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"][COLOR=#969896] The transmit enable pin is used in half duplex communication to activate a MAX485 or similar[/COLOR][/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"][COLOR=#969896] to deactivate this mode use any value < 2 because 0 & 1 is reserved for Rx & Tx.[/COLOR][/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"][COLOR=#969896] Low latency delays makes the implementation non-standard[/COLOR][/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"][COLOR=#969896] but practically it works with all major modbus master implementations.[/COLOR][/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"][COLOR=#969896] */[/COLOR][/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"] [/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"] [COLOR=#0086B3]modbus_configure[/COLOR]([COLOR=#0086B3]115200[/COLOR], [COLOR=#0086B3]1[/COLOR], [COLOR=#0086B3]2[/COLOR], TOTAL_REGS_SIZE, [COLOR=#0086B3]0[/COLOR]);[/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"] [COLOR=#0086B3]pinMode[/COLOR](ledPin, OUTPUT);[/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"] [COLOR=#0086B3]pinMode[/COLOR](buttonPin, INPUT);[/TD]
[/TR]
[TR]
[TD="class: blob-num js-line-number, align: right"][/TD]
[TD="class: blob-code blob-code-inner js-file-line"]}[/TD]
[/TR]
[/TABLE]
// Libs deklarieren
#include <ModbusRtu.h>
#include <Wire.h>
#include "Adafruit_SHT31.h"
// Werte für Modbus deklarieren
#define TXEN 4 // Enable Pin
#define ID 4 // Modbus Adresse
#define SPEED 9600 // Baud
Modbus slave(ID,0,TXEN); // Slave konfigurieren
// Sensor deklarieren
Adafruit_SHT31 sht31 = Adafruit_SHT31();
// Array für Modbus default Variablen deklarieren
uint16_t au16data[2] = {99,99};
// Werte für Wartezeit Sensor deklarieren
unsigned long previousMillis = 0;
const long interval = 60000;
// Werte für Modbus State LED deklarieren
int8_t state = 0;
unsigned long tempus;
// Werte allgemein
boolean toggle = false;
// Setup Mode
void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
slave.begin(SPEED);
sht31.begin(0x44);
tempus=millis()+100;
digitalWrite(13,HIGH);
digitalWrite(12,HIGH);
}
// Hauptprogramm
void loop() {
state = slave.poll(au16data,2);
// Abfrage ob Werte über Modbus gelesen wurden
if (state > 4) {
tempus = millis() + 50;
digitalWrite(13,HIGH);
}
if (millis() > tempus) digitalWrite(13,LOW);
// Interval für Sensor Abfrage
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
toggle = !toggle;
digitalWrite(12,toggle);
uint16_t temp = sht31.readTemperature() * 10;
uint16_t humi = sht31.readHumidity() * 10;
au16data[0]=temp;
au16data[1]=humi;
}
}
Das ist dann wohl der nächste Schritt. Dazu werde ich noch den LogicAnalyzer anklemmen. Baud und Parität habe ich kontrolliert. Es hat ja auch schon mit 3 "alten" Nodes funktioniert bis ich die 4te angeschlossen habe. Als das nicht ging habe ich den rappel bekommen und den Modulen die Bias Widerstände geklaut. Wollte damit erstmal einen "sauberen" bus schaffen. Jetzt geht nicht mal mehr 1 Node.da der Node 4 anscheinend etwas sendet, hilft fast nur auf die Leitung schauen.
Habe ich so gemacht:
a) 2 mal RS485 - TTL - RS232 - Wandler, beide auf NUR Empfang
b) einen PC mit 2 Com-Port (RS232-USB geht auch)
c) am PC mit dem kostenlosen Binterm die Daten beobachtet.
Die Baud, 8-Bit, Stop-Parity stimmt auch ?
Wenn die Baud langsam ist (300,1200) ginge grob auch ein Oszi). Ob dann aber eine Antwort oder NAK-Antort kommt, sieht man dabei aber nicht.
mit a) b) c) schon, das Protokoll gibt es im web
Mehr nicht ?Nicht verunsichern durch MOSI. Ich mappe im Programm den SPI um. Hauptsache Baud und Parität stimmen. Ich fahr mit 19200 und Even.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?