Guten Morgen, Ich möchte mit einem Atmega1284P 3 Impulse messen. Es handelt sich dabei um Rechteck Signale zwischen 0-70 Hz. Bei nur einem Signal wäre es durch die Input capture Unit recht einfach zu lösen , doch wie gehe ich bei 3 Signalen vor ? Der zweite ICP Pin von Timer3 ist zwecks SPI belegt. Dachte schon an die Benutzung des einen ICP und einen externen Mux, aber das muss doch sicher auch eleganter zu lösen sein. Gibt es eine Möglichkeit Polling zu vermeiden ? Sprich zum Beispiel jede Sekunde zu warten bis eine Signal Änderung am jeweiligen Pin ansteht und mir daraus die Frequenz errechnen ? Vielleicht habt ihr ja noch eine passende Lösung oder Strategie in der Schublade. Vielen Dank
Schau mal nach dem ACI Interrupt. Der Analog Comparator ist durch den Amux auf jeden beliebigen Analogeingang aufschaltbar. Dann könntest du mit der gleichen Routine erst den einen und dann den anderen Eingang vermessen. Gruss Klaus p.s. ein wenig undokumentierten Inlineassembler dazu habe ich noch
Gast
#2613648
Dennis Henning schrieb: > Ich möchte mit einem Atmega1284P 3 Impulse messen. ... > Gibt es eine Möglichkeit Polling zu vermeiden ? Warum? Bei 70 Hz müßte man mit mindestens 7 ms Zeitauflösung pollen. Warum soll man nicht z.B. per Timer regelmäßig alle paar ms eine ISR aufrufen, die sowieso oft als Basistakt für Tastaturentprellung vorhanden ist, und damit auch gleich die drei Impulse messen. Es kommt natürlich drauf an, was du an deinen 3 Impulsen messen möchtest und in welchem Bereich das Tastverhältnis liegt. Wenn du die Flankensteilheit messen möchtest, wird es ohne Zusatzelektronik z.B. schwierig.
Gast
#2613655
Mußt du die Frequenzen gleichzeitig messen? Du könntest im Zeitmultiplex die Periodendauern nacheinander messes. Deine untere Signaleßfrqeuenz von 0Hz müßtest du dann per Timeout abfangen.
Gast
#2613716
Der ATmega1284 hat wie der ATmega162 zwei Capture-Einheiten, je für T1 und T3. Damit kann man zwei Eingangsfrequenzen mit hoher Auflösung gleichzeitig messen. Als Beispiel: Beitrag "reziproker Frequenzzähler, GPS-stabilisiert, ATmega162" Wenn eine 5-stellige Anzeige bei ca. 3 Messungen/s reicht, schafft man mit dem ATmega1284 auch vier Kanäle gleichzeitig zu messen. Beispiel: Beitrag "4-Kanal Drehzahlmessung mit ATmega88" Das Programm schafft es sogar bei 0 Hz auch '0' anzuzeigen, wenn man sich auf 0 Hz als <= 0,016 Hz verständigen kann :-)
das reicht vollkommen ! Selbst wenn auf eine Kommastelle gerundet würde , wäre es ausreichend ! Der letzte Link hat mir schonmal sehr geholfen. Danke
Warum nicht den Pin-Change-Interrupt verwenden und auf die betreffenden Pins maskieren? In der Interrupt-Routine könntest du auf die jeweils gesetzten Interrupt-Flags reagieren: gesetzte Flags jeweils zählen und löschen. Weiteres steht im Datenblatt, such einfach nach PCICR, PCIFR, PCMSK3 bis PCMSK0, Interrupt-Vektoren für PCINT0 bis PCINT3.
Gast
#2617701
@ markus Funktioniert das also nur an PCINT 0 bis PCINT 3 ?
Dennis schrieb: > @ markus > > Funktioniert das also nur an PCINT 0 bis PCINT 3 ? Hi Dennis, sorry, seh deine Antwort erst jetzt. Wenn ich das Datenblatt richtig gelesen hab, dann kann man jeden dieser vier PCINTs für einzelne I/O-Pins eines Ports einstellen. Schau einfach mal ins Datenblatt, da steht einiges dazu drin.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.