schmidtkoe
06.10.2006, 23:34
Hallo, ich möchte auf dem Display Zeit und Datum anzeigen. Dies geschieht auch allerdings zählt die Uhrzeit nie weiter sondern verharrt auf dem am Anfang definierten Zeit. Hat einer eine Ahnung was ich falsch mache ?
BlaueLed
07.10.2006, 07:44
Hi,
probier mal die Zeitanzeige in deine Do...Loop schleife einzubauen. Und noch was: Du weißt schon, das Herr Küsters ein Copyright auf seine Routinen hat ? Du dürftest den Code nicht hier reinstellen.
mfg Kay
BlaueLed
07.10.2006, 08:08
nochwas:
haste mal Start Timer1 probiert ?
mfg Kay
Hallo schmidtkoe,
der Code von Küsters setzt voraus, dass ein Uhrenquarz 32768 Hz an TOSC1/2 des M128 angeschlossen ist.
Wenn das bei dir nicht der Fall ist, braucht man eine "Softclock", die time$ und date$ aktualisiert.
Gruß Dirk
Ich habe mir gerade mal deine Code angesehen da ich mir auch gerade eine Uhr in Bascom für einen Atmega8 schreibe. (Soll irgendwann mal eine Funkuhr werden)
Du zählst die Variable _sec in deiner Timer Procedur ja gar nicht hoch. Wie soll da was weiterlaufen ?
Isr_sekundentakt:
Timer1 = 34285
Zeitanzeige = Time$
Datumanzeige = Date$
Call Lcd_print(Time$, 2, 9, 0, Schwarz, Weiss)
Call Lcd_print(Datumanzeige, 13, 9, 0, Schwarz, Weiss)
Return
Hab mal meine *.bas mit drangefügt funktioniert bei mir jedenfalls einwandfrei.
gruß matlen
Hallo matlen,
eine "Softuhr" für BASCOM könnte z.B. so aussehen.
Hier zuerst der Programmcode (Ausschnitt mit den wesentlichen Definitionen!):
Config Date = Dmy , Separator = . 'deutsches Datumsformat
Config Clock = User 'Softclock aktivieren
Dim _dayofweek As Byte 'Wochentag
Dim Sclkhsec As Byte 'Hundertstel Sekunde
$lib "softclock.lib" 'Softclock LIB
$external Softclock_1 'Softclock für 1Hz
Declare Sub Softclock_1
$external Softclock_40 'Softclock für 40Hz
Declare Sub Softclock_40
$external Softclock_100 'Softclock für 100Hz
Declare Sub Softclock_100
Config Timer2 = Timer , Prescale = 1024 'Timer 40Hz
Const Startwert = 61 'Für 8MHz
Timer2 = Startwert
On Timer2 Tim2_isr 'Überlauf 40x/s
Enable Interrupts
Enable Timer2
'Hier weitere Definitionen!
'Hauptprogramm:
Cls
Cursor Off
Date$ = "01.01.00"
Time$ = "00:00:00"
_dayofweek = 6 'Samstag (der 1.1.00)
Sekunde = 0
'****************** HAUPTPROGRAMMSCHLEIFE **********************************
Do
If Sekunde <> _sec Then
Cls
Call Showtime()
Sekunde = _sec
End If
Loop
End
'************* ENDE HAUPTPROGRAMM ******************************************
Sub Showtime()
Locate 1 , 1 'Zeile 1:
Lcd " " ; Time$ 'Uhrzeit
Locate 2 , 1 'Zeile 2:
Lcd Lookupstr(_dayofweek , Wochentag) ; ". " 'Datum
Lcd Date$
End Sub
'---------------------------------------------------------------------------
Getdatetime: 'Nicht genutzt!
Setdate:
Settime:
Return
'---------------------- Interrupt Routine ----------------------------------
Tim2_isr:
Timer2 = Startwert
Call Softclock_40 'Softclock für 40Hz
Return
'---------------------- Daten für Wochentag --------------------------------
Wochentag:
Data " " , "Mo" , "Di" , "Mi" , "Do" , "Fr" , "Sa" , "So"
... und hier die "softclock.lib":
copyright = D. Ottensmeyer
comment = BASCOM Softclock
libversion = 1.00
date = 07.10.2006
[Softclock_1]
.def Temp1 = r16
.def Temp2 = r17
;BASCOM: Dim _dayofweek As Byte
; Dim Sclkhsec As Byte
Softclock_1: ;Aufruf 1x pro Sekunde
rjmp Soft15
[Softclock_40]
Softclock_40: ;Aufruf 40x pro Sekunde
$EXTERNAL Softclock_1
*lds Temp1,{Sclkhsec}
inc Temp1 ;Hundertstel Sek erhöhen
cpi Temp1,40 ;1000ms erreicht ?
breq Soft10 ;ja -> weiter
*sts {Sclkhsec},Temp1
ret ;sonst Ende
[Softclock_100]
Softclock_100: ;Aufruf 100x pro Sekunde
$EXTERNAL Softclock_1
*lds Temp1,{Sclkhsec}
inc Temp1 ;Hundertstel Sek erhöhen
cpi Temp1,100 ;1000ms erreicht ?
breq Soft10 ;ja -> weiter
*sts {Sclkhsec},Temp1
ret ;sonst Ende
;-------------------------------------------------------------------------------
Soft10:
clr Temp1 ;Hundertstel Sek löschen
*sts {Sclkhsec},Temp1
Soft15:
*lds Temp1,{_sec}
inc Temp1 ;Sekunde erhöhen
cpi Temp1,60 ;60 Sekunden erreicht ?
breq Soft20 ;ja -> weiter
*sts {_sec},Temp1
ret
Soft20:
clr Temp1 ;Sekunde löschen
*sts {_sec},Temp1
*lds Temp1,{_min}
inc Temp1 ;Minute erhöhen
cpi Temp1,60 ;60 Minuten erreicht ?
breq Soft30 ;ja -> weiter
*sts {_min},Temp1
ret
Soft30:
clr Temp1 ;Minute löschen
*sts {_min},Temp1
*lds Temp1,{_hour}
inc Temp1 ;Stunde erhöhen
cpi Temp1,24 ;24 Stunden erreicht ?
breq Soft40 ;ja -> weiter
*sts {_hour},Temp1
ret
Soft40:
clr Temp1 ;Stunde löschen
*sts {_hour},Temp1
*lds Temp1,{_dayofweek}
inc Temp1 ;Wochentag erhöhen
cpi Temp1,8 ;letzter Wochentag erreicht ?
brne Soft50 ;nein -> weiter
ldi Temp1,1 ;Wochentag auf "1" (Montag)
Soft50:
*sts {_dayofweek},Temp1
*lds Temp1,{_day} ;Tag holen
*lds Temp2,{_month} ;Monat holen
ldi zl,low(Tagdaten*2)
ldi zh,high(Tagdaten*2) ;Anzahl Tage pro Monat holen
add zl,Temp2 ;Zeiger auf aktuellen Monat
lpm ;Anzahl Tage holen
cp Temp1,r0 ;Monatsende erreicht ?
brne Soft90 ;nein -> weiter
ldi Temp1,1 ;Tag auf 1
cpi Temp2,12 ;Jahresende erreicht ?
brne Soft100 ;nein -> weiter
*lds Temp2,{_year} ;Jahr holen
inc Temp2 ;Jahr erhöhen
cpi Temp2,100 ;Jahr 100 erreicht ?
brne Soft80 ;nein -> Ende
clr Temp2 ;Jahr 00 setzen
Soft80:
*sts {_year},Temp2 ;speichern
ldi Temp2,1 ;Monat auf 1
rjmp Soft110
Soft90:
inc Temp1 ;Tag erhöhen
rjmp Soft110
Soft100:
inc Temp2 ;Monat erhöhen
Soft110:
*sts {_day},Temp1 ;Datum speichern
*sts {_month},Temp2
ret
Tagdaten:
.db 00, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
[end]
Viel Spaß!
Dirk
schmidtkoe
07.10.2006, 21:03
Hallo zusammen, besten Dank erst mal für Eure Tipps, werde es Ende der Woche (bin vorher nicht mehr da) mal ausprobieren und berichten. Das mit dem Code wußte ich nicht oder hatte es anders verstanden, dort stand ja drin das man den Codse weitergeben darf wenn man die ersten 5 Zeilen miteinbindet. Da ich da aber rechtlich keine Ahnung von habe ist er sicherheitshalber entfernt.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.