Zeitschaltuhr

technicus123

Neues Mitglied
13. Feb. 2009
118
0
0
Sprachen
Hi,

Ich hätte da mal ein vielleicht einfache Frage zu meinem Problem. Ich mache gerade meine Projektarbeit für meinen Techniker. Es geht darum, das wenn der Prozessor eingeschaltet wird, sofort die Zeit ( 00:00:00 ) über config clock anfängt hochzuzählen. Die wirkliche Uhrzeit ist mir egal. Ich wollte drei Modis haben, wo das Gerät nach 15, 30 und 45 min. abgeschaltet wird. Wie kann ich die Zeit von Time = "00:00:00" einfach abgreifen und ein Gerät nach ablauf dieser Zeit ausschalten?


MFG
Jens
 
Hallo Jens,

das hängt von Deiner Konfiguration ab. Mit "CONFIG CLOCK" konfigurierst Du in BASCOM zunächst die Softclock welche dann auch sofort zum Laufen beginnt.

In einem nächsten Schritt direkt nach CONFIG CLOCK solltest Du das Format für das Datum festlegen. Das machst Du wie folgt:
Code:
Config Date = DMY , Separator = .

Damit bekommst Du das Datum im Format DD.MM.YY.

Gut, ab jetzt stehen Dir die Variablen Time$ und Date$ zur Verfügung. Die Uhrzeit ist im Format "HH:MM:SS" abgelegt. Die Variablen lassen sich auch beschreiben und damit kannst Du z.B. die Uhrzeit und das Datum auf einen Wert setzen.

Außerdem werden Dir durch die Konfiguration der Uhr vom Compiler weitere Variablen angelegt. Diese heißen _sec, _min, _hour, _day, _month und _year.
Auch diese Variablen können direkt abgefragt und auch gesetzt werden.

Um nun z.B. auf 30 Minuten nach Systemstart abzuprüfen musst Du nur die _min abfragen, bis diese den Wert 30 hat. Das kannst Du in mehreren IF-Anweisungen tun oder Du nimmst die SELECT-CASE-ELSE Anweisung.

Beantwortet das Deine Frage?

Grüße,
markus
 
Ich muss doch irgendwie das ganze einfacher programmiert bekommen. taste drücken, prozessor zählt bis 15 min. und schaltet dann den port aus. das muss doch bestimmt auch ohne eine softclock gehen, oder?
 
Ich würde es so machen:

1. Einen Timer für 1 Sekunde aufziehen.
2. Vom Timer eine Variable hochzählen lassen.
3. Im Main dann prüfen, ob die Variable einen Wert hat, der 15, 30 oder 45 Minuten entspricht.
4. Fertig.

Grüsse
Heinrich
 
Ich kann keinen externen quarz (tosc) anhängen, weil ich diese beiden pins schon benötige. das andere problem ist, das ich noch die pwm nutzen will. gibt das kein stress mit den timern und der pwm???
 
Hallo Jens,

ein Mega hat glücklicher Weise etwas mehr als nur einen Timer. Ich habe jetzt nicht genau auf dem Schirm welchen Mega Du einsetzt aber es sollte kein Problem sein einen Timer als PWM zu verwenden und mit dem anderen Timer einen "Takt" für das Zählen von Variablen zu erzeugen.

Das Problem was ich sehe ist die Genauigkeit des internen Quarz, wenn Du nicht die Möglichkeit hast an den Mega einen externen Quarz anzuhängen der genau läuft. Wie genau müssen denn Deine 15, 30 und 45 Minuten sein?

Warum willst Du einen Quarz bei TOSC anhängen? Beschalte doch XTAL1 und XTAL2 mit einem genauen externen Quarz und betreibe damit Deinen internen Timer. Das kann auch zur Not ein 8-Bit Timer sein. Bei externen 1 MHz Takt kannst Du mit einem 8-Bit-Timer immer noch 262,144 ms Takte erzeuge. Dann nimmst Du halt eine Word-Variable und läßt diese auf 10300 zählen und schon hast Du 45 Minuten.

Grüße,
Markus
 
Hi Markus,

ich benutze einen atmega644. Alle Ports sind beschaltet. Könntest du mir anhand eines Beispiels beschreiben, wie ich das mit dem Timer lösen kann? Habe da leider keinen Plan. Mit der Programmierung habe ich noch nicht angefangen, da ich noch auf die Platine warte.


Gruß
Jens
 
Hallo zusammen,

Ich kann keinen externen quarz (tosc) anhängen, weil ich diese beiden pins schon benötige. das andere problem ist, das ich noch die pwm nutzen will. gibt das kein stress mit den timern und der pwm???

Ich habe jetzt nicht genau auf dem Schirm welchen Mega Du einsetzt ...

Warum willst Du einen Quarz bei TOSC anhängen? Beschalte doch XTAL1 und XTAL2 mit einem genauen externen Quarz ...

ich bin der Meinung, an dieser Stelle ist der Punkt erreicht an dem uns Jens
mit etwas mehr Info versorgen sollte, damit wir ihm weiterhelfen können ohne
im Kaffesatz lesen zu müssen was er da vor hat ;) :D

Nur mal nen eindruck von mir :rolleyes:

Prozessortyp : ??
Was soll alles gemacht werden : ??

Gruß
Dino
 
Also nunmal Butter bei die Fische;).


Bauteile:

Atmega644
GLCD 240*128 mit einem t6963c Controller mit Touch
uln2003 zum ansteuern der Relais.
2 A/D Wandler zum auslesen der Pt100 Fühler.
Buz110 der an einem PWM Pin hängt um zwei 28 V Lampen zu dimmen.

Es handelt sich um die Abschlußarbeit für die Technikerschule die Ich in Teilzeitform besuche.

Ich will über den Touchscreen die Dauer der Einschaltzeit und die Temperatur einstellen. Es geht mir deshalb nur um die Einschaltzeit der Rest ist mir schon klar, weil ich schon mit der restlichen programmierung ( bis auf den touch ) Erfahrung habe.

Gruß
Jens
 
Hallo Jens,

Also nunmal Butter bei die Fische;).
das hat doch schon mal Gesicht :D

Bauteile:

Atmega644
GLCD 240*128 mit einem t6963c Controller mit Touch
uln2003 zum ansteuern der Relais.
2 A/D Wandler zum auslesen der Pt100 Fühler.
Buz110 der an einem PWM Pin hängt um zwei 28 V Lampen zu dimmen.
Der Mega644 hat nen normalen Quarzanschluß den man auch nicht weg-fusen
kann. Damit sind die Timer also schon mal Quarzgenau. das mit dem TOSC
ist eigentlich nur mal wieder diese BASCOM-Eigenheit damit die Softclock
läuft. BASCOM braucht dafür unbedingt die TOSC-Pins mit nem 32,768kHz
Quarz für den Timer der die Softclock steuert. Man könnte dafür ohne
Probleme den Systemtakt nehmen - aber nein :rolleyes:

Also das Ding hat 3 Timer. Da sollte doch wohl einer übrig sein um damit
diese Eieruhr hinzukriegen ... ;) Ich würd das auch wie schon geschrieben
über nen Timer machen. Einen raussuchen, der frei ist, ne Variable hochzählen
lassen und dann ist gut.

Mit BASCOM kenn ich mich aber nicht so aus. Eher in Assembler ;)

Es handelt sich um die Abschlußarbeit für die Technikerschule die Ich in Teilzeitform besuche.

Ich will über den Touchscreen die Dauer der Einschaltzeit und die Temperatur einstellen. Es geht mir deshalb nur um die Einschaltzeit der Rest ist mir schon klar, weil ich schon mit der restlichen programmierung ( bis auf den touch ) Erfahrung habe.
Na denn wünsch ich dir mal gutes Gelingen und viel Erfolg bei der Abschlußarbeit.

Gruß
Dino
 
Mit dem Timer hätte ich schon eine kleine Lösung...

Code:
$regfile = "m32def.dat"
$crystal = 1000000
$sim
$lib "lcd4.lbx"                                             ' use the alternative library




Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Postb.7

Config Lcd = 16 * 2
Dim A As Integer
A = 1

Config Timer0 = Timer , Prescale = 256                      
 Enable Timer0                                             
 On Timer0 Isr_von_timer0                                   
 Enable Interrupts



Do
   Lcd A
   Lowerline
   Lcd " Hallo"

   If A = 40 Then
   Stop Timer0
   End If

Loop



Isr_von_timer0:                                             
 A = A + 1

 Return

Das habe ich mit dem Simulator in Bascom simuliert. Zählt der Timer bis 40 wären das ungefähr 22 sekunden. Das auf die Minuten hochzurechnen ist dann nicht so schwer;) . Jetzt ist nur die Frage ob mir der Timer Probleme machen könnte mit dem PWM Kanal. Kann mir einer dazu etwas sagen?

Gruß

Jens
 
Hallo Jens,

Mit dem Timer hätte ich schon eine kleine Lösung...

Code:
...
..
Config Timer0 = Timer , Prescale = 256                      
 Enable Timer0                                             
 On Timer0 Isr_von_timer0                                   
 Enable Interrupts
..
...

...
Jetzt ist nur die Frage ob mir der Timer Probleme machen könnte mit dem PWM Kanal. Kann mir einer dazu etwas sagen?
Das kann man so nicht direkt sagen ...
Der Mega644 hat ja 3 Timer. Man kann also auf einem Timer die PWM laufen
lassen und auf nem anderen Timer deine "Eieruhr". Dann ist das unabhängig
voneinander. Theoretisch könnte man das bei Hardware-Engpässen aber
auch auf irgendeine Art koppeln. Was natürlich dann alles komplizierter
macht.
Auf welchem Timer läuft denn die PWM ? und soll die "Eieruhr" auf dem Timer0
bleiben ?

Notfalls könnte man bei Engpässen sogar die PWM in Software ausführen und
über den Timer den man sowieso schon für die "Eieruhr" verwendet takten.

Gruß
Dino
 
Hi,

Ich will den Ausgang PD7 ( OC2A ) für die PWM benutzen. Der Datenport für das Display soll PB0-7 sein und der Controllport soll PD0-6 sein. Seht ihr da ein Problem drin?

Gruß
Jens
 
Hi,

die Softclock von BASCOM läuft auch ohne externen Uhrenquarz. Ich verwende in meinen Systemen fast ausschließlich den 16MHz externen Quarz und die Softclock läuft vom Clock abgeleitet sogar relativ genau. Ich habe bei den Quarzen eine ungenauigkeit von ca. 3 Sekunden am Tag. Das reicht mir.

Mir ist also schleierhaft, warum man unbedingt den TOSC braucht, sicher nicht um nur auf 15, 30 oder 45 zu zählen.

@Jens; hast Du auch ein Schaltbild, wenn ja dann her damit, dann können wir uns das mal ansehen ..... :p

Grüße,
Ma
 
Okay hier der Schaltplan. Ei Markus ich mach doch nichts mehr mit dem Tosc:p. Das ist der Vorabschaltplan. Die Belegung ist die gleiche, wie die, die auf dem Pc auf der Arbeit ist.


gruß
jens
 

Anhänge

  • TEST1.tif
    111,5 KB · Aufrufe: 43
Okay, und warum spendiersz Du Deinem schnuckeligen ATmega nicht einfach extern an XTAL1 und XTAL2 ein paar Herzen?
 
Hi Markus,

werde ich noch machen. Wie gesagt, das war nur mal ein Schaltplan auf die Schnelle. Hoffe nur , das die Timer sich nicht hauen....
 
Hi,

der Mega644 hat 3 Timer welche beiden völlig unabhängig voneinander arbeiten. Wenn Du OC2A so hast Du zunächst den Timer2 welches ein 8-Bit-Timer ist für die PWM belegt. Das ist aus meiner Sicht OK. Bedeutet aber gleichzeitig, dass Du Timer0 (8Bit) und Timer1 (16Bit) für andere Aufgaben frei hast. Du kannst Dir also aussuchen, ob Du mit einem schellen 8-Bit Timer oder einem langsamen 16-Bit-Timer auf Deine Zeiten zählen möchtest. Ich selber würde zunächst den Timer 1 verwenden und ihn so konfigurieren, dass er einen schönen Sekundentakt erzeugt. 1. Hast Du damit keine große Interrupt-Last und 2. läßt sich damit ne ganze Menge mehr machen. Du könntest z.B. die SoftClock initialisieren und mit der SoftClock den SECTIC aktivieren und schon hast Du einen integrierten Sekundentakt und eine Stoppuhr obendrein.

Grüße,
Markus
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)