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
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.
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
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.
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
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 :-)
Hallo, bevor mich alle korrigieren, man muss einen ca. 32KHz Quarz nutzen, ich hatte oben mich um eine Dezimalstelle vertan sorry. Für alle die es interressiert: http://www.mikrocontroller.net/forum/read-1-103678.html Gruß q-stkr
Eigentlich sollte es doch auch in Bascom möglich sein, eine Uhr zu Fuß zu programmieren. (hat Karl-Heinz ja scon angesprochen)
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
> 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.
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
>Ich denke nur immer dafür >gibt es bestimmt Funktionen in Bascom aber an einfache Mathematik ... Man natürlich auch das BASCOM-Handbuch auswendig lernen...
>>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.
chr ist bei der gegebenen Aufgabenstellung nutzlos. Er hat ja schon einen String. @q-stkr Allerdings hat Bascom eine Funktion, die die Umwandlung ganz von alleine macht: Val. Nur mal soviel zum Thema 'Handbuchstudium'
@ Karl Heinz das war wohl nichts !!! Er empfängt seriell, ein Byte (00110001 = 49), also den ASCII - Code. Chr(49) macht daraus den String "1". schönen Gruss vom Handbuch ...
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).
Mit Val () und Mid$, Left$ und Right$ kann man sich doch aus einem String den benötigten Wert "heraussägen" ?! MfG Paul
@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
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.