Forum: Mikrocontroller und Digitale Elektronik RINGpuffern eines asynchronen externen Signals


von Horst (Gast)


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

von Otto (Gast)


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

von Marius (Gast)


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?

von Horst (Gast)


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

von Horst (Gast)


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

von Horst (Gast)


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

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.