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
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
Block-Kondensatoren am Controller? Liefert die Stromversorgung genug Strom? Ich habe mir das Programm auch nicht angeguckt, vermute aber auch eher ein Schaltungsproblem.
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
Vermute auch, daß Abblockkondensatoren helfen würde. Das Resetverhalten zeigt, daß die Versorgungsspannung zu stark absinkt. Hast du R und C am Reseteingang?
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.
@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
@...HanneS... Lux (HanneS) Wenn er sagt, er hat Resetverhalten... kann er es doch probieren, weiß ja keiner ob er BOD deaktiviert hat.
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
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. ...
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.