Forum: Mikrocontroller und Digitale Elektronik RS232 Kommunikationsschwierigkeiten


von Marius J. (sschneider)


Angehängte Dateien:

Lesenswert?

Hallo Leute, ich versuche gerade einen Sensor mittels RS232 anzusprechen 
aber irgendwie kommt nicht das raus was raus kommen soll :P .
Hier ist erstmal das Kommunikationsprotokoll :
http://www.hokuyo-aut.jp/02sensor/07scanner/download/products/urg-04lx/data/URG_SCIP11.pdf

z.B. steht da ja das ich mit dem Kommando |'L'|'1'|0x0A| als Antwort 
|'L'|'1'|0x0A| Status |0x0A|0x0A  bekomme.
Habe dieses Kommando über einen PIN gesendet, aber das einzige was 
zurück kommt ist komischerweise nur : siehe Bild ;
Ich hoffe ihr könnt mir weiterhelfen, ich weiß echt nicht was ich falsch 
mache. Grüße

von Marius J. (sschneider)


Lesenswert?

Keiner eine Idee?

von biker10 (Gast)


Lesenswert?

Hallo Marius,

sendest du auch zum Abschluss des Kommados ein
"Line feed or carriage return" ??

Gruß Biker10

von Marius J. (sschneider)


Lesenswert?

U0C0_ASC_vSendData(76);
    U0C0_ASC_vSendData(49);
    U0C0_ASC_vSendData(13);
In der Reihenfolge sende ich dem Sensor die Daten.

von Bastler (Gast)


Lesenswert?

>U0C0_ASC_vSendData(13);

Ein 0x0A hat nicht den Wert 13!

von Marius J. (sschneider)


Lesenswert?

Ich kann ja LF mit 0x0A nehmen oder CR mit 0x0D

von Karl H. (kbuchegg)


Lesenswert?

Hast du denn deine USART schon mal getestet, indem du zb etwas zu einem 
PC schickst und dort im Terminal Programm dir ansiehst, ob dort auch das 
richtige rauskommt?

Nur so zur Sicherheit, damit man auch sicher geht, dass zb mit der 
Baudrate alles ok ist.

Und dann wäre es auch eine ziemlich gute Idee, den 'Sensor' einfach mal 
mit dem PC zu verkablen und per Terminalprogramm die Kommandos 
abzusetzen. Dann sieht man auch, was der Sensor zurückschickt.

Denn der PC hat einen unbestrittenen Vorteil: Wir wissen, dass seine 
serielle Schnittstelle tadellos funktioniert. Etwas, was wir von deiner 
µC-Seriellen erst mal nicht mit Sicherheit wissen.

: Bearbeitet durch User
von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Bastler schrieb:
>>U0C0_ASC_vSendData(13);
>
> Ein 0x0A hat nicht den Wert 13!

Stimmt, aber laut Protokollspec soll sowohl CR (13/0xD) als auch LF 
(10/0xA) gehen.

von Bastler (Gast)


Lesenswert?

Du willst |'L'|'1'|0x0A| senden, aber sendest
> U0C0_ASC_vSendData(76);
>    U0C0_ASC_vSendData(49);
>    U0C0_ASC_vSendData(13);

'L' = 76 (dezimal)
'1' = 49
0x0A = 10

Also 2/3 waren richtig.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Marius Jung schrieb:
> U0C0_ASC_vSendData(76);
> U0C0_ASC_vSendData(49);
> U0C0_ASC_vSendData(13);

Nur am Rande bemerkt:

Das solltest Du Dir abgewöhnen und stattdessen so

> U0C0_ASC_vSendData('L');
> U0C0_ASC_vSendData('1');
> U0C0_ASC_vSendData('\n');

schreiben.

von Michael (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
>> U0C0_ASC_vSendData('\n');
Und was ist an '\n' besser als an 13, wenn man ein "Carriage Return" 
meint?

So wäre der Aufwohl wesentlich selbsterklärender:
   U0C0_ASC_vSendData(CR);

von Thomas E. (thomase)


Lesenswert?

Michael schrieb:
> Rufus Τ. Firefly schrieb:
>>> U0C0_ASC_vSendData('\n');
> Und was ist an '\n' besser als an 13, wenn man ein "Carriage Return"
> meint?

Das ist nur ein Zeichen dafür, daß du keine Ahnung hast.

'\n' steht für new line
               ^
'\r' für carriage return
                  ^

mfg.

von spess53 (Gast)


Lesenswert?

Hi

>Und was ist an '\n' besser als an 13, wenn man ein "Carriage Return"
>meint?

Weil das jeder Compiler kennen sollte:

\n   Newline (ASCII LF 0x0a)
\r   Carriage return (ASCII CR 0x0d)
\a   Alert bell (ASCII BEL 0x07)
\b   Backspace (ASCII BS 0x08)
\f   Form feed (ASCII FF 0x0c)
\t   Horizontal tab (ASCII HT 0x09)
\v   Vertical tab (ASCII VT 0x0b)
\\   Backslash
\0   Null character (ASCII NUL)

MfG Spess

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.