- fchao-Sinus-Wechselrichter AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: Frequenz einlesen über den AVR Butterfly

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.10.2005
    Alter
    44
    Beiträge
    20

    Frequenz einlesen über den AVR Butterfly

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    Wir haben es geschafft mit dem "Butterfly zu sprechen". Nun stehen wir vor dem Problem eine Frequenz einzulesen. Wir bekommen 4-20mA von einem Drucksensor und wandeln dieses Signal mit einem Strom/Frequenzwandler um. Nun würden wir gerne die Frequenz einlesen um dadurch den entsprechenden Druck zu errechnen. Wie wäre das den beim Butterfly am besten möglich? Kennt sich da einer schon mit aus?

    Gruß Heiko

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    20.10.2005
    Alter
    44
    Beiträge
    20
    Hallo,

    wir lesen jetzt die Flanke von einem High-Pegel der Frequenz ein mit pulsein. Leider lässt sich da glaube ich nur die High-Pegel-länge einlesen. Oder ebend die Low-Pegellänge. Kann das sein? Wir müssten nämlich nur einen Takt einlesen, dass aber möglichst genau. Wäre das noch anders möglich oder geht das nur mit Pulsein, dann die Low und Highflanke zusammenaddiert und dann 1 durch den Wert. Das Problem ist, dass der Butterfly recht ungenau ist. Wir lassen uns den zahlenwert ausgeben, aber der schwankt halt um einiges und manchmal wird er garnicht angezeigt. Wenn ich dann beide Werte addiere habe ich somit eine Riesenverfälschung. Und eine Mittelwertbildung fällt durch 2 Gründe flach. 1. Wenn ein Wert fehlt so ist das ergebniss Schmarn und 2. wissen wir nicht wie schnell sich unser Takt ändert.

    Hat zufällig einer ne Patentlösung oder einen Vorschlag wie ich eine Pulsperiode mit dem AVR Butterfly möglichst genau einlese?

    Gruß Heiko

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    AVRs können einen Input Capture machen.

    An speziellen Pins (ICPx etwa) bewirkt ein Signal, daß der Wert des Timersx gesichert wird. Diesen gesicherten Wert muss man dann möglichst schnell auslesen. Jedefalls, bevor das nächste Ereignis auftritt. Triggern kann man auf fallende/steigende Flanke und auf Wechsel.

    Ebenfalls gibt es IRQs dafür.

    Wie's genau geht, und was zu beachten ist, steht im Manual bei den 16 Bit-Timern unter Input Capture.
    Disclaimer: none. Sue me.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.12.2004
    Alter
    70
    Beiträge
    277
    Hallo!

    Ansich ist das mit Capture sehr sinnvoll und einfach zu handhaben. Die einzige Falle besteht darin, daß zum Lesen des Capture Registerpaares die Interrupts abgeschaltet sein müssen.

    Ein Beispiel für das Wesentliche:

    Das Vorspiel:
    Code:
    On Icp1 Oncapture                            'Interrupt-Routine
    Config Timer1 = Timer , Capture Edge = Falling , Prescale = 256
    
    Enable Icp1                                  'Capture-Interrupt freigeben
    Enable Interrupts                            'Interrupts global freigeben
    Dein Code zu Anzeigen, Berechnen oder sonstwas.....

    Die ISR:
    Code:
    Oncapture:                                   'Timer1-Capture
      Disable Interrupts                         'nötig für Auslesen von Cap1
      Wcount = Capture1                          'Wert sichern
      Timer1 = 0                                 'Timer-Reset
      Enable Interrupts                          'Interrupts wieder aktivieren
    Return
    Grüße
    Henrik

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    Hm, das mit dem Timer hab ich bei meiner Anwendung auch so. Aber ich bin mir im Moment auch am Überlegen, ob ich es mit Pulsein machen kann, da ich dann wieder einen Timer Frei habe. Die Länge von High-Pegel und Low-Pegel kann man mit einem Flipflop zusammen bringen (Frequenzteilung), wodurch die gesammte T ermittelt würde. Jedoch habe ich verständnissprobleme mit dem Pulsein-Befehl, welcher auch noch von der Taktfrequenz abhängig ist.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.12.2004
    Alter
    70
    Beiträge
    277
    Hallo,

    Zitat Zitat von Rage_Empire
    Jedoch habe ich verständnissprobleme mit dem Pulsein-Befehl, welcher auch noch von der Taktfrequenz abhängig ist.
    da sagst Du was... Bei dieser Hilfestelle:
    "It will increase in 10 uS units. But this depends on the XTAL. You can change the library routine to adjust the units."
    bin ich auch verzweifelt, habe mir die Routine in der Lib angesehen und kein sinnvolles Schräubchen zum Drehen gefunden.
    Auch in der neuen Verschlimmbesserung der Bascom Dokumentation findet sich dazu nichts Neues.

    Nun bin ich sowieso eher der praktische Typ, also habe ich den Quark mal mit verschiedenen Taktfrequenzen ausprobiert. Wunder über Wunder:

    Bei 4 über 8 bis zu 16 Mhz bekam ich die gleichen Resultate mit einer Abweichung, die die +- 3x10µS die sowieso programmbedingt ist, nicht überschritt.

    Nebenbei: Verzichtet man auf ein Bitwait, muss die Erfassung unbedingt in einer Schleife erfolgen, da die erste Messung immer Murks sein kann.

    Da die Pulseinmethode sowieso kein Präzisonsinstrument ist, kann man auch zwei Pulsein Befehle hintereinander ausfürhren, einmal für Low und einmal für High. Die Addition ergibt dann die Periodendauer.

    Sieht z.B. so aus:
    Code:
    Pulsein Freq_ein , Pinb , 1 , 0              'Low messen in 10µS Einheiten
    Temp = Freq_ein
    Pulsein Freq_ein , Pinb , 1 , 1              'High messen
    Freq_ein = Temp + Freq_ein                   'entspricht Periodendauer in 10µS
    Grüße
    Henrik

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    Theoretisch könnte man mit ein schon erwähnten Flip-flop die Pulshigh- und -Lowdauer zusammenfassen. Dann 3 oder 4 messungen mit Pulsein....Durchschnitt errechnen und schon hat man die Frequenz. ich denke bei höheren frequenzen kommts auf 5Hz oder 10Hz auch nicht an.

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.12.2004
    Alter
    70
    Beiträge
    277
    Hallo,

    Zitat Zitat von Rage_Empire
    Theoretisch könnte man mit ein schon erwähnten Flip-flop die Pulshigh- und -Lowdauer zusammenfassen.
    Klar geht das, nur hat man dann einen normalerweise höchst entbehrlichen 14-Füßer auf der Platine herumfliegen.

    Dann 3 oder 4 messungen mit Pulsein....Durchschnitt errechnen und schon hat man die Frequenz.
    Die erste Messung musst Du auf jeden Fall wegwerfen, da das Ergebnis der allgemein bekannte und berüchtigte Rainer Zufall ist und das arithmetische Mittel versaut.
    ich denke bei höheren frequenzen kommts auf 5Hz oder 10Hz auch nicht an.
    Gerade bei hohen Frequenzen wird es kritisch, weil nur wenige 10µS Units in der Periode erfasst werden. Wenn Dir von 100 Units 3 fehlen, ist das schmerzlicher, als wenn es bei 10.000 zu 3 Ausfällen kommt.

    Bei hohen Frequenzen sollte man sowieso nicht die Periodendauer messen, sondern die auflaufenden Impulse per Torzeit zählen.

    Grüße
    Henrik

  9. #9
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    Also sollte man bei höheren Frequenzen lieber den Timer verwenden, wenn ichs jetzt richtig verstanden hab.

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Einen Timer verwendet man so oder so, aber einmal verwendet man dessen InputCapture-Einheit, um Zeiten genau zu messen, und einmal verwendet man externe Impulse, um den Timer hochzählen zu lassen. Bei letzterem braucht man noch einen zweiten Timer.
    Dummerweise liegen die Tx Eingänge an anderen Pins als die ICPx.
    Disclaimer: none. Sue me.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

12V Akku bauen