Kurze Aktualisierung...
Nach 15 Stunden hab ich es auf 1 Minute und 5 Sekunden Gangfehler geschafft.
Die Variable D wurde hinzugefügt, um jede Minute einen anderen Zählwert einzusetzen. Ist mit sicherheit keine elegante Methode. Vorallem kann ich mir vorstellen das es besser wäre, schon innerhalb einer Minute zu mitteln. Und das ganze nicht über mehrere Minuten zu ziehen. Warscheinlich hätte man mit etwas Mathematikverständnis den richtigen Mittelwert auch direkt errechnen können. Da ich ein sollches Verständnis nicht besitze, lief es über try and error![]()
Hier ist der aktuelle Code:
Code:$regfile = "attiny45.dat" '### 2 MHz Quarz, Fusebit für 1/8 Systemtakt gesetzt ### $crystal = 250000 $hwstack = 36 $swstack = 4 $framesize = 4 '### Bit zum minütlichen Wechsel des Ausgangsports ### Dim B As Bit '### Zählvariable wird beim Timerüberlauf inkrementiert ### Dim C As Word '### Zählkonstante für Mittelung Dim K As Word Dim D As Byte '### Ausgänge für beide Brückenzweige ### Config Portb.0 = Output Config Portb.1 = Output '### Timer0 konfigurieren. 0,25 MHz (Systemtakt) / 64 (Prescaler) = 3906,25 / 256 (8-Bit Timer) * 60 (Sekunden) = 915,527 ### Config Timer0 = Timer , Prescale = 64 '### Timerüberlauf ### On Ovf0 On_ovf0 Enable Ovf0 Enable Interrupts Start Timer0 C = 0 D = 0 Do Select Case D Case 0 : K = 915 Case 1 : K = 916 Case 2 : K = 915 Case 3 : K = 915 Case 4 : K = 916 Case 5 : K = 916 Case 6 : K = 916 Case 7 : K = 916 Case 8 : K = 915 End Select If D = 8 Then D = 0 End If Incr D If C = K Then C = 0 Toggle B If B = 0 Then Portb.1 = 1 Waitms 400 Portb.1 = 0 Else Portb.0 = 1 Waitms 400 Portb.0 = 0 End If End If Loop End '### Routine bei Timerüberlauf ### On_ovf0: Incr C Return







Zitieren

Lesezeichen