Hallo Leute, ich habe eine Frage. Ich möchte gerne ein DMX512-Signal (evtl. bekannt aus der Veranstaltungstechnik) über einen µC empfangen und sinnvoll weiterverarbeiten. Das DMX512 ist ein Serieller Datenbus. Es werden 512 Pakete zu je 8 Bit übertragen. Natürlich mit sämtlichen Kontroll-Bits, die so benötigt werden. Ziel dieses Vorhabens ist es für mich Schrittmotoren und LED´s über DMX512 anzusteuern und auf diesem Wege fundierte Erfahrungen in der µC-Technik zu sammeln. Bis auf einige Grundlagen in Assembler und C/C++ bin ich auf diesem Gebiet ziemlich jungfräulich unterwegs. Ich brauche also auch Tipps über benötigte Hardware und dergleichen. Es wäre super, wenn sich jemand mit dieser Materie auskennt und mir auf die Sprünge helfen kann. Bitte nur sachliche Antworten. Gruß Tom
Moin! Hennes Seiten sind schon ein guter Tip für die Hardware. Du brauchst als Basis Hardware einen µC (z.B. Mega8) und einen RS485 Bustreiber (z.B. SN75176) und einen 8MHz Quarz. Die beschaltest du geeignet und schreibst die Software. (faulerweise mache ich das in C, Henne in Assembler.) Machst du sie auch in C kann ich dir gerne helfen.
kleiner tip: guck mal im datenblat die RS232-schnittstelle an - zumindest bei den PICs kannste noch kontroll-bits (o.ä.) anfügen, dann muste nur noch den tackt anpassen, einen interrupt festlegen für den reset, pakete zählen und fertig. ok, wird schon noch was arbeit kosten, aber ist sicher einfacher als zu pollen ...falls das der AVR diese zusätzlichen bits unterstützt.
Hi, meine Strategie (in C) UART Parameter einstellen. Interrupt-Handler für Empfang schreiben. Hier drin eine StateMachine aufbauen. Erster Status wird erreicht mit Daten=0 und Framing Error. Kommt im reset, weil der länger ist als die normale Packetlänge, d.h. Stoppbit kommt nicht. Zweiter Status: Daten=0 und kein Framing Error (für Startcode). Dann in Status 3: Daten empfangen, Kanäle mitzählen! Bei einigen DMX-Sendern werden nicht 512 Kanäle übertragen oder die Pause zwischen zwei Bytes oder Frames sind sehr lang. Deswegen der Einsprung bei reset mit Framing Error. Habe ich inzwischen lange auf AVRs und MC16 laufen. Geht gut und schnell genug in C. Interrupt Handler MUSS die höchste Priorität (Falls einstellbar) haben. Viele Grüße Ralph
Genau ich mache es nicht anders als Ralph. du musst im Prinzip nur auf einen FE warten und dann mitzählen.
Wäre es möglich, den Sourcecode in C mal hier zu veröffentlichen? Ich hatte früher schon mal etwas in C versucht, allerdings mit einer anderen Strategie, die leider nicht geklappt hat. Deshalb würde mich ein funktionierender Sourcecode in C mal interessieren... Greetz kmt
einloggen geht nicht - egal Such mal nach DMX. Ich habe eben das hier gefunden - ist zwar nicht C aber sollte trotzdem umsetzbar sein. Brauchst ja nur den Chip brennen :-))
Ich bin leider mit BASCOM nicht so firm (obwohl die Syntax ja wirklich fast selbsterklärend ist), insofern bin ich nach wie vor sehr an einem Beispiel in C interessiert. Trotzdem aber vielen Dank für die Anregung! Greetz kmt
Hallo Leute, vielen Dank erstmal für eure Antworten. An Sven Müller: Ich wäre dir sehr verbunden, wenn du mir da helfen könntest. Würdest du dich bitte per email an mich wenden? Gruß Tom t.trojak@gmx.de
Wurde nicht bereits alles gesagt und bereits (ziemlich hübscher) C-Code gepostet? Woran hakelts denn?? BTW: Mein ASM-Code läuft @8MHz in <3µs durch (ich glaube es waren sogar ca. 1.6). Dies habe ich in C nie erreicht. C ist ungeschlagen für hübschen Code bei komplizierteren Abläufen (String handling, 2D-Engine, Temp.sensoren) und wenn es portabel sein muss. Wenn es einfach nur um brachialen Durchsatz bei Kleinkram (state machine) geht: Bitte mal kurz schauen, ob nicht ein asm-include interessanter ist. Noch deutlicher wird das bei PWM- oder BAM-Routinen. Ich möchte keinen Streit um C vs. ASM heraufbeschwören, nur: bitte verliert assembler nicht völlig aus den Augen - ich habe den Code nicht aus Masochismus verzapft ;-) BTW: Wir haben inzwischen eine neue C-Engine im paforum entwickelt, als es um einen (angeblichen) Bug in meinem Transceiver ging (war glaube ich in 'Selbstbau Technik'). Die Engine lief auf 9n1 und war äußerst elegant und noch eine Nummer sicherer in der BreakDetection... Viele Grüße, Hendrik (henne) Etwas versteh ich noch nicht: Es ging primär um LED-Controlling. Wieso ziehst Du nicht einfach mein fertiges *.hex, bügelst es auf den Transceiver und bist glücklich? Seit gut 2a wird der Code immer weiter verfeinert und sobald ich mal Mist baue, kriege ich 1Tag später ein Dutzend Protestmails. Dazu kann ich, wenn Du Probleme mit Ätzen etc. hast, die Platine für ein paar stellen. (Nur die source gibt es halt nicht - die alten Hasen hier können sich denken warum...) zum Stepper: In der Zeit, die Du bei der LED-Geschichte sparst, könntest Du mir bei den Steppern helfen: Ich habe einen 16bit 2Achsen-Code, den ich aber noch nicht wirklich perfekt finde (zwischen zwei Halbschritten macht die PWM-Engine einen kleinen Sprung, der mit Laserpointer auf Spiegel in 5m Entfernung sichtbar ist -> NERVT) und ich bräuchte auch noch eine zündene Idee zum Indexing der Position bei Einschalten... Eigentlich ist es mal wieder eine Frage von 'Ich erfinde das Rad neu, um mich selbst zu beweisen' vs. 'eine Hand wäscht die andere und gemeinsam kommen wir schneller zum Ziel' - Erfahrungsgemäß wird es wohl auf Ersteres hinauslaufen ;-)
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.