mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RINGpuffern eines asynchronen externen Signals


Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte ein digitales asynchrones Signal mit einer Genauigkkeit von 
0,5ms sampeln und  über einen Ringpuffer ~200ms später ausgeben. Das ist 
alles, was der Mega32 zu tun hat.

Die Frage ist nun: wie lese ich ein solches Signal aus? Das Signal wird 
niederfrequent (<100HZ) an und ausgehen, ich möchte diese Zeitpunkte 
jedoch zeitl. auflösen.

Ich dachte daran bspw. das Signal mit 2kHz abzuspeichern, für jeden 
Zeitschritt jedoch drei ADC Auswertungen zu nehemen sobal der Wert über 
einem Schwellwert liegt mit eins abzuspeichern. Das würde ich ja am 
besten im free running mode machen!?
Das Signal kommt von einer PC Karte und ist in ttl. Kann ich mir dabei 
die ADC geschichte sparen? Denn wenn ich den free running mode nehme 
benötige ich ja den StackPointer und damit kann es ja problematisch 
werden ein 400bit grtosses Feld im Sram zu reservieren!?



Viele Grüße
Horst

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Horst,

> Das Signal kommt von einer PC Karte und ist in ttl.
> Kann ich mir dabei die ADC geschichte sparen?

Ja

> Denn wenn ich den free running mode nehme benötige ich ja den
> StackPointer

den brauchst Du (fast) immer

> und damit kann es ja problematisch werden ein 400bit
> grosses Feld im Sram zu reservieren!?

Nein - der ATMEGA32 hat 2k

Gruss Otto

Autor: Marius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
WEnn Du die Werte die Du aufnimmst nicht brauchst, sondern nur das 
verzögerte signal, dann wird ein if else mit angeschlossenem Delay doch 
ausreichen.

Benötigst Du die aufgenommenen Samples?

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die schnellen Antworten!

ich benötige die Werte des Signals selbst nicht! ursprünglich dachte ich 
daran einfach ein Schieberegister mit einer variablen Clock zunehmen und 
so das definierte delay zu erzeugen. dochh 400zellige Schieberegister 
gibt es wohle nicht.

wie kann ich denn den speicher reservieren, sodass der stack weiss, dass 
er da nicht reinfunken darf?

reicht ein einmaliges einlesen des Eingangslevels?

Viele Grüße
Horst

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Marius:

es kann jedoch vorkommen, dass der AVR mehrere Signale gleichzeitig im 
"Bauch" hat, sodass ein einfaches if...+delay das nicht direkt 
bewältigen kann.

Viele Grüße

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie kann ich denn den speicher reservieren, sodass der stack weiss, dass
er da nicht reinfunken darf?

reicht ein einmaliges einlesen des Eingangslevels?

Viele Grüße
Horst

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.