Hallo!
Ich hoffe jmd. von euch kann mir helfen, hänge schon unendlich lange an
diesem Problem.
Ich verwende die serial outpus von meinem mbed entwicklungsboard und
einen rs485 transceiver (ADM3491EARZ).
TX und RX sind direkt mit DI und RO verbunden, DE und RE sind mit 2
digitalen outputs verbunden.
Die Ausgänge des Transceivers (A,B,Z,Y) sind mit einem USB/RS485 kabel
verbunden um die Kommunikation zu testen.
Ich schließe nun einerseits das mbed entwicklungsboard per usb an meinen
notebook an um über printfs zu debuggen.
COM3 : mbed
COM4 : USB/RS485 Kabel
Folgendes passiert...ich schicke "Hello World" über die serielle
schnitstelle und kann im hterm sehen, dass an COM4 auch "Hello World"
ankommt.
Das ist zunächst super.
Das Problem ist aber, wenn ich mein Programm erweitere, damit ich fähig
bin auch etwas über RS485 zu empfangen...hab ich ein Problem.
Ich verwende die bibliotheksfunktion getc() und übergebe den
rückgabewert an einen character. Ich erwarte, dass die Abarbeitung des
programms an dieser stelle wartet, bis ich aus hterm ein zeichen sende.
Das Programm wartet aber kein bisschen, der character wird sofort mit
'\0' initialisiert. Egal was ich mache.
Ich achte natürlich auch darauf, dass die richtigen enable Signale
eingestellt sind.
Hier mein C-Code:
1 | #include "mbed.h"
|
2 |
|
3 |
|
4 | Serial rs485(p9, p10); // tx, rx
|
5 | Serial pc(USBTX, USBRX);
|
6 |
|
7 | DigitalOut re_not(p19);
|
8 | DigitalOut de(p20);
|
9 |
|
10 | DigitalOut led1(LED1); //transmit mode
|
11 | DigitalOut led2(LED2); //receive mode
|
12 |
|
13 | int main() {
|
14 |
|
15 | char rx;
|
16 |
|
17 | re_not = 1;
|
18 | de = 1;
|
19 | led1 = 1;
|
20 |
|
21 | rs485.printf("Hello World\n"); //print string to device - WORKS
|
22 | wait(0.25);
|
23 |
|
24 | while(1)
|
25 | {
|
26 | pc.printf("Press a button to continue\n");
|
27 | pc.getc();
|
28 | if(rs485.readable()) {
|
29 | re_not = 0;
|
30 | de = 0;
|
31 | pc.printf("readable!\n");
|
32 | rx = rs485.getc();
|
33 | pc.printf("read: %c", rx);
|
34 | wait(0.25);
|
35 | }
|
36 | re_not = 1;
|
37 | de = 1;
|
38 | }
|
39 | }
|