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
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.
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.ä.?
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.
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
> 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 ....
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....
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.