ich möchte mit meinem DUE einen A/D-Wandler ansteuern. Über RS485. [tt][iurl=http://www.soemer.de/messverstaerker/messverstaerker-ldu-68_1.html]A/D-Wandler[/iurl][/tt]
Senden möchte ich zum Beispiel:
Senden: OP1 (mit CR) -> Öffnen Kanal zu Wandler Nr.1
Empfangen: OK
Senden: GW (CR)
Empfangen: N+01234
Ich habe mir bereits einen MAX3485 Transceiver besorgt.
Weiß nun aber nicht weiter.
Hallo,
mit einem Blockschaltbild beginnen, darin die mechanischen und elektrischen Schnittstellen identifizieren und in Konstruktionsmodule überführen.
Die Übertragung über RS485 entspricht weitgehend der normalen seriellen Schnittstelle. Da der Due da mehrere hat ist das also kein Problem. Du musst also deinen RS485-Adapter ( ein Link wäre nicht schlecht ) an eine der seriellen Schnittstellen 1..3 anschließen und kannst dann entsprechend mit Serial1..Serial3 deine Daten übertragen.
Sprich:
RO --> TX1
DI --> RX1
RE --> ???
DE --> eventuell an digitale Pins? (Es gibt ja auch noch den RTS pin, aber da muss man glaube ich noch irgendwie in einen anderen Modus wechseln oder?)
Also dann ganz normal
Serial1.write(OP1\r)
und
Serial1.read()
Oder ist das zu einfach?
Der MAX3485 ist für halbduplex-Betrieb ausgelegt, dein AD-Wandler kann vollduplex. Ich nehme mal an, dass man den Wandler auch halbduplex betreiben kann ( müsste in der Beschreibung stehen ). Das ist aber dann bei der Kommunikation zu beachten, da nie beide Seiten gleichzeitig etwas senden dürfen.
Der USART (Serial1 / serial2 / ...) verfügt über den RS485-Modus, um die Steuerung des Leitungstreibers zu ermöglichen. Siehe Seite 801 des Sam3x-Datenblattes
Eine Beispielskizze für die Kommunikation im RS485-Modus zwischen Serial1 (USART0) und Serial2 (USART1). Für diese Beispielskizze benötigen Sie nicht einmal RS485-Transceiver.
/********************************************************************************/
/* USART RS485 Mode */
/* Hook RX1 to TX2 and RX2 to TX1 */
/********************************************************************************/
char c = 0;
void setup() {
Serial.begin(250000);
Serial1.begin(115200); // Serial1 is for USART0
Serial2.begin(115200); // Serial2 is for USART1
USART0->US_MR |= US_MR_USART_MODE_RS485; //select RS485
USART0->US_TTGR = US_TTGR_TG(10); //Select a Timeguard
USART1->US_MR |= US_MR_USART_MODE_RS485;
USART0->US_TTGR = US_TTGR_TG(10);
Serial2.print("Hello");
}
void loop() {
String s;
s.reserve(10);
s = "";
while (Serial1.available() > 0) {
c = Serial1.read();
s += c;
}
if (s.length() > 0) {
Serial.println(s);
Serial2.print(s);
}
delay(1000);
}
Vielen Dank für die Hilfe. Werde ich so ausprobieren.
Der MAX3485 ist für halbduplex-Betrieb ausgelegt, dein AD-Wandler kann vollduplex. Ich nehme mal an, dass man den Wandler auch halbduplex betreiben kann
Ja ein Halb-Duplex ist möglich. Habe dafür RX+ und TX+ verbunden, gleiches für RX- und TX-.
Der USART (Serial1 / serial2 / ...) verfügt über den RS485-Modus, um die Steuerung des Leitungstreibers zu ermöglichen. Siehe Seite 801 des Sam3x-Datenblattes
Ja das habe ich auch schon gesehen. Verstehe das nur leider nicht