leider bin ich blutiger Anfänger und kenne mich noch nicht so gut aus. Zum RS485 Sheild gibt es leider nicht viele brauchbare Artikel es sei denn man möchte zwischen zwei Arduino´s kommunizieren. Jedoch möchte ich Daten z.B. Wörter über den Serial Monitor der Arduino Umgebungsentwicklung einlesen und über das RS485 Sheild in Hterm wieder ausgeben. Das Sheild ist über den A und B Port via USB am PC angeschlossen (Masse mit GND verbunden) und dafür wurde ein FTDI Treiber installiert. Der Arduino ist wie gewohnt ebenfalls über seinen USB Anschluss verbunden. Wäre super wenn ihr mir helfen könntet das RS485 Sheild besser zu verstehen und mir zeigen könntet wie ich die Daten über die RS485 Schnittstelle weiterleiten kann. Das Auslesen eines Temperatursensors über Hterm und die RS485 Schnittstelle ist mir schon gelungen.
Welech Hardware.
Es kann nicht sein das du einen FTDI (USB=>UART) direkt an A+B+GND des RS485 Sheilds angeschlossen hast und dann was gesehen hast.
RS485 ist differentielle serielle Halbdublex schnittstelle und kann nicht direkt mit einer UART verbunden werden.
Also muss du das Signal vom RS485-Shield auf den PC Anschluss via RS485=>UART=>FTDI=>USB) wandeln um überhabt etwas sehen zu können auf dem PC.
Ein bisschen mehr Infos über dir Hardware wäre schön
Die Schaltung ist wie im Bild Anhang verdrahtet. Hatte den Temperatursensor noch an einem digitalen Port angeschlossen. Kenne mich leider noch nicht gut aus und weiss nicht genau wie ich direkt etwas von dem seriellen Monitor zur USB Schnittstelle des RS485 senden kann und dann über Hterm ausgeben kann. Gibt es vielleicht i.wo eine genaue Beschreibung zu dem RS485 Sheild? Finde da leider sehr wenig dazu.
Die "Schaltung" funktioniert so nicht du kannst nicht einfach D+ und D- vom USB auf RS485 anschließen und den FTDI Treiber installiern und dann soll es funktionieren. Woher hast du diesen Aufbau
Was hast du überhaupt vor bzw warum willst du den Arduino mit Shield "zweimal" am Rechner anschließen das macht keinen Sinn.
Mach mal ein Prinzipschaltbild was soll der Arduino machen und warum RS485 bzw für was?
Gruß
DerDani
@Eisbär
Dann hätte es so wie es gerade verbunden hat zwei FTDI an einem UART Port geht so auch nicht.
dani, warum sollte das nicht gehen? er könnte dann halt über zwei verschiedene COM-ports des notebooks lesen.
klar, natürlich vorerst sinnfrei, aber er will es ja mit RS485 ausbauen, und dann macht's wieder sinn.
gruß stefan
PS.: marceless, falls Du Dir einem RS485-USB-wandler bestellst, achte drauf, daß der anschlüsse nicht nur für RX und TX hat, sondern auch für masse.
USB und RS485 verwenden zwar etwas ähnliche Signale (differenzialpotential) aber völlig unterscheidliche Protokolle. Man müsste dazu den USB-Controller quasi auf Bitebene ansprechen um RS485 abzugreifen.
USB macht Chipintern über die Firmware eine Blockübertragung und stellt den Block dann bereit zur Abholung. RS485 ist aber Wordorientiert wie RS232 und sendet 5-8Bits als Wort über die Leitung, mit Start und Stopbits. Das muss dann ein externer Wandler erstmal umbauen, damit es klappt.
Auch wenn USB differenzialsignale nutzt, das funktioniert so nicht. Sonst könnte man den USB-Chip am Arduino sparen und einfach nur einen Potentialwandler dran klemmen an TX/RX
Dir muß klar sein, daß der USB-anschluß am arduino über einen FTDI auf RX und TX vom arduino geht. was Du über usb schickst, geht also automatisch nach serial und damit auch auf den RS485 shield. macht nicht so richtig sinn.
wenn Du die RS485-verbindung testen willst, also nix über USB schicken, sondern zb. den arduino alle sekunden selbst ein zeichen schicken lassen und das dann über HTerm lesen.
RS485 ist aber Wordorientiert wie RS232 und sendet 5-8Bits als Wort über die Leitung, mit Start und Stopbits. Das muss dann ein externer Wandler erstmal umbauen, damit es klappt.
Das ist so auch nicht korrekt.
RS485 definiert nur einen Physikalischen Standart der Übertragung des Signals. DerWandler macht nix mit Stop und Startbits oder iregndwelchen Wortorientierungen das liegt alles in der Hand der Programmierers bzw in der Software der verwendeten CPUs/AVRs.
Modbus ist RS485
DMX ist RS485
Profibus/DP ist RS485
Interbus ist RS485
Und diverse "eigene" Entwicklungen wie z.B. von Jumo Reglern.
Die können alle nicht miteinander Reden aber gemeinsam ist die Signalübertragungsweise RS-485/EIA-485
Danke für eure Hilfe! Werde jetzt der Einfachheit wegen einen kompatiblem Temperatursensor an die RS485 Schnittstelle anbinden und versuchen dessen Daten auszulesen. Bin ich richtig mit der Annahme dass ich beim RS485 Sheild ein Bit zum senden und empfangen "1" bzw "0" setzen muss? Könnt ihr mir ggf. Beispielcodes für eine Kommunikation über das RS485 Sheild empfehlen?
Danke für die Seite - mein Shield ist folgendermaßen laut meinem Anhang verschaltet. Somit liegt Rx auf D0 und Tx auf D1 (entspricht bei Gammon D2 und D3). Die Frage wäre jetzt wie ich den Tx enable zum starten des sendens bzw empfangens setze bzw. nicht setze. Denn auf der von dir geschickten Website (Gammon Forum : Electronics : Microprocessors : RS485 communications) Abbildung 2 ist der Tx enable mit Dem Pin D4 verbunden. Bei mir im Plan sehe ich keine Verbindung durch das Shield zu /RE und DE. Muss ich an P3 Pin 13 und 5 verbinden? Oder kann ich den Enable auch über die Verbindung von D1 senden, da diese eh schon vorhanden ist?
Vielen Dank für die Hilfe.
gammon baut seine seite auf softserial auf, einer softwarenachbildung der seriellen schnittstelle auf anderen pins.
man kann die library auch für hardware-serial verwenden, steht irgendwo auf der seite.
ich finde, daß für eine kommunikation, die nicht viele nodes einschließt und wo nicht dauernd gesendet wird, die gammon-library die berühmte kanone ist, die auf spatzen schießt.
irgendwo muß der tx-enable angesprochen werden, unter umständen macht das das shield ja sogar selbständig.
hast Du links zum shield und zu den von Dir oben angesprochenen seiten, wo zwei arduinos kommunizieren?
Hi das ist der Link zur Linkspite Website die das Shield herstellt. Kann natürlich sein, dass der Tx enable automatisch angesprochen wird, kann es jedoch von der Seite des Herstellers nicht herauslesen. Schätze aber nicht wenn man sich den Plan des Shields anschaut (hier unter Shematic: RS485 Shield V2 - DEV-12965 - SparkFun Electronics). Für diesen Sample Code werden auch PIN D2 und D3 für RX und TX verwendet, hat das einen speziellen sinn oder kann ich es auch auf D0 und D1 lassen?
auf dem shield gibt es zwar diesen TX-control-jumper, aber keinen hinweis, wodurch da geschaltet wird. auch im sketch kein hinweis darauf. ich sehe auch außer dem 485er-chip nix, was das tun könnte.
welche pins Du für RX und TX nimmst, legst Du durch die jumper-dreifachreihe am shield fest.
hat jemand eine idee, wie das mit dem enable gelöst sein könnte?
das mit dem umstecken der dreifachpins weiss ich, die frage war eher warum die in den Beispielsketches alle den 2er und 3er pin für Rx und Tx benutzen und es nicht einfach standardmäßig auf D0 und D1 stecken lassen?
Ja das Datenblatt des 485er Chips hab ich auch angesehen aber der besitzt ja keine intelligenz und kann sich nicht selbst umschalten bezüglich des tx enable. Danke
Ja das Datenblatt des 485er Chips hab ich auch angesehen aber der besitzt ja keine intelligenz und kann sich nicht selbst umschalten bezüglich des tx enable.
war ein wenig mißverständlich von mir. ich hab' gemeint: der isses sicher nicht.
die frage war eher warum die in den Beispielsketches alle den 2er und 3er pin für Rx und Tx benutzen und es nicht einfach standardmäßig auf D0 und D1 stecken lassen?
ich verstehe es auch nicht, warum viele leute lieber softserial verwenden, obwohl hardwareserial vorhanden ist. softserial verwende ich nur, wenn ich einen "zweiten" brauche.
das einzige. wo hardwareserial ein problem ist, ist, wenn ein an serial angeschlossenes gerät kontinuierlech sendet und damit das raufladen eines neuen sketches verhindert. aber selbst dann würde ich eher das gerät abstecken statt softserial zu verwenden.
Also wenn ich den Schaltplan richtig deute, dann ist RE und DE gebrückt und geht auf den Pin 2 vom Header 3.
Dort ist dann der Pin 3 welcher als TX/RX bezeichnet ist und beim Arduino auf OC1/PB1 landet, was dem Pin 9 in der Arduino IDE entspricht.
Also für das send enable einfach den Pin 9 nehmen und auf dem Header 3 Pin 2 mit Pin 3 brücken.
Imho ist der Grund dafür, dass häufig die Softserial verwendet wird, dass der Arduino Uno nur eine UART hat, welche auch für das Laden des Sketchs benutzt wird.
Wenn jetzt an PIN D0 oder D1 etwas angeschlossen ist, führt das zu Problemen wenn ein neuer Sketch geladen werden soll, da diese Pins RX und TX des UART sind.
Das ist auch der Grund, dass du zum laden von einem neuen Sketch das Shield weg nehmen musst.
Ein weiterer Grund ist für mich, dass es für Testzwecke praktisch ist, wenn man den Serial Monitor aus der IDE (oder einen beliebigen anderen) nutzen kann, ohne dass man dabei die Kommunikation mit dem RS 485 Chip stört.
Im definitiven Betrieb ist es dann aber besser, nicht eine Softserial sondern die Hardware UART vom Arduino zu nutzen.