- Labornetzteil AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: Umdrehungsmessung mit Timer

  1. #11
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.07.2004
    Ort
    München
    Alter
    57
    Beiträge
    298
    Anzeige

    Praxistest und DIY Projekte
    Hallo Static,

    Lad Dir doch mal dieses Programm runter.

    https://www.roboternetz.de/phpBB2/dl...le&file_id=169

    Es erstellt dir gleich den Quelllcode für die Timer.

    Damit wirst Du feststellen dass bei 16MHz mit dem Timer0 keine Frequenz mit 1Hz möglich ist..

    Du kannst aber 100Hz verwenden und damit Deine Drehzahl messen und dann einfach mal 100 nehmen.
    Funktioniert bei hohen Drehzahlen ganz gut.

    Gruß
    m.artmann

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Dann würde ich einen kleineren Prescaler verwenden und in der Timerinterruptroutine noch einen Zähler, der dann halt alle x mal eine Funktion aufruft.

    MFG Moritz

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.01.2004
    Alter
    36
    Beiträge
    121
    So hab ich es dann auch gemacht, RCO. Mit 100Hz messen würde natürlich auch gehen, aber das ist eigentlich nicht nötig.

  4. #14
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.11.2004
    Beiträge
    370
    Hi,

    hab sowas schonmal gemacht um einen Frequenzzähler zu bauen, der sollte nur bis 250Hz können, geht aber wesentlich höher, Habe dazu den impuls am eingang auch auf nen interrupt gemacht, damit ich im hauptprogramm mehr zeit habe und dann einfach 1mal pro sekunde (timer) nachgeschaut wie oft der interrupt kam. kann ja morgen mal bei interesse den code posten..

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.01.2004
    Alter
    36
    Beiträge
    121
    Ich machs jetzt auch mit Interrupts, da ich sonst angst habe Impulse zu verpassen. Hab aber noch Probleme mit dein scheiß Tastern , die liefern anscheind auf einmal keine sauberen Impulse mehr da müssen wohl doch Lichtschranken dran.

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    36
    Beiträge
    1.614
    debounce doch: guck mal im handbuch nach oder hardwaremäßig mit kondensator!

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  7. #17
    Gast
    Also die Sache mit der Timer-Berechnung kann man auch einfacher machen.

    Beispiel:
    8 MHz Quarz
    Prescale = 1024
    16 Bit-Timer = 65536 (8 Bit = 255)

    8^6 / 1024 / 65536 = x
    1/x = Zeit in Sec = 8,39 sec

    Stellst Du nun den (16-Bit) Timer immer auf 57736 ein, bleiben ihm nur noch 7800 Takte bis zum Überlauf. Danach wird er wieder auf 57736 eingestellt und nicht auf null, wie er es sonst machen würde!

    In Bascom also einfach
    Timer1 = 57736
    eingeben

    Dann errechnet sich:

    8^6 / 1024 / 7800 = x
    1/x = 1,00 Sec

    (...und ein paar Nachkommastellen)

    Beim 8 Bit-Timer wird eben nicht bis 65536 gezählt, sondern nur bis 255. Deshlab wählt man hier ein anderen Prescale und einen anderen Vorwert (57736 geht also nicht beim 8 Bit-Timer!)

    Oder anders gesagt
    8-Bit = Byte
    16-Bit = Word

    Hoffe, das Hilft wenigstens für die Praxis!?

  8. #18
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    8^6 / 1024 / 65536 = x
    1/x = Zeit in Sec = 8,39 sec
    Meinst vermutlich 8 * 10^6

    Stellst Du nun den (16-Bit) Timer immer auf 57736 ein, bleiben ihm nur noch 7800 Takte bis zum Überlauf.
    Ich erkenne hier keinen Unterschied zu meinem Vorschlag! Du verwendest halt einen größeren Prescaler. Wenn man genau rechnet, kommt man übrigens auf 7812,5! Deshalb habe ich ja gerade den 256 Prescaler gewählt, damit glatte Zahlen rauskommen!
    7812,5 x 4 = 31250 (genau mein Wert)

    Danach wird er wieder auf 57736 eingestellt und nicht auf null, wie er es sonst machen würde!

    In Bascom also einfach
    Timer1 = 57736
    eingeben
    Das nützt ja nix, der Timer geht nach dem Überlaufen von selber auf null! Schließlich zählt er ja hoch!

    Timer1 = Timervorgabe
    Hab ich ja auch geschrieben, muss aber halt nach jedem Interrupt neu geschriben werden:

    Timer1_isr:
    Timer1 = Timervorgabe
    'Hier passiert jetzt was mit deinem Zaehlerstand
    Zaehlerstand = 0
    Return
    MFG Moritz

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.01.2004
    Alter
    36
    Beiträge
    121
    danke, die Software funktioniert jetzt ohne größere Probleme.

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Solar Speicher und Akkus Tests