Forum: Mikrocontroller und Digitale Elektronik Impulsefolge speichern und wiedergeben


von Lukas BD (Gast)


Lesenswert?

Hallo,

ich bin auf der Suche nach Ideen, um eine Folge von Impulse zu speichern 
und anschließend wiederzugeben.

Es ist wichtig, den zeitlichen Ablauf der Impulse zu speichern und deren 
Länge. Ich brauch keine hohe Auflösung, da es sich nur um "0 oder 1" 
handelt. Die maximale Frequenz aufeinanderfolgender Impulse liegt bei 
wenigen hundert kHz. Gespeichert werden muss insgesamt max. 1s.

Ich dachte, ich nehme einen schnellen ADC, um das Signal abzutasten. 
Diesen lese ich mit einem Mikrocontroller (z.B. Atmega32 o.ä.) aus und 
speichere die Abfolge im EEPROM. Über einen Pin gebe ich anschließend 
(auf Kommando hin) die gespeichert Abfolge wieder aus. Ist das so 
realisierbar? Oder habe ich hier einen groben Denkfehler?

Viele Grüße

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Deine Idee klingt ansich vernünftig. Ausser das mit dem ADC - wozu? Wenn 
du weisst, es handelt sich um ein digitales Signal, genügt ein 
Komparator oder Trigger als Eingangsstufe. Das mit dem EEPROM würde ich 
evtl. auch nochmal hinterfragen, wenn du das Teil öfters benutzen willst 
(Anzahl der Überschreibungen). Evtl. ist da ein gepuffertes SRAM die 
bessere Wahl, auch wegen der Reaktionszeiten ...

Die Samplefrequenz sollte 3..5 mal höher sein als der kürzeste 
vorkommende Zeitraum zwischen zwei Pegelwechseln - da bist du schnell im 
MHz-Bereich.

von Lukas BD (Gast)


Lesenswert?

ok, wenn ich z.B. einen Komparator nutze, dessen Ausgang "high" wird, 
sobald ein Impuls anliegt, kann ich die steigende / fallende Flanke mit 
einem (Interrupt-)Port am Mikrocontroller detektieren. Wie schnell kann 
diese Reaktion ausgelöst werden, wenn ich dem Mikrocontroller z.B. mit 
16MHz betreibe? Welche Verzögerungszeiten habe ich ungefähr bei z.B. 
einem Atmega32 o.ä.?

von Karl H. (kbuchegg)


Lesenswert?

Lukas BD schrieb:

> einem (Interrupt-)Port am Mikrocontroller detektieren. Wie schnell kann
> diese Reaktion ausgelöst werden,
> wenn ich dem Mikrocontroller z.B. mit
> 16MHz betreibe? Welche Verzögerungszeiten habe ich ungefähr bei z.B.
> einem Atmega32 o.ä.?

realistisch musst du in einem C-Programm mit ca. 20 Takten Verzögerung 
rechnen. Wenn der Interrupt kommt, wird der momentan aktive µC Befehl 
fertig gemacht, ehe dann die ISR angesprungen wird und in der ISR 
sichert der Compiler erst mal ein paar Register (je nachdem was so alles 
benutzt wird). Aber ich würde sagen, so um die 20 Zyklen ist 
einigermassen realistisch.

von Oliver (Gast)


Lesenswert?

Lukas BD schrieb:
> wenigen hundert kHz
> Gespeichert werden muss insgesamt max. 1s.
> z.B. Atmega32 o.ä.
> EEPROM

Hm...

Den zeitliche Ablauf einer Impulsfolge mit "wenigen hundert kHz" über 1s 
per AtMega32 abzutasten, und dann Länge/Zeitpunkte im (internen?) EEPROM 
abzuspeichern, dürfte einige unlösbare Probleme nach sich ziehen.

Zur Abtastung: Das Stichwort dafür lautet Input Capture. Damit verlierst 
du schonmal keine 20 Zyklen.

Aber wohin du die in 1s anfallende Datenmenge in einem AtMega dann 
abspeichern willst, ist mir noch nicht so ganz klar.

Oliver

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

> Welche Verzögerungszeiten habe ich ungefähr
> bei z.B. einem Atmega32 o.ä.?

ist denn eine Verzögerungszeit bei der gegebenen Aufgabenstellung 
(capture der 0-1 und 1-0 Übergänge) überhaupt wichtig? Ob das nun 10 uS 
oder 1 mS oder gar 1 S dauert ist doch ziemlich "wurscht", hauptsache es 
wird immer gleich lang verzögert, und es geht kein Ereignis verloren 
....

von Dr G. Reed (Gast)


Lesenswert?

Ich hab mal ein Programm geschrieben (AVR Assembler), welches die 
Impulsfolgen  aufnimmt und wiedergegen kann. Das geht recht gut mit dem 
Input Capture Pin. Um ausreichende Genauigkeit zu erzielen, musste ich 
jede Pulslänge als 16 Bit abspeichern, da wirds recht eng mit dem 
internen Ram....

von Lukas BD (Gast)


Lesenswert?

Oliver schrieb:
> Aber wohin du die in 1s anfallende Datenmenge in einem AtMega dann
> abspeichern willst, ist mir noch nicht so ganz klar.

Das mit dem Atmega war auch nur ein erster Vorschlag. Was würdest du 
empfehlen?


Wegstaben Verbuchsler schrieb:
> hauptsache es
> wird immer gleich lang verzögert, und es geht kein Ereignis verloren

Das ist richtig. Ist für meine geplante Anwendung nicht von Interesse, 
solange die Verzögerung gleich bleibt.

Dr G. Reed schrieb:
> Ich hab mal ein Programm geschrieben (AVR Assembler), welches die
> Impulsfolgen  aufnimmt und wiedergegen kann. Das geht recht gut mit dem
> Input Capture Pin. Um ausreichende Genauigkeit zu erzielen, musste ich
> jede Pulslänge als 16 Bit abspeichern, da wirds recht eng mit dem
> internen Ram....

Hast du den Quelltext veröffentlicht oder kannst du nähere 
Detailinformationen zur verwendeten Hardware geben und zur 
Programmierung geben?

von Udo S. (urschmitt)


Lesenswert?

Lukas BD schrieb:
> Das mit dem Atmega war auch nur ein erster Vorschlag. Was würdest du
> empfehlen?

Der µC muss folgende Dinge erledigen:
- Auf den Input Capture reagieren.
- Notwendige Register retten
- Den Timer (16Bit) auslesen.
- Den Wert abspeichern
- Register zurückspeichern.
- Interrupt beenden

Du redest von wenigen 100kHz. Wenn man 400KHz annimmt sollte man um 
etwas Puffer zu haben nicht länger als 2µs dafür brauchen.

Maximal brauchst du dann theoretisch 200.000 * 2Byte RAM.

Achtung bei 16Bit Timer und z.B. 1µs Tick läuft der 16 Bit Timer nach 64 
ms über!

Jetzt hast du eigentlich alle Werte um dir einen µC rauszusuchen.

von Willi (Gast)


Lesenswert?

Lukas BD schrieb:
> Ich brauch keine hohe Auflösung, da es sich nur um "0 oder 1"
> handelt. Die maximale Frequenz aufeinanderfolgender Impulse liegt bei
> wenigen hundert kHz.

Welche Auflösung brauchst Du genau? 1µs, 100ns, 10ns?
Welches ist die maximale und welches die minimale Frequenz und wieviele 
Flankenwechsel/s werden erwartet?

Wenn es einen Tick mehr kosten darf als 0815, dann nimm einen µC mit ICP 
und DMA und ggf. ext. RAM.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.