Der Nulldurchgang wird ja ohne Probleme erkannt!
Einfach 230V an INT0, INT bei Change und alle 10mS wird ohne noch größere Verzögerung ein INT ausgelöst.
Der Nulldurchgang wird ja ohne Probleme erkannt!
Einfach 230V an INT0, INT bei Change und alle 10mS wird ohne noch größere Verzögerung ein INT ausgelöst.
Es lag am MOC. Hab heute einen 3020 gekauft, Widerstand angepasst und es geht.
Jetzt hab ich nur das Problem, das ich nicht genau weiss, wie ich den 8-Bit Timer1 des Tiny26 nutzen kann.
Kann mir da jemand helfen?
Im Datenblatt steht er als Timer1.
Ich hab ihn mit Config usw nach RNAVR eingestellt.
Mit Timer0 funktioniert es alles. Aber wenn ich alles auf Timer1 umschreibe, kommt eine Fehlermeldung in der Zeile wo der Timer wieder vorgeladen werden soll.
Timer1 = Timervorgabe
erzeugt den Fehler:
Assigment Error[Timer1:0 Timervorgabe:6]
An der 6 für A=3 liegt es nicht.
Hier nochmal der ganze Code:
Code:$regfile = "at26def.dat" $crystal = 16000000 Led Alias Porta.4 Triac Alias Porta.7 Taster Alias Pina.2 Config Porta.4 = Output Config Porta.7 = Output Config Porta.2 = Input Porta = &B0000100 'PullUp von Pin PA2 aktivieren Config Timer1 = Timer , Prescale = 256 'Config Rc5 = Pinb.2 Dim A As Word Dim B As Word Dim C As Integer Dim Address As Byte , Command As Byte Dim Timervorgabe As Word 'Const Timervorgae = 131 Config Int0 = Change 'bei jeder Halbwelle reagieren Enable Int0 Enable Interrupts On Int0 Int0_isr On Timer1 Timer_irq Enable Timer1 Set Led Do 'Getrc5(address , Command) If Taster = 0 Then Incr A Reset Led Waitms 10 'entprellen Set Led End If If A = 4 Then A = 0 If A = 0 Then Timervorgabe = 131 If A = 1 Then Timervorgabe = 100 If A = 2 Then Timervorgabe = 48 If A = 3 Then Timervorgabe = 6 Loop Int0_isr: 'Waitus C 'Set Triac 'Waitus 100 'Reset Triac Start Timer1 Return Timer_irq: Timer1 = Timervorgabe Set Triac Stop Timer1 Waitus 100 Reset Triac Return
Hallo Marco,
ich baue zur Zeit auch an einem derartigen Dimmer. Mit dem elektronischen Teil bin ich vertraut, jedoch bisher weniger mit der AVR Programmierung. Dein letzter Code ist mir aber weitestgehend klar.
Hast Du mittlerweile einen lauffähigen Code, den Du hier posten könntest?
Und wo ist der Schaltplan hin? Kann auch sein, daß ich blind bin. Ich finde ihn jedenfalls nicht. Über diesen würde ich mich also auch sehr freuen! [-o<
Ich denke mal, den Schaltplan siehst du nur, wenn du angemeldet bist.
Ich habe mir jetzt ein paar Tiny45 bestellt (sind auch schon da) weil ich keine Lust mehr hatte da rumzurätseln.
Es wundert mich aber doch, das es keine Lösung gibt was den Timer angeht.
Einen neueren Code habe ich bis jetzt noch nicht. Mir fehlt noch eine Routine für IR. Dieses Jahr werde ich das wohl auch nicht fertig bekommen.
Wo ist denn dein Problem bei der Programmierung? Vielleicht kann ich dir ja auch ohne neueren Code helfen.
Deine Timerzeiten (Timervorgabe) sind mir noch nicht ganz klar. Wie kommst Du auf diese?
Alle 10ms beginnt eine neue Halbwelle. Ich gehe davon aus, daß Dein ZC-Interrupt genau beim Nulldurchgang auslöst.
Bei Timervorgabe = 131 würde der Triac bei 16Mhz und Prescale=256 ca. 2 ms nach Nulldurchgang auslösen.
Bei Timervorgabe = 6 nach ca. 0,1 ms.
Also kann die Lampe ja nur ziemlich schwach runtergedimmt werden, oder versteh ich da was falsch?
Löst Dein ZC-Interrupt denn überhaupt genau im Nulldurchgang aus, oder etwas später?
Ausserdem dürfte das Hoch- und Runterdimmer etwas zu schnell gehen, wenn bei Taster=0 in der Schleife nur 10ms gewartet wird, oder?
Danke!
Lesezeichen