Hallo Leute, ich möchte ein solches Dimmerpack bauen: http://www.netzmarkt.de/thomann/artikel-168077.html?sn=ecc8c565f8b4fbff3f929b3bac618835 Ich sende mit einem AVR über ein Kabel DMX Signale und das Dimmerpack soll abhängig vom gesendeten Signal die Lampen dimmen. Folgendes soll möglich sein: - jede Steckdose soll einzeln einstellbare Adressen haben - es müssen min 300W geschaltet werden können Kenn jemand schaltungsbeispiele, in denen ein DMX Signal eine Helligkeitsstufe generiert >> Dimmer?
Schau mal hier nach: http://www.theaterzentrum.at/technix/development/dimmer/index_html Da und unter dem Stichwort DMX hier in der Forumsuche solltest Du fündig werden. Gruß Kai Markus
Hallo, die Seite enthält zwar genau das, was ich brauche, allerdings ist das Projekt so schlecht dokumentiert und erklärt, dass ich es nicht nachvollziehen kann und dadurch nicht verändern und nachbauen kann. Kannst du mir das erklären? 1. Wie wird gedimmt? 2. Welche Adressen haben die Strahler dann? 3. Kann man auch wirklich (in diesem Fall) 12 Strahler einzeln ansteuern?
Frage: Wie muss ich die Widerstands-, Spulen- und Kondensatorwerte ändern, wenn ich das TIC225M Triac benutze?
Danke, das baue ich nach! Ich finde aber diese Spulen (64µH 5A) bei Reichelt nicht! Kennt zufällig jemand die Bestellnummer?
@Michael Ist bestimmt ganz nett. Aber ausser der Startseite ist nichts zu sehen, wenn man den ganzen Multimediakram im Browser ausgeschaltet hat. Nicht gerade besucherfreundlich. :o(
Wieso siehst du dort nichts? Klick einfach auf die deutsche Flagge - dann siehst du doch die Homepage! Warum schaltest du den "Multimediakram" im Browser ab? Kann mir noch jemand meine letzte Frage (s.o.) beantworten?
Das Projekt hat noch niemand erwähnt, weil ich eine Lösung ohne PC entwickeln möchte und nicht eine Software - trotzdem nette Sache
Wenn ich das Projekt richtig verstanden habe, bezieht sich die PC-Anbindung nur auf den DMX-Sender, nicht auf den Empfänger. Wäre nicht der Semitone Diamond so etwas, was Du suchst?!? KMT
Moin, kann mir jemand Informationen über die Phasenanschnittsteuerung zur verfügung stellen?
"Wieso siehst du dort nichts? Klick einfach auf die deutsche Flagge" Habe ich gemacht, sehe trotzdem nichts weiter als: ------------------------------------------------------------ Es ist Vollbracht 23 09 2004 | 10:22 Die Neue Homepage ist nun Online... - Neues Design - Neuer Online Shop und noch einige andere Neuheiten werden folgen... MfG Webmaster ------------------------------------------------------------- Aber nirgends ein Link, den man antippen kann. Und ich habe nichts deaktiviert außer Flash. Wenn die Seite Flash-pflichtig wäre, müßte doch wenigstens die übliche Flash-Sauger-Anpflaumerei kommen (...get the plugin...). Peter
Doch, das Menü ist in Flash erstellt - aber mal eine Frage: Warum hast du Flash deaktiviert? Da kann doch nichts passieren!
Ich hab nur nen Analog-Anschluß und da dauert Flash ewig und man kann nicht navigieren (Bookmarks usw.) und muß meistens nervtötende und nicht abbrechbare Intros über sich ergehen lassen. Peter
Naja, meistens sehen die ja ganz nett aus! Aber egal - kennst du dich mit Phasenanschnittsteuerungen aus?
Ich möchte die ganze Funktionsweise einer Phasenanschnittsteuerung wissen, z.B. Bei wie viel "Abschnitt" sich welche Helligkeit ergibt, ob man das mit einer Sinusformel berechnet, wo man abschneidet, usw. - halt alles, was man wissen muss, damit man ein solches Dimmerprojekt in Angriff nehmen kann.
Ja, daran habe ich auch schon rum experimentiert. Du hast schon richtig erkannt, das die Abstände zwischen den möglichen Zündzeitpunkte nicht Liniar sein darf. Ursprüglich dachte ich müsste die Zündzeitpunkte über die Leistung berechnen also eine Funktion aus dem sinus^2 abgeleitet. Das Ergebnis war ernüchternd. Der Helligkeitseindruck war NICHT liniar. Ich habe dann eine einfache 1-sinus Funktion zu Grunde geleg und siehe da der Helligkeitseindruck war recht liniar. Rechne: SLin=180Grad/256 Intervall(n)=1-sin(SLin*n) (n= 0 bis 127) die 2. 90 Grad kannst du Spiegeln. Bilde die Summe über alle Intervallwerte. Teile 10ms durch die Intervallsumme. und multipliziere dann jeden Intervallwert mit diesem Ergebnis. Jetzt hast du eine Tabelle mit den Zeiten, die von Zündpunkt zu Zündpunkt verstreichen muss.
Sehr cool, werde ich mir am Wochenende mal genauer anschauen und ausprobieren. Bin momentan etwas im Stress.
Salve, huch, geht schonwieder um meinen Dimmer und ich habs nicht mitbekommen. Also: Der Diamond ist ein Standalone-Dimmer, konzipiert für den Wohnbereich. Die DMX-Anbindung ist optional. Eine native PC-Anbindung an sich (wie es beim Crystal war, der sich über UART mittels eines eigenen Protokolls mit z.B. einem Gtk2-Programm unterhalten hat) gibt es keine. Die Linearisierung übernehmen in meinen Dimmern Lookup-Tables (beim Diamond immerhin ca. 4kByte). Aufgebaut sind die mit einem acos() und etwas proportionalem Anteil. Die Formel findest Du in dem Perl-Script in den Diamond-Sources. Viele Grüße, Mark
Das mit dem acos dürfte passen: für Helligkeitswert X(0-256) in einer Halbwelle gilt: Zündzeitpunkt=arcos(1-(X/128))*10ms/PI aus dieser Formel kann man die Timer Comparewerte direkt berechnen. bei meinem Vorschlag higegen würde man die Timer Reloadwerte berechnen. Die daraus ressultierenden Zündzeitpunkte dürften aber sehr ähnlich bis gleich sein. Aber zugegeben die Methode von Mark ist deutlich einfacher zu berechnen.
Hallo Ich schmeisse mal mein Projekt in die Runde. Es handelt sich um eine Dimmerbar (eigenbau) mit 8 Kanäle. Das Projekt arbeitet mit einem Mega8 mit 16 Mhz Takt. Die Software ist mit Bascom geschrieben. Softaremäsig ist die Adresse 0 als Startadresse im DMX-Protokoll für Dimmer festgelegt. Viel Spass
hallo, ist es vermessen nach dem Bascom programm und ev. nach dem Layout zu fragen? Ich programiere gerade eine Art Haussteuerung steuerbar durch Windowsprogramm (und Webbedienung als Option), mit Microkontroller als Aktuatoren und Eingabegeräten. Die Übertragungsart rs485 werde ich auch nehmen, ich weiss aber noch nicht, ob ich die DMX-Protokolle nehme, aber die Dimmerei bräuchte ich dann nicht neu zu programmieren. Helfe gerne mit meinem Wissen aus, wenn es gebraucht wird.
Hallo Stromi den Quelltext kannst du gerne haben, für ein Layout leider nicht da ich viel zu faul bin. Die Schaltung habe ich extra für das Forum gezeichnet. Meine DMX Projekte entstehen im Kopf und werden dann einfach ohne irgendwelche Dokumentation für meine Anwendungen gebaut und fertig. MfG The_Clown
Störe dich bitte nicht an meiner Programmierkunst. Der Quelltext müsste warscheinlich noch etwas überarbeitet werden.
Danke, den muss ich erstmal durch die Rübe ziehen, weil ich ja auch keine Rem's mache, muss ich ja auch mal bestraft werden.... :-) Vielen herzlichen Dank für den Code
Betreff: >für Helligkeitswert X(0-256) in einer Halbwelle gilt: >Zündzeitpunkt=arcos(1-(X/128))*10ms/PI Leo hat mich auf einen Fehler hingewisen, der Zündzeitpunkt muss von 180 Grad nach 0 Grad laufen und nicht so wie dargestellt von 0 Grad nach 180 Grad. Richtig ist: Zündzeitpunkt=arcos((X/128)-1)*10ms/PI Danke Leo
Hallo Warum versucht Ihr so komplexe Rechnungen für euren Zündzeitpunkt zu berechen. Beim Emfangen von DMX Signale habt Ihr sowieso keine Zeit solche Berechnungen noch durchzuführen oder ihr beschäftigt spezielle Cips oder mehrere Processoren. Für eurer Problem werden im Programm sogenannte "firing angle Table" eingesetzt wo zu jedem DMX-Wert (0-255) ein Vergleichswert im Programm hinterlegt wird. Diese Werte ändern sich aber je nach verwendetem Leuchtmittel. In meinem Projekt habe ich da aber keinen Wert drauf gelegt, da es bei normalen Anwendungen z.b. in meinem Dimmer sowieso keinem auffällt ob das Licht linear heller oder dunkler wird oder nicht. MfG The Clown
Wenn ich das Richtig verstanden habe, dann sind diese Tabellen doch folgendermaßen aufgebaut: (mit Beispielzahlen): 0 > 0s 1 > 1ms 2 > 2ms ... Man muss aber erst durch diese Formel die Werte auf der rechten Seite berechnen, damit man sie im Speicher ablegen kann, oder? Kannst du mal deine Tabellenwerte als Datei hochladen?
@The Clown Du lasst dem Kontroller nicht die Formel berechnen sondern legst eine Tabelle mit den Ergebnissen im Controller an, die dann nur ausgelesen wird.
@Benjamin Munske So ähnlich lauft das ab. In meinen Proj. sind die Timer so eingestellt das sie mit der Netzfrequnen (50 Hz x 2 Halbwellen 100Hz) in etwa syncron laufen. Mit der oben erwähnten Tabelle gleicht man das Verhalten unterschiedlicher Leuchtmittel aus. Als Beispiel: Nehme eine LED und pulse sie mit 50%, du wirst feststellen das sie aber unmerklich dunkler wird und est bei Werten unter 50% an intensität verliert. Im vergleich dazu eine einfache Glühbiren sie ist bei ca. 40% Pulsrate schon fast aus und eine Halogenlampe hat wieder ein anderes verhalten. Dieses wird mit solch einer Tabelle ausgeglichen. DMX IN 255 Pulslänge 100% .... DMX IN 224 Pulslänge 95% .... DMX IN 128 Pulslänge 75% .... DMX IN 64 Pulslänge 60% .... DMX IN 32 Pulslänge 50% .... u.s.w. Zwischenwerte habe jetzt nicht mit angegeben. Es entsteht eine log. Verhalten die für verschidenen Leuchtmittel halt unterschiedlich sind. Einige Hersteller von Dimmer haben dann halt 2-3 Tabellen integriert. Ich hoffe das es halberwegs verständlich war. Also mache dir nicht soviel gedanken darüber wann du die Phase einschalte sonder mehr das du in der Zeit einer Halbwelle deinen DMX-Wert unterbekommst ob nun 0-255 oder 0-128 es kommt immer darauf an was du damit machen willst. Ich habe in einem anderen Projekt mir den Kanal geteielt. Werte von 0-128 Dimmen einen Par36 und Werte 129-255 Dimmen zwar auch schalten aber dazu noch ein Farbrad ein. MfG The_Clown
Vielen Dank dafür. Wenn ich das richtig herausgehört habe verwendest du eine Phasenanschnittsteuerung - es gibt ja immernoch die Phasenabschnittsteuerung. Was ist denn nun besser?
Ich habe das leichte gefühl das einige garnicht wissen was eine Phasenanschnitt ist und wie die Arbeitsweise eines Dimmer's ist. Vieleicht irre ich auch, dann sorry. Aber trotz alle dem ganz kurz. Phasenanschnitt: Das Schalten von Wechselspannung bei Erreichen eines regelbaren Phasenwinkels. Hiermit lässt sich die Amplitude des resultierenden Stroms verlustarm regeln. Das heist in unserem Fall einen Schalter sprich Triac zu einen bestimmten Zeitpunkt in der Sinusförmigen Halbwelle einzuschalten. Da die Frequenz von 50 Hz einer Periodendauer von 20 ms entspricht, hat die Spannung alle 10 ms einen Nulldurchgang. Also wird der Triac alle 10ms in einer Halbwelle der Sinuskurve gezündet sprich eingeschalten. Glücklicherweise müssen wir uns um das Ausschalten des Triac nicht weiter kümmern, da er sich bei jedem Nulldurchgang selber löscht. Für das Zünden des Triac benötigt man nur einen kurzen impuls, der aber nicht zeitlich über den Nuldurchgang der Halbwelle dauern darf, da sonst der Triac wieder gezündet wird und da kommt der Null- durchgangsdetektor ins Spiel. Mit dem Nulldurchgangsdetektor meiner Schaltung wird somit alle 10 ms ein impuls auf den Interrupt-Eingang des Controllers gegeben. Diesen Impuls benötiget man um eine Netzsynchrone Steuerung der Last zu erreichen. Eigendlich ist die ganze Sache doch recht simpel oder. MfG The_Clown
@Benjamin Munske Es gieb auch noch Wellenpacketsteuerung. Technisch läst sich aber die Phasenanschnittsteuerung realiesieren. MfG
@Benjamin Munske Sorry,habe wieder mal schneller gedacht als geschrieben. Phasenanschnittsteuerung lassen sich leichter realiesieren da man dort Triac's oder Tyristoren einsetzen kann. Bei Phasenabschnittsteuerung ist das nicht möglich, da Triac's sich innerhalb einer Phase nicht ausschalten lassen ausser durch einen erzwungenen Nulldurchlauf, das würde heissen einen Kurzschluss. Phasenabschnittsteuerung lassen sich meineswissens nur mit Hochvolt Mosfet's oder so wie in Schaltnetzteilen verwendet Realiesieren. MfG
> Hiermit lässt sich die Amplitude des resultierenden > Stroms verlustarm regeln. Nee, die Amplitude ist immer noch 325V. :-) Der Effektivwert ändert sich.
Schneller getippt als gedacht ... Die Amplitude des Stromes ist natürlich 325V/Z_Last, nicht 325V. Der Effektivwert dementsprechend 1/T mal dem Integral über der Wurzel des quadratischen Stromverlaufes (über eine Periode integriert).
Ok, jetzt weiß ich bescheid, was ich machen muss. Also noch einmal: Ich benutze ja auch eine Triac-Schaltung, sprich ich muss Phasenanschnitt nehmen, d.h. nach einer bestimmten Zeit (< 10ms) muss ich den Triac zünden, also Spannung ans Gate (heißt das dort auch so?) anlegen. Der Triac löscht sich dann von selbst, wenn der Nulldurchgang kommt. Dann wiederholt sich das Spiel, richtig? http://www.morup.dk/pics/forkant.gif << so sähe das dann aus. Noch einmal zu den Tabellen: Kann mal einer so eine "firing angle Table" hochladen? Ich benutze im übrigen Par56-Brenner.
@Benjamin Munske Hallo ersmal danke Axel Deine Grafik hätte es nicht besser treffen können. Solche Tabellen sind meist auf die Software zugeschnitten, das hängt von der Zählschleife ab. Vor- oder Rückwärszählung 255 Stuffen oder nur 64 Stufen u.s.w. Es giebt aber einige Projekte im Netz die so etwas benutzen, halte ich für einfache Anwendungen die nur simple Parser ansteuern für nicht nötig. Noch ein Tip: Nimm doch zum experimentieren einen 12V Trafo ohnen Gleichrichtung, eine Halogen Niedervoltlampe und betreibe den Triac mit der 12v Wechselspannung geht genauso gut und ist nicht so gefährlich. zu Sebastian Ich bin der Meinung das wir hier kein Wissenschaftliches Forum draus machen, wir sind alle nur Bastler und wollen doch nichts weiter als einen simplen Dimmer bauen. MfG The_Clown
@ The_Clown >Ich bin der Meinung das wir hier kein Wissenschaftliches Forum draus >machen, wir sind alle nur Bastler und wollen doch nichts weiter als >einen simplen Dimmer bauen. Täusch dich da mal nicht. Hier im Forum geistern einige begnadete Entwickler rum die damit ihre Brötchen verdiene. Ich finde das toll, dass solche Leute sich mit uns Hobbybastlern abgeben und ihr Know How weitergeben. Allerdings gibt er auch den ein oder anderen der etwas hochnäsig rüber kommt.
Du hast ja irgendwie recht, dann sollten sie aber auch versuchen es für uns Hobbybastler verständlich darstellen was sie mit ihren Aussagen meinen oder Hast du den schonmal versucht eine Wurzelberechnung oder Quadratische Gleichungen in ASM mit deinem Atmel oder Pic zu Programmieren, wenn ja, dann meine Hochachtung. Das oben war ja auch nicht negativ von mir gemeint, aber wenn ich mir so einige Foren anschaue kommt igendwann nur noch Bla-Bla-Bla herraus oder läuft vom eigendlichen Thema vorbei und das hilft dann auch keinem.
Meistens entwickelst du über die Formeln Tabellen, die du dann in den Kontroller legst. Sonst gebe ich dir recht, ich kenne keine AVR mit mathematischen Coprozessor ;-)
Erstens programmiere ich nicht AVR, sondern MSP430. Zweitens wollte ich keinesfalls irgendjemanden angreifen. Falls du, Christof, mich für hochnäsig hälst, ist das leider dein Pech und mir ziemlich egal. Ich habe lediglich The Clown (Realnames sind übrigens höflicher) in einem kleinen Detail korrigiert. Wenn man sich schon darüber aufregt, dass hier scheinbar kaum einer weiss, was eine Phasenanschnittsteuerung bedeutet, sollte man nicht selber noch Fehler einbauen. War ja auch keinesfalls böse gemeint. Aber wenn schon eine Klarstellung, dann auch komplett richtig. Und jetzt EOT.
Sorry, das wollte ich nicht gegen über deiner Person ausdücke hatte nur schon solche erfahrungen gemacht.
Na wunderbar. Dann haben wir uns ja jetzt wieder alle lieb. :-) Und ich werde mich in absehbarer Zeit (wenn ich das Webserver-Projekt durch habe) dann endlich auch mal der DMX512-Implementation auf dem MSP430 widmen ...
So, ich habe jetzt meine Dimmer-Teststeuerung aufgebaut (s. Anhang). Ich habe zuvor noch nie mit Triacs gearbeitet, daher die Frage: Was für ein Signal muss ich an das Gate schicken, damit der Triac zündet - muss das ein Impuls bestimmter Länge sein, wenn ja - wie lang?
Steht irgendwo in den Datenblättern drin. Beim TIC216 muss es irgendwas um 1µs sein ... Ich hatte jedenfalls schon mal den Fall, dass der Zündimpuls zu kurz war (irgendwas im höheren ns-Bereich). Aber bei 20ms Periodendauer kommt es ja auch gar nicht darauf an, ob der eigentliche Zündvorgang nun 1µs oder 100µs dauert ...
Die Länge des Impulses ist eine Frage, die andere ist die Polarität: Triacs mögen es am liebsten, wenn der Zündimpuls die selbe Polarität hat wie die Anodenspannung. Das geht am besten mit den Opto-Triacs (MOC30xx). Da hat man gleich galvanische Trennung. Am zweitliebsten haben sie es, wenn man beide Halbwellen negativ zündet. Erst am drittliebsten werden sie positiv getriggert. Und gar nicht gern haben sie es, wenn man mit invertierter Phase zündet. Das wirkt sich übrigens auch auf die ausgesendete Störstrahlung aus. Wird es falsch rum gezündet, kommt irgendwann mal der Punkt (stromabhängig), an dem es sich es intern andersrum überlegt, dabei gibt es mal kurzzeitig HF ab. Drosseln und RC-Snubber parallel zum Triac oder zum Ausgang verhindern/vermindern solche und andere Störungen. Siehe auch http://www.mikrocontroller.net/forum/read-1-128923.html
@Direx: Die verschiedenen Quadranten-Zündungen klingen interessant. Vielleicht hast du ja auch eine Lösung für mein Brett vor dem Kopf? :-) http://www.mikrocontroller.net/forum/read-1-128923.html Ich blicke im Moment irgendwie nicht mehr ganz durch, in welchen Quadranten ich meinen Triac zünde und wieso das Zünden immer funktioniert, unabhängig von der Belegung L1/N.
Hallo Leute, nach langem Schweigen bin ich wieder da - es hat sich viel getan: Das ist nun meine Dimmerschaltung: http://www.soundtechniker.de/Projekte/bilder/Dimmerlayoutbig.jpg http://www.soundtechniker.de/Projekte/bilder/Dimmertestboard_01.JPG Es handelt sich um einen Prototypen. Das ist bisher möglich: Die Nulldurchgangserkennung erkennt jeden 2. Nulldurchgang, also immer nach einer Wellenlänge, der Triac kann dauerhaft ein- und ausgeschaltet werden (über die RS232 Schnittstelle des PCs). Mir ist es leider bisher nich gelungen eine Software zum Dimmen zu programmieren (ich habe bisher FASTAVR benutzt) - bisher habe ich leider nur ein flackern produziert! lol Könnt ihr mir dazu einen Tipps bzw. programmierbeispiele geben, wie ich am besten an die Sache herangehe? Ist Assembler vorteilhafter?
Hallo Benjamin, als erstes würde ich die Nullpunkterkennung umbauen. Nimm einen Vorwiderstand, eine Gleichrichterbrücke und direkt an der Brücke den Optokoppler. Dann hast du einen schönen High-Spike in jedem Nulldurchgang, wenn du den Emitter des Transistors auf Gnd legst und den Kollektor über einen Widerstand auf Vcc. Am Kollektor kannst du dein Signal abgreifen. Mit etwas Rechnerei kannst du sogar Frequenzschwankungen kompensieren. Michael
Hallo Benjamin, das mit dem flacker habe ich auch gehabt, das liegt am Timing für die Ansteuerung des Triac (warscheinlich zu langer Impuls ca. 10-20yS sollten reichen). Du solltest den Triac aber in beiden Halbwellen Zünden also alle 10mS. Ein Stück weiter oben habe ich meine Dimmersoftware in Bascom reingestellt, sollte ohne Probleme auch auf FastAVR umzusetzen sein. MfG
Moin,
ich habe jetzt mal die Bascom-Demo installiert. Leider sehe ich nur ein
>j, wenn ich die Datei, die du oben gepostet hast öffne! Was ist da los?
Wie kann ich die Datei öffnen? Kannst du die Syntax in eine Textdatei
kopieren und die dann hier posten?
Hast du die "DMX_Dimmer8_V1.bas" herunter geladen? Du kannst sie mit dem Windows Editor auch öffnen, sogar mit FastAVR. MFG Dirk
Noch mal eine Frage zum Thema Triac: Im Datenblatt steht ja, dass der Zündimpuls von meinem Triac 20µs betragen soll - ist es schädlich für einen Triac, wenn man dauerhaft das Gate unter Spannung setzt?
Im Datenblatt steht tp > 20µs. Eine ständige ansteuerung des Gate uber einen MOC... o.ä. kannst du ruhig machen. In meinem Prog schalte ich die Gate erst kurz vor dem nächsten Null- durchgang wieder aus. MfG Dirk
hallo zusammen, ich habe mir das mal angeschaut was ihr da so gemacht habt, und ich bin gerade an etwas änlichem dran, ich habe mir eine "dimmer" schaltung gebaut, die phasenan.- und abschnittsteuerung kann (mit mosfet). ach ja, die schaltung kostet ca. 5 euro komplett. die schaltung solte im phasenabschnitt modus problemlos 5 A dauer verkraften, der mosfet hält bis 56A aus :-) falls jemand da interesse dran hat, ich könte noch ein bischen hilfe bei der software gebrauchen... gruss michael
Hallo Leute, ich habe jetzt mal eine Software in Basic geschrieben, die den triac eigentlich nach einer 1/4 - Periode (nach 0,005s) und nach einer 3/4 Periode zünden soll, allerdings funktioniert das nicht! http://www.soundtechniker.de/Projekte/bilder/Dimmerlayoutbig.jpg Unter dieser Adresse findet ihr den Schaltplan. Im Anhang befindet sich eine Aufnahme des Oszilloscope-Bildes von der Nulldurchgangserkennung (eine Periode ist logischerweise 50Hz lang) > Die Spannung wurde zwischen Pin 4 und Masse gemessen. Wie ist dieses Bild der Nulldurchgangserkennung auf die 50Hz Sinusfrequenz zu legen? Ist der Nulldurchgang bei der fallenden Flanke, bei der steigenden oder ganz wo anders? Ich verstehe das noch nicht so ganz. Meine nächste Frage wäre, ob man an ein 2Kanal Oszilloscope mit gemeinsamer Masse die 50Hz Wechselspannung (230V) und an den anderen Kanal 5V Gleichspannung anlegen kann?! Meiner Meinung nach geht das nicht, (wegen der gemeinsamen Masse). Bitte helft mir weiter, da ich mich im Moment auf der Stelle drehe!
1 | $Device= Mega8 |
2 | $Stack = 28 |
3 | $Clock = 8.000000 |
4 | $Timer1=Timer, Prescale=64, CompareA=DisConnect, Clear |
5 | $Source= On |
6 | |
7 | Dim status As Word |
8 | |
9 | Declare Interrupt Oc1A() |
10 | Declare Interrupt Int0() |
11 | |
12 | DDRB = &HFF |
13 | DDRC = &HFF |
14 | DDRD = &H00 |
15 | |
16 | MCUCR.0 = 0 |
17 | MCUCR.1 = 1 |
18 | MCUCR.2 = 0 |
19 | MCUCR.3 = 1 |
20 | Enable Interrupts |
21 | Enable Int0 |
22 | |
23 | PORTC = 0 |
24 | Do |
25 | Loop |
26 | |
27 | Interrupt Int0() |
28 | PORTC = 0 |
29 | status = 1 |
30 | Start Timer1 |
31 | Enable Oc1A |
32 | Compare1=&h271 |
33 | End Interrupt |
34 | |
35 | Interrupt Oc1A(), Save 1 |
36 | Select Case status |
37 | Case 1 'nach 1s |
38 | Set PORTC.3 |
39 | Stop Timer1 |
40 | Start Timer1 |
41 | Compare1=&h5 |
42 | status = 2 |
43 | Case 2 'nach 200ms |
44 | Reset PORTC.3 |
45 | Stop Timer1 |
46 | Start Timer1 |
47 | Compare1=&h4DD |
48 | status = 3 |
49 | Case 3 'nach 1,5s |
50 | Set PORTC.3 |
51 | Stop Timer1 |
52 | Start Timer1 |
53 | Compare1=&h5 |
54 | status = 4 |
55 | Case 4 'nach 200ms |
56 | Reset PORTC.3 |
57 | Stop Timer1 |
58 | Disable Oc1A |
59 | End Select |
60 | End Interrupt |
hallo Benjamin, zu deiner frage, das problem liegt schon ein bischen in der schaltung, du kanst nur den phasen nulldurchgang in der einen der beiden phasen feststellen, und nicht in beiden, also wenn du nach dem nulldurchgang, sofort oder nach ein par ms schaltest, kanste maximal halbe leistung bekommen. das oziloskop kanste an die 5v und die 230 v hängen aber nur wenn ALLE daran noch angeschlossenen geräte auch wirklich eine funktionierende galvanische trennug haben, ansonsten knalt das !!! du hast keine trennung, wenn du diese beiden gleichzeitig mißt!!!!! die schaltung müste erstmal so angepaßt werden, das du den nulldurchgang von beiden phasen erwischen kanst. z.b. in dem du da nen brückengleichrichter vor den ok3 anstelle der d1 machst.
Diese Nulldurchgangserkennung ist schon in Ordnung - ich brauche doch nur einen Nulldurchgang, da ich den anderen einfach 10ms später ansetze. Das mache ich mit einem Timer (kannst du in meinem Programmcode nachvollziehen). Ich verweise außerdem auf diese Schaltung, die funktioniert: http://www.theaterzentrum.at/technix/development/dimmer/index_html (ab und zu scheint die Seite offline zu sein) Meine Frage ist vielmehr, wie ich die Nulldurchgangserkennung zeitlich zu den 50Hz 230V Wechselspannung sehen muss, d.h. wie müsste man die Sinuskurve in mein gepostetes Bild (s.o.) einzeichnen, oder anders: Wann muss ich den Interupt starten?
hallo benjamin, also generell, wenn die 100 % leistung haben möchtest, dann must du in dem moment den triac durchbrechen lassen, in dem die phase das erste mal von dir entdeckt wird, ob du da jetzt ein par uS zu spät bist, ist volkommen egal. bei 50% leistung, muste halt ca. 5 ms nach dem du den phasendurchgang entdeckt hast den triac durchbrechen lassen, und bei 25 % leistung dann nach ca. 2,5 ms, und gut, dass dann noch mal wiederholt nach 10 ms, was ich nicht weiss, wie lange der triac einen impuls benötigt, um wirklich mit einer absolut steilen flange durch zu brechen, hatte da schon mal ein problem, das er dann nicht immer richtig durchgeschaltet hat, weil mein impuls zu kurz und mit zu wenig energie war. hilft die das ? also wie schon oben geschrieben, ich mache lieber das ganze mit einem mosfet transistor, der kann merh leistung, ist schneller, und ich kann frei den an und abschnitt bestimmen.
Das mit den 10ms Timer schaft du nicht da die Netzfrequenz nicht immer 100% stimmt. Wie Michael schon sagt werte bitte beide Nulldurgänge aus. So zu deinem Programm: Mache es dir doch nicht so schwer, das geht doch ganz einfach. 1. Du brauchst eine Int0 achte auf (fallende oder Steigende Flanke) und eine Timer Routine. soweit OK 2. Nehme dir drei Variablen zb. Dimmer_Wert,Null_Sel Setze in der Int0 einfach einen Zähler auf Null_Sel=255 (für 255 Helligkeitsstufen) Interrupt Int0() Null_Sel=255 End Interrupt 3. Zähle in im Timer0 die Variable Null_Sel auf 0 DEC(Null_Sel) Dimmerwert zwischen 0 und 255 Interrupt Oc1A(), Save 1 IF Null_Sel=0 Then Goto Loop_Exit DEC(Null_Sel) If Netz_Sel <= Dimmer_Wert Then Set PORTC.X ELSE Reset PORTC.X ENSIF :Loop_Exit End Interrupt Das ist es eigendlich schon. Deine Timerzeiten sind nicht OK und Stoppen darft du ihn erst rech nicht. Du möchtest 255 Heligkeitsstufen --> Ja Dann Rechne mal 10ms/256 ist ca 40ys also muss deine Timerroutine alle 40ys angesprungen werden. Jetzt dein Quarz und dein Timer 1 / (8Mhz/64(Prescale)/255(Tcnt0) = ca 2ms also 5 Helligkeitswerte (10ms/2ms) deine Timerroutine muss schneller werden. Du musst alle Aufgaben ohnen unterbrechung in den 10ms erledigen. MfG Dirk ich hoffe das es dir weiterhilft. Schreib mir mal ob du es geschaft hast.
Sorry Mein deutsch lässt da etwas zu wünschen übrig. Zu meiner Entschuldigung, ich hatte den Beitrag noch schnell auf dem Weg ins Bett geschrieben. kleine Korrektur: If Null_Sel <= Dimmer_Wert Then Set PORTC.X ELSE Reset PORTC.X -------- Noch ganz kurz zu deiner Zeitmessung für die zweite Halbwelle, wenn du den Triac nicht rechtzeitig ausschaltest dann bleib er auch bei der zweiten (nicht erfasten) Halbwelle ebenfals an und es wird mit dem Dimmen nichts. Nur noch mal zum Verständnis. Du hast dir mein Basiclisting (DMX_Dimmer8_V1.bas) oben angesehen, da du die Timerwerte übernommen hast (schätze ich mal) ich arbeite dort aber mit einem 16Mhz Takt. Prescale=64 Tcnt0=247 (256-247=18) 64(Prescale)*18(Tcnt0)=13888,8.. Teiler für den Timerinterupt Also jeder 13888,888... Quarztakt löst den Interupt aus. 8000000/13888 = rund 576 Hz 16000000/13888 = rund 1152 Hz Das kannst du auch leicht prüfen, gebe bei jedem Timerinterupt einen Impuls über ein Port aus und messe es mit einem Frequenz- messer oder Osilloskop. Noch etwas zu dein Bild, das Signal auf dem Osilloskop ist ja nichts weiter als das Sinussinal in Rechteck geformt. Zur Veranschaulichung nehme dir einen Trafo oder Steckernetzteil ohne Gleichrichtung und lege den Ausgangsspannung (Niederspannung) auf den zweiten Eingang des Osilloskop. Ich hoffe das das alles so stimmt, jedenfalls meine Dimmerbar läuft zuverlässig. MfG Dirk
Hallo, @Dirk: Schon einmal vielen Dank für deine Hilfe, allerdings musst du mir da noch etwas erklären: 1. Noch einmal zu meinem Quellcode: Ich dachte mir, dass der Interupt bei der fallenden Flanke ausgelöst werden muss (ist das richtig, oder muss der bei der steigenden Flanke ausgelöst werden), danach wird ein Timer, der nach 5ms einen Interrupt auslöst gestartet und gleichzeitig der Triac durch einen zweiten Timerablauf, der 40µs dauert, gezündet. Nun wird wieder ein Timer mit 9,5µs gestartet, bis wieder der Triac für 40µs gestartet wird. Ich dachte mir dazu folgendes: (1/(8Mhz/64)) = Dauer bis der Timer einmal zählt. Was ist dann an meinen Timings falsch? 2. Wenn ich deinen Quellcode jetzt mal in mein Programm einbaue, sollte das dann nach kleinen Anpassungen schon funktionieren, oder war das nur ein Denkanstoß?
Felche Flanke du zum auslösen benutzt ist bei deiner Schaltung egal da die Fallende oder Steigende Flanke immer auf einem Nuldurchgang liegen. (siehe meine Anmerkung zum Test mit einem Trafo) Den C8 der über R4 aufgeladen wird, würde ich kleiner wählen damit die steigende Flanke steiler wird. Du bekommst das mit deiner Zeitmessung (einsch.zählen aussch. zählen usw.)nicht synchron, deine Lampen werden nur sinlos flackern. Wenn du mit deiner Schaltung den Nullduchgang ermitteln willst (beide durchgängen) musst du die steigende und fallende Flanke in einer Do / Loop Schleife ständig abfragen und einen Zähler bei Pege- änderung setzen den du dann in deinen Timerinterupt weiterverarbeiten kannst so wie oben bereits erwähnt, das geht dann auch. Hat aber einen Nachteil, bei Ausfall des DMX-Signals oder zusätzlichen Funktionen deines Dimmer kannst du dann keine Erweiterungen mehr Programieren. Die Do / Loop Schleife darf dann nicht ausgebremmst werden, sonst lauft das mit dem dimmen schief. MfG
Vieleicht fällt dir das leicher anhand eines Analogdimmer die Funktionsweise zu verstehen. Kurze Erläuterung der Schaltung. U2b erzeugt ein Pasensyncrones Signal des Nulldurgangs der Sinuskurve. U2a erzeugt daraus ein Sägezahn so wie meine Var. "Null_Sel" im zusammenhang mit der Timer. "DEC(Null_Sel)" Nun wird mit U3 die Spannung am 0-10V Eingang mit der Sägezahnspannung verglichen "If Netz_Sel <= Dimmer_Wert Then..." wenn die Spannungsschwelle unterschritten wird schaltet der OPV den Triac durch. Die Zeit wie lange du in eingeschalten lässt ist eigentlich egal min. 20ys die Zeit braucht der Triac üblicherweise um überhaupt zu schalten. Beim nächsten Nuldurchgang besser gesagt kurz vorher, den der eigentliche Nulldurhhgang der Phase liegt genau in der mitte des Rechtecksignal am Nulldurgangdedektor (Lo-Pegel) und schaltet die OPV's U3 wieder ab. Immer im vergleich 0-10V Eingang mit der Sägezahnspannung wenn die Eingangsspannung 10V ist bleibt der Triac auch beim Nulldurchgang weiter eingeschalten. Die Triac's werden dann im eigentlichen Nulldurchgang abgeschaltet (selbstlöschend). Jetzt fängt das ganze Spiel wieder von vorne an. Vieleicht verstehst du jetzt das es mit deinen Zählschleifen leicht zu einem Problem werden kann und die ganze sache komplieziert wird. MfG Dirk
@Dirk: Vielen Dank für das alles. Mittlerweile habe ich einen Bug in meinem Programm gefunden: Der Optokoppler, der den triac schaltet, schaltet bei 0V durch! Daher funktionierte meine Software doch, nachdem ich set und reset vom PortC.3 vertauscht hatte! Ich kann jetzt schon mit dem seriellen Port des PCs dimmen.
Hallo! Passt jetzt leider gar nicht ins Thema aber kann mir jemand die m8def.inc als anhang uploaden? Mfg Argon
http://www.mikrocontroller.net/forum/read-1-134764.html#134789 Hää? Hatta doch schon! Sowas aber auch... weiterdimmen Axel
Benjamin Munske: Entschuldige das ich nochmal deinen Quelltext angreife aber mit deiner Timerschleife kann es eigendlich nicht funzen???!!! Wenn es doch irgendwie geht dan schaue dir mal das Signal auf dem Osilloskop an. Jetzt versuche es mal mit einem 2 Kanäle oder wollmöglich mit 8,16 oder 32 Kanäle.... Bei mir war es im Test mit 84 Kanäle schuss dann reichte die Zeit nicht mehr um alle "IF THEN" schleifen zu bedienen, musste man warscheinlich die passage in ASM schreiben. Ich habe da auch ein Woche mit der Software gebastelt und dann kam das Timing mit dem DMX geraffel dazu. MfG Dirk
Hallo, klar funktioniert das mit den Timings! Das habe ich ausgerechnet - und in der praxis getestet - das Signal habe ich auch gemessen - passt wunderbar. Bei mehreren Kanälen hast du natürlich Recht! Ich werde das dann so machen, dass ich den Bereich (10ms) in 255 Schritte zerlege, die einzeln vom Timer abgezählt werden. Nach jedem Abzählen wird dann geschaut, ob einer der 4 Kanäle jetzt geschaltet werden müsste, wenn ja, dann wird dies getan! So die Theorie - umsetzung folgt... 84 Kanäle ist natürlich beeindruckend! Würde ich auch gerne machen, aber irgendwie hast du einen anderen (wahrscheinlich fortgeschritteneren Programmierstil) oder es fehlt noch etwas in deinem Quellcode, da ich ihn nicht verstehe. Wo z.B. kommt Dimmer_wert her? Soll der zwischen 0 und 255 liegen und per DMX übertragen werden, oder wie? Beschreibe doch bitte mal den Ablauf deines Programms, denn daran bin ich schon sehr interessiert!
Korrektur 48 Kanäle habe ich geschaft, besser gesagt der Atmel. Fortschrittlich bestimmt nicht aber neben Assembler programieren fand ich Basic ganz lustig und bequem. Für die ganz verrückten kommt da nur C in frage, kann und will ich auch nicht lernen da die dasaus erzeugten Assembler bzw Hexfile auch nicht sooo viel besser sind. Wie auch immer es muss ja auch faule Programmierer geben. Den Quelltext habe ich grob erläuter muss einfach reichen. MfG Dirk
Hallo Leute, ich habe ein neues Oszilloskop bekommen und habe nun merkwürdige Probleme bei der Messung der phasenangeschnittenen Wechselspannung. Ich habe bei der Triggerung folgende Einstellmöglichkeiten: 1. AC 2. DC 3. HF 4. LF 5. ~ Ich habe beim alten Oszilloskop AC benutzt und bekam dort auch wunderbar meine angeschnittene Sinuskurve angezeigt. An der Software habe ich nichts verändert und trotzdem zeigt das neues Oszilloskop ein komisches Wirr-Warr an! Woran könnte das liegen? Zur Info: Ich benutze eine Messpitze mit eine Verhältnis von 10:1 (Abschwächung), habe die Timebase auf 2ms/cm stehen und den Spannungsbereich auf 10V pro Zentimeter. Der Eingang ist auf AC geschaltet. Es handelt sich um ein Hameg HM203-6.
stell's mal auf 20ms/cm. Wo misst Du? Etwa auf der Netzseite? oder verwendest Du, so wie Dirk es empfahl, einen Trafo und nimmst erstmal 12 Volt statt 230?
das habe ich schon alles ausprobiert - an der Timebase habe ich schon alles versucht - natürlich messe ich die 230V, deshalb habe ich es ja auch auf 10:1 an der Messspitze eingestellt. Ich messe die Spannung, die an der Lampe (300W) anliegt.
Die habe ich nicht angeschlossen, weil mir schon zweimal die Sicherung herausgeflogen ist, weil ich falsch herum die Messspitze und die Klemme an die Schaltung gehalten habe. Muss ich die echt anschließen bei Wechselspannung?
Hallo Benjamin Munske
Bist du immer noch nicht weiter?
Ich schätze mal du hängst immernoch am Programm fest.
>>> die sache mit deinen Zählschleifen <<<
Ich habe mir mal den Link deines 1.Posting angeschaut, jetzt weiss
ich auch woher du die Sache mit dem Optokopler am Netzeingang
herhast.
Wenn du schon die Schaltung übernimmst solltest du dir auch den
Quelltext mal zerlegen und wenigstens teilweise verstehen, dann
hättest du auch bemerkt das der "Typ" die fallende und steigende
Flanke des gewonnen Rechtecksignals (aus dem Netz-Sinus) für sein
Projekt erfasst und weiterverarbeitet.
zero_check1: sbis pinD,zero_crossing_pin
rjmp zero_check1
zero_check2: sbic pinD,zero_crossing_pin
rjmp zero_check2
MfG Dirk
Was ich eigendlich schade finde das viele zwar mein Projekt
sich heruntergezogen haben, vieleicht auch einige Nachgebaut
haben, aber keine resonanz zu hören ist zwecks Verbesserung
oder so.
hallo benjamin, damit ein messgerät etwas messen kann, muss es zwichen 2 anschlüssen, die differenz messen, das das bei deinem altem ging, dann würde ich mal sagen, dein altes ozi war defekt, was auch darauf schliessen lassen würde, das du sagst, das die sicherung bei diesem geflogen ist. ein ozi solte generell bis 2 bzw. 4 kv galvanisch getrennt sein, also wenn du nur den tastkopf anschliesst, dann mus das ding alles messen, auser ein wirkliches signal.
hallo dirk, so ist das doch meistens, solange sich keine melden, haste alles so gut dokumentiert, das keiner mit dem nachbauen probleme hatte, und alles einwandfrei ging, man muss sich sorgen machen, wenn eine mail nach der anderen eingeht, für eine schaltung.
Ich sach jenfalls nichs mehr... Fliegt der typ durchn Raum, oder sein bester Kumpel, der sich nach dem zweiten Bier aufs Oszi lümmelt, bin ich nacha der dumme. Ich habe eine IKEA Schreibtischlampe mit 12Volt und 20Watt. Die hat glaube ich jeder. Nimm die und stell dir vor, da kämen 230Volt raus. Begreif' doch erstmal, was da abgeht und dann kannst Du , wenn alles läuft, mit spitzen Fingern und einer Hand auf dem Rücken oder in der Hosentasche und laut pfeifend an der Netzspannung rummachen. So kannst Du nicht aus Versehen mit der zweiten Hand irgentwo anfassen und man hört, wenn Du aufhörts zu pfeifen... Is ja nun langsam kein Spass mehr. Die stehen die 230! Die brechen auch nicht zusammen wie irgenteine Hochspannung im Monitor oderso. Nacht Axel Rühl
hallo Benjamin, wenn man an 230 V bastelt, ohne trenn- und regel-trafo und anderen sicherheitsmassnahmen, solte mann genau wissen, was man macht, und was die eigene schaltung eigendlich macht, andernfalls kann ich nur raten, endweder du wendest dich an jdemanden, der sich damit auskennt und dir persönlich hilft, und nicht hier im forum, oder du schnapst dir erstmal ein par bücher, und gehst mal die einfachsten elektronischen grundlagen durch. ich würde dir raten folgende grundlagen anzuschauen: - wie gehe ich mit einem messgerät um, wie messe ich etwas, dabei ist es egal, ob es um ein ozi geht oder ein multimeter - was ist wechchselspannung - wie funktioniert eine phasen an- oder abschnitsteuerung - was ist eine galvanische trennung, und warum ist diese so wichtig
Morgen Leute, ich weiß auch, dass man eigentlich eine Spannung zwischen zwei Punkten misst, aber merkwürdiger Weise gings auch nur mit er Messspitze des alten Oszilloskops und mir zweien nicht! Keine Ahnung warum - daher habe ich mich aber gewundert, warum es jetzt nicht mehr geht, aber egal. Danke für eure Gefahrenhinweise, aber so lange ich nur an der dicken Isolierung anfasse, kann mir gar nichts passieren und glaubt mir: Ich habe großen Respekt vor 230V! So ist das ja nicht. Ich weiß wo ich an meiner Schaltung aufpassen muss, die Schaltung ist fest fixiert, also an die Leiterbahnen kommt man gar nicht ran. Ich messe nur an den Klemmen, die zur Lampe führen. Wenn eigenartige Dinge auftreten fängt man halt manchmal an, an eigentlich selbstverständlichen Dingen zu zweifeln, da man nicht mehr weiß, wie man weitermachen soll. @Dirk: Meine 1-Kanal-Dimmung funktioniert wie gesagt wunderbar. Eine Software für die 4-Kanaldimmung habe ich geschrieben (teilweise nach deinen Ratschlägen programmiert), konnte ich allerdings noch nicht debuggen, da das Oszi ja nur Mist anzeigt.
Kann mir jemand helfen, ich versuche, ein programm für einen 89C2051 zu schreiben als 4 - Kanal DMX auf Analog Demultiplexer. Die Schaltung steht und Hardwaremäßig ist alles in Ordnung. Nur das Programmieren bereitet erhebliche Schwierigkeiten. Freue mich auf Antwort. M.f.G. F. Kotter
Dirk! Habe vergessen, Dir und deiner Famile frohes Fest zu wünschen, bin untröstlich... Axel Du F. hier kann keiner mit 89c2051, musst Du wohl einen neuen Thread aufmachen und die Frage sepearat stellen.
Hallo, ich bin nun wieder ein Stückchen weiter gekommen, allerdings scheinen sich die verschiedenen Interrupts zu stören, d.h. wenn mein Timer erst einmal im Gang ist, dann kann ich keine seriellen Daten mehr empfangen! Gibts dafür auch eine Lösung? Mein aktueller Programmcode ist im Anhang.
ganz so einfach ist das mit FastAVR nun auch wieder nicht! Wenn Du waghalsigerweose einen String als Input verwendest, musst Du auch 13Zeichen aus der Seriellen Schnittstelle eiinlesen. 12 Zeichen Nutzdaten und das 13te mit NULL also &h00, nicht ascci "0". Du machst zu viel in deinen Interrupts: nur kurze Sachen, Signaturbits setzen und dann in der Hauotschleife abfragen. Die Sache mit Mid und die stringoperationen überhaupt schlauchen derart viel Rechenzeit... Ich bin jetzt nicht 100%tig sicher, aber die DMX-Werten werden doch nicht als ASCCI übertragen, sondern rein binär,oder? Dann nimm doch auch ein Byte Array, welches die einzelnen Zeichen aufnimmt. Ich würde nicht über den Umweg String->val->mid gehen. Du machst dir einen lesezähler und einen schreibzähler. Bytes, die auf der seriellen einfliegen, erhöhen den schreibzähler undlegen ein Byte im Puffer(Bytearray) ab. In der Hauptschleife prüfts du nun einfach, ob dein Schreibzähler anders steht als dein Lesezähler. Ist er größer, hast Du neue Zeichen im Puffer. Jetzt kannst Du die Zeichen in der Hauptschleife auslesen(und dabei den Lesezähler erhöhen), bis Les-und Schreibzähler wieder gleich groß sind. Sieh dir doch einfach mal in den FastAVR BEispielen die FIFO.Bas an... Was passiert in den Programmzeilen? MCUCR.0 = 0 MCUCR.1 = 1 MCUCR.2 = 0 MCUCR.3 = 1 Gruß AxelR.
Hallo Benjamin Munske Dein erstes Problem: Die Interuptroutienen haben verschiedene prioritäten in ihrer Wertigkeit siehe Datenblatt. z.b. wenn ein Timerinterupt ausgeführt bzw. in Arbeit ist kann kein Uartinterupt ausgeführt werden. Dein zweites Problem: $Timer1=Timer, Prescale=1, CompareA=DisConnect, Clear ---------- Dein Timer wird alle 256 Prozessortakte angesprungen, deine Timer- routine benötigt aber deutlich mehr Zyklen. Dein drittes Problem: Start Timer1 Stop Timer1 Ich dachte ich habe dir es verständlich gemacht das dein Timer für eine sichere Dimmerfunktion Netzsyncron laufen muss. Du wirst immer wieder mit deinem Timig aus dem trott kommen, dabei ist die Lösung doch so einfach. Dein viertes Problem: ....... Deine Programmierung ist einfach ... PS: Mein Tip, spare dir deine Bemühungen und lasse es sein, oder gehe mal mit einer anderen vorgehensweise an die Sache ran. MfG Dirk
@AxelR: Das mit den 13 Zeichen werde ich ausprobieren, aber ich dachte, dass String * 12 heißt, dass der String halt 12 Zeichen lang ist - macht ja auch Sinn. Im Moment habe ich noch gar nichts mit DMX im Sinn, das kommt erst später - momentan übertrage ich die Daten seriell über den PC. Mit diesen Zeilen: MCUCR.0 = 0 MCUCR.1 = 1 MCUCR.2 = 0 MCUCR.3 = 1 Setze ich die Interrupt eigenschaften fest, d.h. soll der Interrupt bei einer steigenden oder fallenden Flanke bzw. bei Null ausgelöst werden. @Dirk: Diese Zeile besagt ja schon "$Timer1=Timer, Prescale=1, CompareA=DisConnect, Clear", dass mein Timer den gleichen Takt wie der Prozessor hat, d.h. in 10ms 80000 Takte. Wenn du die nun durch 255 teilst, kommst du genau auf meinen Wert. Das mit den Interruptprioritäten ist mir auch klar, deswegen habe ich ja meine Frage hier gestellt! Wie kann ich das umgehen bzw. abändern oder geht das gar nicht? Mein Timer läuft netzsynchron, da der Timer mit einem Nulldurchgang gestartet wird. Ich verstehe ehrlich gesagt deinen Kommentar nicht so ganz - wenn dich dieses Thema nervt, dann schau es dir einfach nicht an. Was ich probiere und teste ist meine Sache und ich werde wegen solcher sinnlosen Kommentare garantiert nicht aufhören meinen Dimmer zu bauen. Wie gesagt: Mein 1-Kanal Dimmer läuft erste Sahne - Mein 4-Kanal-Dimmer läuft nur wegen der Interruptprobleme nicht - wenn ich zum ersten Mal einen Wert übertrage, dann wird richtig gedimmt.
Das habe ich dir doch gerade gesagt, wenn dein prozess gerade im der timerrouine festhängt auch wenn du ihn Stopst vor einem "RETI" und du Daten überträgst kann der Uartinterupt nicht ausgelöst werden und die Daten gehen verlohren. Frage doch einfach die UCSRA,FE und OR Register ab, dann wirst du es feststellen. MfG Dirk
@ben, ich habe mal den Code geladen und versucht, zu compilieren/assemblieren. Dein Code schon mal ausbprobiert? Die Variable COMPARE1 gibt es beim Mega8 garnicht, weil das Register "OCR1H" und "OCR1L" überhaupt nicht definiert ist! ;-Line--0050----Compare1=313-- ldi zl,Low(313) ldi zh,high(313) out OCR1H,zh out OCR1L,zl Statt dessen muss es heissen: ;-Line--0050----Compare1A=313-- ldi zl,Low(313) ldi zh,high(313) out OCR1AH,zh out OCR1AL,zl Man sollte schon die Fehlerausgaben, die FastAVR ausgibt, auch als solche interpretieren und nicht alles wild in den AVR hineinflashen! 1. E:\Projekte\Atmel\..\mega-8-mhz-test.asm(219) : error : Undefined variable referenced 2. E:\Projekte\Atmel\..\mega-8-mhz-test.asm(220) : error : Undefined variable referenced 3. E:\Projekte\Atmel\..\mega-8-mhz-test.asm(382) : error : Undefined variable referenced 4. E:\Projekte\Atmel\..\mega-8-mhz-test.asm(383) : error : Undefined variable referenced 5. E:\Projekte\Atmel\..\mega-8-mhz-test.asm(383) : error : Undefined variable referenced Ich fang' auch noch an zu suchen! Hast Du schon Hausaufgaben fertig?!? Leicht gereizt AxelR. Thread abbestellt
Das habe ich auch gar nicht - ich vergaß: Du musst die Zeilen : out OCR1H,zh out OCR1L,zl gegen out OCR1AH,zh out OCR1AL,zl ersetzen - das habe ich immer gemacht und dann gings auch.
Hallo Axel Der misst von Fan... ist immer nich nicht da. Keine Ahnung warum nicht. Was machst du dich denn überhaut mit dem mist hir verrückt wird doch sowieso nichts. Mein Teil kennst du ja. MfG Dirk
So Leute, mein 4-Kanal Dimmer funktioniert nun nach einer Softwareüberarbeitung -> Der Fehler lag im Umgang mit den Variablen - Arrays dauern in der Verarbeitung zu lange. Außerdem habe ich den Interrupt nun so eingestellt, dass er nach einer logischen Pegeländerung aktiviert wird (das ist bei den Megas neu soweit ich das weiß). Nun muss ich nur noch das DMX-Signal einbauen und dann ist das Dimmerpack einsatzbereit.
ich hab da mal noch eine Hardwarefrage: Hat jemand eine gute schaltung zur Störunterdrückung? Meine Dimmer laufen meißt mit 1000W (auch mal mit 3000W :-)) da brummt nicht nur die Sterioanlage sondern auch die Scheinwerfer. Ich hab schon eine Drossel und ein RC-Glied drinn, aber offenbar etwas falsch dimensioniert.
@Ben Compare1"A" muss es heissen. Es ist m.E. nicht notwendig, den Comparematch erneut zu laden. @Georg haben bei ebay kürzlich Dimmerdrosseln für DMX Packs angeboten. Wie viele brauchst Du? http://www.mikrocontroller.net/forum/read-3-183971.html#183971 AR.
Ich habe meine bei Reichelt bestellt - da gibt die auch. Mein Dimmerpack ist überigens jetzt komplett fertig - es läuft wunderbar - als Ansteuerungssoftware benutze ich DMX-Control. Das ist echt Sahnemäßig gut, vor allen Dingen, wenn man für Winamp den Analyser und das Input-Plugin installiert, denn dann kann man den Sound, den die Band auf der Bühne erzeugt direkt als Lichtorgel auf die Lichtanlage weiterleiten - kommt gut! :-)
Das Probem an den Spulen ist, das sie dem Strom von ca. 14A bei 3000W nicht abhalten. Aber ich hab gesehen es gibt eine Ausführung für 10A, die werd ich mal testen.
Hallo Leute, Habe bereits einen dimmer gebaud mit einen LCD und Keyboard womit u.a. die DMX adresse zu setzen ist. Alles auf nen Mega8. Durch das programm nun zu gross wert wolte ich die mega8 touchen mit einem mega168, aber dat geht nicht.
1 | Rec_isr: |
2 | Dmxcheck = 1 |
3 | $asm |
4 | |
5 | 'Routine voor het beoordelen van ontvangen Data |
6 | 'Variabelen definieren |
7 | .def Uart_status = R16 |
8 | .def Uart_byte = R17 |
9 | .def Uart_temp1 = R18 |
10 | |
11 | |
12 | IN Uart_status,ucsra 'Laad register Uart_status (R16) met waarde van UART Status Register |
13 | IN Uart_byte,UDR 'Laad register Uart_Byte (R17) met waarde van UART I/O Data Register |
14 | |
15 | SBRC Uart_status,FE 'Sla 1 regel over indien Uart_status (R16) = 0xFE (254 dec) (Break) |
16 | |
17 | 'Indien break gedetecteerd is spring naar Loop1 anders spring naar Reset |
18 | RJMP Asm_reset 'Spring naar Asm_reset bij overlengte van de databyte = DMX Reset |
19 | RJMP Asm_Loop1 'Spring naar Asm_loop1 als Data = OK---> |
20 | |
21 | Asm_reset: |
22 | LDI Uart_temp1,$00 'Laad register Uart_temp1 (R18) met waarde $00 (Adresteller terugzetten) |
23 | |
24 | 'Data aan Basicvariabelen overzetten |
25 | STS {Dmx_count_temp} , Uart_temp1 'Sla register Uart_temp1 (R18) op in S-Ram variabele Dmx_count_temp |
26 | STS {Dmx_byte} , Uart_byte 'Sla register Uart_byte (R17) op in S-Ram variabele Dmx_byte |
27 | |
28 | RJMP Asm_exit 'Relatieve sprong naar Asm_exit (einde verhaal) |
29 | |
30 | Asm_loop1: |
31 | STS {Dmx_byte} , Uart_byte 'Sla Register Uart_byte (R17) op in S-Ram variabele Dmx_byte |
32 | |
33 | Asm_exit: |
34 | |
35 | |
36 | $end Asm |
fehlermeldung: beim compilieren: Beim regel: IN Uart_status,ucsra >>>>> fehler .EQU not found Beim regel: SBRC Uart_status,FE >>>>> fehler Illegal character [expected (,got"[FE]] Wer weiss was ich falsh mache? Habe nur M168def.dat gebraucht in platz von M8def.dat Uberigens verzeihe meinem slechtes deuts... Komme from die niederlanden
Deshalb musst du nicht gleich einen 3 Jahre alten, und 2,5 Jahre 'ruhenden', Thread missbrauchen. Schau dir mal die Atmel-Appnotes AVR094 und AVR095 an (hier: http://atmel.com/dyn/products/app_notes.asp?family_id=607#Migration%20Notes). Du musst wahrscheinich UCSRA0 und FE0 benutzen. hth. Jörg
Deshalb musst du nicht gleich einen 3 Jahre alten, und 2,5 Jahre 'ruhenden', Thread missbrauchen. Schau dir mal die Atmel-Appnotes AVR094 und AVR095 an (hier: http://atmel.com/dyn/products/app_notes.asp?family...). Du musst wahrscheinich UCSRA0 und FE0 benutzen. exakt :)
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.