Hallo Ich habe schon viel gelesen aber hierzu noch keine eindeutige Antwort gefunden. Meine Problem: Ich möchte eine Drehzahl messen (200 1/sec) und diese auf einem LCD ausgeben. Was ich weiß: LCD ansteuerung ist klar. Zählvorgang (Pulse pro zb. 100ms (Timerinterrupt) zählen und dann verrechen) Mein Problem: Ich habe in ein paar projekten gesehen das die Pins AIN0/1 oder auch T0/1 dafür genommen wurden. Aus dem Bauch raus hätte ich es mit einem INT0/1 gemacht. Kann mir da jemand licht ins dunkle bringen? Bis jetzt habe ich meine Probleme immer Software seitig gelöst. Bei der Frequenz scheint mir das aber falsch. Danke schon mal. Gruß der Rabe
T0/1 gehört zu einem entsprechnden Zähler und der hat denn ein 8/16bit breites Register in Hardware wo unabhängig von der Software Signale ausgewertet werden können. Bedeutet den Zähler entsprechend vorladen/löschen und mit jedem Impuls am T0/1 wird +1 gezählt. Guck ins Datenblatt S.114 dort ist der Counter erklärt.
Gulliver schrieb: > Mein Problem: > Ich habe in ein paar projekten gesehen das die Pins AIN0/1 also den Analog-Comperator > oder auch > T0/1 dafür genommen wurden. Also die Zähleingänge für die Timer > Aus dem Bauch raus hätte ich es mit einem INT0/1 gemacht. Auch das geht. > Kann mir da jemand licht ins dunkle bringen? Bis jetzt habe ich meine > Probleme immer Software seitig gelöst. Bei der Frequenz scheint mir das > aber falsch. Hat mit Frequenz ja/nein nichts zu tun, sondern damit, welche Pegel an den Pins von der eigentlichen Messschaltung ankommen * eignen sich die Pegel um als digitale 0/1 Pegel angesehen werden zu können * oder muss man mit dem Analogkomperator selber eine Schwelle fest- legen unter bzw. über der der Pegel als 0 bzw. 1 gilt bzw. der persönlichen Vorliebe * ist man faul und lässt das Inkrementieren eines Zahlenwertes einen Hardwaretimer machen (T0/T1) * kennt man die Möglichkeiten seiner Hardware nicht bzw. ist zu erwarten, dass die Zahlenwerte so groß werden, dass ein 16 Bit Timer nicht ausreicht, dann richtet man eben einen INT0/INT1 Interrupt ein und inkrementiert eine Variable in der ISR
Ja hatte ich. daher hatte ich das mit dem AIN1 und das hatte mich verunsichert, da ich vorher Projekte mit T0/1 gesehen habe... Der einfachheit halber hatte ich mich das so gedacht: Über den INT1 Zählen und mit einem Timerinterupt auswerten. Was bringt die Methode mit dem Analogkomparator für Vorteile? Gruß der Rabe
Gulliver schrieb: > Was bringt die Methode mit dem Analogkomparator für Vorteile? An irgendeiner Stelle müssen deine zu messenden Signale ja mal im Pegel festgenagelt werden. Sind deine Signale schon 0V bzw. 5V, dann ist alles in Butter und du kannst sie direkt auf einen digitalen Eingang legen. Sind sie es nicht, zb 0V und 0.8V, dann wirst du mit einem Digitaleingang Pech haben, denn sowohl 0V als auch 0.8V wertet der beides als logische 0. Also muss man sich was einfallen lassen, wie man diese Pegel so aufbereitet, dass sie für den µC 'zählbar werden'. Dazu kann man die Signale natürlich mit einem Verstärker auf 0..5V anheben. Oder aber man programmiert sich den Analog-Komperator so, dass der seinen Umschaltpunkt genau zwischen 0V und 0.8V hat und so daraus eine saubere binäre 0 bzw. 1 macht. Der Analogkomperator vergleicht 2 Spannungen und sagt dir welche die größere ist. Legst du eine der beiden Spannungen auf einen dir genehmen Pegel, dann kannst du den Analogkomperator (in seinen Grenzen) als Vergleicher nehmen, der dir sagt: Drüber oder Drunter. Und genau diese Information brauchst du ja um eine Flanke zu erkennen und daraus dann die Frequenz zu zählen.
Gulliver schrieb: > Was bringt die Methode mit dem Analogkomparator für Vorteile? Der kann - und so wird es von mir gemacht - als Trigger für den T1-Capture programmiert werden und Signale ab ca. 100mVss auswerten. Alternativ kann man den ICP1-Eingang nehmen. Nähere Erklärungen für die Funktion findest Du hier: http://www.mino-elektronik.de/fmeter/fmeter.htm Eine andere Möglichkeit, Frequenzen/Drehzahlen mit hoher Auflösung zu messen, ist hier gezeigt: Beitrag "4-Kanal Drehzahlmessung mit ATmega88" Für den Anfang ist aber etwas komplizierter zu verstehen, in der Praxis insofern 'schöner', als dass mit " -.- " auch angezeigt wird, wenn kein Signal anliegt.
Was ein Komparator macht, ist klar, aber danke für die Erklärung im bezug auf den Zähler. Bin ich nicht dahinter gestiegen. Ich wollte eine Drehzahl mit einem TLE4905L messen.Dieser gibt ja schon en Rechtecksignal aus. Wenn ich das Schaltbild richig interpretiere, lege ich an Pin 3 meinen "Zähl"-Pin an (mit Pullup zu 5V), pin 2 kommt an die masse (gemeinsamm mit AVR) und Pin 1 bekommt nochmal 5V. Richtig? und dann könnte ich mein Digitales Rechtecksignal mit den T0/1 in den Counterschreiben und mit einem Timerinterupt auswerten? Oder gibts da was einfacheres?
Gulliver schrieb: > und dann könnte ich mein Digitales Rechtecksignal mit den T0/1 > in den Counterschreiben und mit einem Timerinterupt auswerten? > > Oder gibts da was einfacheres? Das Einfachste ist immer das, was man selber versteht. Darum mache es so, wie Du meinst und wie Du es verstehst, und fange einfach an.
M. N. schrieb: > Das Einfachste ist immer das, was man selber versteht. > Darum mache es so, wie Du meinst und wie Du es verstehst, und fange > einfach an. Danke ;-) aber im Grunde hast du recht. Ich blicke durch die Timer Register nicht ganz durch. Habe mich für die Methode mit dem PIN "T1" entschieden. Zuerst mal die Pulsrate: 12000/1-Min = 200/sec Heißt ich kann Timer/counter0 verwenden und locker alle 200ms einen Wert berechnen&Counter "nullen". So nur wie stelle ich den Timerregister richtig ein? Bis jetzt habe ich den Timer immer nur für die PWM benutzt....
Gulliver schrieb: > So nur wie stelle ich den Timerregister richtig ein? Du stellst den Prescaler des Timers so ein, dass er nicht vom CPU-Takt versorgt wird, sondern das der Timer seinen Takt vom T1 Pin bezieht. Und schon zählt er, wenn am T1 Pin ein Puls ankommt > Bis jetzt habe ich den Timer immer nur für die PWM benutzt.... Vielleicht mal einen Blick ins Datenblatt risikieren? Der wichtigste Teil ist zb bei den Timern immer der Abschnitt Register Summary. Auf ein paar Seiten sind alle Register aufgeführt, alle Bits in den Registern und was sie bedeutet. Wenn mehrere Bits zusammenspielen, dann hat Atmel immer eine schöne Tabelle reingemacht, in der alle Möglichkeiten aufgelistet sind und aus der man ablesen kann, wie die Bitbelegung dann aussehen muss. Wie gesagt: Dieser Abschnitt des Datenblattes sind nur ein paar Seiten. Es schadet nicht, die mal auf Verdacht zu studieren und sich zu merken, welche Funktionalität es gibt. Tut man das, dann merkt man sich "Hey, ich kann ja den Timer nicht nur vom CPU_Takt aus zählen lassen, sondern da gibt es auch eine Prescaler-Einstellung, mit der ich einen externen Takt von einem Pin auf den Timer legen kann". Man muss sich nicht die Details merken - aber es hilft sehr, wenn man im Hintergrund speichert: Timer extern takten geht, gemacht wird es über die Prescaler Bits (die ja im weitesten Sinne regeln, von wo der Timer seinen Zähltakt bezieht). Und wenn man das dann braucht, dann erinnert man sich daran und liest im Datenblatt die Details nach. Auch Timer bestehen aus sowas wie funktionalen Baugruppen. Für alles was sich um den Themenkreis "wie schnell und warum zählt der Timer" dreht, ist die Baugruppe "Prescaler" zuständig.
Ja ich guck ins datenblatt, versehe es aber nicht was ich alles brauch. Zuerstmal würde ich sagen das CS00/01/02 auf 1 gesetzt werden müssen, da dann der Timer auf externe steigende Flanke steht. COM0B1 COM0B0 auf 0, da keine PWM (richtig?) also: TCCR0 = (1<<CS00);(1<<CS01);(1<<CS02); //Extern & steigende Flanke mehr hab ich noch nicht verstanden. Nach dem gefühl würde ich sagen es fehlt noch was. Die Zuordnung zum Pin T0 steht ja schon über die CS00-2 einstellung. Ohne ein Overflow bit fängt der Counter einfach wieder bei 0 an? da verstehe ich die Registererklärung im Datenblatt nicht mehr... Ich machs mir sicher nicht leicht. Bitte helft mir weiter.
Gulliver schrieb: > Ja ich guck ins datenblatt, versehe es aber nicht was ich alles brauch. > > Zuerstmal würde ich sagen das CS00/01/02 auf 1 gesetzt werden müssen, da > dann der Timer auf externe steigende Flanke steht. Bingo > > COM0B1 COM0B0 auf 0, da keine PWM (richtig?) Die COM Bits regeln, wie der Timer eine AUSGANGSLEITUNG behandelt! Was also der Timer, wenn überhaupt, mit einem Pin tun soll, der auf Ausgang geschaltet ist. Hast du den Fall? Nein. Also lässt du das alles auf 0 bzw. auf dem, auf dem buchstäblich nichts passiert. Brauchst du einen PWM Modus? Sprich: Soll der Timer mit einem Ausgangspin wackeln? Nein. Du willst einfach nur dass der Zähler vor sich hinzählt. Also stink normaler Zählmodus. > also: TCCR0 = (1<<CS00);(1<<CS01);(1<<CS02); //Extern & steigende Flanke Was sollen die ; da drinnen? > mehr hab ich noch nicht verstanden. Nach dem gefühl würde ich sagen es > fehlt noch was. Was soll da noch fehlen? Du willst das der Timer Pulse zählt. Und anstatt, dass er die über den Quarz vom CPU-Takt bekommt, speist du ihm die extern ein. Machs doch nicht so kompliziert. > Die Zuordnung zum Pin T0 steht ja schon über die CS00-2 > einstellung. Ohne ein Overflow bit fängt der Counter einfach wieder bei > 0 an? Was für ein Overflow Bit? Wenn der Timer hochgezählt hat, dass ihm die Bits ausgehen, dann gibt es einen Overflow. So wie immer. Mit beispielsweise 8 Bit kann man nun mal nur bis 255 zählen. Noch 1 dazu und es setzt einen Overflow. Das hat doch nichts damit zu tun WARUM der Timer 1 zu seinem Timerregister dazuzählt. Dem 8-Bit Zählregister ist es doch völlig piep-schnurz-egal, wo dieser eine Puls herkommt. Ob der vom Quarztakt (CPU-Takt) abgeleitet ist, oder ob an einem externen Pin ein Puls eingetrudelt ist, oder ob grade Hochwasser ist interessiert das 8-Bit Zählregister nicht. CPU-Takt +------------+ Zählpuls +---------------------+ -------> | Prescaler |------------>| 8 Bit Zählregister | | | +---------------------+ T0-Pin | | | | -------> | | V v +------------+ Overflow Compare Matches Der Prescaler wählt eine der Quellen aus, die er aufs Zählregister aufschaltet. Im Falle des CPU-Taktes kann er da noch diverse Teilerstufen zwischenschalten, so dass dieser Takt heruntergeteilt wird. Im Falle des T0 Pins kann er das nicht. Mit den CS-Bits wählt man aus, was genau die Prescaler-Komponente machen soll. Welcher Eingang und wenn möglich - wie weit runtergeteilt werden soll. Mehr ist das doch nicht! Mach nicht mehr draus, als es ist. Natürlich stehen dir dann selbstverständlich wieder alle Modi zur Verfügung, die der Timer beherrscht. Denn die hängen ja nicht davon ab, wie der Timer getaktet wird. Diese Modi werten diverse Vergleiche mit den Compare Match Registern, COM-Flags, etc. aus und leiten dann davon ab, was mit Pins passieren soll. Aber all das willst du ja gar nicht. Du willst doch einfach nur den einfachsten, banalsten, primitivsten Timer-Modus, den es gibt: Mit jedem Taktpuls den das Zählregister an seinem Eingang sieht, zählt es 1 weiter. Den Timer Modus 0, um genau zu sein. > Ich machs mir sicher nicht leicht. Bitte helft mir weiter. Du denkst zu kompliziert. Das ganze ist viel einfacher und primitiver als du annimmst.
Karl Heinz Buchegger schrieb: > Aber all das willst du ja gar nicht. Du willst doch einfach nur den > > einfachsten, banalsten, primitivsten Timer-Modus, den es gibt: Mit jedem > > Taktpuls den das Zählregister an seinem Eingang sieht, zählt es 1 > > weiter. Den Timer Modus 0, um genau zu sein. Hallo! Ich persönlich würde Ihm aber das Kennenlernen der Capture-Funktion empfehlen. Bei niedrigen Frequenzen, wie es Drehzahlen meist sind, ist die Messung der Impulsabstände oft der bessere Weg.
Route 66 schrieb: > Ich persönlich würde Ihm aber das Kennenlernen der Capture-Funktion > empfehlen. Das hatte ich ja insgeheim versucht, aber dazu scheint es noch viel zu früh. > Bei niedrigen Frequenzen, wie es Drehzahlen meist sind, ist > die Messung der Impulsabstände oft der bessere Weg. Das ist IMMER der bessere Weg, wenn man erst einmal weiß, wo es lang geht :-)
Route 66 schrieb: > Ich persönlich würde Ihm aber das Kennenlernen der Capture-Funktion > empfehlen. Lass ihn erst mal verstehen, wie primtiv so ein Timer eigentlich ist. Bisher hat er ja einfach nur irgendwoher einen PWM Modus in sein Programm einkopiert, ohne zu wissen was er da eigentlich tut oder wie das funktioniert. Nicht falsch verstehen: Ich geb dir ja grundsätzlich recht. Aber der TO muss jetzt erst mal gehen lernen, ehe man sich über die Vor und Nachteile diverser Laufschuhe unterhält. Im Moment ist für ihn das alles noch 'schwarze Magie'. Er muss jetzt erst mal begreifen, dass ein Timer einfach nur eine Hardware-Einheit ist, die vor sich hinzählt UND die mit angeflanschten Zusatzmodulen ein paar Dinge autonom erledigen kann. Aber prinzipiell zählt die einfach nur vor sich hin. Solange er das nicht hat, hat alles weitere keinen Sinn. FAQ: Timer
Karl Heinz Buchegger schrieb: > Route 66 schrieb: > >> Ich persönlich würde Ihm aber das Kennenlernen der Capture-Funktion >> empfehlen. > > Lass ihn erst mal verstehen, wie primtiv so ein Timer eigentlich ist. > > Bisher hat er ja einfach nur irgendwoher einen PWM Modus in sein > Programm einkopiert, ohne zu wissen was er da eigentlich tut oder wie > das funktioniert. So ungefähr, ja. > > Nicht falsch verstehen: Ich geb dir ja grundsätzlich recht. Aber der TO > muss jetzt erst mal gehen lernen, ehe man sich über die Vor und > Nachteile diverser Laufschuhe unterhält. > Im Moment ist für ihn das alles noch 'schwarze Magie'. Er muss jetzt > erst mal begreifen, dass ein Timer einfach nur eine Hardware-Einheit > ist, die vor sich hinzählt UND die mit angeflanschten Zusatzmodulen ein > paar Dinge autonom erledigen kann. Aber prinzipiell zählt die einfach > nur vor sich hin. Solange er das nicht hat, hat alles weitere keinen > Sinn. > Zuerst einmal vielen Dank für die ausführliche Erklärung und die damit verbundene Zeit. Und ja du hast recht, ich habe viel zu kompliziert gedacht. Ich fasse banal zusammen: Ein Counter ist ein Timer mit externem Takt. Und als Zusatz habe ich jetzt auch die Anderen Einstellungen verstanden. klar da wirds ggf noch Probleme geben in der Praxsis, bzw Stolpersteine aber das wird dann schon. > FAQ: Timer Super!!! Kannte ich nicht Das wissen werde ich jetzt zuerst mal anwenden. Kann jetzt noch wer ein kurzes Wort zur Capture Funktion sagen? Gruß der Rabe
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.