- LiTime Speicher und Akkus         
Ergebnis 1 bis 8 von 8

Thema: Signalabtastung mit ATMEGA644

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2011
    Beiträge
    7

    Frage Signalabtastung mit ATMEGA644

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich bin momentan auf der Suche nach einer einfachen Lösung um ein digitales (nicht analoges) TTL Signal mit meinem MC zu erfassen und in ein Register zu legen.
    Ich bin auf meiner Suche bereits auf das I²C Protokoll gestoßen, weiß aber nicht ob ich es für meinen Anwendungsfall benutzen kann, da das TTL Signal über keinen CLK verfügt.
    Auch die ADC Wandlung taugt für mich nichts, da ich nicht den Wert des Analogsignals herausfinden möchte, sondern die daraus resultierende logische 1 oder 0.


    Zum Hintergrund:
    Ich verwende einen US Empfänger, mit welchem ich nach längerer Aufbereitung des Signals, ein TTL Signal bekomme und dieses abgreifen möchte ohne meine CPU dauernd mit dem Abtasten zu beschäftigen, da diese schon genug mit der Demodulation des Signals zu tun hat.

    Ich würde mich über eine Antwort freuen!
    LG
    Geändert von blackflame2025 (31.10.2011 um 13:15 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2004
    Ort
    Kreis Starnberg
    Alter
    59
    Beiträge
    1.825
    analoges TTL Signal
    Kannst Du das noch etwas genauer beschreiben? TTL-Signale kenne ich bisher nur als digitale Signale.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2011
    Beiträge
    7
    sorry natürlich ist das Signal digital (Spannungspegel 5V positiv, 0V negativ) - ich habe es nur fälschlicherweise analog bezeichnet.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2004
    Ort
    Kreis Starnberg
    Alter
    59
    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.

  5. #5
    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

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.187
    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.

  7. #7
    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

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.187
    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, 11:52
  2. FuseBits am Atmega644
    Von AVR_anfänger im Forum Robby CCRP5
    Antworten: 1
    Letzter Beitrag: 02.09.2008, 12:49
  3. Timer0 vom Atmega644 spinnt?
    Von hosti im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 02.09.2008, 09:11
  4. atmega644 und bascom -- ADC_REFMODEL
    Von kolisson im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 27
    Letzter Beitrag: 14.03.2008, 00:27
  5. ATMEGA644 Programmieren
    Von Elektronik303 im Forum AVR Hardwarethemen
    Antworten: 49
    Letzter Beitrag: 30.03.2007, 19:36

Berechtigungen

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

LiTime Speicher und Akkus