Time$ , Date$ und Timerbenutzung

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Hallo,
      Hier ging es um zwei Zeitgeber Clock Soft und Config DCF77(externe Zeitbasis)

      Dekaman schrieb:

      abgesehen davon, ich will's ja nicht auf ein Terminal anzeigen. Wenn ich das jetzt richtig interpretiere,
      Solange der DCF-Status.7 null ist (kein gültiger Zeitstempel) ,werden die Daten ausgegeben. Dann 1 sekunde
      warten, und wenn Status.7 immer noch null ist, alles von vorn. Ist aber Status.7=1 (gültiger Zeitstempel),
      dann keine Datenausgabe, weil Print...... übersprungen wird ??
      Terminalanzeige sollte nur für Kontrollablauf sein. Im Ablauf nur die Sekunde eingefügt wegen der Sichtbarkeit.
      Kannst dich noch viel mehr anzeigen lassen, wie zum Beispiel
      Bits im DCF-Flags oder Bits im Status-Byte DCF_Byte. Bit 5 könnte meine Behauptung bestätigen. Ist aber nicht gefragt.

      Dekaman schrieb:

      ch dachte , das Statusbit 7 wird erst gesetzt, wenn der Zeitstempel als gültig erkannt wurde. Also erst nach
      einer Minute?
      Oder habe ich die Aussagen jetzt falsch interpretiert?
      Jede Minute wird geschaut ob Clock synchron zur DCF ist.
      Statusbit7 = 1 Soft- Clock wurde Synchronisiert bzw. muss nicht sein.
      Nun kommt Bit 5 ins Spiel. Schalte Sectic auf Sekundentakt wenn Synchronisierung gestoppt ist. (push rDCF_Temp1) nötig.

      Gebe zu, dass ich mein „Kopfgeschwirre“ nicht mehr gut in deutsche Schriftform erstellen kann.
      Erlaube mir trotzdem noch eine Erklärung zu schreiben.
      Sectic hat nichts mit DCF77- Protokoll zu tun. Ist einfach als Option aktivierbar.
      Soft- Clock ist ja im Kurzzeitbetrieb(sage mal pro Stunde) Sekunden genau. So funktioniert auch dein Bürowecker.
      Nun ein Fall: DCF bekommt eine falsche Flanke nun wird Syn. –Prüfung gestartet.
      Zwangsläufig wirdStatusbit7 = 0 gesetzt bis Statusbit7 = 1 ist kann schon einige Zeit vergehen. Nun kommen meine bedenken.
      Was steht in z.B Time$ wenn Sectic noch beim Dim wandeln ist/war. Wenn es dumm läuft kann der Syn.- Versuch schon eine Ewigkeit dauern.
      Darauf wollte ich nebensächlich Hinweisen, dass die Variante funktioniert aber immer ein Fehlerquelle aktiviert.
      Muss doch nicht sein, ist meine persönliche Meinung, die natürlich auch falsch sein kann.
      Hauptsächlich war mein Kommentar gedacht. „Allgemein ist die Bemerkung als falsch zu betrachten“.

      Dekaman schrieb:

      Ich denke, wir beenden dieses Thema jetzt. Bis auf ein paar Spekulationen ist nicht viel bei
      rum gekommen.
      Für dich oder allgemein für alle Leser?

      Mit freundlichen Grüßen in der Hoffnung, hast es nicht wieder so sehr schwer diesen Kommentar zu lesen.
      Sind eben nicht alle Techniker perfekte Deutsche.
      Meine Empfehlung einfach Kommentar belächeln und schweigen.
    • fredred schrieb:

      Meine Empfehlung einfach Kommentar belächeln und schweigen.
      Das willst du doch nicht wirklich, oder?
      Wenn du dir schon die Mühe machst, helfen zu wollen, soll das auch honoriert werden.
      Einfach nur lächeln und schweigen ,ist m.M. nach unhöflich.
      "Sind eben nicht alle Techniker perfekte Deutsche." Wer ist das schon? Auch mein Schreibstil
      ist nicht das Maß der Dinge , und lässt auch noch viele Wünsche offen.

      Wenn man sich Mühe gibt, liest man aus deinen Beiträgen viel Hintergrundwissen raus,
      gehört zwar manchmal nicht direkt zum Thema, ist aber trotzdem interessant zu wissen.
      Man hört ja nie auf zu lernen.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Dekaman schrieb:

      Erst als man mir dort unmissversständlich gesagt hatte, das Bascom ja keine richtige
      Programmiersprache sei, es müßte zumindest C sein, bin ich auf das Bascom - Forum gestoßen.
      Ja das liest man dort sehr häufig und meistens von Leuten die Lernresistent gegenüber anderen Programmiersprachen sind.
      Dabei habe ich sogar mal gelesen, dass Bascom schnelleren Code erzeugt als bei C.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • @djmsc
      Ich will ja hier keine Diskussion lostreten, was besser oder schneller ist.
      Ich kann nur Bascom , und das auch nicht richtig. Hindert mich aber nicht daran,
      auch anderen Programmiersprachen das gleiche Existenzrecht zu zusprechen.
      Ich weine meiner Liaison mit den Microcontrolern keine Träne nach.
      Ich habe hier mein zu Hause gefunden.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Hallo,
      so ein ähnliches Problem hat mich auch schon mal stark beschäftigt.
      Geholfen hat mir das Buch "AVR Mikrokontroller Lehrbuch" von Roland Walter.
      Diese Buch hilft mir manche Dinge etwas besser und tiefgründiger zu verstehen.

      Was ich so nicht explizit wußte, obwohl es ja eigentlich bei einem 8 Biter klar sein müsste:

      16 Bit Operationen führt der AVR mittels einem Temp genannten 8 Bit Hilfsregister durch. Dieses Temp Register gibt es nur ein mal.

      Ich hoffe es ist o.K. wenn ich ein paar Sätze aus diesem für mich sehr guten Buch zitiere:

      "Wenn man in der Hauptschleife des Programmes ein 16 Bit Register liest/schreibt , welches das Temp-Register verwendet, dann sollen vorher unbedingt die Interrupts abgeschaltet werden. !!!!

      Andernfalls könnte das Temp-Register mitten in der Operation durch eine Interrupt-Routine verändert werden, wenn dort ebenfalls auf ein 16 BitRegisterpaar zugegriffen wird."

      In diesem Fall steht nach dem Rücksprung aus der Interruptroutine in dem Temp-Register ein völlig falscher Wert und dieser falsche Wert wird benutzt, um die unterbrochene Routine fertig zu bearbeiten. (In Bascom sehen ja alle Befehle so aus, als ob sie in einem Schritt abgehandelt werden. Aber in der tatsächlichen Umsetzung bestehen ja auch einfache Operationen aus mehreren Schritten)

      Ich hoffe diese Erklärung hilft Fehler zu vermeiden.
      Gruß Climber
      Komisch:Dauernd hängt sich mein Rechner auf, meine Wäsche macht das nie
    • @Climber
      Das hat der Herr Walter gut beschrieben. Das deckt sich auch jetzt mit meinen "erworbenen"
      Kenntnissen. Wenn ein Interrupt Daten ändert, sollten die anderen Interrupts fein stillschweigen,
      damit es zu keinem Datenmismatch kommt.
      Also, verhindere Interrupts der anderen Timer !!!!
      Das geht am besten, wenn man sie garnicht benutzt !!!!
      Und damit macht der Hinweis aus der Präambel des geposteten Programms wieder Sinn.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Das ist jetzt doch sehr grob formuliert.
      Es wird immer nur 1 interrupt abgearbeitet, steht ein anderer an, weil er während des laufenden interrupts ausgelöst wurde, dann steht der auch wirklich an und kann den laufenden nicht unterbrechen.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Dekaman schrieb:

      Drum sollen die anderen Timer "kaltgestellt" werden, damit sie
      dem Timer1 nicht "dazwischenfunken"
      Hm, wie soll das gehen, bzw. was hab' ich dann von einem interrupt? Ein interrupt wird doch verwendet, wenn man eine schnelle Reaktion auf ein Ereignis will, dieser Vorteil geht jetzt flöten. Wann weiß man denn, dass jetzt vom timer1 gleich ein interrupt kommen kann, um dann die anderen, möglichen interrupts kurz mal auszuschalten?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Climber schrieb:

      Was ich so nicht explizit wußte, obwohl es ja eigentlich bei einem 8 Biter klar sein müsste:
      Solche Kommentare lese ich sehr gern.
      Dann wird mein 8 Bit D Register aktivier, normal sind ja nur die 16 Bit Sa, Fr und Sc aktiv.
      Danke @Climber

      Dekaman schrieb:

      Wenn ein Interrupt Daten ändert, sollten die anderen Interrupts fein stillschweigen,
      damit es zu keinem Datenmismatch kommt.
      Falsch. Ein Interrupt stoppt das Hauptprogramm und kann auf deinen Wunsch ein Unterprogramm starten das den Stopp an gleicher Stelle + 1 wieder aufhebt, wenn Arbeit im UP erledigt ist(Return).

      Dekaman schrieb:

      @tschoeatsch
      Auch dann würde meine für mich gültige Erklärung passen.
      Wenn der Timer1 seinen Interrupt auslöst, soll ihn kein anderer Interrupt hinten
      anstehen lassen. Drum sollen die anderen Timer "kaltgestellt" werden, damit sie
      dem Timer1 nicht "dazwischenfunken".
      Ich nehm das jetzt als gegeben hin.
      Die Anzahl auch verschiedener Interrupt spielt schon eine Rolle, stehen ja in einen Stapelspeicher. Ist der erste Interrupt beendet kommt ja der Sprung ins HP also Stelle + 1 und gleich wieder ab zum nächsten UP usw. Musst im UP keine Daten ändern. Kritisch ist der Rücksprung zum HP z.B wenn an dieser Stelle ein 16 Bit Register (Word) „bearbeitet“ werden muss.
      Ein Timer "kaltstellen" damit er nicht "dazwischenfunken" ist ein falscher Ansatz.
      Ist ein Zugriff auf Datenregister erforderlich, dass diese Daten synchronisieren muss.
      Also wenn das High-Byte des Zählregisters gelesen wurde und vor dem Lesezugriff auf das Low-Byte ein Überlauf des Low-Bytes stattfindet, erhält man einen völlig unsinnigen Wert.
      Ich nenne es „Programmierschlamperei“ die Bascom zulässt. Obwohl ist auch ein kleines Problem bei ASM.

      Kurz und bündig gesagt eine Programmunterbrechung ist immer übel. Na klar wenn, diese so flink ist, das es keinen stört und notwendig ist, ist alles im grünen Digitalbereich und halt unverzichtbar.

      Nun kommt wieder mein „Aber“, gilt nur für Atmega und Attiny Familien, ab Xmegas sieht es mit den zusätzlichen Registersatz schon gewaltig anders aus.
      Einige Register werden dazu verwendet die Funktionen im Zusammenhang mit Interrupts zu definieren. Bedeutet noch mehr Sorgfalt bei Interrupts.
      Aber wenn alle Register auf Maximum gestellt fast doppelt so schell wie die alten Dinger.

      Somit Detlef, immer die spezielle Anwendung betrachten und nicht gleich alle Verallgemeinerungen als Ok einstufen. Stichwort Erde(Scheibe oder Kugel)

      Gruß
    • tschoeatsch schrieb:

      Ich dachte bislang, die Erde ist eine Möbiusschleife.

      Oh nun kannst du auch nicht mehr zwischen unten und oben oder zwischen innen und außen unterscheiden. Mein Trost bin nicht mehr der Einzige.
      Da wir unter uns sind.
      Def meiner Register
      Sa = saufen
      Fr = fressen
      Sc = schlafen
      D = denken

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von fredred ()

    • fredred schrieb:

      Oh nun kannst du auch nicht mehr zwischen unten und oben oder zwischen innen und außen unterscheiden.
      Na, ich steh' doch auf dem Boden, der ist unten, was über mir ist, ist oben. Und klar, bei einer so großen Schleife hat die natürlich auch eine gewisse Dicke, da kann ich rein graben, dann bin ich drin. Aber ich schweife jetzt ab und mach Dekamans thread kaputt. Entschuldigung!
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Hallo, für mich ist dieses Thema erst mal beendet.
      Die Frage, ob man bei Empfang von DCF-Signalen mehrere Timer arbeiten lassen kann,
      oder warum nicht, konnte nicht konkret beantwortet werden. Auch auf die Frage, wo die von
      mir geschriebene Info stehen könnte, gab es keine Antwort.
      Somit kann dieser Thread geschlossen werden.
      Die Kölner verbreiten ja eine Weisheit,die da lautet " Es ist nichts so schlecht, das es nicht noch
      für irgendwas gut ist."
      Die ursprünglich gestellte Frage konnte nicht beantwortet werden, aber dafür wurde doch einiges über
      Timer_Interrupts ,Softclock ,Statusbyte und DCF Empfang im allgemeinen geschrieben.
      Also war doch nicht alles schlecht, und für Newcomer bestimmt auch lehrreich.
      .... habe fertig .... a_58_b54cfdb4

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Michael schrieb:

      Es geht um Interrupts in Abständen von 20-25ms für DCF77. Da ist es ziemlich egal, ob mal ein paar hundert Takte gewartet werden muss.
      Interrupts in Abständen von 20-25ms für DCF77?
      Hier liegen doch meine Bedenken.
      Interrupt Sectic wird jede Sekunde aufgerufen und wie meist, bei allen Interrupts, von außerhalb der Schleife.
      Im Unterprogramm (Stellenbild:) wird sehr Zeitaufwendig (String Zeit) zerlegt und dann wird in Anzeige, notwendigerweise, noch ein BCD Format erstell.
      Nun wird Sectic ohne Rücksicht, wo der Zeiger in Schleife des HP/UP gerate steht, gestartet.
      Könnte mitten in einer „Wandlung“ sein. Wenn es nun noch den „Bau“ eines Word betrifft möchte ich nicht das Register sein, da das Ergebnis ein Beinbruch sein könnte.

      So nun mein Schlusswort:
      Detlefs Anfrage fand ich berechtigt:
      Der Code war wohl nur ein Test DCF mit 7 Segmentanzeige. Wird wohl damals nur ein abgekupferter Code gewesen sein(ist nicht abwertig gemeint)
      Er wollte nur den Hinweis aus der Präambel des geposteten Programms wissen, warum Timer0/2 nicht aktiv sein sollte.
      Frage wurde gleich beantwortet „es geht grundsätzlich um Interrups“ und der Hinweis betrifft erst mal nur den sehr eigenwilligen
      Code und sollte nicht verallgemeinert werden.

      Nun kommt das gute im Forum. Die „Hintergrundfragen“ wieso, warum usw. sind nicht immer zu 100% auf Thema bezogen, aber ein Anstoß für neue Fragen oder Themen.

      Für mich wäre richtig interessant gewesen, was der Interrupt überhaupt soll.
      Programm wird unterbrochen um eine aktuelle Systemvariable ein anderen Namen zu geben(sind ca. 2.600 Takte), nicht alles ist Gut nur weil möglich. Toggle ist okay.

      Dekaman schrieb:

      Die Frage, ob man bei Empfang von DCF-Signalen mehrere Timer arbeiten lassen kann,
      oder warum nicht, konnte nicht konkret beantwortet werden. Auch auf die Frage, wo die von
      mir geschriebene Info stehen könnte, gab es keine Antwort.
      Es gab viele Antworten. „Keiner“.
      Das technische Zeitalter ist noch nicht bereit deine Fragen zu beantworten. Frag einfach später noch mal nach.
      Hätte ich alles auch viel kürzer schreiben können. Wie.
      Lieber Detlef sei etwas sorgfältiger mit Interrupts.......
      Na dann wär diene Anfrage zu 100% beantwortet gewesen. Oder?

      Mit freundlichen Grüßen
    • fredred schrieb:

      Der Code war wohl nur ein Test DCF mit 7 Segmentanzeige. Wird wohl damals nur ein abgekupferter Code gewesen sein
      Nein, es war kein Test. Es sollte tatsächlich eine Uhr werden, an der man beim Fernsehen
      hätte sehen können, wie lange es noch bis zur Tagesschau ist.
      Und nein, nicht abgekupfert, das Programm war das Ergebnis meines damaligen Bascom Wissens.


      fredred schrieb:

      Lieber Detlef sei etwas sorgfältiger mit Interrupts.......
      Ein schönes Schlusswort.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Dekaman schrieb:

      Die Frage, ob man bei Empfang von DCF-Signalen mehrere Timer arbeiten lassen kann,
      oder warum nicht, konnte nicht konkret beantwortet werden.
      Magst du meine Antwort nicht?

      Dekaman schrieb:

      Auch auf die Frage, wo die von
      mir geschriebene Info stehen könnte, gab es keine Antwort.
      Irgendwie läuft da was schief
      Man kann nicht einfach was behaupten und dann fragen warum das so ist und nachher jammern, dass die Antworten nicht passen.
      Das läuft andersherum.
    • Michael schrieb:

      Irgendwie läuft da was schief
      Man kann nicht einfach was behaupten und dann fragen warum das so ist und nachher jammern, dass die Antworten nicht passen.
      Das läuft andersherum.
      So ist es, aber Detlefs Wunsch.

      Dekaman schrieb:

      Die Frage, ob man bei Empfang von DCF-Signalen mehrere Timer arbeiten lassen kann,
      oder warum nicht, konnte nicht konkret beantwortet werden. Auch auf die Frage, wo die von
      mir geschriebene Info stehen könnte, gab es keine Antwort.
      Somit kann dieser Thread geschlossen werden.
      sollten wir respektieren. Ohne noch ein Kommentar meinerseits. Ja kann mich beherrschen!
      Bin ja lernwillig.
    • Noch ein Versuch, leider wieder in Englisch, aus der bascom-Hilfe:

      Statements and Hardware Resources
      Top Previous Next

      Some of the BASCOM statements and functions use a hardware resource.
      This is a list of hardware resources and the statement/functions that use them.
      USART0
      $BAUD, BAUD
      USART1
      $BAUD1 , BAUD1,
      USARTx
      BUFSPACE, CLEAR, ECHO, WAITKEY, ISCHARWAITING, INKEY, INPUTBIN, INPUTHEX, INPUT, PRINT, PRINTBIN
      TIMER0
      DCF77 , READHITAG , GETRC5 , CONFIG SERVOS , TIME$, DATE$
      TIMER1
      DTMFOUT , RC5SEND, RC6SEND , SONYSEND.
      TIMER2
      TIME$, DATE$
      ADC
      GETADC
      EEPROM
      READEEPROM, WRITEEPROM
      TWI
      I2CINIT, I2CRECEIVE, I2CSEND, I2START I2CSTOP I2CRBYTE I2CWBYTE
      SPI
      SPIIN, SPIINIT, SPIMOVE, SPIOUT - SPI
      CAN
      CONFIG CANBUS, CONFIG CANMOB, CANBAUD, CANRESET, CANCLEARMOB, CANCLEARALLMOBS, CANSEND, CANRECEIVE, CANID, CANSELPAGE, CANGETINTS
      (avrhelp.mcselec.com/statements_and_hardware_resour.htm)

      Da erkennt man, das timer0 und timer2 bei time$ und date$ Routinen verwendet werden, also kann so ein timer die gerade im Hauptprogramm laufende Verarbeitung von einer solchen Variable stören. Das Problem, man weiß nicht, wann bascom das macht, weil das ja mit einem, erstmal nicht sichtbaren, code im 'Hintergrund' abläuft.
      Nebenbei meine ich, dass dcf den timer1 verwendet und nicht, wie hier beschrieben, timer0.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------