-
        

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

Thema: Timer vor Überlauf zurücksetzen

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    340

    Timer vor Überlauf zurücksetzen

    Anzeige

    Hallo zusammen,

    ich habe einen Timer1 der nach einer Sekunde überläuft und ein Interrupt auslöst. Dies soll aber im Normalfall nicht passieren. Das heißt ich möchte den Timerzählwert an bestimmten Stellen im Program zurücksetzen. Er soll dann von vorne anfangen zu zählen, egal wo er gerade war.

    Kann ich das erreichen indem ich einfach den Timerwert neu setze.

    Also z.B.
    Code:
     Timer1 = 3100
    oder muss ich jedes mal den Timer vorher stoppen und dann wieder starten?

    Danke für euere Hilfe.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Ich hab's nicht mehr genau im Kopf, aber ich würde es an deiner Stelle einfach mal ausprobieren. Zur Not auch im Simulator.
    Wenn ich mich aber recht erinnere funktioniert das so, wie du oben schreibst..

    Gruß,
    jon
    Nice to be back after two years
    www.roboterfreak.de

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Wieso deaktivierst du den Timer nicht einfach für den Normalfall
    Den Timer musst du nicht deaktivieren wenn du einen neuen Wert laden willst.
    Würde es dir nicht reichen wenn du den Timer erst aktivierst wenn du ihn brauchst und solange lässt du ihn deaktiviert?
    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

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    340
    Nein, denn das soll so eine Art Watchdogtimer bzw. Zykluszeitüberwachung eines bestimmten Vorgangs werden.
    Wird aus irgendeinem Grund die entsprechende Routine nicht regelmäßig innerhalb dieser Zeitspanne angesprungen, soll über das Timerinterrupt weiter gemacht werden. Zwecks Fehlerdiagnose usw.

    Also der Timer muss im Hintergrund immer mitlaufen. Er darf nur im Normalfall nie überlaufen.

  5. #5
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Ja das sollte dann so funktionieren.
    Ein normaler Watchdog-Timer macht das ja genau so. Da wird auch mitten im Programm der Timer wieder auf 0 gestellt. Da sollte das bei dir im Programm kein Problem sein, wenn du den Timer z.B. am Ende des Programmes wieder auf 0 stellst.
    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

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.545
    Hat es einen Grund warum du nicht den Watchdog verwendest? Den kannst du im Porgramm einstelle, Starten und Stoppen. Du kannst ihn so einstellen das er den µC resettet oder das ein Interrupt ausgelöst wird.

    MfG Hannes

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    340
    Das wäre natürlich eine Alternative. Aber wie kann ich den Watchdog zurücksetzen? Den muss ich immer wieder stoppen und starten?

    Und wie geht das, dass er einen Interrput auslöst und nicht den Reset durchführt?
    Geändert von demmy (01.03.2012 um 12:29 Uhr)

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Du kannst eine Ablauffrist für den Watchdog setzen und ihn aktivieren und deaktivieren. Einen Interrupt kann er meines Wissens nicht auslösen.
    Grüße,
    Daniel

  9. #9
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Wie das mit dem Watchdog im Bascom funktioniert musst du mal in der Hilfe unter "Watchdog" suchen.
    Und einen Interrupt löst der Watchdog nicht aus. Er setzt nur den Programmcounter auf 0x00 wenn er nicht zurück gesetzt wird.
    Du musst halt gucken wie lange dein Programm im Idealfall zum durchlaufen braucht und dann kannst du den Wert für den Watchdog bestimmen. Sobald das Programm dann länger braucht läuft der Watchdog über und setzt den Counter auf 0x00 zurück (also das ganze Programm resetet, weil an der Adresse meistens ein ljmp zum eigentlichen Programmanfang steht, da ab 0x02 die Interruptvektoren beginnen).

    Seite 44:
    http://www.atmel.com/Images/doc2503.pdf

    Was du ja jetzt im Endeffekt machen willst, ist ein Watchdog in Software der keinen Reset auslöst sondern in eine ISR springt wenn er überläuft.
    Und das kannst du ganz einfach so machen wie du meintest. Du stellst den Timer am Anfang einfach auf z.B. 2 Sekunden ein und am Programmende (also vor dem Loop) setzt du den Timer wieder neu auf 1 Sekunde. Wenn das Programm nun länger braucht als 1 Sekunde z.B. weil irgendwas passiert weswegen die Abarbeitung länger dauert, läuft der Timer über und der Controller springt in die ISR.
    Von dort aus kannst du dann weitermachen.
    Probier das mal so aus ob du das so haben möchtest
    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

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von Kampi Beitrag anzeigen
    Und einen Interrupt löst der Watchdog nicht aus.
    Es gibt Kontroller, wie z.B. den ATM644, bei denen der Watchdog einen Interrupt auslösen kann.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. P89LPC9351 - Zählerstand des Timer 2 zurücksetzen
    Von Djon im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 0
    Letzter Beitrag: 16.03.2010, 16:50
  2. Bootloadermega2560 - zurücksetzen?
    Von Blaner im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 3
    Letzter Beitrag: 02.03.2009, 12:04
  3. pic 16f877a timer überlauf, zeitnehmung
    Von vatertheresa im Forum PIC Controller
    Antworten: 1
    Letzter Beitrag: 15.03.2007, 15:29
  4. SREG Bit 7 zurücksetzen
    Von bigbehrens im Forum Assembler-Programmierung
    Antworten: 1
    Letzter Beitrag: 11.02.2007, 12:37
  5. Timer soll bei jedem überlauf +1 machen
    Von hardstyleroxx im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 27.11.2005, 16:02

Berechtigungen

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