Forum: Mikrocontroller und Digitale Elektronik UART Empfang mit BASCOM AVR bei verschiedener Stringlänge


von Christian K. (dxrz)


Lesenswert?

Hallo,

Ich habe hier einen µc der einige Schaltzustände ausliest und sie dann 
anzeigt. Jetzt möchte ich ca. 20m weiter eine weitere Anzeige der 
Zustände haben. Der erste µc sendet die Daten via UART.
Programmiert wird in Basic (Bascom AVR)
Aufgrund der Entfernung scheidet I2C aus. Ich habe dann einen RS485 
Sender angeschlossen und dort, wo die zweite Anzeige entstehen soll 
einen RS485 Empfänger. Schließe ich diesen jetzt an einen PC an, klappt 
alles wunderbar. Die Daten kommen korrekt an.
Jetzt möchte ich aber die Daten mit einem zweiten µC empfangen. Das 
klappt leider nicht.
Der Sender sendet (abhängig von den Zuständen der Schalter):

Print „T1: offen“
Waitms 1
Print „T2: zu“
Waitms 1
Print „T3: offen“
Waitms 1
Print „L1: an“
Waitms 1
Print „L2: aus“
Waitms 1
Usw….

Da der Empfänger (MEGA 8515 / Baud:19200) die Daten nur mittels LED 
anzeigen soll, hat der µc keine weiteren Aufgaben zu bewältigen.
Dementsprechend habe ich versucht das ganze mittels INPUT zu empfangen 
und erst mal über UART ein Echo zu erzeugen, was dann an einen PC geht 
um zu sehen, ob der µc korrekt empfängt. Leider tut er das nicht. Er 
empfängt z.B. anstatt „T1: offen“, „TT: offen“ oder „T:offen“ oder “1: 
offen“ oder „T“. Also nichts regelmäßiges.

Bezüglich des Input Befehls bin ich ein wenig verwirrt. Einmal heißt es, 
Input empfängt solange Daten bis ein Retrun gesendet wird, was ja bei 
jedem Printbefehl am Ende geschehen sollte, manchmal liest man aber, 
dass Input solange watet bis der String voll ist. Liegt es daran und wie 
könnte man den Empfang sonst bei unterschiedlich langen Strings 
gestalten? Was ich bisher gesehen habe bezog sich immer auf die gleiche 
Stringlänge.

von Olaf (Gast)


Lesenswert?

Versuch es mal hier: bascom-forum.de

von Peter II (Gast)


Lesenswert?

das klingt ehere wie ein übertragungsfehler. Hast du einen Quarz dran?

von robo (Gast)


Lesenswert?

Hier gibt es einen guten Parser (bereits selbst getestet),
der mit Ischarwaiting den Comport überwacht:

http://www.roboternetz.de/community/showthread.php?52795-Kleiner-Parser-%28Befehlszeile%29-f%FCr-AVR-uC

Muss natürlich an die Befehle angepasst werden.

von Christian K. (dxrz)


Lesenswert?

Hallo,

Tja, das mit dem Übertragungsfehler habe ich mir auch estmal so gedacht. 
Allerdings weiß ich nicht woran das liegen sollte? Wie gesagt ein PC 
emfängt die Daten problemlos. Wenn ich den Empfänger µc an den PC 
anschließe und ihm mehrere Zeichen sende, dann funktioniert auch das 
einwandfrei.

Quarz Sender ist 3,686400 MHz und der Empfaänger hat 8 MHz. Baud 19200 
auch getestet wurden 28800 und 9600. immer das gleiche Verhalten. PC 
funktioniert einwandfrei µc nicht.

Ist das denn vom Grudsatz her OK mit RS485 oder sollte man eine ganz 
ander Übertragungsart nehmen?

Wie sieht das mit den Pausen von 1 ms zwischen dem Senden aus? ist das 
nötig oder vielleicht sogar zu kurz? Oder kann man das ganz weg lassen?

von mue-c (Gast)


Lesenswert?

Hallo Christian,
ich würde bei diesem Fehler eher auf zu kleine Stacks oder Frame tippen.
Hast du die Werte in deinem Programm stehen oder übernimmt Bascom sie 
aus den Options?

von Weingut P. (weinbauer)


Lesenswert?

Den 485-Bus auch sauber terminiert? auch die GND mit verbunden?
einseitige Pullup Pulldown?

von Christian K. (dxrz)


Lesenswert?

Hallo,

danke für die Antworten.
Es wird wohl doch am Bus liegen. Als Sender und Empfänger dient jeweils 
ein SN 75176. Laut Datenblatt entspricht er dem EIA 422 Standard. Dieser 
sollte sich ja größtenteils so verhalten, wie ein RS 485 Treiber. Bei 
der Beschaltung habe ich ein wenig gepfuscht. Besagte Terminierung und 
Pulldown nicht berücksichtigt.

Hat vielleicht gerade jemand ein schönes Beispiel für eine ordentliche 
Beschaltung zur Hand?

Oder kann ich Datenausgang B des 75176 mit 2,2K gegen Masse und Ausgang 
A mit 2,2K gegen 5V legen und mit einem 120 Ohm Widerstand A und B 
verbinden? Mache ich das dann sowohl auf der Sender als auch auf der 
Empfängerseite so?

von Karl H. (kbuchegg)


Lesenswert?

Warum wirfst du zum Testen nicht erst mal den ganzen Krempel runter, 
verbindest die beiden µC direkt (auf kurzer Distanz) Tx mit Rx (und 
umgekehrt) und siehst erst mal nach, ob das funktioniert.

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.