Uhr mit Bascom, Mega8 und 3,6MHz Quarz?

Gast #353350
Lesenswert?
• ▲
▼
Hallo zusammen,

ich bin gerade dabei mit meinen Mikrocontroller eine Schaltung zu
realisieren, die auf Basis einer Uhrzeit und analogen Wert
(A/D-Wandler) einen Ausgang schaltet.
Leider muss ich einen 3,6MHz Quarz verwenden. Geht leider nicht anders.
Deswegen ist dieser Ansatz der falsche.

Kennt jemand eine Möglichkeit, oder hat jemand sogar einen
Quelltestansatz, wo man mit o.g. Vorraussetzungen eine Uhr zu
programmieren? Die Genauigkeit spielt hier weniger eine Rolle.

Würde mich über Hilfe sehr freuen!

Gruß
q-stkr
#353352
Lesenswert?
• ▲
▼
Eine Uhr ist letztendlich auch nichts anderes
als ein Zähler der in regelmäßigen Abständen
hochzählt.

Also: Timer aufsetzen und eine Zeitbasis erzeugen
zb. alle 1ms kommt ein Overflow Interrupt. Die
Anzahl der Overflows zählst du mit. Sind
1000 erreicht (wegen 1ms), ist 1 Sekunde vergangen
und du zählst eine Variable 'Sekunden' hoch. Nach
60 Sekunden kommt 1 Minute mehr, nach 60 Minuten
werden die Stunden um 1 hochgezählt, usw.
Gast #353353
Lesenswert?
• ▲
▼
Hallo,

mein Problem ist das bei dem ATMega8 und Bascom es fertige Routinen
gibt um eine Uhr zu programmieren. (Config Clock) Diese funktioniert
aber nur mit einem 3,2KHz Quarz. Ich habe es getstet und auch schon in
Foren gelesen das es mit meinem 3,6MHz Quarz nicht geht. Deswegen war
die Frage ob jemand eine Möglichkeit kennt eine Uhr mit einem 3,6MHz
Quarz zu programmieren.

Gruß
q-stkr
Gast #353354
Lesenswert?
• ▲
▼
Du brauchst keinen externen Quarz!

Enable Interrupts
config clock = soft

Date$ = "18.07.06"
Time$ = "10:00:00"

sollte funktionieren....

Deinen Sekundentakt kannst du dann bei der automatisch generiereten
_sec abgreifen.
Gast #353355
Lesenswert?
• ▲
▼
Hallo,

die Idee von Karl Heinz ist nicht schlecht, ich bin nur neu in dem
Metier und bin deswgen nicht so fit in sachen Interrupt aber ich glaube
das werde ich mal versuchen.

Micha, genau das habe ich versucht geht aber leider nicht wegen dem
Quarz. Warum auch immer. Ich kann auf meinen 3,6 MHz Quarz leider nicht
verzichten. In einigen Dokus ist erwähnt das es nur mit einem 3,2 KHz
Quarz geht.

Gruß
q-stkr
Gast #353356
Lesenswert?
• ▲
▼
Kannst du die Quelle dieser "geht nicht mit 3,6MHz"-Aussage mal
posten?
Man will ja immer noch was dazu lernen... g

Betreibe übrigens den ATM seit 1/2 Jahr durchgehend ohne zusätzlichen
Quarz :-)
Gast #353360
Lesenswert?
• ▲
▼
Hallo,

vielen Dank für den Dateianhang. Habe die Uhr schon in mein Programm
integriert. besten Dank dafür.

Ich habe jetzt noch zusätzlich vor die Uhr über einen vom PC gesendeten
Sting zu aktualisieren, wenn PC-Kontakt beteht. Dabei habe ich aber 2
Probleme mit Lösungsansätzen.

Über die serielle Schnittstelle kommt alles in Bitform an. Eine 1 hat
dann zum Beispiel den Wert 49.
Lösungsansatz dazu wäre eine "Tabelle" in Bascom zu erstellen wo das
ganze umgesetzt wird.
Das andere ist ich kann nur Werte von 0 bis 9 schicken, was zum
Beispiel bei der Uhr ab 10 schwierig wird. Auch hier kann ich eine
Tabelle erstellen.

Tavellen sind umfangreich und umstänlich. Gibt es eine elegantere
Lösung wie ich Bytes/Strings aus 2 Werten zusammen setzten kann und wie
ich Werte in einem String auch als wirkliche werte und nicht Ascii-mäßig
ausgegeben bekomme?

Würde mich über Hilfe sehr freuen.

Gruß
q-stkr
#353361
Lesenswert?
• ▲
▼
> Lösungsansatz dazu wäre eine "Tabelle" in Bascom zu erstellen wo
das
> ganze umgesetzt wird.

So'n Quatsch.
Zieh einfach vom Zahlenwert (also den 49) 48 ab und
du hast deine Zahl. Im ASCII Code sind die Codes
für die Zeichen '0' bis '9' schön aufsteigend angeordnet.

> Das andere ist ich kann nur Werte von 0 bis 9 schicken, was zum
> Beispiel bei der Uhr ab 10 schwierig wird. Auch hier kann ich eine
> Tabelle erstellen.

Was ist da schwierig daran.
Du weist wie du eine Ziffer umwandeln kannst.
Wenn du also '2' '8' empfängst (für 28), dann rechnest
du
   '2' - 48  -> 2   --+
   '8' - 48  -> 8   -------------+
                      |          |
                      v          v
                      2 * 10  +  8  -> 28

Deshalb nennt man unser gewohntes System auch das
Zehnersystem: Weil jede Stelle nach links immer den
Zehnfachen Wert hat.
Gast #353362
Lesenswert?
• ▲
▼
Hallo,

vielen Dank für den Tipp.

Ich glaube ich denke immer zu kompliziert. Ich denke nur immer dafür
gibt es bestimmt Funktionen in Bascom aber an einfache Mathematik ...

Ich werde es mal ausprobieren!

Gruß
q-stkr
Gast #353364
Lesenswert?
• ▲
▼
>>Zieh einfach vom Zahlenwert (also den 49) 48 ab

oder schreib einfach in Bascom "Chr(Zahlenwert)"
Gesamtzahl = Chr(Zahlenwert1) + Chr(Zahlenwert2)
wobei Zahlenwert1 die Zehnerstelle ist und Gesamtzahl ein String sein
muss.
Gast #353367
Lesenswert?
• ▲
▼
ja, das ist aber völlig irrelevant, wenn man statt der "1" eine 1
haben will.
Und wenn man aus den Strings/Charactern "1" und "2" 12 machen will,
bringt einem deine Methode eher auch nicht weiter.
val() ist wohl inzwischen Basic-Standard (sofern man von
Basic-Standards reden kann).
Es geht ja um die Umwandlung von einzelnen Zeichen in Zahlen (mit denen
man dann auch rechnen kann).
#353369
Lesenswert?
• ▲
▼
@Digi Clock

Aha

Und du denkst also, dass

Gesamtzahl = Chr(Zahlenwert1) + Chr(Zahlenwert2)
Zahl = Val( Gesamtzahl )

einfacher ist und schneller ausgeführt wird als

Zahl = ( Zahlenwert1 - 48 ) * 10 + ( Zahlenwert2 )

Es ist relativ sinnfrei sich zunächst einen String
zusammenzubasteln, nur damit man danach den kompletten
String wieder in eine Zahl umwandelt
#682141
Lesenswert?
• ▲
▼
Ich versuch hier auch grade eine Uhr zum laufen zu bekommen.
Warum steht meine UHR ???

$regfile = "m8def.dat"
$crystal = 4000000

$hwstack = 32
$swstack = 10
$framesize = 40

Enable Interrupts
Config Clock = Soft

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , 
Db7 = Portd.7 , Rs = Portd.2 , E = Portd.3


Config Lcd = 16 * 1a

Date$ = "18.07.06"
Time$ = "10:20:00"

Do

 Cls

   Lcd Time$

  Waitms 500

Loop


End

Eiegntlich sollte die Uhr doch so laufen. (Abgesehen davon das Sie nicht 
die korrekte Zeit zählt weil nicht der richtige Quarz drin ist)

Grüße

Jörg
Gast #682204
Lesenswert?
• ▲
▼
Nimm mal das "Wait500ms" raus. Wenn Du einen anderen Quarz drin hast, 
mußt Du das natürlich auch dem Kompiler "erzählen", sonst vergehen 
vielleicht Stunden, ehe eine Sekunde rum ist. ;-)


MfG Paul

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren