Unregistriert
08.08.2016, 20:48
Hallo Community,
so langsam aber sicher bin ich am verzweifeln.
Ich bin dabei eine simple Stopuhr zu basteln.
Soweit funktioniert es auch so wie es soll, allerdings stimmt die gestoppte Zeit überhaupt nicht.
Ich benutze ein Arduino nano clone, mit einem Atmega328p und dem Ext.8Mhz quartz.
Einen Code habe ich im Internet gefunden den ich ein wenig geändert habe.
$regfile = "m328pdef.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 32
$swstack = 8
$framesize = 24
'-------------------------
Config Pind.2 = Input
Config Pind.3 = Input
Portd.2 = 1
Portd.3 = 1
Config Portd.2 = 0
Config Portd.3 = 0
'----------
Dim Millisekunden As Integer
Dim Minuten As Byte
Dim Sekunden As Byte
Dim Runden As Byte
Dim Flag As Integer
Config Timer1 = Timer , Prescale = 256
Const Timervorgabe = 34286
On Timer1 Timer_irq
Enable Interrupts
Millisekunden = 00
Minuten = 0
Sekunden = 0
Flag = 0
Declare Sub Start1
Declare Sub Stop1
Declare Sub Reset1
'---------------------------------------------
Do
Debounce Pind.2 , 0 , Start1 , Sub
Debounce Pind.3 , 0 , Stop1 , Sub
Loop
'---------------------------------------------
Start1:
Enable Timer1
Print "Start"
Return
'-----------------------------------------
Stop1:
Print "Stop"
Print "Zeit:" ; Minuten ; ":" ; Sekunden ; ":" ; Millisekunden ; " "
Disable Timer1
Reset Timer1
Sekunden = 0
Minuten = 0
Millisekunden = 0
Flag = 0
Return
'------------------------------
Timer_irq:
Timer1 = Timervorgabe
Incr Millisekunden
If Millisekunden = 1000 Then
Incr Sekunden
Millisekunden = 00
End If
If Sekunden = 60 Then
Incr Minuten
Sekunden = 00
End If
Incr Flag
Return
Seht ihr einen Fehler ?
Ich bekomme es einfach nicht hin.
Vielen Dank im Voraus.
- - - Aktualisiert - - -
Ich glaube ich habe das Problem gelöst.
Bei einem Prescaler von 256 und einer Vorgabe von 62411 scheint es zu funktionieren, allerdings werden die Millisekunden immer im einstelligen Bereich angezeigt.
so langsam aber sicher bin ich am verzweifeln.
Ich bin dabei eine simple Stopuhr zu basteln.
Soweit funktioniert es auch so wie es soll, allerdings stimmt die gestoppte Zeit überhaupt nicht.
Ich benutze ein Arduino nano clone, mit einem Atmega328p und dem Ext.8Mhz quartz.
Einen Code habe ich im Internet gefunden den ich ein wenig geändert habe.
$regfile = "m328pdef.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 32
$swstack = 8
$framesize = 24
'-------------------------
Config Pind.2 = Input
Config Pind.3 = Input
Portd.2 = 1
Portd.3 = 1
Config Portd.2 = 0
Config Portd.3 = 0
'----------
Dim Millisekunden As Integer
Dim Minuten As Byte
Dim Sekunden As Byte
Dim Runden As Byte
Dim Flag As Integer
Config Timer1 = Timer , Prescale = 256
Const Timervorgabe = 34286
On Timer1 Timer_irq
Enable Interrupts
Millisekunden = 00
Minuten = 0
Sekunden = 0
Flag = 0
Declare Sub Start1
Declare Sub Stop1
Declare Sub Reset1
'---------------------------------------------
Do
Debounce Pind.2 , 0 , Start1 , Sub
Debounce Pind.3 , 0 , Stop1 , Sub
Loop
'---------------------------------------------
Start1:
Enable Timer1
Print "Start"
Return
'-----------------------------------------
Stop1:
Print "Stop"
Print "Zeit:" ; Minuten ; ":" ; Sekunden ; ":" ; Millisekunden ; " "
Disable Timer1
Reset Timer1
Sekunden = 0
Minuten = 0
Millisekunden = 0
Flag = 0
Return
'------------------------------
Timer_irq:
Timer1 = Timervorgabe
Incr Millisekunden
If Millisekunden = 1000 Then
Incr Sekunden
Millisekunden = 00
End If
If Sekunden = 60 Then
Incr Minuten
Sekunden = 00
End If
Incr Flag
Return
Seht ihr einen Fehler ?
Ich bekomme es einfach nicht hin.
Vielen Dank im Voraus.
- - - Aktualisiert - - -
Ich glaube ich habe das Problem gelöst.
Bei einem Prescaler von 256 und einer Vorgabe von 62411 scheint es zu funktionieren, allerdings werden die Millisekunden immer im einstelligen Bereich angezeigt.