PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Uhr mit taster sellen



dessert_4
28.01.2010, 15:13
ich habe folgendes Problem

ich habe mir das myavr bord mk2 usb gekauf und dazu noch ein LCD Adon
und habe folgendes programmiert und das hohzählen der uhr funktioniert schon


$regfile = "m8def.dat" 'für Mega8
$crystal = 4000000

' /// UHR
Dim Sekunde As Word
Dim Minute As Word
Dim Stunde As Word
Dim H As String * 2
Dim H1 As String * 2
Dim M As String * 2
Dim M1 As String * 2
Dim S As String * 2
Dim S1 As String * 2





'// Zum setzten von Stunde Minute Sekunde setzen
Sekunde = 00
Minute = 00
Stunde = 00

'/// LCD ///
Config Lcd = 16*2
Config Lcdbus = 4

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _
Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Cls
cursor off
'/// TIMER ////

Config Timer1 = Timer , Prescale = 64
Const Startwert = 7936

On Timer1 Ontimer1 'Interrupt-Routine für Timer1-Overflow
Enable Timer1 'Timer1-Overflow-Interrupt einschalten
Enable Interrupts 'Interrupts global zulassen
'-------------------------------------------------------------------------------
Main:
Do
'Uhrzeit in Sekunde Minute Stunde
If Sekunde > 59 Then
Sekunde = 0
Incr Minute
End If

If Minute > 59 Then
Minute = 0
Incr Stunde
End If

If Stunde > 23 Then
Stunde = 0
End If

'/// LCD Anzeige Stunde Minute Sekunde

Home
H = Str(stunde)
H1 = Format(h , "00")
M = Str(minute)
M1 = Format(m , "00")
S = Str(sekunde)
S1 = Format(s , "00")
Lcd H1 ; ":" ; M1 ; ":" ; S1
Waitms 100
Loop


End
'//////////////////
Ontimer1:
Timer1 = Startwert
Incr Sekunde
Return

meine frage ist nun wie kann ich mit hilfe der taster die Zeit einstellen und dann loslaufen lassen bitte um hilfe
kann mir da jemand helfen mir fehlt ein ansatz um das problem zu lösen
wäre über jeden Link und jedes Code beispiel sehr dankbar

for_ro
28.01.2010, 18:26
Du könntest dein Programm z.B. so abändern:


$regfile = "m8def.dat" 'für Mega8
$crystal = 4000000

' /// UHR
Dim Sekunde As Word
Dim Minute As Word
Dim Stunde As Word
Dim H As String * 2
Dim H1 As String * 2
Dim M As String * 2
Dim M1 As String * 2
Dim S As String * 2
Dim S1 As String * 2

Ddrc.0 = 0 'PortC.0-3 als Eingang
Ddrc.1 = 0
Ddrc.2 = 0
Ddrc.3 = 0
Portc.0 = 1 'PullUps ein, Taster schaltet Pin nach GND
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1


'// Zum setzten von Stunde Minute Sekunde setzen
Sekunde = 00
Minute = 00
Stunde = 00

'/// LCD ///
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _
Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Cls
cursor off
'/// TIMER ////

Config Timer1 = Timer , Prescale = 64
Const Startwert = 7936

On Timer1 Ontimer1 'Interrupt-Routine für Timer1-Overflow
Enable Timer1 'Timer1-Overflow-Interrupt einschalten
Enable Interrupts 'Interrupts global zulassen
'-------------------------------------------------------------------------------
Main:
Do
'Uhrzeit in Sekunde Minute Stunde
If Sekunde > 59 Then
Sekunde = 0
Incr Minute
End If

If Minute > 59 Then
Minute = 0
Incr Stunde
End If

If Stunde > 23 Then
Stunde = 0
End If

'/// LCD Anzeige Stunde Minute Sekunde

Home
H = Str(stunde)
H1 = Format(h , "00")
M = Str(minute)
M1 = Format(m , "00")
S = Str(sekunde)
S1 = Format(s , "00")
Lcd H1 ; ":" ; M1 ; ":" ; S1
Waitms 100
Loop


End
'//////////////////
Ontimer1:
Timer1 = Startwert
If Pinc.0 = 1 Then Incr Minute : If Minute = 60 Then Minute = 0
If Pinc.1 = 1 Then Decr Minute : If Minute = 255 Then Minute = 59
If Pinc.2 = 1 Then Incr Stunde : If Stunde = 60 Then Stunde = 0
If Pinc.3 = 1 Then Decr Stunde : If Stunde = 255 Then Stunde = 59
Incr Sekunde
Return

Deine Angaben von $crystal=4.000.000, Prescaler=64 und Timer Startwert = 7936 passen nicht zusammen. Die ISR soll doch bestimmt einmal pro Sekunde aufgerufen werden. Deine Werte passen aber zu einem Quarz mit der Frequenz 3686400Hz.
Config LCD = 16*2 hast du zweimal drin, Config LCDBUS=4 musst du weglassen, wenn du die Pins einzeln angibst.

dessert_4
29.01.2010, 09:37
danke für den tipp aber irgendwie funktioniert das net
ich muss die uhrzeit bevor die uhr läuft stellen können
ich habe alles versucht aber irgendwie funktioniert das net

kannst du mir villeicht weiter helfen

Andree-HB
29.01.2010, 10:53
http://www.pixelklecks.de/projekteii/quarzbasiertesoftclock/index.php

for_ro
29.01.2010, 17:14
ich muss die uhrzeit bevor die uhr läuft stellen können

Warum?

Wenn das wirklich sein muss und du nicht die Routinen mehrfach haben möchtest, dann würde ich das durch ein Start_flag erledigen.
Also am Anfang einfach
Start_flag=1
und dann die Timer_ISR so:

Ontimer1:
Timer1 = Startwert
If Pinc.0 = 1 Then Incr Minute : If Minute = 60 Then Minute = 0
If Pinc.1 = 1 Then Decr Minute : If Minute = 255 Then Minute = 59
If Pinc.2 = 1 Then Incr Stunde : If Stunde = 60 Then Stunde = 0
If Pinc.3 = 1 Then Decr Stunde : If Stunde = 255 Then Stunde = 59
If Start_flag=0 then Incr Sekunde
Return
Dann brauchst du aber noch einen weiteren Taster, der die Uhr freigibt, also das Start_flag auf 0 setzt. Alternativ könntest du auch mehrere Taster gleichzeitig drücken.

dessert_4
01.02.2010, 09:37
das problem ist nur ich weiß net wie ich das in meine queltexxt einarbeiten soll
wenn ich das so schreibe
spielt meine ujr total verrückt
er zählt einfach mal die stunden hoch und dann die minuten aber die sekunden bleiben auf null