Decoder für D143 - Entwicklungsversuch!

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Na dann....

      Am Anfang gleich eine Info!

      Den Quellcode werde ich nicht als ganzen hier Posten, denn von "Copy & Paste" Code halte ich nichts.

      Allerdings werde ich alle Programmteile beschreiben so das der "geneigte Leser" alles wieder zusammengesetzt bekommt und am Ende auch weiß warum das funktioniert, oder auch nicht...... :huh:


      Etwas Theorie am Anfang.

      1. Alles was man über das Carrera Digitalsystem wissen muss steht hier:
      slotbaer.de/carrera-digital-12…9-cu-daten-protokoll.html

      2. Eine erste Idee wie die Decodierung des Bahnsignals funktionieren könnte, findet man hier:
      wasserstoffe.de/carrera-hacks/manchester-decode/index.html


      3. Auch sehr interessant ist dies hier, wenn auch die Software für einen anderen µC - Typ ist:

      redlichelectronics.de/datenuebertragung.html



      Mit den Infos von diesen Seiten kommt man schnell zu einem ersten Erfolg. Besonders der Arduino-Quellcode von Peter Niehues aus Link Nr.2 funktioniert sofort mit einem Arduino-Uno.

      Wenn man die Variable, die auf dem Seriellen Monitor ausgegeben wird, mit einer Switch --> Case Abfrage filtert und zu den 16 Geschwindigkeitsstufen jeweils ein analogWrite (0 für Stop, 16,32,48..... 255 für Vollgas) auf einen Pin legt, hat man eine funktionierende Drehzahlsteuerung für eine Fahrzeug-ID.


      Das ganze ist aber noch sehr rudimentär. Drückt man die Spurwechseltaste funktioniert es nicht mehr, weil das Datenwort ja als ganzes ausgewertet wird.


      Mein Ansatz ist ja außerdem einen kleinen ATTiny25 zu verwenden, oder wenn der Speicher knapp wird, auch einen 45 oder 85, mit 4 oder 8 kbyte.
      Grund dafür, ich möchte mich zuerst nur auf die Software konzentrieren und das erstellen einer Platine danach angehen. Die Software soll auf den originalen D143 Decodern erprobt werden.
      Somit kann man Hardwareprobleme ausschließen und braucht Fehler nur in der Software zu suchen. Inzwischen hab ich festgestellt das der Decoder recht sensibel auf lange Drähte reagiert.
      Besonders die Leitung vom µC zum Motor-FET ist da sehr kritisch. Ich denke das die recht hohe 30kHz PWM daran Schuld ist.

      Als Konsequenz daraus muss das Programm also ohne die Arduino Funktionen auskommen, da einige Funktionen auf den Tiny´s nicht laufen und wenn doch, zu viel Speicher verbrauchen.
      Ich nutze jetzt das Atmel Studio mit AVR GCC als Compiler und AVRDude zum Übertragen des Programms. Als Programmierhardware habe ich zuerst einen Arduino-Uno mit der "Arduion-ISP" Software genutzt.
      Das ist schnell zurecht gebaut und funktioniert auch im Atmel Studio problemlos. Inzwischen hab ich ein paar USBASP V2 angeschafft. Gibts in der Bucht für 2-3 Euro. Funktionieren gut, hat aber kein Gehäuse und unter Win10 ist die Treiberinstallation etwas umständlich (keine signierten Treiber).

      Wer also bereit ist sich einen USBASP anzuschaffen und einen D143 Decoder zu "opfern" , kann hier sofort mit experimentieren. Dazu werden 5 Stifte auf den Decoder gelötet und einer auf den Pluspol des Elkos.
      Das nach außen führen der Kontakte hat sich letztlich als als nicht gut erwiesen, da es durch die Drähte zu Störungen kommen kann. An den USBASP hab ich zwei Servokabel angelötet. Perfekt wäre in 5poliger und ein 1poliger Stecker.

      USBASP.jpg


      Fortsetzung folgt....

      Gruß
      Enrico



      P.S. Wenn man für den USBASP 4-5 Euro investiert bekommt man ihn aus Deutschland und somit nach 2-3 Tagen. Die ganz billigen kommen direkt aus Fernost!

      The post was edited 1 time, last by ElCheffe ().

    • ....und weiter gehts.

      Nachdem nun klar ist welche Hardware zum Einsatz kommt und wie diese Programmiert wird kommt jetzt die Software dran.

      Wie aus den Links im Beitrag oben zu sehen ist schickt die CU (oder die RedBox) kontinuierlich 10 verschiedene Datenwörter.
      Unser µC soll jetzt diese Datenwörter empfangen und auswerten.

      Dazu ist es zuerst notwendig das sich der µC mit dem Datenstrom der CU synchronisiert, sprich der µC muss den Anfang eines Datenwortes erkennen.
      Auf dem Oszilloskope sieht das so aus. Die Datenworte sind gelb und blau das auf das Startbit synchronisierte Signal des µC.

      VOLTCRAFT109_1.gif


      Damit man weiß was der µC gerade tut schaltet man einen I/O Pin zur rechten Zeit ein und aus. Daraus entsteht die blaue Kurve.

      An der Stelle im Code an dem der µC eine Startbit erkennen soll schalte ich den "Debug-Pin" auf High, beim nächsten Starbit dann auf Low, usw.
      Für diese High/Low Umschaltung gibt es einen eigenen Befehl, der den Pin immer automatisch umschaltet, toggelt.

      DDRB |= (1 << PB2); // Pin B2 wird als Ausgang gesetzt --> Debug Ausgang
      PORTB ^= (1 << PB2); // Pin B2 Toggeln

      Die Schreibweise ist bildlich....

      DDRB --> Datenrichtungsregister 0-Eingang,1-Ausgang
      |= -->logische ODER Verknüpfung
      (1 << PB2) --> in das Bit2 wird eine 1 geschoben

      Als nächstes brauchen wir einen Sync. auf jedes Bit des Datenwortes und zwar immer in der Bitmitte, denn dort sieht man ob das Bit eine 0 oder eine 1 ist.
      Das sieht dann so aus.

      VOLTCRAFT109_2.gif

      Ohne Debug-Ausgang kommt man beim µC Programmieren nicht weit. Die Arduinos haben ja meist eine serielle Schnittstelle so das man wenigstens Daten auf den PC ausgeben kann. Die Tinys hab so was nicht, aber durch das geschickte toggeln eines Ports kann man auch viel mehr Infos bekommen. Ein Oszilloskope braucht man allerdings.

      Jetzt muss man nur noch an der Stelle wo der Debug-Ausgang getoggelt wird dann Pin Abfragen ober er High oder Low ist.


      if (!(PINB & (1 << PB4))){ // wenn der Pin Low ist...
      neuesDatenBit |= 1; } // ist das Bit 1....

      Die Schreibweise mit den logischen Verknüpfungen sieht im erstem Moment etwas kryptisch aus.... 8|
      Das Ergebnis ist 1, wenn der negierte Pin4 ( bei Low ) UND die 1 << beide 1 sind , was ja bei LOW der Fall ist.... :pillepalle:
      Egal, wir nehmen das so hin.

      Jetzt ist es nur noch wichtig den richtigen Zeitpunkt für diese Abfrage zu finden.

      Dafür braucht man Interrupts, um den wechselnden Pegel im Pin zu erkennen und anschließend Timer, um die Zeit zwischen den Flanken zu messen.

      Bis zum nächsten mal...
      Gruß
      Enrico

      P.S. bei Unklarheiten einfach nachfragen...
    • Hallo,
      heute mal ein kurzer Zwischenbericht zu den Fahrerprobungen.

      Der Testwagen ist ja nun seit einiger Zeit bei Dusan gelandet und hat einige Versuchsrunden hinter sich.

      Wir konnten bereits die Gaskurve optimieren und das Programm auch erfolgreich auf einen ganz orig. D143 Decoder von Dusan flashen.

      Es bleibt aber noch einiges zu tun. Das Fahrzeug bremst nach dem Überfahren einer Weiche stärker ab, als es das original tut und reagiert auf plötzliche Vollgas-Stopp-Wechsel etwas bockig.
      Weichen schalten funktioniert zuverlässig, auch ein Autonomer Ghostcarmodus funktioniert.

      Dusan hatte auch die Idee eine Softwareversion als Firmwareupdate zu entwickeln. Damit könnten dann orig. D143 Decoder auf "Vollgas" mit einstellbarer Gaskurve, Ghostcarmodus und vielleicht noch einer Blink/Bremslicht LED erweitert werden.

      Gestern Abend konnten wir die Ursache für das "Bremsproblem" stark eingrenzen.

      Für das einfache flashen der Decoder habe ich ein kleines Programm gebastelt und alles nötige in einem Archiv gesammelt.
      Ihr könnt es hier herunterladen. ( benötigt .NET, das aber bei einem aktuellem Windows mit dabei ist!)


      Für "experimentierfreudige" Bastler hätte ich noch ein paar USBASP´s zum flashen übrig.


      Gruß
      Enrico

      P.S. Die Beschreibung der Decodersoftware hier im Beitrag setzte ich in den nächsten Tagen fort...

      The post was edited 2 times, last by ElCheffe: Link zum Programm entfernt da veraltet! Neuer Download siehe in den aktuelleren Beiträgen. ().

    • Moin...

      wieder mal ein paar Infos zur Decoder Software.

      Um die im vorherigen Beitrag beschriebenen Probleme in den Griff zu bekommen habe ich die Software noch eine mal stark verändert, das heißt, ich hab die Funktion der beiden zur Verfügung stehenden Timer getauscht.

      Das hat nach Dusan´s dafürhalten die Fahrqualität soweit verbessert, so das wir jetzt weitere Funktionen einbauen können.
      ID Programmierung per Redbox/CU steht an. Außerdem soll die Gaskurve mit Hilfe einer kleinen Windows Anwendung grafisch eingestellt und dann in den Decoder übertragen werden.

      Damit das funktioniert müssen die Werte dafür im EEProm gespeichert und direkt von dort auch gelesen werden. Ob die Übertragungsgeschwindigkeit des EEProm dafür ausreicht werden wir in den nächsten Tagen wissen.

      Was jetzt noch fehlt wären Dauertests mit der neuen Software, viele viele Runden, zusammen mit anderen Autos/Decodern, mit CU, RB oder BB, und was es sonst noch alles an Gerätschaften gibt, um Unverträglichkeit zu entdecken.

      Ich kann noch ein paar USBASP Programmer anbieten und evtl. auch noch 1-2 Autos. Also.... mutige vor... :D

      Gruß
      Enrico
    • Na prima....!

      Brauchst du einen USBASP oder hast du was eigenes?

      Am Auto muss eine Stiftleiste angelötet werden und ein einzelner Stift am + Pol des 100µF Kondensators.
      Ich bin auch auf der Suche nach einem Stecker der ohne die Stifte auskommt. Mal sehen....


      Gruß
      Enrico
    • Habe so, müsste ich einen bauen.
      Gibt dazu ja Anleitungen.

      Löten kann ich.
      Einen A8 habe ich hier als Testfahrzeug.
      Ich kann dir auch einen digitalcontroller schicken. Du müsstest dann den Chip auflösten, da solche Dinge mit meinen Augen nicht mehr klappen.
      Landschaftsmodellbauer mit 2 für Autorennen begeistern Söhnen.
    • Hallo Johannes,

      das ist alles viel einfacher...

      Der Chip muss nicht getauscht werden, die neue Firmware läuft auf dem D143 Decoder.

      Sinnvoller Weise wird nur ein Steckstift an den Pluskontakt des 100µF Kondensators gelötet. Die ISP Schnittstelle funktioniert ohne Löten, mit einem geklemmten Stecker.
      Wenn du genug Hände hast, 3 sollten da schon reichen, brauchst du nichts zu verändern. :D

      Am Wochenende mach ich ein paar Fotos was zu tun ist um den D143 Decoder zu flashen.

      Bis dahin,

      Grüße
      Enrico
    • Moin...

      hier ein kleines Update für Interessierte zum gestrigen Workshop. ;)
      Enrico hat eine von mir mal erstellte Motorkurve direkt ins EEProm geschrieben. Danach kam dann mein Part dieses zu testen, wie sich das Fahrzeug verhält, und ob es funktioniert.
      Nach vielen Proberunden und verschiedenen Tests konnte ich das Ergebnis mit Daumen hoch bestätigen.
      Warum wir versuchen wollten die Motorkurve ins EEProm zu schreiben ist, wir spielen mit dem Gedanken...später verschiedene Motorkurven im Fahzeug zu hinterlegen, um diese dann abzurufen. Dieses wiederum ist Enrico´s Part.

      Desweiteren funktioniert mittlerweile auch der ID Wechsel mit dem Regler über Doppelklick, wie auch über die CU.

      Wenn man sich so den ganzen Abend austauscht, entstehen auch schon mal verrückte Sachen..... wie z.B. ein Hinteres Blinklicht für einen F1 Rennwagen.
      Auch das haben wir in die Tat umgesetzt und ausgetestet an einem orig. D143 Decoder......was heisst hier wir...Enrico hat den Code dafür geschrieben und ich habs getestet. :D

      Es ist noch einiges, was wir vorhaben, aber dazu demnächst mehr !
      Gruß, Dusan [tschuess]

      NEU! ! ! Die Eifelpiste NEU! ! !
    • Sehr, sehr geil, Ihr legt echt gerade einen Meilenstein, ich bin begeistert und lese

      mit großer Begeisterung Eure Fortschritte, das ist echt der absolute Wahnsinn, aber

      macht bitte weiter, ich möchte das später ja auch mal irgendwann nutzen und freue

      mich über Euren Erfindungsgeist.

      Danke Enrico und Dusan :thumbup: :thumbup: :thumbup:

      Gruß

      Torsten
      Gruß, Torsten [tschuess]
    • Was noch zu ergänzen wäre:

      Die Werte für die Motorkurve im EEProm zu speichern bringt zwei Vorteile.

      1. Man spart wertvollen Arbeitsspeicher, der ja beim Attiny25 mit 128Bytes nicht gerade üppig ausfällt.

      und noch wichtiger...

      2. Diese Werte können jederzeit verändert werden ohne dafür den Quelltext ändern zu müssen. Es werden einfach die Werte im EEprom verändert.

      Für diesen Zweck habe ich das kleine Übertragrundprogramm für die .hex Datei erweitert. Jetzt kann auch eine .eep EEProm Datei mit geflasht werden.
      Später soll das ganze dann so funktionieren, das man das EEProm ausliest, die Werte grafisch anpasst und wieder zurück schreibt.

      flash143plus.PNG


      Auf diese Weise können dann bis zu 5 individuelle Motorkurven im EEProm abgelegt werden. Die Auswahl erfolgt dann genau wie bei den D132ern mit Hilfe der CU.




      Gruß
      Enrico
    • Slotti143 wrote:

      Sehr, sehr geil, Ihr legt echt gerade einen Meilenstein, ich bin begeistert und lese

      mit großer Begeisterung Eure Fortschritte, das ist echt der absolute Wahnsinn, aber

      macht bitte weiter, ich möchte das später ja auch mal irgendwann nutzen und freue

      mich über Euren Erfindungsgeist.

      Danke Enrico und Dusan

      MaboSlotcarRacing wrote:

      Ich kann meine Begeisterung nur hinzufügen. Das Auto kann endlich seine volle Leistung entfachen
      dem ist nichts hinzu zufügen - Spitzenklasse was ihr da macht [res] {10}
      Gruß
      Ingo

      Ja , ich spiele noch mit kleinen Autos :werde:
    • Guten Abend an alle....

      Heute mal wieder ein kleines Update.
      Die erste Testphase neigt sich dem Ende zu.
      Die neue Firmware erlaubt jetzt die Programmierung der FahrzeugID per CU oder Regler und die Auswahl der Motorkurven per CU.
      Mit der RedBox ist die ID Programmierung etwas zickig.
      Ursache ist schon gefunden und liegt daran das die RedBox für die Regler 4-6 die Taste immer als gedrückt mitschickt. Das Problem werde ich demnächst beseitigen.

      Zum einfachen flashen der Firmware hab ich einen "Spezialstecker " gebaut. Geht perfekt und am Decoder selbst muss nichts verändert werden.


      photo_2019-05-16_23-48-15.jpg

      Der Stecker wird einfach leicht verklemmt nach dem einstecken.

      photo_2019-05-16_23-48-08.jpg

      Später mehr....

      Gruß
      Enrico

      The post was edited 1 time, last by ElCheffe: Rechtschreibung..... ().

    • Moin....

      Langsam wird es Zeit für die Testphase 2!


      !! Wir suchen Testfahrer für den Dauertest!!




      Benötigt werden:

      1. ein Auto mit D143 Decoder

      2. Programmieradapter, z.B. USBASP oder Arduino UNO

      3. Software "Flash143plus"

      4. Spaß am Basteln und Experimentieren und der Wunsch nach mehr Möglichkeiten mit dem D143 Decoder.


      Woher bekommt ihr die Dinge:

      zu 1: Ein Auto mit D143 Decoder sollte jeder haben der im Maßstab 1:43 Digital fährt.

      zu 2: kann man in einschlägigen Onlineshops bestelle. Ich empfehle den USBASP V2, den man für 2-3 Euro bekommt.
      Ein paar von den USBASP´s kann ich mit schon fertigem "Nadelstecker" ( siehe Bild Oben ) anbieten.

      zu 3: "Flash143plus" ist ein Programm von mir, läuft unter Windows und bringt auch die Treiber für den USBASP und "avrdude" ( Flashsoftware für AVR Chips) mit.
      Außerdem kann man damit die Motorkurve bearbeiten, speichern und verteilen.

      zu 4: hat man oder hat man nicht.... :D


      Was kann die neue Firmware?



      Alles was der D143 kann, zusätzlich:

      + 100% Motorleistung

      + 5 frei konfigurierbare Motorkurven die per CU ausgewählt werden können oder, für RedBox Nutzer, per Flash143plus aktiviert werden.

      + Ghostcarmodus

      + ... noch gibt es freien Speicherplatz auf dem Chip um Ideen umzusetzen ...



      Bei Interesse oder Fragen bitte hier melden oder PN an mich.

      Grüße
      Enrico

    • Hallo Harald,

      Wenn man ein zusätzliche "Lichtplatine" mit Transistoren oder FET´s im Auto einbaut wäre noch etwas möglich. Zwei Pins sind frei. Einer davon liegt auch am ISP Steckplatz und könnt dort leicht Abgegriffen werden.

      Um LED´s direkt an zulöten reicht die Spannungsstabilisierung nicht aus.
      Wenn man sich die Werte der Bauelemente auf dem Decoder ansieht kann man davon ausgehen das nur max. 20mA zu Verfügung stehen.
      Die IR-LED wird durch den Vorwiderstand auch schon auf 10mA begrenzt.

      Getestet haben wir schon eine einzelne F1 Blink-LED. Aber auch die sollte nur 5mA verbrauchen.
      Müsste man einfach mal Ausprobieren was da auf Dauer passiert.

      Gruß
      Enrico
    • Moin an alle Interessierten,

      einen Punkt muss ich noch zu den zusätzlichen ergänzen.
      Ein Blinklicht fürs Heck der F1 Fahrzeugen wird es auch geben.
      Eine bebilderte Anleitung wo und wie es angeschlossen wird, folgt noch.

      Interessiert ein Testfahrer für den Dauertest zu werden ? Einfach melden ;)
      Gruß, Dusan [tschuess]

      NEU! ! ! Die Eifelpiste NEU! ! !
    • Die Schaltung ist einfach...

      Ein Transistor mit Basiswiderstand und dann die LED´s mit passendem Vorwiderstand für die Bahnspannung.

      Könnte man auf Lochraster aufbauen und unter das Dach kleben. Drei Kabel dazu, je eines an Masse, BahnPlus und den Ausgangspin am ISP.

      Fertig.
    • Hallo!

      Der nächste Schritt ist geschafft!

      Dusan und ich haben uns in den letzten Tagen mit dem Auslesen der Motorkurven aus dem Decoder EEProm beschäfftigt.
      Das funktioniert jetzt genau so wie wir uns das Gedacht haben.

      flash_kurven.PNG
      Die EEprom Werte werden angezeigt und Regler- und Kurvennummer können sofort mitprogrammiert werden.


      Man kann jetzt Motorkurven entwerfen und ins Auto übertragen, Testfahrten machen, die Kurven zurück lesen, anpassen und wieder ins Auto übertragen.
      Wenn alles so ist wie es sein soll, kann man sein Werk in der Datenbank speichern und z.B. in andere Autos übertragen.

      Jetzt fehlt nur noch das Quick Flash Menu.
      Damit kann man, wie der Name schon sagt, mit wenigen Klicks die 143er Decoder umflashen.

      Bei der Decoder-Software steht jetzt noch der Testlauf des F1-Blinklichts an.
      Funktionsumfang: 3 verschiedene Blinkfrequenzen, Bremslichtfunktion, Schaltbar An/Aus

      Gruß
      Enrico