Forum: Mikrocontroller und Digitale Elektronik DCC decodieren


von Raimond (Gast)


Lesenswert?

Hallo erstmal,

ich versuche schon seit Tagen das DCC-Protokoll zu decodieren.
Auf der Seite "Gerards Homepage" (
http://bahn-in-haan.de/_decoder.html ) ist ja wirklich eine gute
Beschreibung (auch  dafür ein DICKES LOB) vorhanden.
Ich wollte mich nun auch mal mit dem DCC-Protokoll beschäftigen und
bekomme bald eine Krise. Ich gebe hiermit auch bekannt, das ich in
Punkto MC totaler Newbie bin und mit Assembler (noch) nicht´s am Hut
habe. Bin ebend Visual Basic vorbelastet, und versuche mich deshalb
auch mit BASCOM.
Hat das schon jemand geschafft (ausser der Autor der oben genannten
Seite)??? Mein Prg liefert leider nur Mist, wo ich denke, das es nicht
sein kann. Wenn Interesse besteht, stelle ich auch gerne meinen Code
(Versuch) ins Forum. Bitte aber darum, das die Experten sich mit dem
Gelächter zurückhalten.

Danke
Raimond

von ...HanneS... (Gast)


Lesenswert?

Hi Raimond...

Beim MC ist es wichtig, die Architektur zu verstehen. Nur so kannst du
alle Möglichkeiten nutzen. Eine Hochsprache wie BASCOM nimmt dir Vieles
ab, worum du dich dann nicht mehr kümmern brauchst. Das birgt aber auch
die Gefahr, dass du den MC (AVR?) nur halb kennst. Daher meine ich,
dass Assembler für den Anfänger besser geeignet ist. Denn Assembler
zwingt dich, das Datenblatt genau zu lesen und zu verstehen. Das damit
erlangte Wissen kannst du dann auch in einer Hochsprache gebrauchen.

Auch ich bin QBASIC und VB vorbelastet, habe mich aber für den Anfang
bewusst für Assembler entschieden.

Ich habe noch eine alte Version der genannten Decoder-Baubeschreibung
(leider nur auf Papier), die neue Version muss ich erstmal in Ruhe
lesen. Da ist der Algorithmus der Biterkennung gut beschrieben. Heute
würde ich aber statt des 2313 einen Tiny26 oder Mega8 einsetzen, die
haben Brown-Out-Detektor on Chip. Demnächst wird ja auch der Tiny2313
verfügbar sein, der auch über BOD verfügt.

...HanneS...

von leo9 (Gast)


Lesenswert?

Wenn Raimond ein Modellbahner ist der sich einen Decoder selber bauen
will, ist es doch in Ornung wenn er mit leicht anwendbaren tools
arbeitet.
Fürs wirklich seriöse Programmieren muss ich aber HanneS recht geben,
die Architektur und HW-nahen Funktionen des uP lernt man in Assembler
am schnellsten (wenn man mal die Einstiegshürden von Assembler
geschafft hat).

Aber nun zum Decoder: Ich habe das Protokoll jetzt nur überflogen, aber
Bitzeiten um die 100us entsprechen 9600Baud und die sollten auch in
Basic beherrschbar sein.

@Raimond: welchen uP willst du einsetzen (bzw. verwendest du derzeit)
und was soll dein uP steuern (nur Magnetartikel oder Motorsteuerung)?
Hast du auch eine email-adresse?

grüsse leo9

von Raimond (Gast)


Lesenswert?

Hallo

Ich habe hier einen 2313 und möchte damit später die Beleuchtung von
Häusern etc steuern, die damit z.B. zuffällig ein und aus geschaltet
werden. Es gibt bestimmt noch viele andere Ideen, die man umsetzen
kann. Bei mir happert es aber schon am DCC-Protokoll. Ich habe auch
schon einen Decoder von "Gerards Homepage" (
http://bahn-in-haan.de/_decoder.html ) nachgebaut und der funktioniert
auch.
Ich möchte aber schon gerne selber das DCC-Protokoll decodieren, da
einem dann bestimmt noch einige Sachen einfallen werden, die man dann
umsetzen kann.

Gruss
Raimond

von ...HanneS... (Gast)


Lesenswert?

Hallo...

@Leo9:
Da gebe ich dir völlig recht... Allerdings wenn Raimond keinen Einstieg
in die AVR-Technik sucht, dann kann er ja auch die Hexfiles von der
genannten Webseite benutzen, die müssten mit dem 2313 funktionieren.

Was die Einsteiger-Hürden von Assembler bzw. AVR-Studio betrifft, so
wird hier in diesem Forum sehr geholfen. Nun glaube ich allerdings
nicht, ob ein DCC-Decoder das ideale Erstlingswerk ist. Die
AVR-Geschichte (nicht nur Assembler) hat genügend Fallstricke, die man
erstmal erkennen muss. Ein Windows-Programmierer muss da erstmal
"Disziplin" lernen. Unter WIN kümmert es mich nicht, was ein Compiler
aus meinem Code macht, beim AVR schon. Und da ist man mit Assembler "am
dichtesten dran" (am ausführbaren Maschinencode)...

Nochmal zu DCC. Mit einer "Baudrate", wie bei Datenübertragung
üblich, wird das nicht so einfach, denn eine "0" ist nicht einfach
nur die doppelte Breite einer 1, sondern kann (asymmetrisch) bis zu
etwa 1ms lang werden (das ermöglicht den Betrieb einer Gleichstrom-Lok
auf dem Digitalgleis, man verlängert dazu nur die positiben oder nur
die negativen Anteile der Nullbits). Zur Bit-Erkennung ist also nur
wichtig, ob der Impuls kleiner als 84µs ("1") oder größer ("0")
ist. Naja, die Bits müssen dann gesammelt werden, zu Bytes organisiert
werden (Trennbits ausfiltern), Checksumme überprüft werden... Nach dem
Ermitteln der Adresse (Vorsicht, ein Teil davon wird invertiert
übertragen) wird dann entschieden, ob das Kommando ausgeführt wird oder
nicht (dann war es für einen anderen Decoder).

Dass ich etwas gegen BASCOM bin, hat nix mit BASCOM oder BASIC
allgemein zu tun, sondern mit der Tatsache, dass ich hier im Forum
immer wieder lese, dass Anfänger damit Probleme haben. Besonders, wenn
ihr Programmierstil (durch PC-Programmierung bedingt) extrem
resourcenverschwenderisch ist. Da werden unbekümmert Fließkommazahlen
oder Long verwendet (wo ein Byte reichen würde), ohne sich Gedanken
darüber zu machen, was der Controller damit zu tun hat. Da hat man noch
nicht begriffen, wie man eine LED an/aus schaltet, schimpft aber schon,
dass LCD und serielle Schnittstelle zum PC nicht klappt. Oder es wird
ein Zeitraster von 1µs verlangt, das auch noch extrem genau sein soll.
Und so weiter und so fort...
Deshalb rate ich dem Anfänger von BASCOM ab.

Bit- & Bytebruch...
...HanneS...

von ...HanneS... (Gast)


Lesenswert?

Hi...

Wieder mal zu langsam getippt, das kommt davon, wenn man zwischendurch
ans bimmelnde Telefon geht...

;-))

...HanneS...

von maddax (Gast)


Lesenswert?

Hi,

ich hab mir einen DCC Decoder auf Tiny 15 gebastelt. Bin aber über den
Probetrieb mit einem DIP noch nicht hinausgekommen. Die SMD Version ist
mir bis jetzt zu schwierig zum löten. Außerdem komme ich mit der Größe
an gekaufte Decoder nicht heran. Ich wollte das ganze nämlich für Spur
N. Den Code in Assembler finde ich gerade nicht, muß ich aber noch
irgendwo haben.

mfg

von max berger (Gast)


Lesenswert?

hallo,

ich möchte ebenfalls einen dcc-dekoder bauen. der umgang mit mc ist
nicht das problem (würde hierzu einen avr-mega8 verwenden und möchte
diesen in c programmieren). jedoch fehlt mir deine brauchbare
testumgebung.

- wo bekomme ich ein brauchbares steuersignal her?
- welche steuereinheiten sind zu empfehlen?
- ist eine steuerung über pc möglich?

weiters wäre eine steuerschaltung für den lokmotor interessant (robust
bei geringem platzbedarf). da "analoge" schaltungen nicht so meine
stärke sind, wäre ich sehr dankbar für ein paar tips.

lg max

von Manfred Richter (Gast)


Lesenswert?

Auf http://www.amhamberg.de gibt es die Source für einen DCC Decoder für
den AT90S2313 ;)

Grüsse,
Manfred

von Joe (Gast)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.