Forum: Mikrocontroller und Digitale Elektronik AVR Impulszähler


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Schraubt G. (g-schraubt)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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:

Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von HildeK (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

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]
  • [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.