-         

Ergebnis 1 bis 3 von 3

Thema: timer0 problem

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    22.03.2004
    Ort
    Wien
    Alter
    38
    Beiträge
    31

    timer0 problem

    Anzeige

    Hallo wiedermal ..

    ich will mit mit meinem Mega8 eine frequenz messen .. da das duty cycle nicht konstant ist kann ich mich nur auf die periodendauer konzentrieren .. (is ein rechteck signal) .. das signal kann werte zw ~10ms und ~100 ms annehmen ..

    so habe ich den timer init. :

    Config Timer0 = Timer , Prescale = 256 (auch schon mit 1024 probiert)

    so starte/stoppe ich den timer:

    While Sensora = 1 : Wend
    While Sensora = 0 : Wend 'steigende Flanke abwarten
    Start Timer0
    While Sensora = 1 : Wend
    While Sensora = 0 : Wend 'steigende Flanke abwarten
    Stop Timer0

    bei einem timerüberlauf erhöhe ich eine variable n um 1 und setz den timer zurück .. wenn der timer gestoppt ist multipliziere ich die variable n mit 255 und addiere sie zum timerwert zurück .. dann noch mit der zeitkonstate multiplizieren und fertig .. allerdings nur in 8-9 von 10 fällen

    machmal kommt es vor das ich am ende so ein ergebniss habe:

    timer0 = 0 .. is im fehlerfall IMMER 0
    ov = crap .. immer kleiner als der soll wert, aber nciht konstant falsch
    ich habe das signal mit dem oszi angesehen, aber keine hacker oder spitzen gesehen .. auch entstörkondensatoren bringen nix ..

    leider mus das aber IMMER funktionieren .. und möglichst genau sein weil das ergebniss wiederum den input in den noch nicht ausprogramierten PID regler darstellt (wird eine drehzahlregelung)

    ach ja .. vieleicht is das wichtig .. wenn ich 1024 als prescaler nem, dann kann ich die schnellsten perioden direkt (ohne interrupts) messen .. und das geht IMMER fehlerfrei .. soblad ich aber mit den interrupts anfange gehts los ..

    puh .. so weit mein problem .. .. hat wer rat ??

    ps.: ich lass mir auch gern ein anderes verfahren zur messung an sich einreden, halbwegsexakt muss es halt sein

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Schau dir bei Bascom mal "PULSEIN" an, der zugehörige Code ist da
    http://www.roboternetz.de/wissen/ind...e-Code#PULSEIN
    zum Anschauen.

    Vielleicht kommst du damit auch zurecht
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    22.03.2004
    Ort
    Wien
    Alter
    38
    Beiträge
    31
    hallo !!

    danke für den tip .. ich hab mir das auch schon angeshen .. allerdings habe ich gerade jetzt das problem gefunden ..

    ich hatte die option nosave bei initialisierung des interrupts verwendet und somit je nach situation ein paar register über den aufen geballert was dann zu dem fehler geführt hat (ich dachte erst das das nosave "wertvolle" zeit unnütz verbratet, aber irgendwie is die geschwindigkeit des prozessors bei 16Mhz derart wahnwitzig das das sowas von egal is .. w00t \/ )!!


    danke trozdem für die mühe !

    edit .. jetzt seh ichs erst .. a wiena !! *lol* vieleicht sind wir ja auch noch nachbarn ! *ggg* woher kommst gnau . .wie bist zur robotik gekommen .. usw usw .. wissbegierig bin !!

Berechtigungen

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