-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Bascom und die aktuelle Uhrzeit

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.12.2008
    Ort
    Köln
    Beiträge
    459

    Bascom und die aktuelle Uhrzeit

    Anzeige

    Hallo Zusammen,

    nachdem ihr mir bei meinem letzen Problem hier so gut geholfen habt (dafür nochmal vielen, vielen Dank) hoffe ich das ihr mir nochmal weiterhelfen könnt.

    Für ein Projekt ist es wichtig das mein AtMega32 immer die Aktuelle Uhrzeit und den Wochentag (das genaue Datum mit Jahr wäre schön, aber durch Schaltjahre und meine nicht so tollen Bascom Kentnisse ehr schwierig) kennt, da er zu bestimmten Zeiten an bestimmen Tagen Verscheidene Aktionen (Sub's) ausführen muss.

    Nun ist es so das ich mir in die Hautschleife einfach reingeschrieben habe das der Atmega jede Sekunde zur Variable Sekunde 1 dazurechnet und beim erreichen von 60 sofort auf 0 geht. Minuten, Stunden und Wochentage sind so auch drinn und es scheint auch zu funktionieren.

    Jetzt ist es aber so das der Controller ab und an in ein Sub schalten muss und dort Teilweise über 1ne Stunde drinn verweilt um aufgaben zum auf und abdimmen realisiert. Vieleicht sollte ich noch erwähnen, es wird ein Aquarium-Controller. Nun zählt aber natürlich da die Uhr nicht weiter und wenn ich zurück in die Haubtschleife komme, ist die Uhrzeit falsch.

    Gibt es eine möglichkeit die Uhr immer im Hintergrund weiterzählen zu lassen
    (und auch beim erreichen von 60sek die Minuten um 1 erhöhen und die Sekunden auf 0 zurückstelle)?

    Ich hoffe ihr könnt mir da helfen

    Gruß Dominik

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Hey,

    wenn du kein Uhrenquarz an deinem Controller hast, wird das mit der Uhrzeit schwer.
    Ich würde eine DS1307 I2C RTC nehmen und dann den SQW auf 1Hz stellen und den Pin an einen Interrupt Pin vom Controller hängen.
    Und dann wird bei jedem Interrupt die RTC ausgelesen und du hast ein Datum und eine Uhrzeit (und das super genau....glaube bei meiner RTC bin ich bei einer Ungenauigkeit von 1min pro Monat
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von Tido
    Registriert seit
    14.11.2006
    Ort
    OWL
    Alter
    41
    Beiträge
    609
    Hi,

    dann lass' deine Sekundenaddition statt in der Hauptschleife in einer Interruptroutine stattfinden, die 1x pro Sekunde aufgerufen wird. Dies passiert dann auch, während dein Programm in der Sub ist.
    Wenn dir die Genauigkeit reicht und du ohne zus. HW auskommen willst, kannst du das so machen, ansonsten die Lösung von Kampi.
    MfG
    Tido

    ---------------------------------------------------
    Have you tried turning it off and on again???
    ---------------------------------------------------

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    was gibt es noch zu sagen

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Zitat Zitat von Dominik009 Beitrag anzeigen
    Jetzt ist es aber so das der Controller ab und an in ein Sub schalten muss und dort Teilweise über 1ne Stunde drinn verweilt um aufgaben zum auf und abdimmen realisiert.
    Ich glaube da liegt das Problem. Meine Vermutung ist, dass du mit Befehlen wie Wait den Controller in der Sub anhältst, um zu warten. Eine Sub, die eine Stunde Rechenzeit benötigt kann ich mir nicht vorstellen. Der Trick ist, das Programm an keiner Stelle per Wait oder ähnliches warten zu lassen.

    Vielleicht möchtest du uns deinen Code zeigen?
    Grüße
    Thomas

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.12.2008
    Ort
    Köln
    Beiträge
    459
    Hmm, erstmal vielen dank für die Ideen. Also ich werde mir wohl einen DS1307 kaufen müssen. Das scheint einfacher als die DCF77 Metode zu sein. Alternativ hab ich überlegt einen kleinen Attiny für die Uhr zu nehmen, den hab ich auch da, ich würde es jedoch nicht hibekommen den per I2C zu koppeln, da ich hier 0 Erfahrung habe

    Die Sache ist, das ich mit dem Mega32 die Steuerung von meinem Aquarium regeln möchte. Momentan ersmal nur das Licht, bzw. den LED Leuchtbalken.

    Dieser soll morgens aufdimmen und abends abdimmen. Zu bestimmten eingestellten Zeiten und das ganze nicht linear damit es schöner aussieht. Das dimmen hab ich per PWM realisiert und da sind halt viele Wait befehle drinnen. Der PWM Wert wird etwas erhöht und dann wird. 36 Sekunden gewartet. Dannach wird der Wert wieder erhöht und wieder 36 sek. gewartet. Das ganze läuft in 2 Sub funktionen ab.

    Den Code zeigen, muss ich mal sehn wie ich das anstelle, da ich auf nem alten Pentium II Rechner mit Win95 ohne USB programmiere. Ich werd es aber versuchen.

    Gibt es sonst vieleicht noch ideen und möglichkeiten?

    Gruß Dominik

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Wie gesagt....für Zeitmessung ist eine DS1307 eigentlich richtig gut.
    Anbindung über 4 Leitungen, brauch kaum Zusatzhardware und den 1Hz Takt kannst du prima für Interrupts nutzen.
    Und du hast da eigentlich auch einen kompletten Kalender drin.
    Du kannst dann z.B. deinen µC schlafen legen und den durch den RTC Interrupt wach werden lassen und dann die Uhrzeit auslesen und dann wieder schlafen legen.
    So hat er kaum was zu tun und du machst den ganzen Kram quasi Interruptgesteuert (was eine super Methode ist!).
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.12.2008
    Ort
    Köln
    Beiträge
    459
    Klingt gut, kann der DS1307 auch zu bestimmten Uhrzeiten einen zusätzlichen Interput ausgeben? Weil sonst kann ich den Mega ja nicht schlafen legen, da er sonst das auf und abdimmen verpassen würde.

    Das einzigste was für mich eine kleine Hürde sein könnte ist die Kommunikation via I2C, da hab ich überhaubt keine Ahnung von und das scheint auch etwas komplexer zu sein.

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Zitat Zitat von Dominik009 Beitrag anzeigen
    Gibt es sonst vieleicht noch ideen und möglichkeiten?
    Hallo Dominik,
    bevor ich zusätzliche Hardware anschließe, würde ich es erst mal mit den Bordmitteln probieren und sehen, welche Genauigkeit damit zu erreichen ist. Auch mit einem normalen Quarz kommst du bei 50ppm auf max 4 sec Abweichung pro Tag, macht 2 min / Monat oder 12min im halben Jahr. Dann steht die Sommerzeit Umstellung an, wo du eh die Zeit neu setzen musst
    Also würde ich mir einen Timer nehmen, der in bestimmten Interval überläuft. Daraus leitest du dir die Sekunden ab.
    Z.B. so
    Code:
    $crystal 16000000
    Config Timer0 = Timer , prescale=256, clear_timer=1
    Compare0=249                 'macht 250 Timer-Takte, also 16.000.000/256/250=250, also bei 250 ist eine Sekunde rum
    On Compare0 sek_isr
    ...
    Enable Compare0
    Enable Interrupts
    Do
       If sek_flag=1 then
           'hier zählst du die Sekunden, Minuten, Stunden, Tage usw. hoch
           'und machst deine Zeitvergleiche, schaltest Ausgänge usw.
           'und du zählst eine Variable hoch bis 36, dann änderst du den PWM Wert entsprechend ab
          sek_flag=0
       End If
       ...
    Loop
    End
    sek_isr:
       Incr 4ms
       If 4ms = 250 Then
          sek_flag=1
          4ms=0
       End If
    return
    Da wartet dann nichts mehr.
    Wenn das nicht genau genug ist, kannst du den Timer2 auch asynchron über einen 32KHz Quarz an den TOSC Eingängen betreiben. Diese Quarze haben in der Regel ein max. Abweichung von 20ppm, sodass du unter eine Minute im Monat kommen kannst.

  10. #10
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Zitat Zitat von Dominik009 Beitrag anzeigen
    Klingt gut, kann der DS1307 auch zu bestimmten Uhrzeiten einen zusätzlichen Interput ausgeben? Weil sonst kann ich den Mega ja nicht schlafen legen, da er sonst das auf und abdimmen verpassen würde.

    Das einzigste was für mich eine kleine Hürde sein könnte ist die Kommunikation via I2C, da hab ich überhaubt keine Ahnung von und das scheint auch etwas komplexer zu sein.
    Hey,

    ne das kann sie nicht.
    Aber da du den Controller ja jede Sekunde aufweckst, wirst du die Zeit wohl nicht verpassen oder sehe ich das falsch ?
    Das tolle an der DS1307 ist, dass es dazu massig Beispiele im Netz gibt (in C, Bascom und allem anderen).
    Ansonsten hilft dir hier jeder gerne weiter! (selbige gilt für mich ....das Prinzip was ich da beschreibe verwende ich bei meiner Röhrenuhr).
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Aktuelle Bascom-Version (2.0.7.4 BETA oder 2.0.7.5)
    Von Thomas E. im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 22.09.2012, 16:38
  2. Drehgeber - MBed - Borland - Wie kann ich die aktuelle Position anzeigen?
    Von boorstii im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 0
    Letzter Beitrag: 31.05.2011, 08:00
  3. wie bekommt man die aktuelle "build" PC-Zeit
    Von jar im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 25.05.2007, 22:09
  4. Wie lautet die aktuelle BASCOM Version ?
    Von lumilux im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 05.03.2006, 20:00
  5. Was is die aktuelle Bascom (Full) Version ?
    Von PicNick im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 68
    Letzter Beitrag: 12.01.2006, 19:40

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •