- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Uhr: wait-Anweisung im Hauptprogramm und sectic

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Anzeige

    Praxistest und DIY Projekte
    Wozu jedesmal Cursor off?

    Am besten ohne waitms arbeiten.
    Du kannst S in einer anderen Variablen zwischenspeichern und wenn S geändert wurde das Display aktualisieren. Außerdem zählst Du jede Sekunde S hoch, da brauchst Du nicht Time$ vergleichen
    Code:
    Cursor Off
    dim s_alt as long
    const sTag =60*60*24
    Do
    if s <> salt then    
       salt=s
       Cls    
       Locate 1 , 1    
       Lcd S    
       Locate 2 , 1    
       Lcd "Zeit " ; Time$ 
    end if 
    Loop   
    Sectic: 
    incr s                                                   'Sekunden-Tageszähler
    if s=stag then
        S = 0 
       Time$ = "00:00:03"                                          'Kompensation Uhrenquarz 
    End If 
    Return
    Geändert von peterfido (14.06.2011 um 16:24 Uhr)
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  2. #12
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.02.2006
    Beiträge
    221
    Zitat Zitat von Vitis Beitrag anzeigen
    hmmm ... wenn du über einen zweiten String gehst könnts gehen, aber das ist nur ne Spekulation ... also

    dim tempstring as string*8

    tempstring=time$
    if tempstring="00:00:00" then
    ' irgendwas
    endif
    Ja, genau so geht es , ich danke dir.
    Da kann man mal sehen, wie man fehlgeleitet werden kann. Weil ich für die Displayanzeige Seite 2 statt 50ms 500ms hatte, glaubte ich dass dies der Grund sein müsste.
    Aber dass ein anderer Displayinhalt (genauer: ob time$ angezeigt wird oder nicht) doch tatsächlich die Ursache war, dass es einmal ging und einmal nicht, das hätte ich doch wirklich nicht vermutet.

  3. #13
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.02.2006
    Beiträge
    221
    Zitat Zitat von peterfido Beitrag anzeigen
    Wozu jedesmal Cursor off?

    Am besten ohne waitms arbeiten.
    Du kannst S in einer anderen Variablen zwischenspeichern und wenn S geändert wurde das Display aktualisieren. Außerdem zählst Du jede Sekunde S hoch, da brauchst Du nicht Time$ vergleichen
    Code:
    Cursor Off
    dim s_alt as long
    const sTag =60*60*24
    Do
    if s <> salt then    
       salt=s
       Cls    
       Locate 1 , 1    
       Lcd S    
       Locate 2 , 1    
       Lcd "Zeit " ; Time$ 
    end if 
    Loop   
    Sectic: 
    incr s                                                   'Sekunden-Tageszähler
    if s=stag then
        S = 0 
       Time$ = "00:00:03"                                          'Kompensation Uhrenquarz 
    End If 
    Return
    danke für die tolle Anregung. Da ich aber noch mehrere Variablen anzeigen lasse, wird es mir zu kompliziert.
    Ich bin jetzt schon froh dass es überhaupt zuverlässig funktioniert
    Nur das Wort "zuverlässig" muss sich noch bestätigen...

  4. #14
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    ja, das sind die Probleme die mitunter mit Bascom Highlevelbefehlen entstehen ... man sucht sich den Wolf wenns klemmt, daher verwende ich die nur sehr selten und kann auch nur dazu raten so einfache Funktionen wie Uhrzeit oder Stringoperationen zu Fuß zu machen. Der Code wird zwar idR nen Tick größer, das Programm ggf ne Spur langsamer aber man weiß was der Controller macht.
    Wobei die wirksamste Waffe dabei die Overlayvariablen sind mMn.

    Ich vermute, dass Time$ n Konstrukt ist aus ner internen Sekundenzählung im Timer Interrupt, sprich, intern werden nur Sekunden gezählt und bei der Abfrage von Time$ wird aus der Sekundenzahl der String gebildet. Dass das nur bei einer Stringzuweisung und nicht bei einer If-Abfrage passiert ist nervig, scheint aber so.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #15
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Time$ wird sekündlich aktuell gehalten. Jedoch benötigt ein String vergleich mehr Ressourcen als "zu Fuß" die Systemvariablen _sec, _min und _hour abzufragen. Die Zeitkorrektur von 3 Sekunden lässt sich auch mit _sec=3 erledigen. Besser wäre es, wenn die Zeit erst gar nicht so weit abschweift. Ich nutze in meinen Projekten auf verschiedene Arten Datum und Uhrzeit. In einem Projekt habe ich die Uhr-routine komplett selbst geschrieben. config clock nutze ich selten. Und bei Config DCF lässt sich jeder Quarz nehmen (man braucht keinen Uhrenquarz, jedoch wird eine Timer belegt), selbst wenn gar kein DCF Empfänger angeschlossen ist, läuft die Uhrzeit weiter...

    Auch ein CLS würde ich nicht in jedem Durchlauf nehmen. Ich schicke immer Strings fester Länge zum Display. So flackert es nicht, wenn der selbe Text wieder erscheinen soll.

    Das const sTag = lässt sich auch vorher berechnen und als Zahl (86400) eingeben. Sollte so aber auch funktionieren, da rechnet dann halt der Compiler.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Hauptprogramm schleife fängt woanders an ?
    Von Tredory im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 21.02.2009, 21:43
  2. Wait-Anweisung durch Interrupt unterbrechen?
    Von CapSob im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 18
    Letzter Beitrag: 05.06.2008, 10:30
  3. [erledigt] globale Variable in ISR ändern + im Hauptprogramm
    Von grumpf im Forum C - Programmierung (GCC u.a.)
    Antworten: 29
    Letzter Beitrag: 11.02.2008, 12:53
  4. Großes Hauptprogramm und Debounce
    Von PCMan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 08.10.2006, 22:14
  5. Problem Timer <-> Hauptprogramm
    Von darxon69 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 12.02.2006, 12:41

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad