PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mal wieder eine "fast" funktionierende Stoppuhr



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.

Feuerring
09.08.2016, 00:57
Ich benutze ein Arduino nano clone, mit einem Atmega328p und dem Ext.8Mhz quartz.

haben die nicht 16 HHz ?!

würde aber die Reihenfolge von Print und dem aktivieren / deaktivieren des Timer ändern, sonst misst Du die zeit zum ausgeben noch mit ..



Start1:
Enable Timer1
Print "Start"
Return

'-----------------------------------------
Stop1:
Disable Timer1
Print "Stop"
Print "Zeit:" ; Minuten ; ":" ; Sekunden ; ":" ; Millisekunden ; " "
Reset Timer1
Sekunden = 0
Minuten = 0
Millisekunden = 0
Flag = 0
Return




habe mehrere Arduino nano clone mit dem gleich Programm (1 Hz Blinklicht) laufen, nach einer Zeit blinken die alle unterschiedlich ...

oberallgeier
09.08.2016, 09:53
.. Ich benutze ein Arduino nano clone, mit einem Atmega328p und dem Ext.8Mhz quartz ..
haben die nicht 16 HHz ?! ..Genau das (ok, das "HHz ist wohl ein Rechtschreibfehler) - und bei meiner Einstellung der Fuses wird angezeigt "Ext. Crystal Osc. 8.0- MHz; Start-up .." - damit soll angedeutet werden: 8.0 MHz und darüber (nach oben offen). Daher gehört in die Startfrequen ganz bestimmt statt Deinem "$crystal = 8000000" ein "$crystal = 16000000" (obwohl ich keinerlei Ahnung von bascom habe).


.. habe mehrere Arduino nano clone mit dem gleich Programm (1 Hz Blinklicht) laufen, nach einer Zeit blinken die alle unterschiedlich ..Wen wundet das? Resonatoren dieser Bauart (http://de.rs-online.com/web/p/keramik-resonatoren/7214811/?searchTerm=721-4811&relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6 265724D504E266C753D656E266D6D3D6D61746368616C6C267 06D3D5E283F69292852537C5253207C52532D293F5C647B337 D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332 C347D2426706F3D313426736E3D592673743D52535F53544F4 34B5F4E554D4245522677633D4E4F4E45267573743D3732312 D34383131267374613D3732313438313126) haben nicht unüblicherweise laut technischen Daten eine Frequenz-Toleranz ±0.5% !