- LiFePO4 Speicher Test         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Länge eines Pulses messen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    17.06.2004
    Beiträge
    12

    Länge eines Pulses messen

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    hab das Problem das ich die länge eines Pulses mit einem Atmega644 messen will ich aber bisher nicht so erfolgreich damit bin.
    Ausgangssituation:
    Ich bekomme an einem Port des AVRs ein Signal davon will ich messen wie lange das Signal high ist. Die Tx eingänge kann ich nicht nutzen da sie bereits mit anderen funktionen belegt sind, sonst könnte ich bei steigende flanke den counter loszählen lassen!!!
    Habe leider den quelltext nicht da aber im grunde funktioniert es so:
    ich lasse den counter loszählen sobald ich an pin7 ein high bekomme danach lasse ich mir den wert des tcnt ausgeben.
    Doch bei einem konstanten Signal bekomme ich verschiedene Werte???
    Vielen Dank schonmal für sämtliche hilfen

    p.s. wie kann ich eigentlich zwei 8bit counter kaskadieren???

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    Du kannst beim 644 doch jeden I/O als externen Interrupt verwenden. Damit ist's doch dann kein Problem mehr, auf eine steigende bzw. fallende Flanke zeitnah zu reagieren.

    askazo

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    36
    Beiträge
    373
    Hi,
    das Problem wird folgendes sein, da du ja auch ein Hauptprogramm mit bestimmter Zykluszeit hast kann sich die gemessene Signallänge im ungünstigsten Fall um die Zykluszeit verlängern. Da du deinen Port wahrscheinlich nur einmal im Programm abfrägst.
    Hoffe ich konnt dir weiterhelfen.
    mfg franz

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    @franzl: Ja, genau da liegt das Problem. Und dem kann man abhelfen, indem man auf das Messsignal mit einem Interrupt reagiert.

    @waxology: Die T0 bzw. T1-Pins würden Dir im übrigen auch nicht helfen - die dienen nur als externe Taktquellen für die Counter, nicht als Start-/Stop-Signalquellen.

    askazo

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    06.11.2006
    Beiträge
    1.078
    Hallo
    lade einen Kondensator und messe die Spannung.

    Mit freundlichen Grüßen
    Benno
    Wo man nicht mit Vernunft handelt, da ist auch Eifer nichts nütze; und wer hastig läuft, der tritt fehl.
    Ein König richtet das Land auf durchs Recht; wer aber viel Steuern erhebt, richtet es zugrunde

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.112
    Wenn man sowas vorher weiß, dann legt man den Puls, dessen Länge man bestimmen will an den ICP Pin des µC. Der ist nämlich genau dafür da!
    Der sorgt auf komfortable Weise dafür, dass der Counter genau solange countet, wie dort High oder Low anliegt, wie man will. Da das ganze IRQ gesteuert ist, muss man sich keinen Kopf machen und hat die Probleme des Pollens nicht.
    Gruß

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    Huch, den ICP kannte ich auch noch nicht.
    Danke Gock, gut das zu wissen

    askazo

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.112
    Da sieht man 's wieder: Man lernt nie aus!
    Wenn der ICP nicht mehr frei ist, lässt sich das auch über den AnalogComparator steuern. Mit ein bisschen Geschick ist es sogar möglich, die ADC Eingange auf den AnalogComparator zu multiplexen, dann kann man theoretisch auch diese benutzen. Habe ich aber noch nicht gemacht und lege daher keine Hände in irgendwelche Feuer.
    Gruß

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    17.06.2004
    Beiträge
    12
    erstmal vielen dank für alle antworten
    so das ich alle pins als externen interrupt nutzen konnte wusste ich noch nicht dachte da gibt es nur die Tx pins die eine flanke erkennen und dann z.B. den counter starten.
    aber jetzt mal ne frage im datenblatt zum 644 steht das die externen Interrupts nur dann funktionieren wenn die pins als ausgang geschaltet sind?!? müsste aber doch ein eingang sein um überhaupt ne unterbrechung zu machen?!? wie fange ich den ab??? in meinem quelltext frage ich an PIND ab ob da 0x80 anliegt (pin7 gesetzt, da liegt das signal an) und lass die schleife solange laufen bis das nicht mehr der fall ist.
    Mit dem ICP pin wäre das bestimmt ne gute Sache aber hab gesehen das nur einer am 644 ist und denke der ist belegt. ist das den überhaupt so möglich wie ich mir das vorstelle oder hab ich nen großen denkfehler???

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    Im Datenblatt steht lediglich, dass die Interrupts - wenn sie denn aktiviert sind - auch dann ansprechen, wenn Du den Pin als Ausgang definiert hast. So könnte man z.B. einen Software-gesteuerten Interrupt generieren.
    Bei normaler Verwendung der externen Interrupts muss der entsprechende Pin natürlich als Eingang konfiguriert sein.

    Der Interrupt wird mit einer Interruptroutine abgefangen. Im GCC sieht das dann so aus:
    Code:
    ISR (<Name des Interrupts>)
    {
    <Wenn Timer nicht läuft>
    <Timer starten>
    <ansonsten Timer stoppen>
    }
    Den Namen des Interrupts findest Du in der io.h für den 644. Ich habe hier auf dem Rechner GCC nicht installiert, kann also leider gerade nicht nachschauen.

    askazo

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress