Datum: 15.09.2005 07:43
Ich habe mir einen funktionierenden DCC Decoder auf Basis des Tiny 15 gebastelt. Das ganze ist jedoch eingeschlafen, da ich das Layout für die Platine in SMD nicht so richtig klein gekriegt habe. Auf dem Prüfstand mit den Tiny 15 in DIL lief das ganze problemlos. Ich hoffe mein Code hilft für eure Projekte. Den Code für einen Encoder für Langsamfahrstellen oder Signalhalte werde ich auch noch einstellen. mfg DXM
Datum: 27.09.2005 15:05
DCC: National Model Railroad Association's Digital Command Control Standards and Recommended Practices. DCC is simply the best form of model railroad control available.
Datum: 08.10.2005 13:59
Hallo DXM Wie siehts bei der Hardware aus, ich habe vor da noch Lichtfunktion und weiteres einzubauen... Die F-Ausgänge ist klar, bei mehr mA Transistoren, aber wie siehts bei der Ansteuerung des Motors aus, könnte ich diesen gleichsetzen mit z.B. den Schaltplan von dem Lokdecoder LD-G5 von Tams? (mir geht es dabei um die Hardware) Gruß Patrick
Datum: 08.10.2005 20:10
Hier der einfache Schaltplan für Eagle 4.11. Der L272D kann 1000 mA, das leicht locker für Spur N. Für H0 oder größer müsste man nachrechnen. mfg dxm
Datum: 08.10.2005 20:31
Super, danke! Also 1000mA reichen auch für H0-Loks, H0-Lokdecoder haben meist auch nicht mehr mA. Bei älteren Loks vieleicht problematisch Gruß Patrick
Datum: 08.10.2005 21:13
Nochmal ich, welchen Wert haben die Widerstände R1 - R6 (R5 & R6 klar) Und welche Z-Diode ist eingebaut? und was soll da zwischen 4 und 6 sitzen (beim Elko) Danke im Vorraus Gruß Patrick
Datum: 09.10.2005 07:19
> welchen Wert haben die Widerstände R1 - R6 (R5 & R6 klar) R1 berechnet sich aus dem gewünschten Strom über die Z-Diode, der Z-Spannung (üblicherweise 5V als AVR-Betriebsspannung) und der Höhe der Digitalspannung. R2 sollte so bemessen sein, dass sie Eingangs-Schutzdioden des AVRs nicht überlastet werden. Es liegt schließlich die Digitalspannung an. R2 wird also recht hochohmig sein. R3 und R4 bilden einen Spannungsteiler zum Erzeugen der halben AVR-Spannung als Schaltschwelle für den L272. Da sie die Betriebsspannung des AVRs belasten, sollten sie recht hochohmig sein. Grenzen setzt der Eingangswiderstand des (Power-)OPVs. R5 und R6 ist ja klar, richtet sich nach Spannung zwischen AVR-Ausgang und Transistorbasis und dem Basisstrom für 5 bis 10-fache Übersteuerung des Transistors für sauberen Schaltbetrieb. Und natürlich nach der Belastbarkeit des Ausgangs des AVRs. Da der Basisstrom die AVR-Betriebsspannung belastet, muss er (als wechselnde Last) bei der Berechnung von R1 und der Z-Diode berücksichtigt werden. Mit etwas Grundwissen solltest du alle Widerstände berechnen bzw. schätzen können. Wenn nicht, dann solltest du dir vor dem Weitermachen dieses Grundwissen aneignen. Mit P=U*I und U=R*I, sowie etwas Englisch zum Lesen der Datenblätter solltest du vorerst zurechtkommen. > Und welche Z-Diode ist eingebaut? Da die Z-Diode zum Erzeugen der Betriebsspannung des AVRs dient, sollte ihr Wert der zulässigen Betriebsspannung entsprechen. Wenn ich mich recht erinnere, waren das 5V. Eine 5V1 dürfte also brauchbar sein. > und was soll da zwischen 4 und 6 sitzen (beim Elko) Das sind Pin 4 und 6 des Power-OPVs (L272), also dessen Stromversorgungspins. Denn ohne Stromversorgung kann der nunmal schlecht den Motor treiben. Diese Fragen hättest du dir auch selbst beantworten können, wenn du die Schaltung analysiert hättest und dabei die Datenblätter der ICs herangezogen hättest. Übrigens würde ich jedem IC noch einen 100nF-Keramik-Chipkondensator spendieren, möglichst dicht an den Power-Pins. ...
Datum: 13.10.2005 18:40
Hallo Hannes! Danke für deine Antwort, also mit der Z-Diode, das hatte ich mir mit 5V1 gedacht, da die Versorgungsspannung des tinys ja meistens 5V beträgt, aber es hätte ja auch 3V sein (bei tiny15L). Die Beschaltung mit den beiden Pins 4 und 6 hatte ich mir allerdings noch nicht angeschaut, da ist das Nachfragen einfacher, die Elektronik ist mir gut vertraut, mir ist z.B. klar das der Widerstand zum "DCC-Eingang" sehr hochohmig sein muss, der Controller verkraftet da nicht unbedingt eine so hohe spannung. Jedoch wenn ich die exakten Daten haben kann ist es doch umso besser :-) Gruß Patrick
Datum: 14.10.2005 20:44
>Hier der einfache Schaltplan für Eagle 4.11.
Interessantes Projekt, könntest Du uns bitte den Schaltplan als jpg
oder als pdf zur Verfügung stellen, denn leider hat nicht jeder
Eagle 4.11.
Danke
Bernhard
Datum: 14.10.2005 21:07
>denn leider hat nicht jeder Eagle 4.11. aber jeder kann es sich kostenlos und ganz legal bei http://www.cadsoft.de/ in der jeweils aktuellsten Version herunterladen und damit sogar Platinenlayouts und Schaltpläne bearbeiten! Für die, die jedoch weder Windoof noch Linux als Betriebssystem verfügbar haben, habe ich den Schaltpan von maddax als JPEG beigefügt. Gruss, Klaus
Datum: 14.10.2005 22:16
@KLAUS Danke für die jpg-Datei und für den Link zum Download von eagle Gruß Bernhard
Datum: 25.10.2005 17:06
Hallo zusammen Mit Interesse habe ich diese Beiträge gelesen. Ich selber suche schon länger Code für einen DCC-Decoder (Weichen, Signale) auf Basis von Bascom-AVR. Hat hier jemand Erfahrung? Freundliche Grüsse Thomas Riesen
Datum: 25.10.2005 17:32
BASCOM-Sourcen für etwas so Timing-Kritisches ? Also wirklich alles, was ich bislang für DCC gesehen habe (auf Hardwareseite) war mit Microcontrollern (früher PIC, in letzter Zeit häufiger AVR) realisiert und in Maschinensprache geschrieben. Mit Ausnahme einer DCC-Zentrale, die sich der Pins der seriellen Schnittstelle bedient; die war soweit ich mich richtig erinnere in Visual-C geschrieben. Schau die mal die Seite http://www.avr-asm-tutorial.net/ an. Assembler ist wirklich nicht so kompliziert wie man anfangs denkt. Und der Source von maddax ist wirklich gut kommentiert. Wenn Du Dir zusätzliche die Docs der NMRA reinziehst (siehe http://www.dcc.info/standards_rps/index.html) ist es kein Hexenwerk. Vorteil für Dich: Du hast mit den Sourcen von maddax einen funktionierenden Code mit dem Du anfangen kannst; die gesamte Entwicklungsumgebung ist kostenlos (AVRstudio) und das "Programmiergerät" für die AVRs kannst Du mit Bauteilen aus der Grabbelkiste zusammenlöten und die AVRs anschließend mit PonyProg (wieder kostenlos) programmieren. So, ich hoffe ich habe genug Begeisterung rüberbringen können. Viel Erfolg!!! Und lass uns an Deinen Ergebnissen teilhaben. Gruss, Klaus
Datum: 25.10.2005 19:18
@Klaus: Völlig richtig... <provokation> Aber BASCOM vermittelt den Eindruck, dass man das auch realisieren kann, ohne sich mit der Materie vertraut machen zu müssen. Denn BASIC ist ja "kinderleicht", das macht man doch mit links und vierzig Fieber... </provokation> Ich programmiere in ASM, das ist einfacher und übersichtlicher als BASCOM. ...
Datum: 29.11.2005 20:31
It is possible to make a 'DCC decoder' with basic (look at the qoutes). I was looking for a basicsource for quite a time. Until I decided NOT to use the real NMRA protocol, but to focus on the function itself: trying to have a train (h0 in my case)controlled by on onboard micro. I now use the ATTINY13 (onboard PWM, onboard osc) and try to time the micro as good as it gets. In my case, between 14 and 18 cycles (depending on OSC) means a startBIT After receving the startBIT, between 6 and 9 cycles means a '1', and between 10 and 14 means '0'. All other values mean error and start over. Even in the real NMRA protocol it is advisable to tranmit the same info for about 5 times in a row. The same with my protocol. Try to experiment.....
Datum: 01.12.2005 07:56
Hi pic16x84 I´m not quite understanding what you are trying to say. On one hand you write that a DCC-Decoder (conformant to NMRA) is possible with BASIC (which I personally doubt) on the other hand you write that you "focus on the function itself", what ever that means and "your protocol", which sounds to me as being NOT DCC (according to NMRA specs). However perhaps I just didn´t get the point you tried to make. Would you please clarify? Kind regards, Klaus
Datum: 08.12.2005 17:22
NMRA is a protocol to "Digitally Command Control" a train. So the function is NOT the NMRA protocol but (Digitally) Control a Train. The NMRA protocol has strict 'rules' about timing, bits and bytes. It is very difficult if not impossible to control a train with the NMRA protocol in BASIC! What is the problem if you don't focus on the strict timing of the NMRA protocol.Use your own protocol ! Think of items like asking for attention from a train. In my case I transmit a '1' for lets say 10 milliseconds. After that I transmit an address package. In this package a '1' is only ' 5' milliseconds instead of 10. a '0' is about 2 milliseconds. My decoder detects the upflank, waits till the downflank and sees if its 10, 5 or 2 milliseconds. When it has nothing to do (the PWM does its job independantly) it waits untill a new 10 milliseconds startpulse. After the startpulse it reads 16 bits. 8 for the adress and 8 for the function (speed and lights). It decodes the 2-bytes, refreshes the PWM (if the address byte equals the trainnumber) and...waits for the 10 millisecond startbit. Yes, if I miss a pulse, the train ERRORS.. So what, I transmit the same info about 5 times in a row. So I can transmit less packages than the NMRA protocol. So what, I don't have 256 trains to control at once.... Think what you want (function: control a train) and think HOW you want to do it (protocol). If you persist using the NMRA protocol...think of ASM and NOT BASIC. Hope this helps.
Datum: 26.01.2006 23:27
Hallo, Wenns jetzt darum geht mehr Ausgänge zu haben muss man ja auf einen anderen Atmel umspringen, ich dachte da an den ATtiny2313, da beide aus der Tiny-Reihe sind hoffe ich das das anpassen nicht allzu schwer ist, kann mir einer von euch sagen, wenn er sich den Code mal so durchschaut ob es da Stellen gibt die bei dem tiny2313 eine andere Bezeichung haben bzw. angepasst werden muss? Und wie siehts um den internen Takt aus? Danke Patrick
Datum: 27.01.2006 06:57
Hallo Patrick, ohne mir den Code jetzt im Detail angeschaut zu haben fallen mir da folgende Punkte ein: Sprungvektoren: Tiny 15 hat 9 Vektoren der Tiny2313 hat 19 !!! Hier solltest DU in jedem Fall DummyVektoren eintragen. Ja, wer sauber programmiert brauch die nicht, aber sicher ist sicher, tut ja keinem weh. Watchdog: hat der tiny15 nicht Takt: Hier musst Du sicherlich Hand anlegen. Ist aber kein Hexenwerk. Ansonsten fallen mir auf Anhieb keine weiteren Punkte ein. Daß die beiden Tinys nicht Pin-kompatibel sind muss ich wohl nicht erwähnen :-) Viel Erfolg und veröffentlich doch die geänderten Sourcen ruhig hier im Forum sodaß wir alle was davon haben. Dank im voraus. Gruß Klaus
Datum: 27.01.2006 21:22
Danke, naja ob der Tiny15 Watchdog hat oder nicht ist ja egal ;-) Brauch ich ja dann ebenfalls nicht wenn ich auf tiny2313 wechsle... Mit den Vektoren muss ich mir mal anschauen. gruß Patrick
Datum: 25.02.2006 19:06
Hallo Patrik, möchte meine Eigenentwicklung im Fahrbereich auch auf DCC umstellen.Da meine Selbstbaudecoder mit dem AT90S2313 aufgebaut sind und mit dem eingebauten UART arbeiten, wäre Hardwaremässig ein Umbau möglich. Mein Hauptproblem ist der Takt, da der At90s2313 mit 8 Mhz getaktet wird und ich maddax seinen Code nicht so hinbekomme das er mit 8 Mhz die Empfangszeiten einhält. Da ich mit RVK Basic arbeite und mich mit Assembler nicht auskenne hätte es mich interessiert ob dein Vorhaben gelang. Mit freundlichen Grüssen Georg
Datum: 26.02.2006 11:07
Hallo, hat auch jemand einen Schaltplan für einen DCC-Decoder mit Lastregelung? Gruß Mario
Datum: 26.02.2006 11:19
Habe ich glaube mal auf der Webseite von TAMS gesehen. ...
Datum: 26.02.2006 15:42
Ich habe mich bis jetzt noch nicht drum gekümmert, zu viele andere Sachen sind noch zu tun, aber in absehbarer Zeit will ich mich da dann auch mal ran setzen und probieren, im Keller liegt auch noch ein neuer Brenner der noch fertig gelötet werden muss... Gruß Patrick
Datum: 26.02.2006 20:04
@Klaus "Sprungvektoren: Tiny 15 hat 9 Vektoren der Tiny2313 hat 19 !!! Hier solltest DU in jedem Fall DummyVektoren eintragen. Ja, wer sauber programmiert brauch die nicht, aber sicher ist sicher, tut ja keinem weh." Ganz im Gegenteil ! Wenn man dort RETIs einträgt, verschleiert man Programmierfehler nur und sucht dann tagelang an der falschen Stelle. Auch ein Sprung zu 0x0000 verwirrt mehr, als das er hilft. Wenn man schon an nicht benutzten Interrupts was einträgt, dann einen Sprung zu einer Routine, die den Fehler deutlich signalisiert, z.B. eine LED blinken läßt. Alles andere ist witzlos. Peter
Datum: 26.02.2006 21:40
Oh, da oben sollte eigendlich nur einmal meine Antwort stehen, warum da 3mal das gleich steht, fragt nicht mich, ist nicht beabsichtigt, bitte 2 löschen... Gruß Patrick
Datum: 26.02.2006 21:51
> ist nicht beabsichtigt... Schuldhaft verursachte Verkehrsunfälle sind auch nicht beabsichtigt. > bitte 2 löschen... Wer sollte das tun?? Die derzeit zwei aktiven Moderatoren haben genug Anderes und Wichtigeres zu tun. Du wirst wohl damit leben müssen, dass jeder Leser sieht, dass du gleich dreimal geantwortet hast... ;-) ...
Datum: 02.03.2006 21:06
Ihr habt ja allo so tolle Ideen. Hat aber nun einer von euch einen lauffähigen Code für den AVR2313 (Bascom oder Assembler)? Zur Zeit möchte ich wirklich nur einfach Schaltbefehle decodieren..
Datum: 11.04.2006 08:48
Funktioniert dieser DCC Decoder Code wirklich. Funktionen F1 F2 gehen, aber die PWM spinnt. Habt Ihr auch die Erfahrung gemacht.
Datum: 11.04.2006 08:58
Welchen Code hast du denn nun implementiert? Einen Bascom-Code? Wenn ja, welchen, und wie würde ich da rankommen?
Datum: 11.04.2006 09:26
> Einen Bascom-Code?
Solch zeitkritische Dinge (DCC-Decoder) lassen sich eigentlich nur
vernünftig mit Interrupt-Programmierung realisieren. Da BASCOM wohl bei
jedem Interrupt alle Register sichert und wiederherstellt, wird das
einfach zu langsam. Mit BASCOM wirst du also keinen vernünftig
arbeitenden DCC-Decoder realisieren können, es sei denn, der
BASCOM-Hersteller löst das in ASM und bietet das als weiteren Baustein
(Bibliothek) für den "Baukasten" BASCOM an.
Ich würde ja versuchen, ein ASM-Programm dafür zu schreiben, aber mir
fehlt das Equipment. Ich habe seit Jahrzehnten keine Modellbahn mehr
und daher auch keine DCC-Zentrale. Und ich glaube kaum, dass du mir
eine DCC-Zentrale sponsern willt, damit ich Programme für einige
verschiedene Decoder schreiben kann/soll. - Oder?
...
Datum: 11.04.2006 21:20
Hallo zusammen, welche Probleme macht denn der PWM. Wenn die Schaltfunktionen funktionieren kann nicht mehr viel sein. Beim Test mit dem DDW-Server ist mir aufgefallen daß er bei Full-Speed auf einmal Zero sendet. Ist wohl ein Überlauf im DDW-Server selber. Da ich aber selber keinen C-Compiler zum Korrigieren habe, habe ich mich darum nicht gekümmert. Stelle doch mal die Belegung deiner EEProm-Variablen ein. Vieleicht ist nur ein Parameter oder die Oszillatorkalibrierung krumm. mfg dxm
Datum: 12.04.2006 10:22
Hallo Die EEPROM - Variablen sind ok. Die PWM "schwingt". Das hört sich blöd an, ist aber so. Ich habe mit dem Oszi nachgemessen. Sie geht erst auf den eingestellten Wert (mit den eingestellten Verzögerungszeiten)und dann "rapide" wieder auf WERT NULL. Danach geht das ganze wieder von Vorne los.
Datum: 14.04.2006 09:15
Also ich finde nichts. Der PWM wird nur durch den Interupt gesteuert:
TIM1_OVF: ;Beschleunigungs/Verzögerungszähler
;bei Timer 1 = 1,6 MHz wird der
;Interupt wid demnach alle 6250 Hz ausgelöst
;die kürzeste Rampen-Zeit ist 0,12 Sec für den Sprung von 0 auf 252
bei IncVAL = 0
;die längste Rampen-Zeit ist 31,3 sec für den Sprung von 0 auf 252
bei IncVAL = 255
ldi TEMPI, 3 ; Verzögerungsfaktor
inc IncCNT1 ; erhöhe Zähler
cp IncCNT1, TEMPI
brne OVF1
clr IncCNT1 ; lösche Beschleunigungszähler
inc IncCNT
cp ISTSpeed, SOLLSpeed; vergleiche IST <> SOLL
breq Gleich ; wenn Wert nicht gleich
brsh DECSpeed ; wenn Wert größer gleich
brlo INCSpeed ; wenn Wert kleiner
Gleich: clr IncCNT ; lösche Beschleunigungszähler
clr IncCNT1 ; lösche Beschleunigungszähler
reti ; Rücksprung und Interupts wieder einschalten
INCSpeed: cp IncCNT, IncVAL ; vergleiche Beschleunigungszähler
brne OVF1 ; Springe wenn kleiner
clr IncCNT ; lösche Beschleunigungszähler
clr IncCNT1 ; lösche Beschleunigungszähler
inc ISTSpeed ; erhöhe Speed
rjmp PWMOut ; weiter
DECSpeed: cp IncCNT, DECVAL ; vergleiche Beschleunigungszähler
brne OVF1 ; Springe wenn kleiner
clr IncCNT ; lösche Beschleunigungszähler
clr IncCNT1 ; lösche Beschleunigungszähler
dec ISTSpeed ; verringere Speed
PWMOut: tst ISTSpeed ; ist Speed 0
brne OUT ; dann 0 ansonsten Out
ldi TEMPI,0b01000101 ; Timer/Counter1 PWM vom
out TCCR1,TEMPI ; Ausgang trennen
cbi PortB, PB0 ; alles auf Null
reti ; Rücksprung und Interupts wieder
einschalten
OUT: sbrs DCCReg, DIR ; wenn Fahrtrichtung vorwärts
rjmp REV ; überspringe setzen Ausgang rückwärts
cbi PORTB, PB0 ; setze Ausgang für vorwärts
out OCR1A, ISTSpeed ; Wert für Speed nach Timer 1 Compare
ldi TEMPI,0b01100101 ; Timer/Counter1 PWM
out TCCR1,TEMPI ; Ausgang direkt
reti ; Rücksprung und Interupts wieder einschalten
REV: sbi PORTB, PB0 ; setze Ausgang für rückwärts
out OCR1A, ISTSpeed ; Wert für Speed nach Timer 1 Compare
ldi TEMPI,0b01110101 ; Timer/Counter1 PWM
out TCCR1,TEMPI ; Ausgang indirekt
OVF1: reti ; Rücksprung und Interupts wieder
einschalten
Vieleicht ist der Stützkondensator C2 zu klein gewählt und der Tiny15
geht in Reset. Dann ist für 20ms im Programmiermodus tote Hose an den
Ausgängen. Danach läuft er wieder im DCC Modus hoch.
mfg dxm
Datum: 14.04.2006 10:47
Warum sicherst du eigentlich in tim1_ovf das SREG nicht? In den anderen ISRs machst du es doch. Bei der umfangreichen Mainloop ist das auch unbedingt erforderlich. Ob da noch weitere Fehller sind, weiß ich nicht, so tief bin ich jetzt auf die Schnelle nicht vorgedrungen. ...
Datum: 17.06.2006 07:38
Hallo, habe die Schaltung aufgebaut und mit AVR-Studio 4.12 Build 460 uebersetzt. Getestet mit Roco Lokmaus 2 und Booster, CV-Programmierung ok., Adresse laesst sich aendern. F1 und F2 ok, Motor ruckt auch beim Programmieren. Fahren --- ohne Funktion --- (Die 5V macht ein Regler 78L05, Stuetzkondensatoren genug vorhanden.) mfg franz eff
Datum: 24.06.2006 07:16
Hallo Leute,
ich habe gestern noch mal den Prüfstand hervorgekramt und einen Fehler
im Mehrzugbetrieb gefunden. Tauscht doch mal die paar Zeilen aus:
SpeedCalc:;Speed Berechnung 14 und 28 Fahrstufen
mov TEMP2, ByteB ; Daten sichern
tst ISTSpeed ; schreibe Richtung nur
brne Speed28 ; wenn Speed 0
Das Register für die Fahrstufen wird sonst falsch gesichert.
Wenns funzt bitte melden, vielleicht mach ich dann doch noch mit mehr
Funktionen und anderen Controllern weiter.
mfg dxm
Datum: 25.06.2006 19:44
Auf jeden Fall wäre Interesse an mehr Ausgängen (F0, Licht, F3, F4...) sowie an anderen Atmels (ATtiny2313...) meinerseits da. Das umbauen des Codes auf den 2313er, was ich ja machen wollte, habe ich bis jetzt noch nicht in Angriff genommen, mir fehlt die Zeit momentan... Gruß Patrick
Datum: 09.07.2006 20:19
Hallo Leute, hier habich noch mal eine Version die ganz gut aussieht. Das SREG wird jetzt auch gesichert. Der Betrieb mit kurzer oder langer Adresse läuft jetzt über CV29. Die Hersteller CVs 7 und 8 sind schreibgeschützt. Dafür habe ich jetzt keinen Platz mehr für Consistbetrieb, braucht bei den neuen Steuergeräten eh keiner mehr. Die Fahrtrichtungsumkehr ist nun nur mehr bei komplettem Stillstand möglich. Feedback von Euch würde mich freuen. Weiß jemand einen Weg einen Tiny15 zu programmieren ohne ihn einzulöten ? mfg dxm
Datum: 18.07.2006 22:34
Hallo, habe heute die neue Version kompiliert. Es gibt immer noch den Error weil "Out" in Zeile 262 kein Label sein darf. Das war wieder schnell geaendert. Die Default-Adresse im eep setze ich uebrigens nach NMRA immer auf 3. Nach dem Flashen habe ich den Tiny schnell fliegend in meine vorbereitete Lok eingesetzt. Anbei mal ein Bild: BTTB BR81 Baujahr 1979. Alle Teile fliegend am Rahmen, der Tiny sitzt spaeter dann mal vorne auf dem Motor. Lok aufs Gleis, Lokmaus eingestoepselt und Lok ruckte kurz. Die an angeschlosse LED reagierte bei F-Tasten nicht. Durch Rechtsdrehen am Regler fing die LED plötzlich an heller zu werden. Beim Linksdrehen ging sie dann langsam wieder aus und beim Ueberschreiten von Null leuchtete sie ploetzlich hell. Motor ohne Funktion. Dann habe ich an der Lokmaus 14 Fahrstufen eingestellt. Jetzt fuhr die Lok plötzlich los, liess sich aber nicht regeln. Dafuer funktioniert jetzt Funktion tadellos, ich kann Licht ein und ausschalten. Zum Schluss habe ich versucht die Lokadresse zu programmieren, es ging nicht, uebrigens das ging mit der Vorgaengerversion noch. Habe den alten EEPROM-Inhalt noch gesichert. Bei Conrad im Business-Bereich gibt es uebrigens Adapter wo die SO-IC eingespannt werden, leider nicht ganz billig...
Datum: 19.07.2006 10:22
Mal ne ganz doofe Frage: DCC und das Motorola/Märklin Protokoll sind nicht zufällig kompatibel? Hat jemenad einen Signal/Weichendekoder auf Atmel Basis für das Motorola /Märklin Protokoll, um ein bischen Code zu spicken, möchte nicht gerne das Rad neu erfinden. Danke Remo
Datum: 19.07.2006 11:02
Sind nicht kompatibel. Märklin Infos (zumindest brauchbare Links) findest du vermutlich bei Herrn König (mal suchen). ...
Datum: 19.07.2006 16:41
Ich habe den Code ebenfalls kompiliert, das Out zu Outx geschrieben damit es geht und da gerade Zeit da war mal den Code an den tiny2313 angepasst jedoch fehlt mir jetzt noch das anpassen der Zeiten (87µs usw...) da mein tiny2313 mit 4Mhz laufen möchte... Die Testschaltung ist schon aufgebaut. Gruß Patrick
Datum: 28.07.2006 05:54
Unter http://www.opendcc.de haben ich einen Zubehördecoder für DCC inkl. Source veröffentlicht. ATtiny2313, geschrieben in C (mit dem gcc (winavr)). Gruß Wolfgang
Datum: 31.07.2006 19:52
Moin Moin, So ich habe nun auch mal, neben den Anpassen auf den tiny2313 (welchen ich warscheinlich doch nicht nehme), den Code auf einen tiny15 gebrannt und meine Roco-Lokmaus raus geholt und aufgebaut, nach ein ganz klein wenig Zeitanpassung beim Timer laufen auf jeden Fall schon mal die Funktionstasten F1 & 2 problemlos. Den OP habe ich noch nicht angeschlossen, da alles in DIL aufgebaut ist und ich keine Lust hatte den OP in SMD da dran zu löten... Anbei ein Bild, da sieht man noch die Testschaltung mit dem eigendlich eingesetzen tiny2313, um den tiny15 zu testen habe ich mal schnell einen Sockel im Sockel im Sockel gebaut ;-). Die Tage werde ich mal die Ansteuerung des Motors anschauen... Gruß Patrick
Datum: 12.09.2006 19:03
In maddaxs DCC Encoder steckten noch ein paar Fehler drin (u.a. Timer0 nur einmal initialisiert, Timing falsch). Ich habe mir die Freiheit genommen diese zu korrigieren. Getestet wurde der Code mit Hilfe eines Oszilloskops und einem DCC Protokoll-Dekoder und scheint soweit zu funktionieren. Have fun, manu
Datum: 14.09.2006 08:28
Manu, Ich bin neugierig geworden. Hast du vielleicht einen schaltplan für die encoder? Frysk
Datum: 14.09.2006 19:55
...also einen Schaltplan gibt es dazu eigentlich nicht, bzw. steht alles in der ASM-Datei drin. An Pin5 (PB0) kommt ein geeigneter Booster hin. Diese lassen sich einfach selber bauen (Halbbrücke/Vollbrücke) - Anleitungen/Anregungen findet man z.B. bei www.opendcc.de (links unter Booster) oder in den Anleitungen von Tams Elektronik. manu Tiny15 Anschlussbelegung: ;RESET PB5 = 1 8 = VCC ; PB4 = 2 7 = PB2 ; PB3 = 3 6 = PB1 ; GND = 4 5 = PB0 DCC Ausgang
Datum: 14.09.2006 20:25
Manu, Danke, es ist Mir klar. Ich habe zu hause einen Lenz Booster. Kan ich den encoder auch direkt ansliesen an diesen Booster? Frysk
Datum: 18.09.2006 16:03
ist hier ja ein klasse Forum. Als typischer Nachbauer von DCC Decoder auf Atmelbasis verfolge ich mit interresse diese Thread hier. Bin seit längerem auf der Suche nach einem reinem Funktionsdecoder so mit 8-12 Ausgängen, die man über F1-F12 Ein- und Auschalten kann und bei dem man die Ausgänge beliebig dimmen kann. Wenn dann noch eine Blinkfunktion intergriert wäre, wäre es natürlich megaklasse. Hat jemand sich mal an so etwas rangemacht? Gruß aus Hamburg Thorsten
Datum: 26.10.2006 09:24
Hello DXM, i was surprised by your simple, attiny15 based DCC loco decoder. Yesterday i tried to program tiny15 by PonyProg and make wiring with L2722 and my old BTTB loco. The first test was unsuccessfull - reset pin of ATTINY on your scheme is "in the air", also PWM outputs to power amplifier doesn't work with pull-ups turned off in your source. After changing this line ldi TEMP1,0b01000011 ;Interupt auf Rise-Flanke, Pull-Up Disabble to ldi TEMP1,0b00000011 ;Interupt auf Rise-Flanke, Pull-Up Enable was all OK, but PWM frequency for motor in my old BTTB loco was too high. Please, which lines i must change to reduce PWM frequency to ~100Hz ? Please, can yuo also tell me, in which state (working, development, not working, working with problems...) is source code on Beitrag "DCC Decoder" ? Have you newer one for testing? Thank you for your answer and perfect work on decoder best regards Zdenek
Datum: 30.10.2006 20:38
Hello Zdenek,
try this for your decoder for run parameter:
ldi TEMP1,0b01001011 ; 0 0 0 0 Timer/Counter1 is stopped.
out TCCR1,TEMP 1 ; 0 0 0 1 CK*16 (=PCK)
; 0 0 1 0 CK*8 (=PCK/2)
; 0 0 1 1 CK*4 (=PCK/4)
; 0 1 0 0 CK*2 (=PCK/8)
; 0 1 0 1 CK für PWM mit 6125 Hz
; 0 1 1 0 CK/2
; 0 1 1 1 CK/4
; 1 0 0 0 CK/8
; 1 0 0 1 CK/16
; 1 0 1 0 CK/32
; 1 0 1 1 CK/64 für PWM mit 97,6 Hz
; 1 1 0 0 CK/128
; 1 1 0 1 CK/256
; 1 1 1 0 CK/512
; 1 1 1 1 CK/1024
Caution at TIM1_OVF:
delete!! in TEMPS,SREG ; SREG sichern
ldi TEMPI, 3 ; Verzögerungsfaktor
inc IncCNT1 ; erhöhe Zähler
cp IncCNT1, TEMPI
brne OVF1
clr IncCNT1 ; lösche Beschleunigungszähler
inc IncCNT
because the ramp for speed inc and dec will get to slow.
good luck
dxm
Datum: 31.10.2006 17:53
Hallo, ich habe mit der Schaltung folgendes Problem. In Richtung 'rückwärts' funktioniert der angeschlossene Motor ganz wunderbar, in Richtung 'vorwärts' nicht, bzw. nur bei Vollgas. Die PWM-Signale aus dem Tiny and den OV sehen für beide Richtungen gleich aus. Bei 'vorwärts' 'fehlen' am Ausgang des OV jedoch 2 von 3 Pulsen. ungefähr so +--+ +--+ +--+ +--+ I I__I I__I I__I I rückwärts OK +--+ +--+ I I______________I I vorwärts, nix passiert Hat jemand eine Idee, woran das liegen kann ? Danke
Datum: 01.11.2006 09:29
Hello YJN, if you use higher PWM frequency for older motor driven by L272, typically PWM>200 Hz, you can get this results: in one direction goes motor OK, but in the reverse direction has motor very low torque. This i have tested with many other DIY decoders. You can solve this problem by decreasing PWM freq about to 100 Hz. Zdenek P.S.: Thanks to DXM for updated code, i'll try it today
Datum: 01.11.2006 21:47
Hello Zdenek, many thanks for your reply, reducing the PWM frequency get's it all to work ! Could you or anybody else in this forum please explain the 'electr(on)ically' background for this behaviour to me ? I have searched the whole internet to find informations about this, but i could not find anything explaining this ... thx yjn
Datum: 16.11.2006 21:11
Moin, @Maddax Wie hast du den OSCCAL-Wert raus gekriegt, durch messen oder versuchen? Hast du zufällig auch einen (Cirka)Wert für 4Mhz? Gruß Patrick
Datum: 20.11.2006 07:39
Hallo, wer lesen kann hats leichter, siehe Datenblatt. OSCCAL steht beim Tiny 15 im Auslieferungszustand auf Adresse 0 im EEprom. Einfach auslesen ;) mfg dxm
Datum: 20.11.2006 09:50
>> Hast du zufällig auch einen (Cirka)Wert für 4Mhz? > OSCCAL steht beim Tiny 15 im Auslieferungszustand auf Adresse 0 im > EEprom. Muss ich das jetzt verstehen? Der Tiny15 wird doch auf 1,6 MHz calibriert und nicht auf 4 MHz. Desweiteren hat jedes Exemplar der calibrierbaren AVRs seine eigenen Calibrationsbytes (unverlierbar) im Signature-Space gespeichert. Die muss man halt mittels ISP-Programm auslesen und ins AVR-Programm übertragen. Ich nutze dazu immer das L-Byte der letzten Flash-Zelle, da schreibt ATMEL nämlich auch das Calibrationsbyte hin. Im Übrigen empfehle ich mal die Appnotes, da ist eine dabei, die sich mit der Calibration des internen RC-Oszillators befasst. ...
Datum: 02.01.2007 01:01
Hallo, ersteinmal allen ein gesundes und erfolgreiches 2007! im anhang mal meine version von maddax T15 code. er ist auf meine ansprüche verkürzt und erweitert. der t15 hat nunmal nur 1k progspeicher. weggelassen habe ich lange add., consist, 128 fahrstufen, genaue Vmax begrenzung und F3 Rangiergang. dazugekommen sind Vmax begrenzung in 12,5% schritten von 50% bis 100% das reicht in der praxis vollkommen aus, fahrtrichtungsabhängige beleuchtung pwm gedimmt, motor pwmfreq. veränderbar, merken der letzten geschwindigkeit im eeprom (damit riskiert man auf dauer die zellen, hilft aber ungemein bei schlechtem schienenkontakt). die platine ist einseitig 16x40 mm, kann man gut nachbauen, wem sie zu groß ist der kann sie in der mitte durchbrechen und umklappen. ist einfacher als zweiseitig mit dukos. gruß willi
Datum: 02.01.2007 20:56
Hallo, nach sowas habe ich schon lange gesucht. Vor allem, weil der Decoder so klein aufzubauen ist. Mit dem DCC-Format kenne ich mich nicht wirklich aus, daher: kann jemand evtl. die Software für einen Funktionsdecoder umstricken? Ein paar reine Schaltausgänge würden genügen... Danke & Gruße, Sebastian
Datum: 02.01.2007 23:09
Hallo Sebastian, schau Dir mal das asm vom meinem T15 DCC Dek an, da ist alles für einen Funktionsdecoder schon bei, ist beim T15 nur rauskommentiert. Es sind halt keine Ports mehr frei, ich benutze das Grundgerüst aber auch für einen s1200 bzw s2313 mit 8mhz Keramikschwinnger oder jetzt auch mit einem T2313 und dann reicht das auch für die Funktionsausgänge. Ich hänge Dir mal mein File für einen s2313 an. Das habe ich für einen Triebwagen geschrieben, bei F1 wird vorm anfahren ein klingeldreiton abgespielt und für diese zeit auch ein pin für klingelleuchte gesetzt, F2 F3 F4 schalten einfach nur portpins. Ansonsten ist der Funktionsumfang genauso wie beim T15 dek. Viele Grüße Willi
Datum: 06.01.2007 15:39
Hallo Willi, danke für die Antwort - ich hatte den Code in der Tat nur grob überflogen schäm Ich werde das mal ausprobieren - außerdem möchte ich´s noch auf den Tiny13 portieren. Soweit ich gesehen habe, ist der fehlende zweite Timer der einzige größere Unterschied. Ohne Motor-PWM sollte man aber gut ohne auskommen. Nochmals Danke & Grüße, Sebastian
Datum: 06.01.2007 22:19
Hallo Sebastian, das sollte kein Problem sein, Du mußt es nur auf die 4,8 bzw 9,6MHz beim T13 anpassen, der T15 läuft nur mit 1,6 MHz. Ich habe auch eine Version für einen s1200, der hat auch nur einen Timer, da mache ich die Motor-PWM genauso wie die für Licht. Das ist halt nicht so genau, macht sich aber in der Praxis überhaupt nicht bemerbar. Meine Files von oben haben übrigens noch einen Fehler. Ich habe vergessen das Reverse bit beim Lichtsetzen mit zu beachten( Motorrichtung wir gedreht, Lichtausgänge bleibenaber in der alten Richtung), muß ich noch änderen. Gruß Willi
Datum: 06.01.2007 22:45
Nocheinmal kurz, Licht bei rev_betrieb ist doch i.o. gruß willi
Datum: 15.01.2007 13:13
Hallo Willi, ich habe den Code jetzt auf AVR-GCC und den Tiny13 portiert. Als Takt habe ich 9,6MHz mit Divisor 8 genommen, also 1,2 MHz. Die Konstanten habe ich entsprechend angepaßt - funktioniert einwandfrei. Den Programmiermodus konnte ich noch nicht testen - habe nur eine Roco Lokmaus 1 zum Test (die IntelliBox braucht mein Vater selbst ;-)), aber ich sehe da keine Probleme (lediglich beim ACK, aber das ist wohl nicht unbedingt nötig, hab´s erstmal auskommentiert). Für eine Licht-PWM könnte man evtl. auf 4,8 MHz umsteigen, dann sollte die Genauigkeit etwas größer sein. Aber für Licht ist es allemal ausreichend. Die Platine ist 17x31mm "groß", für die Ausgangstreiber habe ich Transistorstufen vorgesehen. 500mA (BC817) sollten für Funktionsausgänge reichen (mein Vater will seine Wagen damit beleuchten, die vorgesehene LED-Beleuchtung braucht 20mA) Schaltplan ist der weiter oben gepostete, allerdings habe ich der Z-Dioden-Regulierung einen Transistor verpaßt, dann wird der Widerstand nicht so belastet - 0,5W sind für SMD ein bißchen fett. Noch ein Tipp für Deinen Code: das Einlesen der Bytes könnte man wohl etwas eleganter per Subroutine lösen - 6x derselbe Codeblock ist nicht so effizient. Außerdem solltest Du bei den Portpins und Timing-Werten mit Konstanten arbeiten, das erleichtert ggfls. das Portieren auf andere Controller (Konstanten in .h-Datei ändern und fertig). Bei der Hardware halte ich einen 7805 für Overkill, nimmt viel Platz und so gut geregelt braucht man´s nicht. Hat jemand der Beteiligten etwas dagegen, wenn ich den modifizierten Schaltplan/Code auf meiner Webseite (www.voitzsch.net) veröffentliche? Selbstredend ohne kommerziellen Hintergrund und mit Quellenangabe - alles was dort liegt, ist GPL.
Datum: 15.01.2007 14:14
Hallo Sebastian, -Licht PWM ist absolut unkritisch, ich habe mir der software schon mal eine LED bei 1% zum Test! ohne Vorwiderstand betrieben. Die lebt immer noch. -als Treiber verwende ich MOS SN7002 (ist auch im SOT-23)(ich habe die Teile halt), das geht dann direkt ohne Vorwiderstand, die machen ca 200mA Dauerstrom und 700mA Impulsstrom mit, das reicht aus. Wenn ich alle Ausgänge benötige nehme ich auch schon mal einen ULN2803 als SMD. Der braucht auch wenig Platz. -der 7805 ist übrigens ein SMD und braucht mit Sicherheit weniger Platz als eine z-Diode, ein Widerstand und ein BC ! Ich hatte auch Probleme mit der Abwärme bzw Leistung des Widerstand, wobei das noch aus meiner 1. Version mit einem S1200 und ext BrownOut stammt, hat sich aber bewährt, kostet 50 Cent und läßt sich einfach und Betriebssicher aufbauen. -mit dem Code hast Du recht, das geht effizienter, aber das stammt von maddax das habe ich auch nur übernommen. Der Code ist übrigens für einen Tiny15 (bzw bei mir auch noch auf alten 90S1200) ohne SRAM ausgelegt. Das bedeutet bei Vorsicht mit verschachtelten Sprüngen und kein Push/Pop. -für meine Codeanteile gilt GPL mit Quellenangabe ist ok Gruß Willi
Datum: 15.01.2007 14:34
Hallo Willi, - die MOS SN7002 sind nett - leider bei Segor nur Bestellware; ebenso der 7805 im SOT-23. Woher beziehst Du sie? Das ist der Vorteil der Transistor-Variante - alles "Stangenware". Der 78L05 scheint mir zudem mit 1,80 (Segor) reichlich teuer. Z-Diode, Widerstand und BC bekommt man schon hingequetscht ;-) - Für die Ausgänge müßte man auch Schieberegister vorsehen können - aber es gibt wohl keine mit Schaltausgang. Mir langen die 4 Ausgänge aber vollkommen - wie gesagt, Wagenbeleuchtung. Da bräuchte es eigentlich nur 1 Ausgang... - Den fehlenden SRAM hatte ich nicht bedacht - hatte mich schon darüber gewundert, wieso im Code der Stackpointer nicht initialisiert wird (dachte, das geschieht wie beim AVR-GCC automatisch) Habe mal meinen Schaltplan/Platine/Code angehängt, vielleicht nützt es wem. Das funktioniert so übrigens nur mit dem 13er, der externe IRQ hängt auf Pin PB1 und nicht PB2. Grüße, Sebastian





