- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 8 von 8

Thema: Signalabtastung mit ATMEGA644

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2004
    Ort
    Kreis Starnberg
    Alter
    60
    Beiträge
    1.825
    Wenn Du Dein Signal an einem externen Interrupt Pin anlegst, kannst Du mit einer Pegeländerung einen Interrupt hervorrufen. Das ist die Methode der Wahl, wenn die Pegeländerung relativ selten passiert und wenn der Prozessor zwischenzeitlich (wenn der Pegel stabil ist) etwas anderes machen soll. Die Zeitdauer eines High-Pegels kann man z.B. messen, wenn man beim Pegelwechsel Low> High mittels Interruptroutine einen Timer startet und beim Übergang high > Low nachsieht, wie weit er mit dem Zählen gekommen ist. Das Timer starten bzw. nachsehen braucht nur wenige Maschinenbefehle, der Timer selbst läuft im Hintergrund.

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2011
    Beiträge
    7
    Gute Idee das könnte klappen. Ich werds mal ausprobieren und melde dann meinen Erfolg/Misserfolg

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.236
    Für das Problem fallen mir ein paar Lösungsvorschläge ein.

    Meine erste Wahl wäre da der ICP ( Interrupt ), bei dem beim entsprechenden Pegelwechsel gleich der Zählerstand eines Timers in ein Register geschrieben wird.
    Stellt man innerhalb dieser Routine auch gleich das Sensing von steigende auf fallende Flanke um, kann sowohl die Impulslänge, als auch die Pausenlänge bestimmt werden.
    Man zieht einfach die entsprechenden, zwischengespeicherten ICP Werte voneinander ab.

    Möchte man sich die sensing Umschalterei sparen, könnte man auch zwei Interrupts z.B. INT0 und INT1 parallel schalten und den einen auf steigende Flanke und den anderen auf fallende Flanke einstellen.
    Innerhalb der Interrupts kann man dann einen Timer auslesen, und mit dem vorherigen Wert der anderen Routine verrechnen.

    Eine weitere Möglichkeit wär der Pin Change Interrupt, der bei einem Pegelwechsel an bestimmten Pins einen Interrupt verursacht.
    Allerdings muss man dabei selber rauskriegen welcher Pin und welche Flanke den Interrupt verursacht hat.

    Als letzte Möglichkeit wär noch das Polling, bei dem in festen Abständen abgefragt wird, wie der Pegel am entsprechenden Eingang ist.
    Um da eine Gleichförmigkeit reinzukriegen, würde ich dafür einen Timer Interrupt verwenden.
    Wenn Du dazu einen Comparematch Interrupt verwendest, sind die Zeitintervalle sogar noch einfach einstellbar.

    Es kommt halt auf die Signalfrequenz und die benötigte Auflösung an, welche Methode für Dich die Beste ist.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2011
    Beiträge
    7
    Das sind schon einige Gute Eindrücke.
    Ich werds alles mal ausprobieren.
    Vielen Dank!

    Mein Signal kommt übrigens mit 2khz am Eingang an!
    Gibts die Möglichkeit das Polling in Hardware umzusetzen oder gibts so ewas gar nicht in Hardware?
    Ich meine 2khz sollte man in gewisser regelmäßigkeit abtasten können, ohne dass meine CPU doll ausgelastet wird. Schöner wärs trotzdem

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.236
    Gibts die Möglichkeit das Polling in Hardware umzusetzen oder gibts so ewas gar nicht in Hardware?
    Kann man sicher machen, aber was soll das bringen? Bei einem Pegelwechsel muss trotzdem der µC aktiv werden.
    Dann kann mans ebenso gut über Interrupts lösen und braucht keine zusätzliche Hardware.

    Bei 2kHz würd ich die ICP Methode benutzen. Bei 8MHz Taktfrequenz und einem Prescaler von 8 kriegst Du dabei eine Auflösung von 1µS.
    Der maximale Abstand zwischen 2 Pegelwechseln darf dabei, bei einem 16Bit Counter, ca. 65ms betragen, wenn man ohne einen Überlaufzähler arbeitet.
    Mit einem 16Bit Überlaufzähler ( Zähl Variable die im Timer Overflow hochzählt ) kommt man auf etwa 42000 Sekunden.

Ähnliche Themen

  1. Atmega644 RC5
    Von dehnelement im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 13
    Letzter Beitrag: 20.03.2010, 10:52
  2. FuseBits am Atmega644
    Von AVR_anfänger im Forum Robby CCRP5
    Antworten: 1
    Letzter Beitrag: 02.09.2008, 11:49
  3. Timer0 vom Atmega644 spinnt?
    Von hosti im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 02.09.2008, 08:11
  4. atmega644 und bascom -- ADC_REFMODEL
    Von kolisson im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 27
    Letzter Beitrag: 13.03.2008, 23:27
  5. ATMEGA644 Programmieren
    Von Elektronik303 im Forum AVR Hardwarethemen
    Antworten: 49
    Letzter Beitrag: 30.03.2007, 18:36

Berechtigungen

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

LiFePO4 Speicher Test