- Labornetzteil AliExpress         
Ergebnis 1 bis 3 von 3

Thema: frequenzmessen über 100khz nicht möglich

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    06.05.2007
    Beiträge
    38

    frequenzmessen über 100khz nicht möglich

    Anzeige

    Praxistest und DIY Projekte
    Hi,
    ich habe eine Routine, mit der ich die Frequenz messen kann:

    Sub Messen()
    Config Int0 = Falling

    Flankenzahl = 0
    Messzeit = 50000000 '20000000
    Timervorgabe = 53036 'für 50ms ' 25536 für 20ms ' 55536 für 5ms

    Do
    Enable Interrupts
    Enable Int0
    Enable Timer1
    Portd.2 = 1

    Config Timer1 = Timer , Prescale = 64 'für 50ms'8 für 20ms ' messzeit 5ms
    Timer1 = Timervorgabe

    On Timer1 Isr_von_timer1
    On Int0 Irq

    Waitms 500
    Lcd_clr

    Stemp = "imp=" + Str(flankenzahl)
    Schreibe Stemp
    Lcd_cursor 1 , 3
    Stemp = "fre=" + Str(frequenz())
    Schreibe Stemp

    Flankenzahl = 0
    Wait 2

    Loop

    Irq:
    Incr Flankenzahl
    Return


    Isr_von_timer1:
    'Timer1 = Timervorgabe
    'Toggle Portc.0
    Impulsepromesszeit = Flankenzahl
    Disable Int0
    Disable Interrupts
    Return

    ich messe mit einer Torzeit, die fallenden Flanken..

    das Prog funktioniert gut bis auf:
    -verzählt sich ganz klein wenig: bei 2000 Flanken verzählt sichs um ca 4
    (das ist ganz wenig und scheint kein Grundlegender Fehler zu sein und ist scheinbar nicht Frequenzabhängig)-->das ergebnis weicht ca 50-150 Hz ab

    - das Prog funzt nur bis ca 105khz, danach spinnt die anzeige rum (lcd ausgabe)

    Hat da jemand vielleicht ne Idee,wie man das eine oder andere wegbekommt, würd mich sehr freuen..!
    Grüße Roland

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    hier kommt folgendes Problem hinzu, wenn eine ISR augerufen wird, sichert Bascom erstmal schön alle 32 Register auf dem Stack, was natürlich einiges an Zeit braucht. Am Ende der ISR kommen die 32 Register wieder vom Stack zurück.

    Wenn Du dich mit Assembler auskennst, könntest Du oben den aufruf der ISR mit Nosave angeben, und in der ISR nur die Register sichern, die auch verwendet werden.



    PS:
    Den Code kann man zur bessern Lesbarkeit mit Code-Tags umschliessen.
    Dazu einfach den geschriebenen Code-Text markieren, und auf den Code-Button oberhalb des Textfensters clicken. Fertig.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    06.05.2007
    Beiträge
    38
    hmm, da nehm ich doch nen andern eingang und rufe nich die isr auf, da passiert eh nichts, außer, dassich ne Variable hochzähl, das kannich doch anders hinkriegen..
    obwohls ja schon gut geht, bei 2000 flanken 4 mehr gezählt... geht schon, wär halt cool , wenns ganz genau wär..

Berechtigungen

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

LiFePO4 Speicher Test