Hallo Zusammen, Nachdem ich die Hardwareseite nunmehr verstanden habe, mache ich mich jetzt an die Programmierung meines 230V Dimmers. Dazu habe ich ein paar grundsätzliche Fragen: Die Nulldurchgangserkennung liefert mir am Controller für jede Halbwelle einen Interrupt. Dieser Interrupt kommt alle 20ms (50Hz Halbwelle). Der Interrupt startet einen 8Bit-Timer, der jedesmal von 0-255 hochzählt.Bei einem Systemtakt von 8Mhz (8Mio Takte pro Sekunde), benötigt der controller für das Zählen 0,032ms. Oder anders gesagt, es wird in 1 Sekunde 31.250 mal bis 255 gezählt. Bei jedem Überlauf wird ein Zähler bis 255 erhöht über den den ich dann die Zündzeiten des Triacs und damit meine Helligkeitswerte steuer. Für die Aufgabe, den Zähler zu erhöhen, benötigt der controller dann also (0,032ms *256) 8,192ms. Wie passt das denn mit den 20ms des Interrupts zusammen ? Bin da gerade etwas hilflos. Danke schon einmal im Voraus Tom
Tom schrieb: > Dieser Interrupt kommt alle 20ms (50Hz Halbwelle). Du hast 100 Nulldurchgänge pro Sekunde. Zeichne dir das einfach mal auf... > .Bei einem Systemtakt von 8Mhz (8Mio Takte pro Sekunde), benötigt der > controller für das Zählen 0,032ms. Mach doch einfach einen Vorteiler rein, damit der nicht so brachial schnell hochzählt.
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Mach doch einfach einen Vorteiler rein, damit der nicht so brachial > schnell hochzählt. Aber auch dann bin ich doch viel zu schnell vor der nächsten Halbwelle fertig. Ist das nicht ein Problem ?
Tom schrieb: > Lothar M. schrieb: >> Mach doch einfach einen Vorteiler rein, damit der nicht so brachial >> schnell hochzählt. > > Aber auch dann bin ich doch viel zu schnell vor der nächsten Halbwelle > fertig. Ist das nicht ein Problem ? Da du uns nicht verraten hast, mit welchem uC du arbeitest können wir auch keine genauen Tipps geben. Viele Atmel-Chips (gerade die Atmega-Reihe) hat auch einen 16-Bit Timer. Ansonsten kannst du einfach in der Interrupt-Routine des Overflows eine Variable hochzählen lassen. Schon hast du QUASI einen 16 Bit Timer. Du weißt, dass er XXX ms braucht, für einen Overflow. Dann kannst du ihn YYY Mal in einen Overflow laufen lassen und erst dann etwas veranlassen.
Tom schrieb: > Aber auch dann bin ich doch viel zu schnell vor der nächsten Halbwelle > fertig. Ist das nicht ein Problem ? Ja, dann musst du halt noch langsamer zählen. So langsam eben, dass du nicht "zu schnell fertig" wirst. Ist das ein Problem? Nein, das ist nur eine kleine Denkblockade. Du musst doch einfach nur dafür sorgen, dass dein Zähler die 10ms druchzählen kann und du z.B. 3ms von 5ms und 5ms von 8ms unterscheiden kannst. Wenn du das kannst, dann kannst du auch zum /passenden Zeitpunkt/ den Strom einschalten... Ein Tipp: es muss nicht immer alles genau auf 99 oder 255 aufgehen. Denn der uC ist ein Rechner. Er kann tadellos irgendwelche "krummen" Werte passend zurechtrechnen. BTW, ich würde es übrigens eher so machen: 1. Interrupt vom Nulldurchgang --> Timer wird mit Verzögerungszeit geladen --> Timer wird gestartet 2. Interrupt vom Timer --> Strom wird eingeschaltet Dann musst du nur den "gewünschten "Helligkeitswert" in die passende "Verzögerungszeit" umrechen und fertig. Und wie gesagt: rechnen kann der µC gut...
:
Bearbeitet durch Moderator
Tom schrieb: > Die Nulldurchgangserkennung liefert mir am Controller für jede Halbwelle > einen Interrupt. Wirklich ? Hast du Störungen in der Netzspannung bedacht (bzw. filtert die deine Schaltung die aus ?) Je nach Oberwellenanteil können aus 100 Nulldurchgängeh pro Sekunde auch mal 1000 werden. Daher ist die Plausibilitätskontrolle das wichtigste, ´bessere Schaltung lassen digital eine PLL nahclaufen. Und es gibt kaum perfekt ohm'sche Lasten, also gibt es eine Phasenverschiebung zwischen Strom und Spannung. Ein exakt 5ms nach dem Spannugsnulldurchgang gezündeter TRIAC geht nicht exakt 5ms später wieder aus, sondern erst beim nächsten Stromnulldurchgang.
MaWin schrieb: > Wirklich ? Hast du Störungen in der Netzspannung bedacht (bzw. filtert > die deine Schaltung die aus ?) > Je nach Oberwellenanteil können aus 100 Nulldurchgängeh pro Sekunde auch > mal 1000 werden. > Daher ist die Plausibilitätskontrolle das wichtigste, ´bessere Schaltung > lassen digital eine PLL nahclaufen. Und es gibt kaum perfekt ohm'sche > Lasten, also gibt es eine Phasenverschiebung zwischen Strom und > Spannung. Ein exakt 5ms nach dem Spannugsnulldurchgang gezündeter TRIAC > geht nicht exakt 5ms später wieder aus, sondern erst beim nächsten > Stromnulldurchgang. Ich bin mir nicht sicher, ob das wirklich alles so wichtig für einen Dimmer ist, der lediglich ein paar Spots im heimischen Kino auf Knopfdruck heller und dunkler machen soll ? Aber auch damit werde ich mich vorher beschäftigen. Das fertige "Produkt" werde ich hier vorstellen und zur Diskussion stellen. Lothar M. schrieb: > BTW, ich würde es übrigens eher so machen: > 1. Interrupt vom Nulldurchgang > --> Timer wird mit Verzögerungszeit geladen warum die Verzögerung ?
Tom schrieb: > warum die Verzögerung ? Der Timer wird nicht mit Verzögerung geladen, sondern die Verzögerungszeit kommt in den Timer.
Etwas Lesenswertes über das Thema findet man hier; http://www.alfadex.com/2014/02/dimming-230v-ac-with-arduino-2/ und http://forum.arduino.cc/index.php?topic=132141.0 :-)
Spannungsteiler schrieb: > Etwas Lesenswertes über das Thema findet man hier; > und > :-) Na ja, nicht wirklich: In beiden Fällen MOC3020 bzw. MOC3021 für 230V Netze statt MOC5051 ist hochkriminell, ohne 250V~ VDR (der seierseits mit Thermosicherung geschützt werden soll) und Feinsicherung (gegen Kurzschlüsse durchbrennende Glühbirnen die den TRIAC töten würden) sind das höchstens Prinzipschaltungen, wie auch der Aufbau im Steckbrett "abenteuerlich" ist.
MaWin schrieb: > statt MOC5051 Du meinst vermutlich MOC3051-3053. 600V Typen sollten es auf jeden Fall sein. In meinem Tiny_Lighthouse Projekt benutze ich den Tiny 13 im Tiny15 Modus und teile die 1,6MHz Taktfrequenz per Vorteiler durch 64. Heraus kommt eine Rate von 97Hz und ist damit genau richtig.
:
Bearbeitet durch User
Matthias S. schrieb: > Du meinst vermutlich MOC3051-3053. Ja, Tippfehler. > 600V Typen sollten es auf jeden Fall sein. Richtig, weil ein 250V~ VDR ja auch erst auf 595V begrenzt.
Thomas E. schrieb: > Tom schrieb: >> warum die Verzögerung ? > Der Timer wird nicht mit Verzögerung geladen, sondern die > Verzögerungszeit kommt in den Timer. Der Timer sorgt auf irgendeine Art und Weise dafür, dass eine bestimmte Zeit gewartet wird. Nach Ablauf dieser Verzögerungsziet löst er einen Interrupt aus. Tom schrieb: > warum die Verzögerung ? Die Verzögerung sorgt dafür, das der erste Teil der Halbwelle abgeshcnitten wird. Wenn die Verzögerung 10ms ist, dann ist die Lampe dunkel. Wenn die Verzögerung 0ms ist, dann leuchtet die Lampe mit maximaler Leistung... MaWin schrieb: > Na ja, nicht wirklich: In beiden Fällen MOC3020 bzw. MOC3021 für 230V > Netze statt MOC5051 ist hochkriminell Warum denn? Schlimmstenfalls leuchtet die Lampe irgendwann dauernd...
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Du musst doch einfach nur dafür sorgen, dass dein Zähler die 10ms > druchzählen kann Das würde ich doch hinbekommen, wenn ich bei meinem 8bit Timer, einer Frequenz von 8Mhz, und einem prescale von 1.024 jeweils nur von 177-255 zählen lassen , oder ? (100Hz , 10ms)
Tom schrieb: > Das würde ich doch hinbekommen, wenn ich bei meinem 8bit Timer, einer > Frequenz von 8Mhz, und einem prescale von 1.024 jeweils nur von 177-255 > zählen lassen , oder ? (100Hz , 10ms) Abgesehen vom Grenzfall "sofort einschalten" (wo man den Timer gar nicht laden, sondern sofort den Thristor sofort zünden muss) stimmen deine Überlegungen: ein Wert von 255 läuft sofort über und schaltet bei nächster Gelegenheit den Strom ein. Ein Wert von 178 schaltet erst kurz vor dem nächsten Nulldurchgang den Strom ein. > lassen , oder ? (100Hz , 10ms) Bitte nicht Plenken. Das gibt so hässliche Umbrüche auf dem Handy...
Tom schrieb: > Das würde ich doch hinbekommen, wenn ich bei meinem 8bit Timer, einer > Frequenz von 8Mhz, und einem prescale von 1.024 jeweils nur von 177-255 > zählen lassen , oder ? (100Hz , 10ms) Dann hast du einen Timer, der alle 10ms einen Interrupt auslöst. Das nützt dir aber gar nichts. Du brauchst eine Funktion, die mit Hilfe des Timers deine Lampen nach einer einstellbaren Verzögerungszeit einschaltet. Diese Zeit liegt zwischen 0 und 10ms. Was hast du für einen Controller? Da solltest du nicht länger ein Geheimnis draus machen, wenn du heute noch damit klarkommen möchtest.
Lothar M. schrieb: > Das gibt so hässliche Umbrüche auf dem Handy... Du meinst, der Mensch soll sich dumm geschriebenen Computerprogrammen unterordnen ?
Thomas E. schrieb: > Dann hast du einen Timer, der alle 10ms einen Interrupt auslöst Ja genau, dass wollte ich auch. Jetzt geht es weiter. Thomas E. schrieb: > Was hast du für einen Controller? Controller ist ein Mega8.
Hallo, meiner Erfahrung nach ist es besser im Stromnulldurchgang die Last einschalten, aber ich muss auch eine Trafowechsel-Spannung in Reihe mit einem MP Kondensator vor dem Brückengleichrichter einschalten. Da tritt das eben so auf, seitdem sind die Störungen in der Schaltung weg ! Bernd
Tom schrieb: > Ja genau, dass wollte ich auch. Jetzt geht es weiter. Ja, aber was willst du damit? 10ms liefert dir auch die Nulldurchgangserkennung. Sogar noch präziser als der Controller mit seinem RC-Oszillator. Tom schrieb: > Controller ist ein Mega8. Und du verwendest natürlich Timer 0. Womit sind denn Timer 1 und 2 beschäftigt?
MaWin schrieb: > Du meinst, der Mensch soll sich dumm geschriebenen Computerprogrammen > unterordnen ? Das Problem ist nicht das "dumme" Computerprogramm... Es ist eben einfach so festgelegt, dass in der deutschen Sprache kein Leerzeichen zwischen Satzende und Interpunktion ist. Mit einem solchen Satz käme jedes dumme Computerprogramm tadellos zurecht ! Ein Interpunktionszeichen hat m.E. für sich keine eigene Zeile verdient ! Thomas E. schrieb: > Dann hast du einen Timer, der alle 10ms einen Interrupt auslöst. Das > nützt dir aber gar nichts. Du brauchst eine Funktion, die mit Hilfe des > Timers deine Lampen nach einer einstellbaren Verzögerungszeit > einschaltet. Diese Zeit liegt zwischen 0 und 10ms. Ich meinte ja, dass abhängig von diesem Zählerwert der Interrupt sofort, nach z.B. 0,1ms, oder auch nach 2,5ms, oder nach 7,3ms oder nach 9,9ms kommt und dann den Strom einschaltet. Damit wäre dann die Phase entsprechend "angeschnitten" und die Leistung einstellbar.
Lothar M. schrieb: > Es ist eben einfach so festgelegt, dass in der deutschen Sprache kein > Leerzeichen zwischen Satzende und Interpunktion ist. Welche engstirnige Weltsicht, typisch Programmierer (kennen nur 1% der Welt, glauben aber alles zu wissen). Andere Sprachen sehen das anders. Und manche deutschsprechende auch. http://www.bb3regio.com/Interpunktion_F_ponctuation_D.php
Lothar M. schrieb: > Ich meinte ja, dass abhängig von diesem Zählerwert der Interrupt sofort, > nach z.B. 0,1ms, oder auch nach 2,5ms, oder nach 7,3ms oder nach 9,9ms > kommt und dann den Strom einschaltet. Damit wäre dann die Phase > entsprechend "angeschnitten" und die Leistung einstellbar. Daß du weißt, wie man das macht, ist klar. Ich habe allerdings das Gefühl, daß unser TO noch einen Denkknoten zu lösen hat. MaWin schrieb: > Welche engstirnige Weltsicht, typisch Programmierer (kennen nur 1% der > Welt, glauben aber alles zu wissen). Andere Sprachen sehen das anders. > Und manche deutschsprechende auch. Es gibt auch Leute, die das lesen müssen. Das ist einfach eine Frage der Höflichkeit. Außerdem heißt es 'Welch engstirnige...' und was sind deutschsprechende Sprachen?
:
Bearbeitet durch User
MaWin schrieb: > Andere Sprachen sehen das anders. Mag sein. Andere Länder schreiben sogar mit vollkommen anderen Schriftzeichen in ungewohnte Richtungen. Aber auch in diesen Ländern gibt es Regeln, wie dort mit Leerzeichen umzugehen ist. Ein paar davon hast du ja freundlicherweise verlinkt. MaWin schrieb: > Andere Sprachen sehen das anders. Ich toleriere ohne jegliches Murren ein "ich habe das Licht eingeschalten" von einem Österreicher... ;-)
Thomas E. schrieb: > Es gibt auch Leute, die das lesen müssen. Du meinst, Franzosen haben eine andere Schrift, und haben daher weniger Abstand zwischen Text und Fragezeichen/Ausrufungszeichen ? Ja, hatten sie mal, in den deutschen Bleilettern war das Fragezeichen mit mehr A-Width versehen. Aber seit Computern verwenden wir alle dieselben Schriften, und in denen hat das Fagezeichzeneben kaum einen Abstand zu Text, passend für spanische Schrift. Nur Dumme haben nicht begriffen, daß historische Gepflogenheiten, in Deutschland kein Leerzeichen zwischen Text und diese Satzzeichen zu setzen und in Frankreich sehr wohl (aber nicht bei Punkt und Komma) etwas mit unterschiedlichen Bleilettern im Drucksatz zu tun hatten. Heute, wo alle einen einheitlichen Zeichensatz verwenden, sieht es einfach Scheisse aus und ist schlecht lesbar, wenn Fragezeichen und Ausrufungszeichen direkt hinter dem letztenBuchstanben stehen. Aber Computerdeppen haben eben kein Auge, sondern kennen nur veraltete Regeln. Nein, nicht mal die kennen sie, denn vor Satzzeichen auf eine neue Zeile umzubrechen ohne das Wort mitzunehmen ist immer falsch. Die Programmierer versuchen einfach jede Ausrede um ihre grenzenlose Faulheit zu kaschieren.
MaWin schrieb: > Heute, wo alle einen einheitlichen Zeichensatz verwenden, sieht es > einfach Scheisse aus und ist schlecht lesbar, wenn Fragezeichen und > Ausrufungszeichen direkt hinter dem letztenBuchstanben stehen. Reg dich ab, sonst kriegst du noch einen Herzinfarkt. Nach deinem Rundumschlag gegen die Computerdeppen, kann ich dir nur sagen, daß, wenn deine Augen so sehen, wie deine Wurstfinger, die ja nun mal hin und wieder zwei nebeneinanderliegende Tasten drücken (Buchstanben), schreiben, du es vielleicht einmal mit einer Brille versuchen solltest. Denn bei der Bewertung, ob etwas gut oder schlecht aussieht, gehen die Meinungen doch häufig auseinander und die Scheiße liegt genauso häufig einfach im Auge des Betrachters.
:
Bearbeitet durch User
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.