Uno durch ?C ersetzt: Probleme mit DmxSimple

Hallo, seit einiger Zeit bastel ich an einer Lichtsteuerung für mein Zimmer. Dafür habe ich Led-Streifen angebracht, die ich über einen DMX Controller versorge. Außerdem habe ich einen DMX "Topf". So einen typischen Spot von Thomann. Bisher hatte ich alles mit einem Uno gesteuert und einem 75176 auf einem Breadboard. Um dem ganzen ein bisschen den provisorischen Anschein zu nehmen (und weil ich meinen Arduino für was anderes brauchen kann ;) ) hab ich mir mehrere Atmega128p-pu gekauft und mit einem Duemilanove den Bootloader gebrannt. Das hat soweit ich das beurteilen einwandfrei geklappt. Zumindest sind bisher alle Programme auf diesen Controllern (mit entsprechendem 16MHz Quartz und 22pF) gelaufen. Außerdem habe ich eine Platine (Lochraster) bestückt mit den Einzelteilen (also Controller, 75178, usw.). Jetzt mein eigentliches Problem: Das Programm läuft problemlos, solange nur die Led Stripes angeschlossen sind. Schließe ich das DMX Kabel (!) an, landet der Atmega in einer Art "Reset-Schleife". Die Led an Pin 13 blinkt jedenfalls alle paar Sekunden auf. Dieselbe Schaltung an demselben Kabel funktioniert auf einem Breadboard nach wie vor. Und die Led Streifen arbeiten auch einwandfrei. Es kommt mir vor, als hätte der Atmel eine Art Überlast durch anschließen des Kabels... Wenn ich den Spot über ein nur 10cm langes Kabel anschließe, leuchtet der Spot auch nicht, aber es gibt keinen Reset. Ich bin absolut ratlos, was das sein kann... Würde mich über jede Antwort freuen :)

Achja noch was: Der einzige Unterschied zwischen meinem Arduino und meiner kleinen Schaltung ist, dass der Atmega sich nur als Duemilanove programmieren lässt (Habe ja auch den entsprechenden Bootloader drauf gemacht). Der Arduino ist ein Uno.

LG Christoph

P.S.: Über den RX und TX Pin lasse ich mir die aktuellen Werte auf den Seriellen Monitor ausgeben. Sobald das DMX Kabel angeschlossen wird, kommen nur noch wilde Zeichen an... Und ja, es reicht nur das Kabel (5m) anzustecken. Das habe ich natprlich schon durchgemessen und nichts gefunden...

Wo hast Du den 75178 am ATmega angeschlossen? Hast Du den Pullupwiderstand an die RESET Leitung angeschlossen? Kannst Du uns Schaltplan, Fotos und Sketch geben? Grüße Uwe

Hallo,
der 75176 ist an Pin 3 angeschlossen. Die restliche Beschaltung ist so wie hier beschrieben: http://www.bastelgarage.de/dmxbox.html
Den Pullup Widerstand habe ich tatsächlich nicht, da ich keine 10k Widerstände da hatte. Aber ich habe den entsprechenden Pin mit dem Arduino Uno verbunden. Von dem hole ich mir auch die 5V Versorgung. Aber den Controller des Uno habe ich natürlich rausgenommen.
Sketch sieht so aus:

#include <DmxSimple.h>

void setup() {
  
  DmxSimple.usePin(3);
  Serial.begin(9600);

  DmxSimple.maxChannel(5);
}

void loop() {
  int brightness;
  int ch1;
  int ch2;
  DmxSimple.write(1,0);
  DmxSimple.write(5,0);
  for (ch1=2; ch1 <= 4; ch1++){
    ch2=ch1+1;
    if (ch2==5){
      ch2=2;}
      for (brightness = 0; brightness <= 255; brightness++) {
    
        DmxSimple.write(ch2, brightness);
        DmxSimple.write(ch1, 255-brightness);
        Serial.println(brightness);
        delay(300);
      }
      DmxSimple.write(ch1,0);
  }

}

LG Christoph

Hm, wie versorgst du das Ganze mit Strom? IC's mögen eine stabile Spannungsversorgung ;) Nimm für deinen Aufbau ein 5V Netzteil (USB Lader, oder etwas in der Art) und spendiere dem ATMEL und dem 75176 eine 100nF Keramikscheibe unmittelbar an den Stromversorgungspins. Wo du vom Netzteil auf die Lochrasterplatine gehst, kommt noch ein kleiner Elko (z.B. 47µF) hin. Wie sieht es dann aus?

Wenn du schon den ATMEL extern aufbauest, warum siehst du dann nicht gleich einen 2x3 oder 2x5 Pfostenstecker oder Stiftleiste als ISP-Header vor und programmierst ihn darüber? 8) Außer, du benötigst die Serielle Schnittstelle ohnehin noch.

Gruß Gerald

Hallo Gerald,

Die Stromversorgung läuft über USB von einem “leeren” (ohne Chip) Uno. Dass das ein Problem ist, habe ich auch schon gemerkt, als die Schaltung plötzlich einen Reset machte (nur mit den Led Streifen, was sonst problemlos ging). Durch Zufall habe ich dann festgestellt, dass der Reset immer dann passierte, wenn kurz zuvor jemand in der Wohnung das Licht geschalten hatte. Ich wohne in einer WG im Plattenbau und unsere Lichtschalter schalten über Relais, was auch in meinen Lautsprechern hörbar ist. Ein Kumpel hat mir dann erklärt, dass die Plattenbauten irgendwie nicht vernünftig geerdet sind oder so?

Insofern ist deine Erklärung schon logisch, aber warum funktioniert das Ganze dann auf dem Breadboard?

Ich hänge mal noch zwei Fotos von meiner Platine an. Ich weiß, dass ich das nicht besonders schön gelötet habe… Aber ich hab alles mehrfach durchgemessen und es passt soweit. An den Gedanken, das Ganze nochmal zu machen, habe ich mich schon gewöhnt, aber vorher will ich rausfinden, was das Problem war. Nicht dass ich noch so ein Ding rumliegen habe, das nicht geht :wink: Was sind denn die typischen Probleme, weswegen der Arduino von selbst einen Reset macht? Im Internet habe ich keine vernünftige Zusammenstellung von Gründen finden können.

LG Christoph und vielen Dank euch beiden schon mal!

Hallo Christoph,

ganz blöde Frage, was macht die 1A Diode da? Verpolungsschutz? Ist zwar nützlich, reduziert aber die Versorgungsspannung - und auch den Störabstand zwischen low und high. Verpolungsschutz ohne Spannungsabfall geht z.B. mit einer passenden Sicherung und einer dicken normal in Sperrichtung geschalteten Paralleldiode. Bei Falschpolung schließt die Diode dann Ub kurz und die Sicherung ist (hoffentlich) schneller als die kräftigere Diode ]:D Das was du als Knacken im Radio hörtst, sind hochfrequente Störungen. Jedes Kabel wirkt wie eine Antenne. Je länger deine Kabel sind, desdo besser ist der "Empfang" - sprich die Störungen werden stärker. Der Arduino ist kompakt genug, das er über kurze Leitungsführungen wenig "Angriffsfläche" (Antenne) bietet. Außerdem sitzen auf der Originalplatine Abblock-C's direkt neben dem Chip. Wenn du aber von der Platine zu deinem Aufbau wegverkabelst, sitzen die Kondensatoren elektrisch gesehen weeeeit weg ;) Und deine kleinen Fehler summieren sich: - lange Leitungen - geringer Störspannungsabstand durch verringerte Ub - keine Abblock-C's - in der Luft hängender Reset Pin (Antenne) lege den Reset-Pin mit einem Widerstand (so kurz wie möglich) gegen +Ub, genauer Widerstandswert ist unkritisch. Keine "Spannungsabfall"diode, Abblockkondensatoren. Das ist simpel und kostet Pfennige, spart aber viel Ärger mit exotischen Fehlern. Früher, wo Logik "hartverdrahtet" wurde und Platinen aus einer Handvoll IC's bestanden, war sowas "Gesetz"! Freie IC Pins wurden auf +Ub, Masse oder zu anderen Eingängen parallel geschaltet. Jedes IC bekam einen KerKo direkt am Chip über die Spannungsversorgung. Ca. an jedem 10. IC kam ein kleiner Elko dazu. Die Lötstellen sind doch noch halbwegs ok. Es ist gut geflossen und nicht gekleckst. Und als Flussmittel nix säurehaltiges, wie Lötwasser. Ich nehme Koplophonium, welches ich in Spiritus, oder Isopropanol auflöse. Ich habe eine Braunglasflasche am Arbeitsplatz, wo je nach Füllstand immer mal ein paar Krümel Kolo, oder ein Schluck Iso reinwandern.

Gruß Gerald[/list][/list][/list][/list]

Hallo Gerald,
ich wollte eigentlich nur schnell den Schaltplan neu zeichnen letzte Woche. Es hat etwas länger gedauert, weil ich es dann auch gleich richtig mit Eagle machen wollte 8) Is ja gar nicht so schwer XD

Es wäre echt cool, wenn du oder natürlich auch alle anderen mal drüber schauen könntet. Speziell bei den Werten am Festspannungsregler bin ich mir gar nicht sicher. Und auch sonst weiß ich nicht, ob ich überall Kondensatoren hab, wo du meintest.

Danke schon mal!
LG Christoph

Hallo Christoph,

"klaue" doch ein bisschen beim Arduino :) http://arduino.cc/de/uploads/Main/Arduino_Uno_Rev3-schematic.pdf Der hat jeweils einen 100n KerKo über Ub und Aref Den PowerOn Reset kannst du ebenfalls übernehmen mit 100n gegen Masse und R an +Ub Dem Spannungsregler würde ich am Ausgang 47-100µ spendieren und am Eingang mindestens ebensoviel. Bei langen Kabeln am Eingang (Klinkenbuchse) eher mehr, wenn ein "nacktes" Schaltnetzteil direkt daneben verbaut wird, ist der Eingangselko entbehrlich, da im Netzteil bereits ein Elko steckt. Bei einem konventionellen Steckernetzteil mit Trafo drin, verzehnfache die Kapazität (470µ)