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.
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.
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
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.
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.
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.
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".
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
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.
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
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/
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.
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."
> Was genau möchtest Du messen? Eine Drehzahl vielleicht? > Da gibt es bessere Verfahren als eine konstante Torzeit. Geschwindigkeit (:
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
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.
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.
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.
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 ;-)
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.
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
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
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.
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 (;
Gregor R. schrieb: > Dieses Frequenzsignal möchte ich über einen festen > Zeitraum einlesen Wie willst du 300 mV Signal einlesen?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.