Wie Timeout berechnen in Pulsein.lib

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Ich probier jetzt mal einen pin mit dem timer zu toggeln und speis' den zum Messen ein. Mal schau'n was da gemessen wird.
      der code dazu

      BASCOM-Quellcode

      1. 'Pulsein.Lib Test
      2. 'Bascom Version 2.0.8.1
      3. $regfile = "m328pdef.dat"
      4. $crystal = 16000000
      5. $hwstack = 32
      6. $swstack = 10
      7. $framesize = 40
      8. $lib "pulsein.lib"
      9. Const Cpulsein_timeout = 0
      10. Const Bpulsein_delay = 10
      11. Config Pinc.0 = Input
      12. Config Portc.1 = Output
      13. const Timer0Reload = 234
      14. config timer0=timer,prescale = 1024
      15. load timer0 , Timer0Reload
      16. on ovf0 Timer0_isr
      17. enable ovf0
      18. start timer0
      19. enable interrupts
      20. 'Timer value explination
      21. ' The timer is a 8Bit timer, it overflows when the timer reaches 256
      22. ' The AVR is running at 16000000Hz, the prescaler is 1024
      23. ' Each tick is 0,064 ms - (1 / CPUSpeed in KHz ) * Prescaler
      24. ' The timer needs 234 ticks to reach the required time ( 234 * 0,064 = 14,976ms)
      25. ' The start value for the timer must be set to 22 so that it will overflow at 256 after 234 ticks
      26. ' NOTE: The load command does the inversion for you (256-value or 65536-value)
      27. Dim Impulslaenge_1 As Word
      28. Do
      29. Pulsein Impulslaenge_1 , Pinc , 0 , 1
      30. Print "Timeout: " ; Cpulsein_timeout ; " Impulslänge: " ; Impulslaenge_1 ; " delay: " ; Bpulsein_delay
      31. Wait 1
      32. Loop
      33. End
      34. Timer0_isr:
      35. Load Timer0 , Timer0reload
      36. Toggle Portc.1
      37. Return
      Alles anzeigen
      man erkennt in der Timererklährung, es wird ein Puls von 14,976ms erzeugt.
      Die Ausgabe auf dem Terminal ist

      Timeout: 0 Impulslänge: 1408 delay: 10
      also 1408x10µs= 14,080 ms, passt doch.
      Man muss also den timeout auf Basis 1 MHZ rechnen und darauf achten, dass er nicht zu früh die Messung abbricht. Das sind vielleicht deine komischen Effekte ganz am Anfang gewesen

      oder diese Ausgabe:
      Timeout: 0 Impulslänge: 725 delay: 20
      passt auch.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von tschoeatsch ()

    • tschoeatsch schrieb:

      Will man das auch anpassen, dass timeout bei 16 MHz und default=0 die 641msec ergibt, dann müsste im oberen Bereich der lib auch das delay eingebaut werden.
      Genau das meinte ich vorhin. Offenbar haben sich bisher die wenigsten Gedanken über die Timeout Zeit gemacht und es ist vermutlich niemanden aufgefallen, das bei 16MHz die Timeout Zeit nur noch 1/16tel der ursprünglichen Zeit lang ist. Naja, für's Einlesen von RC Signalen reicht selbst das noch locker aus :thumbsup:

      Dir noch gute Besserung a_224_a22645d4

      Gruß
      Robert
    • R2D2 Bastler schrieb:

      Dir noch gute Besserung
      Danke. Als ich mein Geschreibsel so betrachtete, dachte ich wirklich, ich hab' wohl Fieber. Aber es war scheint's doch nur ein 'worm in my brain'. X/
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------