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?
:
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.
Du solltest Dir das DCC-Signal über einen Optokoppler holen, siehe Open DCC.
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
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?
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...
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 ?
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
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
Hallo. Wofür ist D3. Ist mir bei anderen Decodern nicht bekannt.
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
Welche Lasten hängen denn an den Leistungs-MOSFETs und wie werden die Lasten versorgt. Über die BAV99 doch wohl nicht.
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.
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.
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.
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.
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.
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.
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?
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.
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.
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.
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
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.
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.
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
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.
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.
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!
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
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!
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.
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.
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".
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.
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.
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
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. :((
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
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
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.
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.
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
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
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.
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
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).
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!
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.
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.
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.
Dieter R. schrieb: > Thomas E. scheint Streit zu suchen, zur Sache trägt sein Kommentar > jedenfalls nichts bei. Wenn du das meinst...
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.
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!
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.
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
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.