Frequenz eines Signals mit ľC bestimmen ...

  • Thread starter Nicolas Nickisch
  • Start date
N

Nicolas Nickisch

Guest
Hi NG,

ich möchte die Frequenz eines Rechtecksignals bestimmen (eigentlich
Geschwindigkeitssignal am Auto).

Hat jemand Erfahrungen/Beispielprogramme für sowas ?

Der ľC für das Projekt soll ein AVR werden.


Nicolas Nickisch
 
Ursprüngliche Nachricht
Am 09.09.03, 22:43:59, schrieb "Nicolas Nickisch" <n.nickisch@gmx.de>
zum Thema Frequenz eines Signals mit ľC bestimmen ...:

ich möchte die Frequenz eines Rechtecksignals bestimmen (eigentlich
Geschwindigkeitssignal am Auto).

Hat jemand Erfahrungen/Beispielprogramme für sowas ?
Da gab's früher zwei Valvo Büchlein Befehlssatz- und Applikation zur
Frequenzbestimmung für den 8051... So oder ähnlich *in der Erinnerung
kram*. Die habe ich hin und wieder auf e-Flohmärkten gesehen :)

Der ľC für das Projekt soll ein AVR werden.
Damit habe ich zwar keine Erfahrung; aber kann es sein, dass er seine
Wurzeln beim 8051 hat?

Gruß
Thomas
 
Nicolas Nickisch schrieb:
Hi NG,

ich möchte die Frequenz eines Rechtecksignals bestimmen (eigentlich
Geschwindigkeitssignal am Auto).
Wieviel Erfahrung hast Du denn mit uC überhaupt? Für sowas haben
eigentlich alle aktuellen uC spezielle Ports bzw. Zähler. Zieh Dir mal
das Datenblatt zu einem beliebigen AVR und schau mal nach der
Beschreibung der Capture Ports/Register. Das ist trivial.

- Carsten

--
Audio Visual Systems fon: +49 (0)2238 967926
Carsten Kurz fax: +49 (0)2238 967925
Fasanenweg 38a email: audiovisual@t-online.de
50259 Pulheim / Germany WGS84:N50°58'44.7" E06°47'03.5"
 
Nicolas Nickisch <n.nickisch@gmx.de> schrieb im Beitrag <bjle2f$kftib$1@ID-197925.news.uni-berlin.de>...
ich möchte die Frequenz eines Rechtecksignals bestimmen (eigentlich
Geschwindigkeitssignal am Auto).
Hat jemand Erfahrungen/Beispielprogramme für sowas ?
Der ľC für das Projekt soll ein AVR werden.

Es gibt dutzende von Application Notes und Bauvorschlaege fuer
Freqeuenzzaehler mit uC, meist mit 4-stelliger Anzeige.
Google halt mal (bzw. Microchip AppNotes durchforsten,
ePanorama etc.)
--
Manfred Winterhoff, reply-to invalid, use mawin at despammed.com
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
 
Ich glaube schon ...
Bin allerdings nur Hobby-ľCler und habe nicht so viel Überblick.

Nicolas Nickisch

"Thomas Drescher" <ThomasDe2@hotmail.com> schrieb im Newsbeitrag
news:20030909.21383938@groucho.TFDrescher.net...
Ursprüngliche Nachricht
Am 09.09.03, 22:43:59, schrieb "Nicolas Nickisch" <n.nickisch@gmx.de>
zum Thema Frequenz eines Signals mit ľC bestimmen ...:

ich möchte die Frequenz eines Rechtecksignals bestimmen (eigentlich
Geschwindigkeitssignal am Auto).

Hat jemand Erfahrungen/Beispielprogramme für sowas ?
Da gab's früher zwei Valvo Büchlein Befehlssatz- und Applikation zur
Frequenzbestimmung für den 8051... So oder ähnlich *in der Erinnerung
kram*. Die habe ich hin und wieder auf e-Flohmärkten gesehen :)

Der ľC für das Projekt soll ein AVR werden.
Damit habe ich zwar keine Erfahrung; aber kann es sein, dass er seine
Wurzeln beim 8051 hat?

Gruß
Thomas
 
Hmm,
jetzt kommt mir gerade die Idee: Wenn es reicht die steigende oder fallende
Flanke des Signals als Interrupt zu nehmen und dann mit dem internen Timer
die Zeit bis zum nächsten Signal zu messen, dann ist das in der Tat einfach
....


Nicolas Nickisch


"Carsten Kurz" <audiovisual@t-online.de> schrieb im Newsbeitrag
news:3F5E4B3E.A671D7BF@t-online.de...
Nicolas Nickisch schrieb:

Hi NG,

ich möchte die Frequenz eines Rechtecksignals bestimmen (eigentlich
Geschwindigkeitssignal am Auto).

Wieviel Erfahrung hast Du denn mit uC überhaupt? Für sowas haben
eigentlich alle aktuellen uC spezielle Ports bzw. Zähler. Zieh Dir mal
das Datenblatt zu einem beliebigen AVR und schau mal nach der
Beschreibung der Capture Ports/Register. Das ist trivial.

- Carsten

--
Audio Visual Systems fon: +49 (0)2238 967926
Carsten Kurz fax: +49 (0)2238 967925
Fasanenweg 38a email: audiovisual@t-online.de
50259 Pulheim / Germany WGS84:N50°58'44.7" E06°47'03.5"
 
Hallo Thomas!

Der ľC für das Projekt soll ein AVR werden.

Damit habe ich zwar keine Erfahrung; aber kann es sein, dass er seine
Wurzeln beim 8051 hat?
Nein nein nein. Genausoviel oder wenig wie der PIC was mit 8051 zu tun hat.

Gruß
Thorsten
--
Kunst kommt aber von 'können',
nicht von 'kennst du schon den neuesten trick?'
Gunther in oecher.computer zum Thema "Gutes Webdesign"
 
"Nicolas Nickisch" <n.nickisch@gmx.de> schrieb:

jetzt kommt mir gerade die Idee: Wenn es reicht die steigende oder
fallende
Flanke des Signals als Interrupt zu nehmen und dann mit dem internen Timer
die Zeit bis zum nächsten Signal zu messen, dann ist das in der Tat
einfach
...
.... und genau das macht die Capture-Einheit von uCs: automatische Triggerung
eines internen Zählers durch externe Rechteck-Signale.

Gruß,

Christian
 
Nicolas Nickisch schrieb...
jetzt kommt mir gerade die Idee: Wenn es reicht die steigende oder fallende
Flanke des Signals als Interrupt zu nehmen und dann mit dem internen Timer
die Zeit bis zum nächsten Signal zu messen, dann ist das in der Tat einfach
...
Denk daran, daß das Signal von einem Sensor kommt, bei dem die Zeit
zwischen 2 Impulsen schwanken kann (Jitter). Also entweder in einer
Nachbearbeitung mitteln oder mehr als einen Impuls auswerten. Kann man
mit Cap/Com Unit machen, aber IMO ist ein Zähler besser geeignet, da die
Interruptlast geringer wird.

- Heinz
 
Hallo Nicolas,

ich möchte die Frequenz eines Rechtecksignals bestimmen (eigentlich
Geschwindigkeitssignal am Auto).
habe gerade einen Frequenzzaehler fertig, das ist eine ganz nette
Einstiegsuebung in den ATmega8, bzw. -16 gewesen. Ich messe damit
Impulse von einer Lichtschranke aus. Auf einem kleinen LCD wird sowohl
die aktuelle Frequenz (aktualisiert 1x pro sec) als auch die Gesamtzahl
der Impulse ausgegeben. Vorgehen:

- LCD-Routinen fuer HD44800 einbinden und ggfs. anpassen (fuer 4MHz z.B.
auf www.mikrocontroller.net zu finden)
- Timer2 starten und mit der Overflow-Interruptroutine den Zeitablauf
steuern
- Timer1 (16bit) als Zaehler verwenden.

1x pro Sekunde lese ich den Zaehler in ein "Gesamtanzahl"-Register ein,
gebe die Werte (Aktuell -> Frequenz und Gesamtanzahl) aus und loesche
den Zaehler.

Fuer die Umwandlung der Binaer-/Hexwerte in ASCII gibt's massenhaft
Beispiele im Netz. Suche mal nach "hex2bcd", die "Abziehmethode" ist
auch recht leicht verstaendlich.

Den Rest der Zeit schlaeft die CPU und wird nur von den
Timer/Counter-Interrupts geweckt.

Wenn Du meinen (q&d) Assembler-Code haben willst, schicke ich ihn Dir
heute abend (von zu Hause).

Gruss,
Dirk


--
Dirk Wiebel
SFB 441 Linguistische Datenstrukturen
Nauklerstr. 35 fon: +49 7071 29-77153
D-72074 Tuebingen fax: +49 7071 29-5830
Email: -- hidden in Usenet --
GNUpg public key: http://www.sfb441.uni-tuebingen.de/~dirk/key.txt
 
Nicolas Nickisch <n.nickisch@gmx.de> wrote:

jetzt kommt mir gerade die Idee: Wenn es reicht die steigende oder
fallende Flanke des Signals als Interrupt zu nehmen und dann mit dem
internen Timer die Zeit bis zum nächsten Signal zu messen, dann ist
das in der Tat einfach ...
Wenn Du einen sauberen Rechteck am Eingang hast (also keine
softwaremäßige Entstörung/Filterung/Entprellung machen mußt), dann
sollte das genügen.

Wenn Du einen sehr weiten Frequenzbereich überstreichen willst
(vermutlich in Deinem Falle eher nicht), dann kann man auch nach 5 ms,
25 ms, 100 ms usw. jeweils mal nachsehen, ob der Zähler schon am
Überlaufen ist und ansonsten weiterzählen lassen. Hinweis: die
Überläufe selbst müssen Dich wenig kümmern. Die Zwerikomplementzahlen
sind so angelegt, daß Du den Wert zweier 16-Bit-Zählerzustände einfach
subtrahieren kannst (Variablen vom Typ uint16_t). Damit kannst Du
einen durchlaufenden Zähler benutzen und die input capture Funktion.
Falls der Zähler inzwischen einen Nulldurchgang hatte, stört das
überhaupt nicht, Du mußt nur noch den Fall abfangen, daß er nicht
/mehr als einen/ Nulldurchgang hatte.

Die Benutzung von input capture spart Dir den Overhead der
Interruptfunktion, die Du bei Deinem externen Interrupt hättest.

Bitte kein TOFU. (Siehe http://afaik.de/usenet/faq/zitieren/ )
--
J"org Wunsch Unix support engineer
joerg_wunsch@interface-systems.de http://www.interface-systems.de/~j/
 
Ich schätze, daß das Signal für meine Zwecke ausreichen wird !
Nicolas Nickisch


"Heinz Saathoff" <hsaat@despammed.com> schrieb im Newsbeitrag
news:MPG.19c8f0e8c7497cb39896c3@news.arcor.de...
Nicolas Nickisch schrieb...
jetzt kommt mir gerade die Idee: Wenn es reicht die steigende oder
fallende
Flanke des Signals als Interrupt zu nehmen und dann mit dem internen Timer
die Zeit bis zum nächsten Signal zu messen, dann ist das in der Tat
einfach
...
Denk daran, daß das Signal von einem Sensor kommt, bei dem die Zeit
zwischen 2 Impulsen schwanken kann (Jitter). Also entweder in einer
Nachbearbeitung mitteln oder mehr als einen Impuls auswerten. Kann man
mit Cap/Com Unit machen, aber IMO ist ein Zähler besser geeignet, da die
Interruptlast geringer wird.

- Heinz
 
Sehr nett von Dir. Als "Gedankenstütze" wäre das prima.

Gleich noch ne' Frage:

Da die Schaltung letzlich die im Fahrzeug vorhandene Steuerung überlisten
soll, muß in bestimmten Fällen das vom Getriebesignal unterdrückt oder auch
unverändert weitergegeben werden.

Ich muß also:
- Das Signal erkennen
- Die Frequenz ermitteln
- ggf. die Pulse unverändert wieder ausgeben.

Ginge das mit diesen OC1ABC-Pins der ATmels ? Wenn ich die Doku richtig
verstanden habe, dann kann man einen Timer so programmieren, daß nach dessen
Ablauf ein bestimmter Pin "kippt".

Nicolas Nickisch

"Dirk Wiebel" <news@wiebel.de> schrieb im Newsbeitrag
news:bjmnhr$c3q$1@newsserv.zdv.uni-tuebingen.de...
Hallo Nicolas,

ich möchte die Frequenz eines Rechtecksignals bestimmen (eigentlich
Geschwindigkeitssignal am Auto).
habe gerade einen Frequenzzaehler fertig, das ist eine ganz nette
Einstiegsuebung in den ATmega8, bzw. -16 gewesen. Ich messe damit
Impulse von einer Lichtschranke aus. Auf einem kleinen LCD wird sowohl
die aktuelle Frequenz (aktualisiert 1x pro sec) als auch die Gesamtzahl
der Impulse ausgegeben. Vorgehen:

- LCD-Routinen fuer HD44800 einbinden und ggfs. anpassen (fuer 4MHz z.B.
auf www.mikrocontroller.net zu finden)
- Timer2 starten und mit der Overflow-Interruptroutine den Zeitablauf
steuern
- Timer1 (16bit) als Zaehler verwenden.

1x pro Sekunde lese ich den Zaehler in ein "Gesamtanzahl"-Register ein,
gebe die Werte (Aktuell -> Frequenz und Gesamtanzahl) aus und loesche
den Zaehler.

Fuer die Umwandlung der Binaer-/Hexwerte in ASCII gibt's massenhaft
Beispiele im Netz. Suche mal nach "hex2bcd", die "Abziehmethode" ist
auch recht leicht verstaendlich.

Den Rest der Zeit schlaeft die CPU und wird nur von den
Timer/Counter-Interrupts geweckt.

Wenn Du meinen (q&d) Assembler-Code haben willst, schicke ich ihn Dir
heute abend (von zu Hause).

Gruss,
Dirk


--
Dirk Wiebel
SFB 441 Linguistische Datenstrukturen
Nauklerstr. 35 fon: +49 7071 29-77153
D-72074 Tuebingen fax: +49 7071 29-5830
Email: -- hidden in Usenet --
GNUpg public key: http://www.sfb441.uni-tuebingen.de/~dirk/key.txt
 
Hallo Nicolas!

Sehr nett von Dir. Als "Gedankenstütze" wäre das prima.
Sei du doch bitte auch mal nett und lies http://learn.to/quote - danke!

Gruß
Thorsten
--
Kunst kommt aber von 'können',
nicht von 'kennst du schon den neuesten trick?'
Gunther in oecher.computer zum Thema "Gutes Webdesign"
 
Nicolas Nickisch wrote:
Sehr nett von Dir. Als "Gedankenstütze" wäre das prima.
... ist per PM unterwegs...

Dein anderes Problem liesse sich IMHO mit PWM erledigen, kann ich Dir
aber leider (noch) nix zu sagen.

Gruss,
Dirk


--
Dirk Wiebel
SFB 441 Linguistische Datenstrukturen
Nauklerstr. 35 fon: +49 7071 29-77153
D-72074 Tuebingen fax: +49 7071 29-5830
Email: -- hidden in Usenet --
GNUpg public key: http://www.sfb441.uni-tuebingen.de/~dirk/key.txt
 

Welcome to EDABoard.com

Sponsor

Back
Top