Forum: Mikrocontroller und Digitale Elektronik RS485 stört Atmega


von Josef Ö. (josef-muc)


Angehängte Dateien:

Lesenswert?

Hallo RS485-Atmel Spezialisten,
ich bin momentan dabei für meine Gartenbahn ein paar Weichen über einen
Atmega32 anzusteuern. Das Protokoll basiert auf RS485 mit 62500 baud,
9N1. Als Treiber verwende ich einen Max485. Programmiert ist es mit
Bascom mit den Befehlen Inputbin Var bzw. Printbin Var. Mein Testaufbau
funktioniert soweit einigermassen, jedoch stelle ich fest, dass von Zeit
zu Zeit mein Atmega offensichtlich selbständig resetet bzw.
unkontrollierte Aktionen durchführt. Stecke ich den Bus ab, ist das
Problem beseitigt. Habe bereits versuchsweise auf Interruptsteuerung
umgestellt. Hier wird aber das Ganze noch extremer. Ich muss noch
hinzufügen, dass der Master(Zentrale) kontinuierlich Daten sendet. Hat
jemand eine Vermutung wo hier der Fehler liegen könnte.

Josef

von mischa (Gast)


Lesenswert?

hallo

habe mir weder den source-code angeschaut, noch kenne ich mich mit
atmega aus. habe aber einige erfahrung mit rs485 und pic.

ich würde empfehlen als erstes die rs485 daten welche beim slave
ankommen anzuschauen. am besten mit einem terminal programm auf dem pc,
z bsp docklight. die daten müssen auf rs232 gewandelt werden. entweder
mit max232 oder ttl-pegel direkt an pc sollte auch funktionieren
somit siehst du ob der fehler von der übertragung kommt (was ich eher
glaube) als vom programm

wenn es die kabelstrecke ist : was für kabel sind drin, impedanz,
länge? hast du terminator widerstände drin, grösse?

viel erfolg

von Rahul D. (rahul)


Lesenswert?

Block-Kondensatoren am Controller?
Liefert die Stromversorgung genug Strom?

Ich habe mir das Programm auch nicht angeguckt, vermute aber auch eher
ein Schaltungsproblem.

von topla (Gast)


Lesenswert?

Auf jeden Fall ist die Wartezeit (150ms) nach dem Senden viel zu lang.
Damit rechnet die Zentrale nicht und die nächsten Sendeversuche dürften
gegen den Baum laufen. Frage nach dem Senden des letzten Bytes den
Status ab und wenn senden fertig, sofort Sender ausschalten.

Thomas

von conrad (Gast)


Lesenswert?

Vermute auch, daß Abblockkondensatoren helfen würde. Das Resetverhalten
zeigt, daß die Versorgungsspannung zu stark absinkt. Hast du R und C am
Reseteingang?

von Hannes L. (hannes)


Lesenswert?

Ist der C am Reset-Pin nicht ein alter Zopf aus der Zeit, wo die AVRs
noch kein BOD hatten?

...

von Niels H. (monarch77)


Lesenswert?

Wenn ich an Eisenbahnen, Weichen und lange Gleise denke, denke ich auch
an wahnsinnige Induktionsspitzen und nicht filterbare Störspannungen.
Das da der MC etwas ins trudeln gerät, verwundert mich überhaupt
nicht.

Ich empfehle eine galvanische Trennung der Schaltung z.B durch
Optokoppler.

von topla (Gast)


Lesenswert?

@Monarch77:
Die Rede ist hier von einem Eingabebus, der zwischen der
Digitalzentrale und den Handgeräten besteht. Geht so aus der Frage
nicht hervor, aber der Kontext der Lenz-Steuerung ergibt das.
Störungen dürften da nicht die große Rolle spielen, allerdings hat auch
Lenz in den RS-485-Eingangsleitungen A und B irgendwelche Filter sitzen,
ich konnte die Bauelemente aber noch nicht identifizieren.

@josef-muc:
Speist Du den ATMega aus dem LMAB-Bus? Dann beobachte mal die 12V des
LMAB-Busses. Kann sein, die Zentrale nimmt die 12V weg (Reset für die
Eingabegeräte?), vielleicht immer dann, wenn sie meint, daß auf dem Bus
irgendwas passiert ist (misslungene Zugriffe?), was nicht anders zu
regeln ist.

Thomas

von conrad (Gast)


Lesenswert?

@...HanneS... Lux (HanneS)

Wenn er sagt, er hat Resetverhalten... kann er es doch probieren, weiß
ja keiner ob er BOD deaktiviert hat.

von Josef Ö. (josef-muc)


Lesenswert?

hallo meine Spezialisten.
Der Reihe nach mein momentaner Hardwareaufbau:
-Verbindungskabel ist Telefonkabel mit RJ-Stecker. Länge ca. 1,0 m
-Kein Abschlusswiderstand
Auf dem Testboard in der A/B Leitung zum RS485 Treiber je ein 100 Ohm
Widerstend in Reihe sowie je eine Z-Diode mit 7.5 Volt gegen Masse.
(Identisch mit meiner Lenz-Handsteuerung LH30 bzw. LH100).
RO/DI gehen direkt zum Atmega RX/TX-Eingang des Atmega-Uarts.
RE/DE gehen auf den Port d.4 und werden beim Senden auf +5V geschaltet.

Mein Atmega ist mit einer getrennten Spannungsversorgung gespeist und
mit einem 5V Spannungsregler geregelt. Am gleichen  Pfad hängt auch der
Max485 sowie das Display. Später will ich jedoch die LM-Leitungen der
Zentrale verwenden.
Mit einem Multimeter messe ich ca. 4,85 V DC. Schwangt geringfügig
zwischen 4.8 und 4.85 Volt
Blockkondensatoren habe ich momentan keine vorgesehen.
Störungen von extern scheiden aus, da die RS485 Verbindung nur zwischen
Zentrale und meiner Steuerung besteht. Die
Weichenschaltung erledigt die Zentrale und ist vollkommend getrennt
vom RS485.
@tobla: Wir hatten ja schon ein paar mal Kontakt. Die Wartezeit nach
dem Senden hat sich bei mir als OK erwiesen. Könnte diese ja vermutlich
noch nach unten korrigieren. Warten bis Sendepuffer leer habe ich
versucht. Die Zentrale brachte dabei aber jedesmal die Rückmeldung
"Übertragungsfehler".
Ich werde jetzt mal meine Spannungsversorgung überprüfen und am
RX/TX-Eingang des Atmels Blockkondensatoren einbauen.
Ich vermute ebenfalls das es an der Spannungsversorgung liegt.
Ich werde mich nach dem Umbau wieder melden.
Grundsätzlich möchte ich das ganze ja mit dem Empfangsinterrupt
steuern, da ich ja die Adressfilterung vornehmen muss. Mit Inputbin
ist dies nicht möglich, da ich keinen Zugriff auf das RXB8 Bit habe.

Josef

von Hannes L. (hannes)


Lesenswert?

Blockkondensatoren gehören an die Stromversorgung des AVRs und nicht an
RX/TX. Blockkondensatoren sind unbedingt erforderlich, besonders, wenn
die Stromversorgung über längere Leitungen erfolgt.

...

von topla (Gast)


Lesenswert?

Ich habe jetzt gerade keinen Handregler zum Zerlegen hier, aber 100
Ohm-Widerstände in den A-/B-Leitungen würde ich bezweifeln wollen. Aber
wenn Du in einem Handregler schon nachgesehen hast... Beim GZIO-Bus
(9600bd) sitzen da irgendwelche Datenfilter mit ca. 13 Ohm. Und die
A-/B-Leitungen immer schön verdrillen. Und der HanneS hat es schon
geschrieben, Blockkondensatoren so dicht wie möglich an die
Spannungsversorgungseingänge des AVR, aber nicht an die
Datenleitungen!

Thomas

von Josef Ö. (josef-muc)


Lesenswert?

Hallo Thomas,
ich habe meinen Handregler LH30 zerlegt und mal geschaut, was Lenz so
eingebaut hat. Hier sind wirklich je ein 100 Ohm Widerstand sowie zwei
Z-Dioden verbaut. Vermutlich Überspannungsschutz. Lenz verwendet
normales Telefonkabel (rund bzw. als Spiralkabel). Die Leitungslänge
ist ja nicht besonders lang. Beim RS-Bus schreibt er eine verdrillte
Leitung vor. Abschlusswiderstände sind laut Lenz nicht unbedingt
erforderlich.
Das mit den Blockkondensatoren habe ich wohl falsch verstanden.  Bei
meinem Demoboard ist lediglich ein Elko mit 470 mF vor dem
Spannungsreglelr-IC. Zwischen VCC und GRD direkt am Atmega befindet
sich ein Tantal mit 0,1 mF. Wie gross und wie sollten die
Blockkondensatoren eingebaut sein?

Josef

von Hannes L. (hannes)


Lesenswert?

100nF (100 Nanofarad) Keramik
Die sind als SMD nicht größer als ein Zuckerkorn, vielleicht sind sie
ja doch da und du hast sie nur übersehen...

...

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.