mit hinkelsteine auf spatzen ?
Macht ein AVR nicht 10 000 AD Wandlungen/Sek bei 16 MHZ wo man sicher den Nulldurchgang erkennt ?
Mal der andere Ansatz.
Gento
Druckbare Version
mit hinkelsteine auf spatzen ?
Macht ein AVR nicht 10 000 AD Wandlungen/Sek bei 16 MHZ wo man sicher den Nulldurchgang erkennt ?
Mal der andere Ansatz.
Gento
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!