Forum: Mikrocontroller und Digitale Elektronik Problem mit Funktionsdecoder für Modellbahn


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von R. F. (inet_surfer88)


Angehängte Dateien:

Lesenswert?

Hallo,

ich will mir für Waggons von der Modellbahn einen Funktionsdecoder 
bauen, siehe Schaltplan. An J1 und J2 liegt die Gleisspannung an. Ich 
verwende das Selectrix-System. J3 und J4 sind für einen zusätzlichen 
Pufferelko vorgesehen. Mit R2 und R3 wird das Gleissignal von einem 
ATINY85 ausgewertet und es werden die Ausgänge an J5-J7 geschaltet.

Ich habe folgendes Problem: Wenn ich die Schaltung an meiner 
Digitalzentrale betreibe dann funktioniert die Schaltung ohne Probleme 
solange ich das ISP-Programmiergerät angeschlossen habe oder ein Oszi 
zum Messen anschließe. Sobald aber Oszi und Programmer abgeklemmt sind 
ist die Schaltung ohne Funktion, die Ausgänge werden bei einem Befehl 
vom Gleis nicht mehr umgeschaltet und der letzte Zustand bleibt 
bestehen. Herausgefunden habe ich noch das die Schaltung wieder 
funktioniert sobald ich irgend eine Stelle nach dem Gleichrichter mit 
der Hand berühre????? Wenn ich eine Leitung vor dem Brückengleichrichter 
berühre funktioniert die Schaltung nicht. Ich vermute das hier meine 
Masse irgend wo "in der Luft schwebt". Durch Oszi oder Programmer liegt 
die Masse ja auf einem definierten Zustand. Die Hand bewirkt wohl das 
Gleiche (Hochohmig gegen Erde?????).
Wie kann ich das Problem lösen und kann meine Vermutung hier überhaupt 
zutreffen?

Versucht habe ich schon folgendes:
Mit 1 MegaOhm zwischen Masse und einem Gleisanschluss
Viel C zwischen Masse und VDD sowie Masse und VCC (5V)
verschiedene Widerstände Zwischen Masse und 5V um die Last vom 
Spannunsregler zu erhöhen

Was könnte ich noch versuchen?

:
von Crazy Harry (crazy_h)


Lesenswert?

Leg mal den Reset hart auf +.

von Jim M. (turboj)


Lesenswert?

Der 78L05 kann nur als Quelle aber nicht als Senke arbeiten, und R2, R3 
entladen sich nach VCC bzw Masse. Spendiere mal Spannungsteiler oder 
Zenerdiode als Ableiter.

Die Betriebsspannung ist wahrscheinlich instabil. Oszi und ISP ziehen 
den GND nach PE.

Du hast 3 Ausgänge um Programmzustände anzuzeigen - das kann man kreativ 
ausnutzen.

von Uwe G. (scd)


Lesenswert?

Du solltest Dir das DCC-Signal über einen Optokoppler holen, siehe Open 
DCC.

von Christian M. (christian_m280)


Lesenswert?

Nein nein, das funktioniert so schon. Mache das erfolgreich an AVRs und 
PICs, sogar mit nur 22k. Aber nur einen Eingang. Der Widerstand für den 
OK muss fast 1W verbraten, ein übles Konstrukt.
Ich würde auch den Reset-Eingang als Fehlerquelle in Betracht ziehen!

Gruss Chregu

von Jens R. (tmaniac)


Lesenswert?

Dein GND liegt ca 1.2V unterhalb von deiner Gleisspannung (wegen der 
Diode vom Gleichrichter).
Stellt sich also die Frage ob die Pegel auf der Gleisspannung auch 
richtig erkannt werden.
Wie wird das Signal kodiert?

von Gerald B. (gerald_b)


Lesenswert?

Vielleicht sind die Elkos C1 und C4 zu klein, das dir die Versorgung vom 
µC wegbricht? Wenn auf der Schiene digitale Signale/PWM liegt, wäre das 
möglich. Mit stabiler externer Versorgung durch den Programmieradapter 
läuft es dann...

von MaWin (Gast)


Lesenswert?

R. F. schrieb:
> Was könnte ich noch versuchen?

Eigentlich ist der Schaltplan in Ordnung, bei DCC geht das auch, da 
Eingangssignal pendelt ja gegenüber Masse zwischen -0.7V und +18V. Passt 
der Aufbau zum Schaltplan, oder hast du eine Unterbrechungen bei 
Gleichrichter

Deine Dioden sind schnell genug, aber kleiner Leistung. Was sind denn 
deine Verbraucher ? LEDs mit wenig Strom oder Magnetartikel mit mehr 
Strom als die Dioden vertragen und ohne Freilaufdiode ?

Die Gate-pull-downs kannst du erheblich hochohmiger machen, ich sag mal 
47k.

Was passiert, wenn du einen grösseren Elko an deine Klemmen anschliesst 
?

von NurMalSo (Gast)


Lesenswert?

Hi,
am Reset liegt es nicht. Der Spannungsregler sollte
am Eingang immer einen größeren Elko haben als am
Ausgang. Wie sieht denn die Gleichspannung am Output
aus?
Und die beiden Gleiseingänge haben kein def. Potential
gegen Masse. Da kommen ja fast 20V an. Also erst mal
einen Optokoppler vorsehen. Ist auch bei eventuellen
Kurzschlüssen Deiner Schaltung zu empfehlen.
Gibt es ein Programm?
Gruß vom Jürgen

von H. H. (Gast)


Lesenswert?

Gerald B. schrieb:
> Vielleicht sind die Elkos C1 und C4 zu klein, das dir die
> Versorgung vom
> µC wegbricht? Wenn auf der Schiene digitale Signale/PWM liegt, wäre das
> möglich. Mit stabiler externer Versorgung durch den Programmieradapter
> läuft es dann...

War auch mein erster Gedanke, aber es müssen nur 10µs überbrückt werden:

https://www.mec-arnsdorf.de/wp-content/uploads/2017/05/sx-protokoll-5-pegel_sx_px.jpg

von Jochen A. (lok01)


Lesenswert?

Hallo.
Wofür ist D3. Ist mir bei anderen Decodern nicht bekannt.

von Christian M. (christian_m280)


Lesenswert?

Jochen A. schrieb:
> Wofür ist D3.

Überspannungsschutz.

Jochen A. schrieb:
> Ist mir bei anderen Decodern nicht bekannt.

Doch, kommt vor.

NurMalSo schrieb:
> Also erst mal
> einen Optokoppler vorsehen

Nein!

Gruss Chregu

von Peter D. (peda)


Lesenswert?

Welche Lasten hängen denn an den Leistungs-MOSFETs und wie werden die 
Lasten versorgt. Über die BAV99 doch wohl nicht.

von Thomas E. (thomase)


Lesenswert?

R. F. schrieb:
> Ich verwende das Selectrix-System.

Das ist natürlich die Höchststrafe.

Dein Dekoder, vorausgesetzt du hast den richtig zusammengelötet, sollte 
funktionieren. Hardwareprobleme sehe ich da nicht.

R. F. schrieb:
> Oszi und Programmer

Damit erdest du, mit dem Oszi direkt über seine Masse, mit dem 
Programmer über den PC, deine Anlage und sorgst für eine 
Potenzialverschiebung des Gleissignals, was dir zufällig erlaubt, die 
negative Halbwelle auszuwerten. Das kann ein µC aber normalerweise 
nicht.

Im Zusammenhang mit digitaler Modellbahnsteuerung, meistens geht es 
dabei um DCC, ist immer von PWM die Rede. Dabei wird das Gleissignal 
sehr häufig mit den PWMs, die zur Versorgung von LEDs verwendet werden 
in einen Topf geworfen. Das sind aber verschiedene Paar Schuhe. Die LEDs 
werden mit einer pulsierenden Gleichspannung versorgt, das Gleissignal 
ist eine Wechselspannung. Dieses wird üblicherweise mit einem 
Brückenverstärker erzeugt. Also aus 1 Gleichspannung. Ohne 
Brückenverstärker bräuchte man 2, nämlich + und -.

Mit deinem Dekoder versuchst du wahrscheinlich, die negative Amplitude 
des Gleissignals auszuwerten. Wie schon geschrieben, kann der µC das 
aber nicht. Erst durch die durch die unzulässige Erdung entstehende 
Potenzialverschiebung, gelingt dir die Auswertung zufällig.

Du solltest dir also die Auswertung nochmal zu Gemüte führen. Und immer 
im Hinterkopf haben, daß das Gleissignal eine Wechselspannung ist, die 
keinen Bezug zu irgendeinem Potential hat. GND entsteht erst hinter dem 
Gleichrichter im Dekoder. Darauf bezogen hast du eine positive und eine 
negative Amplitude als Gleissignal, wovon du nur die positive auswerten 
kannst.

von Peter D. (peda)


Lesenswert?

MaWin schrieb:
> bei DCC geht das auch, da
> Eingangssignal pendelt ja gegenüber Masse zwischen -0.7V und +18V.

Dann sollte man besser die 18V auf einen gültigen Pegel (<=5V) teilen, 
z.B. mit 18k nach GND hinter den 47k. Sonst könnten die 18V die VCC des 
MCs anheben.

von Thomas E. (thomase)


Lesenswert?

Peter D. schrieb:
> Dann sollte man besser die 18V auf einen gültigen Pegel (<=5V) teilen,
> z.B. mit 18k nach GND hinter den 47k. Sonst könnten die 18V die VCC des
> MCs anheben.

Tut nicht Not. Die Clamping-Diode macht das schon. Ein Vorwiderstand mit 
22-27K ist eine durchaus bewährte Praxis. Man kann natürlich auch einen 
Transistor davor schalten.

von Peter D. (peda)


Lesenswert?

Thomas E. schrieb:
> Tut nicht Not.

Verbessert aber deutlich die Störsicherheit, wenn die Schaltschwelle 
etwa mittig zum Spannungshub liegt. 2,5V zu 18V ist stark asymmetrisch.

Woher die FETs ihren Saft kriegen, ist aber weiterhin völlig unklar.
Die FETs können ja bis 4A ab, d.h. bei bis zu 12A werden die BAV99 die 
Grätsche machen.

von Thomas E. (thomase)


Lesenswert?

Peter D. schrieb:
> Verbessert aber deutlich die Störsicherheit, wenn die Schaltschwelle
> etwa mittig zum Spannungshub liegt. 2,5V zu 18V ist stark asymmetrisch.

Verstehe ich nicht so ganz. Woher kommen die 2,5V?

Peter D. schrieb:
> Woher die FETs ihren Saft kriegen, ist aber weiterhin völlig unklar.
> Die FETs können ja bis 4A ab, d.h. bei bis zu 12A werden die BAV99 die
> Grätsche machen.

Wenn da 12A fliessen, hast du ein ganz anderes Problem. Eigentlich 
braucht man sowieso nur einen Transistor, um die Waggonbeleuchtung zu 
schalten. Dafür drängen sich 12V-Stripes auf. Ein eventuelles 
Schlusssignal lässt sich direkt vom AVR-Port ansteuern. Ein H0-Waggon 
mit AVR-Dekoder und ausreichend hellem LED-Stripe braucht ungefähr 
12-15mA. Wobei der grosse Stromfresser der AVR ist. Benutzt man nur 
einen Dekoder und schleift die Lichtleitung durch den ganzen Zug, kommen 
pro Waggon nochmal 3-5mA dazu. Auch mit einem modellbahntypischen 
15-Wagen-IC mit Steuerwagen und durchgeschleifer Lichtleitung, ist da 
noch ein bisschen Luft nach oben. Gerüchteweise sollen aber 
Modellbahnzüge wesentlich kürzer sein als die besagten ca. 4,5m ohne 
Lok.

von R. F. (inet_surfer88)


Lesenswert?

Ich kann erst am Wochenende wieder testen aber hier mal die Antworten 
auf die Fragen.

Reset hart auf + werd ich testen.

Betriebsspannung instabil:
müsste der Controller dann nicht einen Reset machen? 
Brown-Out-Detection?

Das mit dem Widerstand ohne Optokoppler ist in vielen Selbstbau- bzw. 
OpenSource-Projekten genau so gemacht. Da habe ich mir das abgeschaut. 
Meistens nur mit einem Widerstand (reicht für DCC), aber ich habe es 
auch schon mit 2 für Selectrix gesehen.

C1 und C4 habe ich testweise schon auf 470µF erhöht, keine Veränderung.

Verbraucher sind nur wenige mA (LEDs). Insgesamt nicht mehr als 50mA. 
Transistoren sind also überdimensioniert, aber diesen Typ gibt es 
bereits in meiner Bastelkiste.

Gatewiderstand werde ich erhöhen.

Spannungsversorgung der Verbraucher kommt von Pad J8, also es geht über 
den Gleichrichter. Zum Testen hängen momentan 2 LED dran, je 5mA. Später 
eine Innenbeleuchtung und 2 LEDs als Schlussleuchte beim letzen Wagen. 
Der 3. Ausgang ist aktuell nur als Reserve vorgesehen.

Wenn das Oszi dran hängt liegen an beiden Eingängen saubere Signale an, 
0V bzw. 5,4V. Also leicht über den 5V vom Regler. Ist laut Datenblatt 
vom Controller aber ok. Was anliegt wenn die Oszimasse weg ist kann ich 
halt nicht messen.

Code bzgl. der Auswertung kann ich erst am Wochenende Posten.

von Drei (Gast)


Lesenswert?

Opensx empfiehlt für die Eingänge einen Spannungsteiler 47k/15k. Warum 
das eine gute Idee ist, wurde hier schon erörtert.

Als Nicht-Modellbahnfan verstehe ich aber nichts von dem 
Signalprotokoll. Gibt es dazu eine Quelle?

von R. F. (inet_surfer88)


Lesenswert?

Drei schrieb:

> Als Nicht-Modellbahnfan verstehe ich aber nichts von dem
> Signalprotokoll. Gibt es dazu eine Quelle?

https://www.morop.eu/downloads/nem/de/nem680_d.pdf

https://www.morop.org/downloads/nem/de/nem681_d.pdf

Das mit OpenSX schau ich mir mal an. Diese Seite hatte ich nicht auf dem 
Schirm.

von Dieter R. (drei)


Angehängte Dateien:

Lesenswert?

Anbei eine einfache Simulation mit LTSpice, die zeigt, wie ein 
störbehaftetes Signal mit dem richtigen Eingangs-Spannungsteiler 
(47k/18k) dekodiert wird und wie ohne. Sollte selbsterklärend sein.

In der Praxis werden die Störungen sich nicht hart addieren, sondern mit 
einer gewissen Impedanz eingekoppelt werden. Durch die Verbindung des 
Oszilloskops mit Netzmasse (oder auch nur durch die Koppelkapazität, 
falls netzfrei betrieben) werden die Störungen vermindert.  Abhilfe: 
zweikanalig messen gegen Masse Versorgungsspannung, Differenz bilden.

von Thomas E. (thomase)


Lesenswert?

Dieter R. schrieb:
> Abhilfe:
> zweikanalig messen gegen Masse Versorgungsspannung, Differenz bilden.

Es gibt am Gleis keine Masse der Versorgungsspannung.

Lerne erstmal wie digitale Modellbahnsteuerung funktioniert. Und dann 
kommst du wieder mit deinen schlauen Tipps.

von Dieter R. (drei)


Lesenswert?

Thomas E. schrieb:

> Es gibt am Gleis keine Masse der Versorgungsspannung.
>
> Lerne erstmal wie digitale Modellbahnsteuerung funktioniert. Und dann
> kommst du wieder mit deinen schlauen Tipps.

Du darfst für diese Messung die Masse frei definieren, solange die 
Spezifikationen des Oszilloskops eingehalten werden. GND gibt's am 
PX-Bus. Lerne erst einmal, mit einem Oszilloskop umzugehen. Falls der TO 
dazu eine Frage hat, kann er sie ja stellen. Vielleicht hat er aber das 
Prinzip auch begriffen?

: Bearbeitet durch User
von Thomas E. (thomase)


Lesenswert?

Dieter R. schrieb:
> GND gibt's am
> PX-Bus.

Schön und wie kommt der Bus in den Waggon rein? Da sind nur die zwei 
Gleisanschlüsse.

Dieter R. schrieb:
> Lerne erst einmal, mit einem Oszilloskop umzugehen.

Danke für den Tipp.

von Dieter R. (drei)


Lesenswert?

Thomas E. schrieb:

> Schön und wie kommt der Bus in den Waggon rein?

Warum soll er das? Du sollst ihn als Bezugspunkt für das Oszilloskop 
nehmen und damit differenziell die Pegel im Waggon messen.

>
> Dieter R. schrieb:
>> Lerne erst einmal, mit einem Oszilloskop umzugehen.
>
> Danke für den Tipp.

Beherzige ihn, dann klappt es auch.

von Thomas E. (thomase)


Lesenswert?

Dieter R. schrieb:
> Du sollst ihn als Bezugspunkt für das Oszilloskop
> nehmen und damit differenziell die Pegel im Waggon messen.

Wozu? Der AVR soll den Pegel erkennen und nicht der Oszi. Und meiner 
schon gar nicht. Und bei der Erkennung muß der AVR auf die Masse des 
Busses verzichten, weil sie nicht vorhanden ist. Es sei denn, man legt 
doch das Buskabel durchs Klofenster und zieht das hinter sich her.

Dieter R. schrieb:
> Beherzige ihn, dann klappt es auch.

Also wenn ich gelernt habe, mit einem Oszi umzugehen, funktioniert der 
Decoder. Interessant.

: Bearbeitet durch User
von Dieter R. (drei)


Lesenswert?

Thomas E. schrieb:

> Also wenn ich gelernt habe, mit einem Oszi umzugehen, funktioniert der
> Decoder. Interessant.

Nein, wenn du RICHTIG misst, dann funktioniert er NICHT. Darum ging es 
dem TO. Du musst  den Thread LESEN und nicht nur rumblubbern. Wenn er 
bei seinem Aufbau mit dem Oszilloskop misst, dann funktioniert der 
Decoder, ohne Oszilloskop nicht. Zitat:

"Ich habe folgendes Problem: Wenn ich die Schaltung an meiner
Digitalzentrale betreibe dann funktioniert die Schaltung ohne Probleme
solange ich das ISP-Programmiergerät angeschlossen habe oder ein Oszi
zum Messen anschließe. Sobald aber Oszi und Programmer abgeklemmt sind
ist die Schaltung ohne Funktion ..."

Ich habe geschrieben, woran das (höchstwahrscheinlich) liegt (Stichwort: 
Verkopplung, kapazitiv und/oder galvanisch) und wie man das Oszilloskop 
anschließen müsste, um die Fehlfunktion messtechnisch zu erfassen. Der 
Unterschied ist einmal Belastung durch das ganze Oszilloskop und 
andererseits ein paar pF von den (zwei!) Tastköpfen. Jetzt verstanden?

Bemerkenswert ist, dass ich für diese Aussage 2 Negativ-Bewertungen 
bekommen habe. Offenbar ist Unkenntnis im Umgang mit Oszilloskopen weit 
verbreitet.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Ich bitte hier um einen angemessenen Umgangston.

Zum Thema: Es ist schon sinnvoll, auf dem Oszi genau das Signal 
anzuzeigen, was auch der AVR sieht bzw. was am Gleis anliegt. Genau 
damit muss der AVR ja dann auch umgehen können.

Als Massebezugspunkt kann deshalb einmal einer der beiden Gleiskontakte 
gewählt werden oder der gewählte GND des µCs, wenn man direkt an dessen 
Eingang misst. Eine "externe" Masse zu verwenden, die irgendwo in der 
Steuerzentrale rumfleucht, ist hier nicht zielführend.

von H. H. (Gast)


Lesenswert?

Dieter R. schrieb:
> Bemerkenswert ist, dass ich für diese Aussage 2 Negativ-Bewertungen
> bekommen habe.

Drei.


> Offenbar ist Unkenntnis im Umgang mit Oszilloskopen weit
> verbreitet.

Du bist der Highlander!

von Dieter R. (drei)


Lesenswert?

Frank M. schrieb:

> Als Massebezugspunkt kann deshalb einmal einer der beiden Gleiskontakte
> gewählt werden oder der gewählte GND des µCs, wenn man direkt an dessen
> Eingang misst. Eine "externe" Masse zu verwenden, die irgendwo in der
> Steuerzentrale rumfleucht, ist hier nicht zielführend.

NEIN und NEIN. Es dreht sich um eine differenzielle Messung. Dafür gibt 
es (insbesondere für Hochfrequenz oder Hochspannung, aber generell für 
Anwendungen, wo der Referenzpunkt NICHT belastet werden soll) 
differenzielle Tastköpfe. Es gibt auch Oszilloskope bzw. 
Oszilloskopeinschübe (früher bei Tektronix, Beispiel 11A33) mit 
differenziellem Eingang. Bei geringeren Anforderungen misst man mit ZWEI 
Kanälen, ZWEI Tastköpfen und bildet die Differenz. Was glaubt ihr denn 
alle, wozu die Kanalsubtraktionsfunktion beim Oszilloskop nütze ist? Nur 
zur Strommessung an hochgelegenen Widerständen? Bitte informiert euch 
bei den einschlägigen Anbietern von Messequipment, angefangen bei 
Tektronix.

Der Sinn ist, dass man den Referenzpunkt (hier Gnd im Decoder) NICHT 
BELASTET, sondern ihn messtechnisch genau so behandelt wie den 
Messpunkt. Da der Messkopf bzw. der Verstärker des Oszilloskops aber nur 
einen begrenzten Arbeitsbereich hat, muss man einen Massepunkt für den 
Tastkopf bzw. das Oszilloskop wählen, bei dem die beiden Messsignale im 
Arbeitsbereich bleiben. Hier nimmt man sinnvollerweise (aber nicht 
zwingend, ich schrieb das bereits) die virtuelle Mitte des Gleissignals. 
Wo man die findet, schrieb ich auch bereits. Die üblichen Erwägungen 
über lange Massestrippen gelten dabei NICHT bzw. nur in sehr 
untergeordnetem Maß. Einstreuungen auf der Oszilloskop-Masse werden 
durch die Kanalsubtraktion eliminiert. Also ganz detailliert, vom 
gewählten Massepunkt, z. B. Gnd am PX-Bus eine Strippe bis zum 
Messobjekt (Decoder), daran die Gnd-Clips der beiden Tastköpfe wie 
üblich kurz angeschlossen - ich hoffe, das ist nun für JEDEN 
verständlich.

Oszilloskop-Gnd am Controller ist gerade NICHT zielführend. Das schrieb 
bereits der TO. Die WAHRSCHEINLICHE Begründung dafür schrieb ich.

Ich erinnere an deine eigenen Worte:

> Es ist schon sinnvoll, auf dem Oszi genau das Signal
> anzuzeigen, was auch der AVR ..

Ebent. Und das ist dem TO mit Anschluss von Oszilloskop-Gnd an 
Prozessor-Gnd nicht gelungen, sonst hätte er den Fehler ja messen 
können. Ging aber nicht, vermutlich aus den jetzt zum x-ten Mal 
langatmig referierten Gründen.

Warum Oszilloskop-Gnd am Gleissignal keine gute Wahl ist, könnte ich 
jetzt auch noch begründen. Ich lasse es mal, scheint ja sowieso sinnlos. 
Man kann grundsätzlich irgendwas wählen, es muss nur die 
(kapazitive/galvanische) Kopplung mit dem daran hängenden Oszilloskop 
tolerieren können.

: Bearbeitet durch User
von H. H. (Gast)


Lesenswert?

Dieter R. schrieb:
> H. H. (hhinz) schrieb
>
>>> Dieter R. schrieb:
>>> Bemerkenswert ist, dass ich für diese Aussage 2 Negativ-Bewertungen
>>> bekommen habe.
>
>> Drei.
>
> Jetzt nur noch eine. Scheinen ja zwei Leser mitgedacht zu haben, das
> gibt wieder Hoffnung.

Mein Gott, du hast die Welt gerettet!

von R. F. (inet_surfer88)


Angehängte Dateien:

Lesenswert?

Ich habe folgendes Versucht:

Reset hart auf +: kein Erfolg

C vor dem Regler (C1) auf 100µF, 22µF hinter dem Regler (C4) entfernt: 
kein Erfolg

Die Gatewiderstände werden später erhöht, jetzt habe ich sie erst mal 
komplett entfernt: kein Erfolg (hier aber auch nicht erwartet, geht ja 
eher in Richtung Strom sparen)

Dann habe ich wie oben vorgeschlagen mit dem Oszi gemessen. Masse vom 
Oszi nicht angeschlossen, mit 2 Tastköpfen differenziell gemessen. Mit 
den angeschlossenen Tastköpfen geht die Schaltung erst mal weiterhin 
nicht, also ich kann den Fehlerzustand messen. Ich habe leider nur ein 
Uralt-Oszi ohne jegliche Schnittstelle, also entschuldigt bitte die 
Qualität.

Bild "mitProgrammer": Programmer angeschlossen, Schaltung funktioniert. 
Signale sehen gut aus.

Bild "ohne_alles": Kein Programmer angeschlossen und keine Berührung mit 
der Hand, Schaltung funktioniert nicht. 0-Linie sieht katastrophal aus.

Bild "Hand_aufgelegt": Nur mit der Hand berührt, Schaltung funktioniert. 
Signale aber eigentlich fast genau so katastrophal.

Was mir aber aufgefallen ist: Die Peaks nach unten sind mit oder ohne 
Hand unterschiedlich stark. Ich habe jeweils eine blaue Linie zur 
besseren Darstellung eingezeichnet. Die Einstellung ist jeweils 2V/DIV

Heute reicht mir die Zeit nicht mehr, ich werde aber mal noch mit dem 
vorgeschlagenen Spannungsteiler testen. Wobei ich den eigentlich 
vermeiden möchte. Die Schaltung muss so klein wie möglich werden, 
außerdem funktioniert es ja in unzähligen Schaltungsvorschlägen aus dem 
Internet auch ohne.

Bei dem angesprochenem OpenSX habe ich mal nachgeschaut. Das mit dem 
Spannungsteilervorschlag finde ich da nicht. Wo steht das genau? In 
deren Decoderprojekten sind auch nur jeweils zwei 47k drinnen.

von Dieter R. (drei)


Lesenswert?

R. F. schrieb:

> Bild "Hand_aufgelegt": Nur mit der Hand berührt, Schaltung funktioniert.
> Signale aber eigentlich fast genau so katastrophal.

Nö, Störpegel deutlich geringer, nach Augenmaß ~ 2/3.

> Bei dem angesprochenem OpenSX habe ich mal nachgeschaut. Das mit dem
> Spannungsteilervorschlag finde ich da nicht. Wo steht das genau? In
> deren Decoderprojekten sind auch nur jeweils zwei 47k drinnen.

Im Text beim Arduino-Lokdecoder steht, dass er das später geändert hat 
und es damit zuverlässiger funktioniert. Es gibt auch ein Foto dazu. 
Ohne Spannungsteiler ist die (nominelle) Schaltschwelle 2,5V/18V, also 
14%. Störungen von 14% der Signalamplitude führen also dazu, dass NICHTS 
mehr funktioniert, siehe die Simulation. Mit Spannungsteiler ist die 
Schaltschwelle 50%, Störspannungsabstand ist um Faktor > 3 verbessert.

von R. F. (inet_surfer88)


Lesenswert?

Dieter R. schrieb:
> Im Text beim Arduino-Lokdecoder steht, dass er das später geändert hat
> und es damit zuverlässiger funktioniert. Es gibt auch ein Foto dazu.
Ahhh, danke. Das hatte ich übersehen. Werde ich wie bereits geschrieben 
die Tage dann noch testen.
Ich war die letzten Tage unterwegs und hab das nur auf dem Smartphone 
gelesen. Da war mir der Text wohl "durchgerutscht".

von Joachim B. (jar)


Lesenswert?

Dieter R. schrieb:
> NEIN und NEIN. Es dreht sich um eine differenzielle Messung

ich habs verstanden, warum die Anderen nicht ist mir auch unklar!

GND oder Masse hat in dieser Messung NICHTS zu suchen, allenfalls 2 
Kanäle und Differenzbildung, geht mit fast jedem digital Oszi wer keine 
Differenztastköpfe hat.

Wie geschrieben wurde, 2 Oszi Kanäle tasten 2 Gleiskontakte ab, zum Oszi 
gibts keine Masse oder GND, natürlich kann der übliche Oszi PE/GND 
stören, deswegen gab es auch mal schutzisolierte Oszi mit Eurostecker 
für den TV Service.

Ich fühle mich auch manchmal als wenn man gegen Windmühlen kämpft.

von R. F. (inet_surfer88)


Lesenswert?

Joachim B. schrieb:
> GND oder Masse hat in dieser Messung NICHTS zu suchen, allenfalls 2
> Kanäle und Differenzbildung, geht mit fast jedem digital Oszi wer keine
> Differenztastköpfe hat.

Genau so habe ich es gemacht und konnte jetzt feststellen was da am 
Eingang abläuft (siehe Oszibilder oben).

Mittlerweile habe ich es auch mit 2 Widerständen gegen Masse getestet, 
wie in OpenSX empfohlen. Das Oszibild sieht so ähnlich aus wie im Bild 
mit der angelegten Hand. Allerdings funktioniert dann die Auswertung 
überhaupt nicht. Mit dem Wissen was jetzt an den Eingängen abläuft werde 
ich nochmals die Software zur Auswertung unter die Lupe nehmen. Ich 
denke das hier noch ein Problem besteht, sobald die Signale nicht 100%ig 
sauber kommen. Ich schaue mir das nochmals genau an und wenn ich da 
nicht weiter komme werde ich mal den Code posten.

von Martin (Gast)


Lesenswert?

Schau dir mal diesen Schaltplan an, unten links. Hier werden die Signale 
zusätzlich mit einem IC verarbeitet. Ich selbst komme aus der 
DCC-Fraktion, aber vll. hilftˋs.

https://wiki.mobaledlib.de/_media/bilder/anleitungen/bauanleitungen/150/150_v1/150_schaltplan-v1.0_2021-02-10.jpg

von D. Koder (Gast)


Lesenswert?

Sind denn im Programm die Ziehwiderstände an PB3 und PB4 eingeschaltet?
Die lägen nämlich auch um die 50 KOhm und wären zusammen mit den 
externen 47KOhm-Widerständen prima Spannungsteiler, die die 
Schaltschwelle schön in die Mitte des Bereiches brächten.

Hinweis: Kopier Dir diese Antwort schnell raus, denn es findet sich 
immer Einer, der die brauchbarsten Hinweise weg-knackt.

:((

von Christian M. (christian_m280)


Lesenswert?

D. Koder schrieb:
> Ziehwiderstände an PB3 und PB4 eingeschaltet?
> Die lägen nämlich auch um die 50 KOhm und wären zusammen mit den
> externen 47KOhm-Widerständen prima Spannungsteiler,

Nein, die liegen gegen VCC!

Gruss Chregu

von Dieter R. (drei)


Lesenswert?

D. Koder schrieb:
> Sind denn im Programm die Ziehwiderstände an PB3 und PB4 eingeschaltet?

Da gibt's was mit Ziehwiderstand, sogar einstellbar:

https://www.akah.de/holster/akah-guertelstegholster-safe-guard-66032000

von Dieter R. (drei)


Lesenswert?

Martin schrieb:
> Schau dir mal diesen Schaltplan an, unten links. Hier werden die Signale
> zusätzlich mit einem IC verarbeitet. Ich selbst komme aus der
> DCC-Fraktion, aber vll. hilftˋs.
>
> 
https://wiki.mobaledlib.de/_media/bilder/anleitungen/bauanleitungen/150/150_v1/150_schaltplan-v1.0_2021-02-10.jpg

Schaltschwelle 2,5V. Das ist aber für den PX-Bus, nicht für das 
Gleissignal.

Es ist zwar offenbar nett gemeint, aber müllt bloß den Thread zu, wenn 
jeder, der mal eine Modellbahnlok gesehen hat, hier etwas absondert, 
OHNE sich auch nur ein bisschen mit der Problemstellung 
auseinanderzusetzen. Angefangen mit dem Müll, den der Moderator mit 
seiner scheinbaren Fachkompetenz verzapft hat.

Wäre schön, wenn jetzt mal alle stillhalten könnten, bis sich der TO mit 
den offenbar noch vorhandenen Software-Fragen meldet. Die Hardware-Seite 
ist erst einmal geklärt. Nach allgemeiner Forumserfahrung wird es aber 
gerade so NICHT ablaufen ...

: Bearbeitet durch User
Beitrag #7058753 wurde von einem Moderator gelöscht.
Beitrag #7058759 wurde von einem Moderator gelöscht.
von Martin (Gast)


Lesenswert?

Dieter R. schrieb:
> Martin schrieb:
>> Schau dir mal diesen Schaltplan an, unten links. Hier werden die Signale
>> zusätzlich mit einem IC verarbeitet. Ich selbst komme aus der
>> DCC-Fraktion, aber vll. hilftˋs.
>>
>>
> 
https://wiki.mobaledlib.de/_media/bilder/anleitungen/bauanleitungen/150/150_v1/150_schaltplan-v1.0_2021-02-10.jpg
>
> Schaltschwelle 2,5V. Das ist aber für den PX-Bus, nicht für das
> Gleissignal.
>
> Es ist zwar offenbar nett gemeint, aber müllt bloß den Thread zu, wenn
> jeder, der mal eine Modellbahnlok gesehen hat, hier etwas absondert,
> OHNE sich auch nur ein bisschen mit der Problemstellung
> auseinanderzusetzen. Angefangen mit dem Müll, den der Moderator mit
> seiner scheinbaren Fachkompetenz verzapft hat.
>
> Wäre schön, wenn jetzt mal alle stillhalten könnten, bis sich der TO mit
> den offenbar noch vorhandenen Software-Fragen meldet. Die Hardware-Seite
> ist erst einmal geklärt. Nach allgemeiner Forumserfahrung wird es aber
> gerade so NICHT ablaufen ...

Danke für diesen wertvollen Beitrag, Mister Superschlau!

Komischerweise ist die verlinkte Schaltung bei etlichen Leuten 
erfolgreich im Einsatz.

von R. F. (inet_surfer88)


Angehängte Dateien:

Lesenswert?

Ich wollte jetzt die Software zur Auswertung unter die Lupe nehmen und 
habe dabei festgestellt, das die Auswertung die bei Selectrix 
erforderliche Taktpause nicht zuverlässig erkennt. Also nochmals das 
Oszi dran und gemessen.

Dieser Zustand ist mit den beiden Widerständen von 15k zwischen den 
Portpins und GND (laut OpenSX).

Die Grafik "mit_R_ohne_Programmer" zeigt die Signale mit den 
Widerständen gegen Masse ohne angeschlossenen Programmer. Die Schaltung 
ist hier allerdings komplett ohne Funktion.
Die Grafik "mit_R_mit_Programmer" zeigt die Signale mit den Widerständen 
gegen Masse und angeschlossenem Programmer. Auch hier ist die Schaltung 
ohne Funktion. Was hier auffällt: Die Taktpause wird nicht sauber 
abgebildet. Die Positive bzw. negative Flanke wird sauber mit 0 bzw. ~5V 
abgebildet, aber die Taktpause hängt irgend wo so um die 2 bis 2,5V. Ich 
denke das ist der Hauptgrund der Fehlfunktion. Die sollte eigentlich auf 
0V sein.

2V/DIV
Ich hoffe, das die differenzielle Messung mit meinen Billig-Tastköpfen 
und mein Uralt-Oszi hier keinen Müll bei der Messung verzapft.

: Bearbeitet durch User
von Dieter R. (drei)


Lesenswert?

mit_R_mit_Programmer würde ich erst einmal vergessen, da wir nicht 
wissen, wie sich die Masse-Verkopplung zwischen Programmer und dem 
ganzen Rest auswirkt. Schön, wenn es nicht raucht und sogar 
funktioniert. Wenn es nicht funktioniert, dann eben nicht - daraus würde 
ich jetzt nichts schlussfolgern und Überlegungen dazu jedenfalls auf 
später verschieben.

mit_R_ohne_Programmer sieht für mich völlig einwandfrei aus 
(unterstellt, dass die Null-Linie auch tatsächlich 0 V am 
Prozessor-Eingang entspricht). Die negativen Spikes sind heftig und 
dürfen so nicht sein, allerdings würde ich jetzt erst einmal davon 
ausgehen, dass es Artefakte des Messaufbaus sind (Frage dazu: was hast 
du GENAU mit den Masse-Clips der Tastköpfe getan und wo sind sie 
angeschlossen?).

Wir sehen (nach negativen Überschwingern) eine Gruppe von 3 positiven 
Pulsen. Die sollten sich fehlerfrei auswerten lassen.

Danach folgt offenbar eine weitere Gruppe von ebenfalls 3 Pulsen. Davon 
sehen wir hier bloß die negativen Überschwinger. Gleichzeitig würde der 
zweite Eingang drei (für ihn positive) Pulse sehen, also alles ok. Mit 
einem Vierkanal-Oszilloskop könntest du die Signale an beiden Eingängen 
darstellen, so musst du das einfach glauben. Die Software muss 
verarbeiten, dass einmal die Impulse an dem einen Eingang erscheinen und 
dann bei Polaritätsänderung an dem anderen Eingang.

Rechnerisch wären übrigens 18k Pull-Down korrekt, wurde hier auch 
erwähnt, dürfte aber keine wesentliche Rolle spielen.

: Bearbeitet durch User
von R. F. (inet_surfer88)


Lesenswert?

Dieter R. schrieb:
> Die negativen Spikes sind heftig und
> dürfen so nicht sein, allerdings würde ich jetzt erst einmal davon
> ausgehen, dass es Artefakte des Messaufbaus sind (Frage dazu: was hast
> du GENAU mit den Masse-Clips der Tastköpfe getan und wo sind sie
> angeschlossen?).
Die Masseanschlüsse von den Tastköpfen sind steckbar und können 
abgenommen werden, das habe ich bei beiden gemacht. Die Masse der beiden 
Tastköpfe ist ja noch über die Leitung und den BNC-Stecker verbunden. An 
der Schaltung möchte ich sie bei der differenziellen Messung ja nicht 
haben.

Zur Signalauswertung:
Ich frage den Zustand der beiden Pins ab (Ich nenne sie mal A und B). 
Solange beide "0" sind ist es für mich eine Taktpause und es geschieht 
nichts weiter. Wenn nicht beide "0" sind dann wird der Wert von Pin A 
abgefragt und ausgewertet. Danach wird auf die nächste Taktpause 
gewartet. Der Wert von Pin B wird nicht abgefragt, da er immer das 
Gegenteil von Pin A sein muss.
Mittlerweile habe ich zum  Testen Delays eingebaut, um eine 
Fehlinterpretation durch das unsaubere Umschalten zu vermeiden. Aber 
ohne Änderung vom Ergebnis. Mit Masse durch Oszi oder Programmer oder 
angelegter Hand geht es, ohne geht nichts.

von Dieter R. (drei)


Angehängte Dateien:

Lesenswert?

Da scheinen mir noch einige grundsätzliche Fehler drin zu sein. Ich 
werde mich nicht detailliert mit der Programmlogik auseinandersetzen 
können, anbei aber einige Anmerkungen, die hoffentlich zum Erfolg 
führen.

1. Simulation eines ungestörten Signals anbei. Das Signal ist die 
Impulsgruppe aus dem NEM680-Standard (Gleissignal): 2 positive Impulse, 
2 negative Impulse, 1 positiver Impuls, ein negativer Impuls, jeweils 
mit den Clock-Pausen dazwischen. Achtung, das Gnd-Symbol im 
LTSpice-Schaltplan ist willkürlich, es wird nur von LTSpice als Referenz 
benötigt und hat NICHTS mit der realen Situation zu tun.

Die positiven Impulse ergeben das Signal V1 (bei dir einer der Eingänge 
A bzw. B), die negativen Impulse dementsprechend das Signal am anderen 
Eingang. Der eine Eingang ist NICHT das Gegenteil des anderen, sondern 
jeder Eingang ist für EINE Signalpolarität zuständig.

Aufeinanderfolgende Impulse an EINEM (A oder B) Eingang sind 0-Bits, 
Wechsel auf den anderen Eingang ist ein 1-Bit.

2. Der von dir gewählte Anschluss der Probes ergibt zwar ein 
Differenz-Signal, aber mit (großen) Störungen. Problem ist die 
KAPAZITIVE Verkopplung von Oszilloskop-Gnd mit dem ganzen Rest des 
Aufbaus. Kopplungs-Kapazität ist die gesamte physische Masse des 
Oszilloskops gegen Stromnetz und Aufbau. Das ergibt einen Hochpass für 
Störspannungen, eine (immer vorhandene) Unsymmetrie dieser Kopplung wird 
nicht durch die Kanalsubtraktion eliminiert und zeigt sich im 
Oszillogramm.

Abhilfe: an beiden Probes die Gnd-Clips aufstecken und kurz miteinander 
verbinden (einfach die Klemmen am Ende der möglichst kurzen 
Massestrippen zusammenklipsen). Von diesem zusammengeklipsten 
Verbindungspunkt eine ebenfalls möglichst kurze Verbindungsleitung zu 
einem Bezugspunkt des Aufbaus legen. Als Bezugspunkt bietet sich Gnd am 
PX-Bus an (alles schon erwähnt). Diese Verbindungsleitung ist nicht so 
kritisch, wenn möglich innerhalb 0,5 m Länge, falls das nicht geht, auch 
länger. Jetzt SOLLTEN die Überschwinger im Oszillogramm geringer sein - 
wenn nicht, müssen wir nochmal nachdenken.

Vorsichtshalber NICHT gleichzeitig den Programmer anschließen! Falls 
doch, unbedingt vorher hochohmig testen, ob zwischen den Gnds 
ungewünschte Ströme fließen.

3. Nachwort: ich habe keine praktische Erfahrung im Eisenbahnmodellbau. 
Mein Vater war ein großer Modellbahn-Liebhaber, er ist aber vor der Zeit 
gestorben, als es elektronische Steuerungen gab. Von daher ist mir das 
Thema nicht ganz fremd und ich denke schon, dass ich den NEM680-Standard 
richtig verstanden und umgesetzt habe (Fehler und Missverständnisse sind 
aber möglich, wenn jemand es besser weiß, möge er mich korrigieren). Die 
zugehörige Impulsauswertung im Controller ist mir dann gar nicht mehr 
fremd, ich habe einiges mit Dimmern gemacht, die Anforderungen sind da 
sehr ähnlich.

: Bearbeitet durch User
von R. F. (inet_surfer88)


Lesenswert?

Dieter R. schrieb:
> Die positiven Impulse ergeben das Signal V1 (bei dir einer der Eingänge
> A bzw. B), die negativen Impulse dementsprechend das Signal am anderen
> Eingang. Der eine Eingang ist NICHT das Gegenteil des anderen, sondern
> jeder Eingang ist für EINE Signalpolarität zuständig.

Ich glaube da reden wir aneinander vorbei. Natürlich ist das eine Signal 
nicht das Gegenteil vom anderen. Was ich sagen wollte: Ich werte die 
Taktpause aus (da sind beide "0"). Nur wenn keine Taktpause vorliegt, 
und nur dann, werte ich aus ob der Pin A "0" oder "1" ist. Für diesen 
Moment gilt: Ist A "0", dann ist B "1" oder umgekehrt. B Brauche ich in 
diesem Moment deswegen nicht auszuwerten.
Erst danach erfolgt der von dir völlig korrekt beschriebene Vergleich 
mit dem vorherigen Bit um zu entscheiden ob eine logische 0 oder 1 
vorliegt.


Dieter R. schrieb:
> 3. Nachwort: ich habe keine praktische Erfahrung im Eisenbahnmodellbau.
> Mein Vater war ein großer Modellbahn-Liebhaber, er ist aber vor der Zeit
> gestorben, als es elektronische Steuerungen gab. Von daher ist mir das
> Thema nicht ganz fremd und ich denke schon, dass ich den NEM680-Standard
> richtig verstanden und umgesetzt habe (Fehler und Missverständnisse sind
> aber möglich, wenn jemand es besser weiß, möge er mich korrigieren).
Eigentlich hast du alles korrekt wieder gegeben. Da gibt es nichts zu 
korrigieren. Mit dem Protokoll bin ich einigermaßen vertraut. Nur die 
Hardware lässt mich so langsam verzweifeln (oder doch ein kleines Detail 
in der Software???
Den SX-Bus habe ich schon einige Jahre am laufen. Da habe ich mir auch 
etliche Schaltungen selber gebaut und die Software dafür geschrieben. 
Das läuft mittlerweile alles stabil. Ich hoffe die Auswertung vom 
Gleissignal bekomme ich auch noch hin, obwohl sich so langsam Frust 
breit macht.
Dir erst mal vielen Dank fürs simulieren und deine Mühe.

Ich glaube ich werde am Wochenende wieder das Breadboard auspacken und 
die Schaltung zusammen stecken. Nicht das meine Platinen welche ich mir 
habe ätzen lassen da einen Streich spielen (ich hoffe nicht).

von Joachim B. (jar)


Lesenswert?

R. F. schrieb:
> Ich glaube ich werde am Wochenende wieder das Breadboard auspacken und
> die Schaltung zusammen stecken.

was denkst du von einem DC/DC und Optokoppler Trenner vor dem 
Gleichrichter um zur µC Versorgung und den Signalen Trennung zu 
erreichen!

evtl fehlen dem auch nur Entkopplungs Induktivitäten um die 
aufmodulierte Steuerung nicht am Gleichrichter und Siebkondensator platt 
zu bügeln!

von Dieter R. (drei)


Lesenswert?

R. F. schrieb:

> Ich werte die
> Taktpause aus (da sind beide "0"). Nur wenn keine Taktpause vorliegt,
> und nur dann, werte ich aus ob der Pin A "0" oder "1" ist. Für diesen
> Moment gilt: Ist A "0", dann ist B "1" oder umgekehrt. B Brauche ich in
> diesem Moment deswegen nicht auszuwerten.

Ich versteh's immer noch nicht. Woher weißt du, was Taktpause und was 
Signal ist? Fragst du in einer Schleife unablässig beide Eingänge ab? Wo 
ist dann noch Zeit für ein Hauptprogramm?

Wenn ich das Protokoll richtig verstehe, dann können viele (7? 8?) 
Null-Bits aufeinander folgen. Deshalb muss der Empfänger mit den 
Clock-Signalen synchronisiert werden.

Die ansteigende Flanke eines Eingangs liefert das Ende des 
Clock-Impulses. Detektiert man also (per ISR) die ansteigenden Flanken 
BEIDER Eingänge, so erhält man daraus alle notwendigen Informationen. 
Bei EINEM der Eingänge gibt es immer Clock-Impulse.

Nachteil dieser simplen Vorgehensweise ist die Empfindlichkeit gegen 
Störimpulse. Bricht (durch Kontaktprobleme am Stromabnehmer) das Signal 
innerhalb eines Bit-Intervalls ein, so wird dies als Clock-Impuls 
gewertet, anschließend ist wieder der gleiche Pegel, es gibt also ein 
Null-Bit zu viel. Mangels Kenntnis von Modellbahnsteuerungen habe ich 
keine Ahnung, ob und wie das in typischer Software gehandhabt wird. Es 
gäbe zahlreiche Ansätze, die Störsicherheit zu verbessern, in Hardware 
und/oder in Software, das wäre dann das nächste Thema, nachdem die 
Dekodierung prinzipiell läuft. Ausgangspunkt bei jeder Dekodierung 
müsste aber nach meinem Verständnis die Erkennung des ENDES der 
Clock-Impulse sein, denn darin ist gleichzeitig die Information 
enthalten.

von Thomas E. (thomase)


Lesenswert?

Dieter R. schrieb:
> Es ist zwar offenbar nett gemeint, aber müllt bloß den Thread zu, wenn
> jeder, der mal eine Modellbahnlok gesehen hat, hier etwas absondert,
> OHNE sich auch nur ein bisschen mit der Problemstellung
> auseinanderzusetzen.

Dieter R. schrieb:
> Ich versteh's immer noch nicht.

Dieter R. schrieb:
> Mangels Kenntnis von Modellbahnsteuerungen habe ich
> keine Ahnung

Thomas E. schrieb:
> Lerne erstmal wie digitale Modellbahnsteuerung funktioniert. Und dann
> kommst du wieder mit deinen schlauen Tipps.

R. F. schrieb:
> Ich hoffe die Auswertung vom
> Gleissignal bekomme ich auch noch hin, obwohl sich so langsam Frust
> breit macht.

Auch wenn man mir hier unterstellt hat, nicht die geringste Ahnung vom 
Messen mit Oszilloskopen zu haben: Mit einem Oszi mit Trenntrafo und GND 
am GND des µC bekommst du genau das zu sehen, was auch der µC zu sehen 
bekommt.

Frank M. schrieb:
> Zum Thema: Es ist schon sinnvoll, auf dem Oszi genau das Signal
> anzuzeigen, was auch der AVR sieht bzw. was am Gleis anliegt. Genau
> damit muss der AVR ja dann auch umgehen können.

Obwohl das natürlich völliger Blödsinn ist:

Dieter R. schrieb:
> Angefangen mit dem Müll, den der Moderator mit
> seiner scheinbaren Fachkompetenz verzapft hat.

von Dieter R. (drei)


Lesenswert?

Thomas E. scheint Streit zu suchen, zur Sache trägt sein Kommentar 
jedenfalls nichts bei. Ich will mich aber nicht streiten, insbesondere 
nicht um verkürzte und aus dem Zusammenhang gerissene Zitate, sondern 
helfen, in der Sache voranzukommen. Daher zwei Ergänzungen, auch ich 
lerne:

1. Das Protokoll lässt nur maximal 3 aufeinanderfolgende Null-Bits zu, 
da in den Datenpaketen regelmäßig 1-Bits eingestreut werden. Das ändert 
allerdings nichts an der Notwendigkeit des Clock-Recovery.

2. Weiter oben wurde irgendwo eine Quelle genannt, die auf Github 
verwies. Ich habe mir inzwischen mal kurz die Sources angeguckt, dort 
wird es tatsächlich so gemacht, wie von mir vorgeschlagen, Auswertung 
der ansteigenden Flanken in ISR. Eine Fehlerbehandlung bei 
Signalstörungen gibt es da nicht. Offenbar funktioniert das also so in 
der Praxis, Potenzial für Verbesserungen ist allerdings vorhanden. Wäre 
nett, wenn sich der TO noch mal meldet, der ist es ja offenbar anders 
angegangen, allerdings bisher nicht mit Erfolg. Wird aber werden, da bin 
ich zuversichtlich.

von Thomas E. (thomase)


Lesenswert?

Dieter R. schrieb:
> Thomas E. scheint Streit zu suchen, zur Sache trägt sein Kommentar
> jedenfalls nichts bei.

Wenn du das meinst...

von R. F. (inet_surfer88)


Lesenswert?

Dieter R. schrieb:
> Ich versteh's immer noch nicht. Woher weißt du, was Taktpause und was
> Signal ist? Fragst du in einer Schleife unablässig beide Eingänge ab? Wo
> ist dann noch Zeit für ein Hauptprogramm?
Genau so ist es aktuell. Hauptprogramm bedeutet einfach nur die 
Zugschlussbeleuchtung und die Innenbeleuchtung zu schalten. Mehr hat das 
Hauptprogramm nicht zu tun. Deswegen dachte ich das sollte so passen. 
Wenn auch nicht schön gelöst.


Dieter R. schrieb:
> Wenn ich das Protokoll richtig verstehe, dann können viele (7? 8?)
> Null-Bits aufeinander folgen. Deshalb muss der Empfänger mit den
> Clock-Signalen synchronisiert werden.
Hier hast du dich ja bereits selber korrigiert. 3 Nullen zur 
Synchronisation, danach innerhalb einer Sync-Gruppe nur noch max. 2 
Nullen wegen den Trennbits. Trotzdem muss der Takt ausgewertet werden, 
zumal das Timing ziemlich viel Toleranz zulässt.


Joachim B. schrieb:
> was denkst du von einem DC/DC und Optokoppler Trenner vor dem
> Gleichrichter um zur µC Versorgung und den Signalen Trennung zu
> erreichen!
Das wäre eine komplett neue Schaltung, die ich eigentlich vermeiden 
möchte. Ich habe ja bereits Platinen ätzen lassen (da es am Breadboard 
funktioniert hat, aber hier war der Programmer ständig angeschlossen). 
Außerdem würde so ein Aufbau viel mehr Platz erfordern, den ich in den 
Waggons eigentlich nicht habe. Die Schaltung soll ja durch die Fenster 
nicht zu sehen sein. Ich gebe auch die Hoffnung (noch) nicht auf, es zum 
laufen zu bekommen. Schließlich gibt es unzählige Schaltungen im 
Internet, die mit dem gleichen Schaltungsaufbau offenbar Problemlos 
funktionieren.


Ich bin jetzt erst mal dienstlich unterwegs und muss das ganze bis 
mindestens Wochenende beiseite legen. Frühestens am Wochenende (je nach 
Wetter) werde ich das ganze nochmals am Breadboard aufbauen und testen, 
nicht das meine Platine ein Problem hat. Wenn das nichts hilft, dann 
will ich die Software neu angehen und mit Interrupts arbeiten. Wenn ich 
es auf die schnelle richtig gesehen habe hat der TINY85 lediglich einen 
INT0, und der noch am falschen Pin (den habe ich als Aushang verwendet). 
Vielleicht komme ich mit dem PinChangeInterrupt weiter (PCINTx).
Ich werde mich auf jeden Fall wieder melden, ob mit oder ohne Erfolg.

von Joachim B. (jar)


Lesenswert?

Joachim B. schrieb:
> was denkst du von einem DC/DC und Optokoppler Trenner vor dem
> Gleichrichter um zur µC Versorgung und den Signalen Trennung zu
> erreichen!

ich war gedanklich bei ATmega 32,644,128p wo eine Differenzbildung von 2 
Ports möglich ist!

ukw Frank M., Falk und Andere hatten meinen Irrtum zwar erkannt aber 
natürlich mit ihren Kommentaren nur gegeizt.

Klar sollte der µC genau die Infos bekommen die auch ein Oszi sieht. 
Hier ging es ja nicht mal um Differenzmessung, sondern bezogen auf GND, 
da stört natürlich die potenzialbehaftete Messung.

Mein Fehler war das ich bei 2 Signalen an 2 Ports sofort an 
Differenzmessung dachte!

von Dieter R. (drei)


Lesenswert?

R. F. schrieb:

> Vielleicht komme ich mit dem PinChangeInterrupt weiter (PCINTx).
> Ich werde mich auf jeden Fall wieder melden, ob mit oder ohne Erfolg.

Ich würde es gleich damit machen und alles andere vergessen, spart Zeit 
und Frust und kompliziertes Software-Timing. Und vielleicht für 
zukünftige Projekte einen moderneren Prozessor nehmen, ATTINY412 zum 
Beispiel. Allerdings gibt es den mit 8 Pins nur bis 4 kByte. Bei 14 Pins 
gibt es bis zu 16 kByte, ATTINY1614.

Hinweis: Bei Microchip gibt es eine Application Note

https://ww1.microchip.com/downloads/en/Appnotes/Atmel-2508-Zero-Cross-Detector_ApplicationNote_AVR182.pdf

Thema ist Nulldurchgangs-Detektion bei netzsynchronen Applikationen, 
also niedrigere Frequenz. Dort ist ein Tip, der auch hier nützlich sein 
könnte:

To make sure the interrupts are valid and not only products of spikes on 
the pin, there is a filter implemented in the interrupt routine. The 
filter samples the level on the interrupt line five times and compares 
the values to see if the value is stable. If the value is not the same 
for all the samples, the event is discarded and the routine returns to 
the main program waiting for a new interrupt.

von R. F. (inet_surfer88)


Lesenswert?

Ich habe das Programm umgeschrieben. Es werden die Pins jetzt nicht mehr 
dauerhaft abgefragt, sondern es wird der Pin Change Interrupt verwendet.

Die ISR vom Interrupt prüft zunächst per IF-Schleife, ob einer der 
beiden Eingänge 1 ist. Wenn  ja, wird geprüft welcher 1 ist und die 
Auswertung wird durchlaufen.

Hier mal vereinfacht
1
if (GLEIS_A||GLEIS_B)
2
{
3
   if(GLEIS_A)
4
   {
5
      //GLEIS_A ist aktiv
6
   }
7
8
   if(GLEIS_B)
9
   {
10
      //GLEIS_B ist aktiv
11
   }
12
   
13
   //AUSWERTUNG DES PROTOKOLLS
14
}


Es hat sich am Ergebnis nichts verändert. Mit angeschlossenem Programmer 
funktioniert die Version mit Interrupt ebenfalls ohne Probleme, wird der 
Programmer ausgesteckt funktioniert wieder nichts. Erklären kann ich mir 
das nach wie vor nicht. Am Eingang vom U-Regler hängen derzeit 100µF und 
es sind 15k von den 2 Eingängen nochmals gegen Masse geschaltet.

: Bearbeitet durch User
von Dieter R. (drei)


Lesenswert?

R. F. schrieb:

>    //AUSWERTUNG DES PROTOKOLLS

Da würde ich die Ursache des jetzigen Problems vermuten.

Serielle Schnittstelle (entkoppelt) anschließen, erkannte Daten von 
beiden Eingängen bitweise ausgeben. Daran sollte man sehen können, ob 
die Hardware etwas sinnvolles empfängt.

von R. F. (inet_surfer88)


Lesenswert?

Dieter R. schrieb:

> Serielle Schnittstelle (entkoppelt) anschließen

Dieser Satz bringt mich gerade auf eine Idee. Ich werde mal an 2 
Ausgänge Optokoppler anschließen und an deren Ausgang mit dem Oszi 
messen. Dadurch habe ich das Oszi komplett entkoppelt und muss auch 
keine Differenzielle Messung verwenden. Dadurch kann ich mit meinen 2 
Kanälen beide Signale gleichzeitig anschauen.

Das Programm stelle ich mir dann so vor:
1
if (GLEIS_A)
2
{
3
   AUSGANG_A_EIN
4
}
5
else
6
{
7
   AUSGANG_A_AUS
8
}
9
if (GLEIS_B)
10
{
11
   AUSGANG_B_EIN
12
}
13
else
14
{
15
   AUSGANG_B_AUS
16
}

Mehr soll an Code erst mal nicht drauf. Das sollte die Signale welche 
der Controller wirklich sieht einigermaßen realistisch ans Oszi bringen.

Kann jetzt aber wieder ein paar Tage dauern, bis ich dazu komme.

von Dieter R. (drei)


Lesenswert?

R. F. schrieb:

> Kann jetzt aber wieder ein paar Tage dauern, bis ich dazu komme.

Vielleicht hast du in den paar Tagen ja mal abends Zeit, guckst dir den 
Code an und findest den/einen Fehler ;-)

Oder du investierst in ein vierkanaliges Oszilloskop. Dann kannst du 
(mit den zwei Optokopplern) beide dekodierten Signale und das 
Gleissignal gleichzeitig ansehen und hast sogar noch einen Kanal in 
Reserve. Dann sollte der Fehler eigentlich ganz schnell zu finden sein. 
So ähnlich würde ich es machen.

von Miles Bennet D. (Firma: Cyberdyne Systems) (milesbennetdyson)


Lesenswert?

Dieter R. schrieb:
> Oder du investierst in ein vierkanaliges Oszilloskop.

Na klar.

Dieter R. schrieb:
> Dann sollte der Fehler eigentlich ganz schnell zu finden sein.
> So ähnlich würde ich es machen.

Nachdem du mit dem 2-Kanaler schon auf die Schnauze gefallen bist , wird 
es der 4-Kanaler jetzt schon richten. Mann, Mann.

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.