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