PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Uhrzeit ohne externen Uhrenquarz



CapSob
12.04.2011, 10:35
Hallo!

Würde gerne auf meinem LCD eine Uhr betreiben, aber einen externen Uhrenquarz an XTAL kann ich bedingt durch meinen 16MHz Quarz nicht nehmen.

Wie kann ich nun eine Uhr realisieren?

Dezeitige Initialisierung, läuft aber logischerweise nicht:

Config Date = Dmy , Separator = .
Config Clock = Soft
Date$ = "12.04.10"
Time$ = "10:35:00"

Hubert.G
12.04.2011, 12:46
Du schreibst nicht welchen Kontroller du verwendest, ein Mega16 z.B. hat noch TOSC Eingänge für einen Uhrenquarz.

CapSob
12.04.2011, 13:21
Sry :)

atmega8 mit externen 16 MHz Quarz.
Belegt sind ein ADC0 mit Spannungsteiler, 40*4 Display und i2c-Bus.

peterfido
12.04.2011, 14:56
Hallo,
entweder config clock=user und die Uhr selbst programmieren oder mehr Ressourcen "verbraten" und config dcf... nehmen. Dann läuft auch eine Uhr intern, die sich so stellen lässt.

CapSob
12.04.2011, 16:27
...config clock=user und die Uhr selbst programmieren...

genau das meinte ich - wie würde ich das umsetzen?

uwegw
12.04.2011, 17:02
genau das meinte ich - wie würde ich das umsetzen?

Du richtest einen periodischen Timer-Interrupt ein, in dem du die Zeit hochzählst...

habe
13.04.2011, 20:01
Tach,

http://bascom-forum.de/index.php/topic,4773.0.html

so vielleicht??

CapSob
14.04.2011, 16:20
Ja perfekt, der Post von "habe" funktioniert prächtig!

da_miez
31.05.2011, 14:44
Hallo, bin grade auch an etwas ähnlichem. Leider kommt bei mir: "Beitrag nicht gefunden". Gibts den Post noch irgendwo?

Danke schonmal :)

CapSob
31.05.2011, 14:56
Hmm... kP.

habe dir hier aber mal mein Code, der funktionierte, anhand dem Tut:


' =================== CONTROLLER-KONFIG ===================
$regfile = "m8def.dat"
$framesize = 24
$swstack = 8
$hwstack = 32
$crystal = 16000000 ' 16 MHz
$baud = 9600 ' BAUD-Rate für RS232: 9600
$external _soft_clock ' Dieser Befehl bindet den Code der Original-Uhrenroutine ein

' =================== UHR ===================
Config Clock = User ' Teilt dem Compiler mit, daß eine eigene Uhrenroutine verwendet wird
' Die internen Variablen _hour, _min, _sec, _day, _month, _year werden erzeugt
Const _sectic = 0 ' Keine Sectic Sub verwenden
Config Date = Dmy , Separator = . ' Datum auf deutsches Format einstellen
Config Timer1 = Timer , Prescale = 256 , Clear Timer = 1 ' Clear Timer setzt Timer1 bei Erreichen des Comparewertes auf 0 zurueck
Const Ctc_value =(_xtal / 256) - 1 ' Berechnen des Compare-Wertes, bei dem Timer1 zuruecksetzt
Compare1a = Ctc_value ' Comparewert setzen
Enable Compare1a ' Compare-ISR erlauben
On Compare1a Timer1_clock_isr Nosave ' Definitition des Labels fuer Timer1 Compare-ISR
Time$ = "17:15:00" ' Stellen der Uhrzeit auf einen Beispielswert
Date$ = "14.04.11" ' Stellen des Datums auf einen Beispielswert
Dim Curr_sec As Byte ' Hier wird die aktuelle Sekunde gemerkt
Curr_sec = 255 ' Initialisieren mit einem fuer _Sec nicht vorkommenden Wert

' =================== HAUPTSCHLEIFE ===================
Do

Loop

' =================== SUB: Timer1_Clock_ISR ===================
Timer1_clock_isr: ' Falls eigener Code eingefuegt werden soll, der vor der Uhrenroutine sekuendlich
Pushall ' ausgefuehrt wird, so muss mit PUSHALL/POPALL die Sicherung der Register erfolgen

' #### Hier kann aehnlich wie bei "CONFIG CLOCK = soft, GOSUB = SECTIC" eigener Code eingefuegt werden ####

Popall ' Ohne eigenen Code kann PUSHALL/POPALL auskommentiert werden, das spart Stack
' und Ausfuehrungszeit
!jmp _soft_clock ' Ruft Bascom's Uhrenroutine auf
Return ' Nur vorhanden, damit es huebscher aussieht, dieses Return wird aber nie verwendet

Getdatetime: ' Um Bascom's Routinen zum Stellen der Uhr, wie Time$ = ... verwenden zu koennen,
Return ' muessen folgende Label als leere Subs vorhanden sein

Settime:
Return

Setdate:
Return

End