Forum: Mikrocontroller und Digitale Elektronik AVR Impulszähler


von Schraubt G. (g-schraubt)


Angehängte Dateien:

Lesenswert?

Hallo Freunde,
ich stehe gerade vor meinem ersten CTC-Timer Projekt.
Ziel ist es, die Anzahl der Impulse, welche vorerst von einem Taster, 
später von einem Sensor kommen, in einem bestimmten Zeitinvervall zu 
zählen. Der gezählte Wert soll dann mittels Interrupt abgefragt werden. 
Das Zeitintervall soll immer das gleiche sein. -(10sek.)
Für mich scheint der CTC-Timer0 dafür geeignet.
Nun zu meiner Frage...
Ist es möglich bzw. sinnvoll das Projekt mittels CTC-Timer0 zu 
realisieren oder gibt es hierfür bessere, einfachere Lösungen?

Verwendet wird ein Arduino Uno mit einem Atmega328P. Der Code wird in C 
geschrieben.

Zum besseren Verständnis befindet sich ein Foto vom Konzept im Anhang.


Danke schonmal im Voraus!


Werden den thread natürlich auch aktualisieren und meine Fortschritte 
posten.

von HildeK (Gast)


Lesenswert?

Mal in deinem Tasterschaltbild erst mal da Punkte, wo Verbindungen 
herrschen sollen. Aber egal wie, die 100n sind so nicht richtig.

Zur Software: Ja, kann man so machen. Du musst halt irgendwie das 
10s-Raster generieren und dann den Zählerstand festhalten/ausgeben und 
zurücksetzen für den nächsten Zyklus. Dafür sind die Timer da.
Wenn die 10s möglichst exakt sein sollen, dann such dir einen passenden 
Quarz aus, der auch eine brauchbare Teilung auf 10s zulässt.

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

du hast 2 Möglichkeiten:
(1)
Du zählst die Impulse mit Timer 0, das hat aber nichts mit CTC zu tun - 
der Zähler zählt nur und das mit externem Takt an T0.
Mit einem 2. Timer z.B. Timer 1 erzeugst du mittels CTC Mode dein 10s 
Zeitraster, wo du den Zählerstand von Timer 0 liest und wieder auf Null 
setzt.
Beachte Timer 0 hat nur 8-Bit (0..255) sind mehr Impulse zu erwarten 
musst du im OV-Int des Timers per Software die höheren Bits zählen.

(2)
Du zählst die Anzahl der Impulse per Software über INTx. Der Rest mit 
Timer 1 wie oben.

Es hängt halt davon ab wie schnell die Impulse auftreten können - dein 
Beispiel mit 7 in 10s ist ja schnarchlangsam.

Mit Variante 1 kannst du Impulse bis zur halben Taktfrequenz des AVR 
zählen und das ohne Prozessorlast da der Zählvorgang rein in Hardware 
erledigt wird. Für langsame Signale wird Variante 2 ausreichen, dann hat 
man den Timer für was anderes übrig.

Sascha

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Gregor R. schrieb:
> die Anzahl der Impulse, welche vorerst von einem Taster,
Einen mechanischen Taster fragt man einfach per Software gepollt ab. 
Da braucht man ausser einem z.B. 1ms-Interrupt nichts weiter.

> später von einem Sensor kommen,
Welche maximale Pulsfrequenz hat dieser Sensor?

Ein Taster als "Simulator" für einen elektronischen Sensor ist 
ungünstig, weil man sich beim Taster immer Gedanken um die Entprellung 
machen muss, was man sich bei einem elektronischen Sensor ggfs. sparen 
kann.

von Wolfgang (Gast)


Lesenswert?

HildeK schrieb:
> Mal in deinem Tasterschaltbild erst mal da Punkte, wo Verbindungen
> herrschen sollen. Aber egal wie, die 100n sind so nicht richtig.

Und wo siehst du bzgl. der Verschaltung des Kondensators, bis auf den 
fehlenden R2, den prinzipiellen Unterschied zur Schaltung im Artikel 
Entprellung: Einfacher Taster?
Ob der Eingangspegel durch den Kondensator gegen VCC oder Gnd 
stabilisiert wird, ist doch hier völlig nebensächlich.

von Axel S. (a-za-z0-9)


Lesenswert?

Wolfgang schrieb:
> HildeK schrieb:
>> Mal in deinem Tasterschaltbild erst mal da Punkte, wo Verbindungen
>> herrschen sollen. Aber egal wie, die 100n sind so nicht richtig.
>
> Und wo siehst du bzgl. der Verschaltung des Kondensators, bis auf den
> fehlenden R2, den prinzipiellen Unterschied zur Schaltung im Artikel
> Entprellung: Einfacher Taster?

Das kannst du nicht sehen? Dann brauchst du wohl eine Brille.

> Ob der Eingangspegel durch den Kondensator gegen VCC oder Gnd
> stabilisiert wird

"stabilisiert" wird da ohnehin nichts. Und wenn du in der Schaltung aus 
dem Wiki den Kondensator statt gegen GND gegen Vcc schaltest, ist es 
immer noch eine ganz andere Schaltung als der Unsinn aus diesem Thread.

von Wolfgang (Gast)


Lesenswert?

Axel S. schrieb:
> "stabilisiert" wird da ohnehin nichts.

Na aber bestimmt. Nachdem der Schalter wieder geöffnet wurde, wird der 
Logikpegel erstmal weiterhin durch den Kondensator auf 
"Schalter-geschlossen" gehalten. Erst wenn der Kondensator sich über den 
Widerstand allmählich soweit auf den Ruhepegel umgeladen hat, das die 
Schaltschwelle über- bzw. unterschritten wird (je nach Schaltung), 
spring der Logikpegel auf "Schalter-offen".

von Schraubt G. (g-schraubt)


Lesenswert?

Danke für die raschen Antworten!

Das Thema mit dem Taster hab ich schon gelöst.

Nun zum Sensor:
Es handelt sich um einen IPM 165 welcher innerhalb einer Bandbreite von 
60Hz bis 11kHz arbeitet. Diese Bandbreite werde ich auch ausnutzen. Um 
diese wie gewünscht nutzen zu können, beträgt jedes Zeitintervall knapp 
25ms.
In diesem Intervall möchte icht meine Impulse zählen.
Der OCR0A Wert (also der Wert an dem der CTC wieder auf null geht)müsste 
sich ja anhand des Zeitintervalls von 25ms berechnen lassen. Liege ich 
hier noch richtig?

MfG

: Bearbeitet durch User
von HildeK (Gast)


Lesenswert?

Lothar M. schrieb:
> Gregor R. schrieb:
>> die Anzahl der Impulse, welche vorerst von einem Taster,
> Einen mechanischen Taster fragt man einfach per Software gepollt ab.
> Da braucht man ausser einem z.B. 1ms-Interrupt nichts weiter.

Natürlich richtig, aber ich hab das so verstanden, dass er den Schalter 
nur zum Testen seiner Funktion nehmen will. Wenn der Sensor gar nicht 
prellen sollte (was ich nicht weiß), dann ist das erst mal i.O., 
hilfsweise per HW zu entprellen.

Wolfgang schrieb:
> Und wo siehst du bzgl. der Verschaltung des Kondensators, bis auf den
> fehlenden R2, den prinzipiellen Unterschied zur Schaltung im Artikel
> Entprellung: Einfacher Taster?

Die Frage wurde von Axel S. gut beantwortet.

von Schraubt G. (g-schraubt)


Lesenswert?

War von mir wahscheinlich zu unklar formuliert.
Ja, der Taster sollte nur zum Testen der Funktion dienen. Daher auch die 
HW Variante.
Der Sensor prellt nicht.

lg

von Georg M. (g_m)


Lesenswert?

Gregor R. schrieb:
> Es handelt sich um einen IPM 165 welcher innerhalb einer Bandbreite von
> 60Hz bis 11kHz arbeitet.

Also etwas ähnliches? :
http://www.hjberndt.de/soft/radar/

von m.n. (Gast)


Lesenswert?

Gregor R. schrieb:
> Es handelt sich um einen IPM 165 welcher innerhalb einer Bandbreite von
> 60Hz bis 11kHz arbeitet. Diese Bandbreite werde ich auch ausnutzen. Um
> diese wie gewünscht nutzen zu können, beträgt jedes Zeitintervall knapp
> 25ms.

Was genau möchtest Du messen? Eine Drehzahl vielleicht?
Da gibt es bessere Verfahren als eine konstante Torzeit.

von Mario M. (thelonging)


Lesenswert?

Georg M. schrieb:
> Also etwas ähnliches? :
> http://www.hjberndt.de/soft/radar/

Dort steht:
"und hat einen analogen Ausgang, der mit 300 mV angegeben ist."

von Schraubt G. (g-schraubt)


Lesenswert?

> Was genau möchtest Du messen? Eine Drehzahl vielleicht?
> Da gibt es bessere Verfahren als eine konstante Torzeit.

Geschwindigkeit (:

von Schraubt G. (g-schraubt)


Lesenswert?

Mario M. schrieb:
> Georg M. schrieb:
>> Also etwas ähnliches? :
>> http://www.hjberndt.de/soft/radar/
>
> Dort steht:
> "und hat einen analogen Ausgang, der mit 300 mV angegeben ist."

Ja so etwas ähnliches.
was möchtest du mir damit sagen? (:

lg

von Peter D. (peda)


Lesenswert?

Gregor R. schrieb:
> welcher innerhalb einer Bandbreite von
> 60Hz bis 11kHz arbeitet.

Für solche Aufgaben ist die Input-Capture-Funktion vorgesehen. Diverse 
Frequenzmesserprogramme sind so aufgebaut.

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Axel S. schrieb:
> "stabilisiert" wird da ohnehin nichts. Und wenn du in der Schaltung aus
> dem Wiki den Kondensator statt gegen GND gegen Vcc schaltest, ist es
> immer noch eine ganz andere Schaltung als der Unsinn aus diesem Thread.

HildeK schrieb:
> Die Frage wurde von Axel S. gut beantwortet.

Wo siehst du da eine Erklärung?

Ich habe die Anordnung der Bauelemente für die Gegenüberstellung von 
Gregors und Wiki Version etwas angeglichen, den bereits angemahnten 
Verbindungspunkt links nachgetragen und den Strombegrenzungswiderstand 
rechts weg gelassen.
Sorry, aber ich sehe den prinzipiellen Unterschied zwischen beiden 
Schaltungsvarianten nicht.

von Wolfgang (Gast)


Lesenswert?

p.s.
Ich hasse Taster, bei denen man erst "stundenlang" drücken muss, damit 
ein Tastendruck überhaupt erkannt wird (Zeitkonstante R2*C1 in der 
Wiki-Schaltung).
Prellen wird genauso ohne diese Zeitkonstante beim schließen 
unterdrückt.

von m.n. (Gast)


Lesenswert?

Gregor R. schrieb:
>> Was genau möchtest Du messen? Eine Drehzahl vielleicht?
>> Da gibt es bessere Verfahren als eine konstante Torzeit.
>
> Geschwindigkeit (:

Geschwindigkeit ist nichts anderes als Drehzahl in die Länge gezogen ;-)

von Schraubt G. (g-schraubt)


Lesenswert?

m.n. schrieb:
> Gregor R. schrieb:
>>> Was genau möchtest Du messen? Eine Drehzahl vielleicht?
>>> Da gibt es bessere Verfahren als eine konstante Torzeit.
>>
>> Geschwindigkeit (:
>
> Geschwindigkeit ist nichts anderes als Drehzahl in die Länge gezogen ;-)

haha, das hab ich so noch nie gesehen. da hast du vollkommen recht :D

ich bin gerade dabei, den code zu schreiben und werde mich dann bestimmt 
wieder melden.

von Mario M. (thelonging)


Lesenswert?

Gregor R. schrieb:
>> "und hat einen analogen Ausgang, der mit 300 mV angegeben ist."
>
> Ja so etwas ähnliches.
> was möchtest du mir damit sagen? (:

Dass selbst die Module mit Verstärker kein (prellfreies) Digitalsignal 
liefern.
http://www.weidmann-elektronik.de/index.php?option=com_content&view=section&layout=blog&id=17&Itemid=21

von Maxim B. (max182)


Lesenswert?

Gregor R. schrieb:
>> Dort steht:
>> "und hat einen analogen Ausgang, der mit 300 mV angegeben ist."
>
> Ja so etwas ähnliches.
> was möchtest du mir damit sagen? (:

Interessant, wie willst du 300 mV-Sensor bedienen? So wie eine Taste???

Wolfgang schrieb:
> Prellen wird genauso ohne diese Zeitkonstante beim schließen
> unterdrückt.

Kondensator ist überflüssig. Man kann viel besser per Programm 
entprellen.

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Gregor R. schrieb:
> ich bin gerade dabei, den code zu schreiben und werde mich dann bestimmt
> wieder melden.

Wenn möglich, nimm bitte wie geschrieben gleich die 
Input-Capture-Funktion, die Timer 1 bietet. Die Impulse selber werden 
per Software gezählt.
Als Belohnung erhälst Du immer hohe Auflösung auch bei 
Schrittgeschwindigkeit und sparst noch den Umweg über eine 
Torzeitmessung. Der Suchbegriff dazu ist "reziproker Frequenzzähler".

Die verlinkte Lösung mit Arduino 'PulseIn' ist ja ganz nett für langsame 
Impulse und unbedarfte Anwender. Sobald die Ansprüche steigen - höhere 
Frequenzen oder nicht blockierende Programmausführung - kommt man in 
eine Sackgasse.

Maxim B. schrieb:
> Interessant, wie willst du 300 mV-Sensor bedienen? So wie eine Taste???

Der Atmega hat einen Eingangskomparator AIN0/AIN1, mit dem man auch 100 
mV Signale digitalisieren kann. Der Komparatorausgang kann direkt als 
Capture-Signal geschaltet werden.

von Schraubt G. (g-schraubt)


Lesenswert?

Maxim B. schrieb:
> Gregor R. schrieb:
>>> Dort steht:
>>> "und hat einen analogen Ausgang, der mit 300 mV angegeben ist."
>>
>> Ja so etwas ähnliches.
>> was möchtest du mir damit sagen? (:
>
> Interessant, wie willst du 300 mV-Sensor bedienen? So wie eine Taste???

was meinst du mit bedienen?
der Sensor wird mit einer VCC-Spannung versorgt und liefert mir ein 
Frequenzsignal. Dieses Frequenzsignal möchte ich über einen festen 
Zeitraum einlesen und anhand der, in diesem Zeitraum gezählten 
steigenden Flanken, mir die Geschwindigkeit berechnen.

Habe ich hier irgendetwas nicht bedacht? -soll ja solche Tage geben (;

von Maxim B. (max182)


Lesenswert?

Gregor R. schrieb:
> Dieses Frequenzsignal möchte ich über einen festen
> Zeitraum einlesen
Wie willst du 300 mV Signal einlesen?

von HildeK (Gast)


Lesenswert?

Wolfgang schrieb:
> Sorry, aber ich sehe den prinzipiellen Unterschied zwischen beiden
> Schaltungsvarianten nicht.

Du hast ja recht, wenn da die Punkte gewesen wären. Die kann man sich 
dann irgendwo denken oder auch nicht.

Maxim B. schrieb:
> Wie willst du 300 mV Signal einlesen?

Siehe weiter oben:

m.n. schrieb:
> Der Atmega hat einen Eingangskomparator AIN0/AIN1, mit dem man auch 100
> mV Signale digitalisieren kann. Der Komparatorausgang kann direkt als
> Capture-Signal geschaltet werden.

von Maxim B. (max182)


Lesenswert?

m.n. schrieb:
> Der Atmega hat einen Eingangskomparator AIN0/AIN1, mit dem man auch 100
> mV Signale digitalisieren kann. Der Komparatorausgang kann direkt als
> Capture-Signal geschaltet werden.

Hier wird aber ohne Hysteresis nichts.

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.