-
        

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

Thema: Uhr: wait-Anweisung im Hauptprogramm und sectic

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2006
    Beiträge
    178

    Uhr: wait-Anweisung im Hauptprogramm und sectic

    Anzeige

    Hallo,
    ich habe eine Uhrzeit mit externem Uhrenquarz laufen.
    Zudem lasse ich eine Variable S am Tag im Sekundentakt hochzählen und um 0:00 Uhr wieder auf 0 stellen:
    PHP-Code:
    Sectic:
    1                                                   'Sekunden-Tageszähler
    If Time$ = "00:00:00"then
    S = 0
    Time$ = "00:00:03"                                          '
    Kompensation Uhrenquarz
    End 
    If
    Return 
    Im Hauptprogramm benutze ich auch eine "waitms 500" Anweisung.
    Nun funktioniert mein Programm nicht, weil das Nullstellen von S nicht funktioniert, soviel habe ich nun herausgefunden.
    Ich habe den Verdacht, dass mir die waitms Anweisung verhindert, dass S um 0:00 auf 0 gestellt wird.
    Kann das sein oder wird das waitms zwangsweise immer unterbrochen wenn sectic fällig ist?
    Darf ich überhaupt eine wait Anweisung im Hauptprogramm haben, und ist gleichzeitig gewährleistet dass sectic ausgeführt wird?

    Holger

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    Im Prinzip dürfte die Sectic und die Waitms sich praktisch nicht gegeneinader stören.
    In seltenen Fällen wenn der Interrupt in die waitms fällt würde die ein paar µs länger werden, sonst nix.
    Ob der Stringvergleich mit Time$ einfach so funktioniert bin ich mir jetzt aber nicht sicher ...
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2006
    Beiträge
    178
    Also der Stringvergleich funktioniert.

    Die waitms brauche ich eigentlich nur um das Display flackerfrei zu haben.
    Und ich habe praktisch 2 Display "Seiten".
    Per Knopfdruck kann ich von "Seite 1" auf "Seite 2" wechseln.
    Eine Seite bleibt solange bestehen, bis wieder ein Knopfdruck kommt..
    Und jetzt das seltsame: bei Seite 1 habe ich nur 50ms Wartezeit - dann funktioniert mein Programm (und auch die Sekunden-Nullstellung).
    Wenn ich Seite 2 stehen lasse, welche die 500ms Wartezeit hat, dann funktioniert es nicht.
    Soweit sind jedenfalls meine derzeitigen Ergebnisse.
    Ist doch komisch, oder.
    Und da dachte ich es ist wichtig zu wissen, ob wait das sectic behindert.
    Denn dann dürfte auch waitms 50 kritisch sein, es könnte ja sein dass diese Behinderung dann nur eben seltener stattfindet (1/10 mal so häufig).
    Ich hab jetzt für seite 2 die 500ms in 50 ms umgewandelt, mal sehen , was das Programm jetzt macht.
    Das dumme ist nur dass sich das Ergebnis immer einen Tag später herausstellt, also die Fehlersuche dauert da ganz schön lang.
    Ich kann auch nicht 100%ig sagen ob das alles ist aber wir werden sehen...

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123
    Hallo!

    Das dumme ist nur dass sich das Ergebnis immer einen Tag später herausstellt, also die Fehlersuche dauert da ganz schön lang.
    Du kannst doch zu Debuggen die Uhrzeit auf z.B. 23:59:55 setzen und nur 5 sek warten,
    anstelle eines Tages, oder sehe ich das falsch?

    MfG
    Rone

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Ich seh in dem Code oben kein "WAIT".
    Ohne (original) Programm ist über Programmprobleme schwer zu befinden
    Vergiss nicht, das Problem sitzt meistens VOR dem Bildschirm
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2006
    Beiträge
    178
    Zitat Zitat von Rone Beitrag anzeigen
    Hallo!



    Du kannst doch zu Debuggen die Uhrzeit auf z.B. 23:59:55 setzen und nur 5 sek warten,
    anstelle eines Tages, oder sehe ich das falsch?


    MfG
    Rone
    ja, hast schon recht das muss ich wohl so machen. Es liegt wohl tatsächlich nicht an den waitms, weil heute ging es wieder nicht.
    Ich muss jetzt weiter suchen und das werde ich so machen.

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2006
    Beiträge
    178
    Zitat Zitat von PicNick Beitrag anzeigen
    Ich seh in dem Code oben kein "WAIT".
    Ohne (original) Programm ist über Programmprobleme schwer zu befinden
    Vergiss nicht, das Problem sitzt meistens VOR dem Bildschirm
    Das Programm sieht sehr sehr schlimm aus. Ich bin Anfänger.
    Das Programm hat eine längere Geschichte, und ist kompliziert, laienhaft und herumgebastelt, ich denke das würde großes Haarsträuben bei den Profis auslösen.
    Das wollte ich euch erstmal ersparen
    Ich müsste da schon noch wenigstens etwas Kosmetik betreiben dass ich es hier reinstelle, was ich vielleicht noch machen werde.

  8. #8
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Versuche das nötigste zu einem kleinen Testprogramm zusammenzufügen.

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2006
    Beiträge
    178
    So, jetzt kommen wir der Lösung näher.
    Ich hab den Teil isolieren können und den Fehler reproduziert:
    Code:
    Do
    
    Cls
    Locate 1 , 1
    Lcd S
    Locate 2 , 1
    Lcd "Zeit " ; Time$
    Cursor Off
    Waitms 50
    
    
    
    Loop
    
    
    Sectic:
    S = S + 1                                                   'Sekunden-Tageszähler
    If Time$ = "00:00:00"then
    S = 0
    Time$ = "00:00:03"                                          'Kompensation Uhrenquarz
    End If
    Return
    So funktioniert die Rückstellung.

    Allerdings, wenn ich im Display die Anzeige von time$ weglasse, dann funktioniert es nicht mehr!
    Das ist der springende Punkt!
    Aber erklären kann ichs nicht. Es muss wohl tatsächlich wie Vitis schon geschrieben hat mit dem Stringvergleich zu zun haben.
    Er funktioniert, wenn gleichzeitig time$ im Display angezeigt wird und ansonsten funktioniert es nicht !?!

    Wie kann ich diese Problem lösen, ohne time$ im Display anzeigen zu müssen?

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    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
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Hauptprogramm schleife fängt woanders an ?
    Von Tredory im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 21.02.2009, 22:43
  2. Wait-Anweisung durch Interrupt unterbrechen?
    Von CapSob im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 18
    Letzter Beitrag: 05.06.2008, 11: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, 13:53
  4. Großes Hauptprogramm und Debounce
    Von PCMan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 08.10.2006, 23:14
  5. Problem Timer <-> Hauptprogramm
    Von darxon69 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 12.02.2006, 13:41

Berechtigungen

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