- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: Impulszähler zur drehzahlbestimmung in Basom

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.03.2004
    Ort
    Paderborn
    Alter
    40
    Beiträge
    614
    Anzeige

    Praxistest und DIY Projekte
    Nach was, Gast:
    Du schreibst:
    Config Timer1 = Counter , Edge = Rising
    Du willst aber doch sicher einen selbstlaufenden Timer und keinen Counter, der steigende Flanken an einem Pin deines AVR zählt. Also:
    Config Timer1 = TIMER, prescale = 64
    Der prescale-Wert sagt dem Timer, dass er nicht jeden Takt (also bei 4MHZ 4mio mal je Sekunde) sondern nur jeden 64sten hochzählen soll, was genau genug ist.
    Dein Interupt löst übrigens immer dann aus, wenn der Timer überläuft. Also gerade dann, wenn er wieder bei 0 ist(oder vielleicht schon bei 1 oder 2). Das ist der denkbar schlechteste Zeitpunkt um seinen Wert abzufragen (überhaupt brauchst du zum Verstehen von Servosignalen den Timer-Interupt garnicht, weil die Pulse so kurz sind, dass der Timer, wenn du ihn bei deren Beginn zurücksetzt garnicht überläuft, bis sie vorbei sind.).

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    05.02.2004
    Beiträge
    33
    sry war unter andrem browser drinne.
    Also ich möchte das der timer mir über die comschnittstelle die zeit des highsignals mitteilt.
    Ich weiß nur nicht in welche stelle des programms/interrupts ich es stellen muss damit eine vernünftige zahl herrauskommt (im momentk ommt ja garkeine herraus)

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.03.2004
    Ort
    Paderborn
    Alter
    40
    Beiträge
    614
    Hier mal eine Variante, die dir die Zeit zwischen dem Ansteigen und dem Fallen eines Signals ausgibt. Das Ausrechnen, durch was du teilen musst um auf 'ne sinnvolle Zeiteinheit zu kommen, überlasse ich mal dir.
    Code:
    $regfile = "4433def.dat"  
    $crystal = 4000000
    $baud = 9600
    Config Timer1 = Timer , Prescale = 8
    Start Timer1
    On Int0 C1rise : On Int1 C1fall
    Enable Int0 Rising : Enable Int1 Falling
    Enable Interrupts
    do
      loop 'Endlosschleife
    C1rise: 'Bei Beginn den Timer zurücksetzen
      timer1=0
      return
    C1fall: 'Am Ende steht in timer1 drin, wie lange das Signal an war.
      print timer1
      return
    PS: Ich hab' keine Ahnung, wie lange die Print-Befehl von Bascom braucht.

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    05.02.2004
    Beiträge
    33
    vielen dank schonmal.
    mit dem obigen code (allesdings mit nosave) kommt soetwas an:

    65042
    3
    2
    42679
    2
    2
    2
    2
    2
    2
    2
    55647
    2
    2
    3
    2
    2
    3
    2
    64746
    3
    24588
    2
    2
    2
    2
    3
    2
    56860
    3
    24437
    3
    24543
    2
    43786
    (nur ein auszug)
    ich habe mir gedacht das der print befehl vielleicht zu langsam sein könnte. also habe ich mit eine led geschnapp und den code soweit verändert.
    Code:
    $regfile = "4433def.dat"
    $crystal = 4000000
    $baud = 9600
    Config Timer1 = Timer , Prescale = 8
    Start Timer1
    On Int0 C1rise Nosave : On Int1 C1fall Nosave
    Enable Int0 Rising : Enable Int1 Falling
    Enable Interrupts
    Dim Zeit As Integer
    
    Config Portd = Output
    
    
    Do
      Loop                                                      'Endlosschleife
    C1rise:                                                     'Bei Beginn den Timer zurücksetzen
      Timer1 = 0
      Return
    C1fall:
       Zeit = Timer1
       If Zeit > 750 Then
       Portd.2 = 1
       Else
       Portd.2 = 0
       end if
      Return
    ich habe mich gewundert warum denn die LED nicht leuchtet. Sie tat es doch, nur gaaanz wenig. Daraufhin habe ich mich im internet einmal nach einer osciloscopimprovisierung für den pc umgesehen. Für die soundkarte habe ich dann auch etwas gefunden. also erstmal das unbearbeitete servosignal angeschaut. Dann das des pins für die LED.
    Und siehe da die LED bekommt jedesmal wenn das servosignal high ist eine flanke genausolang wie die highphase.

    Ausgerechnet habe ich das bei einem prescale von 8 (einer auflösung von 2 µS) und einer signallänge von 1 - 2 ms eine zahl von 500 - 1000 im timer stehen müsste. (daher die zahl 750) Ich dachte also die LED müsste auf halben vollausschlag umspringen. Leider war dem nicht so. bitte helft mir den denkfehler zu finden

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress