Hallo zusammen, da ich noch blutiger Anfänger in der Mikrocontroller-Welt bin, bitte ich euch um Ratschläge. ich habe mir eine Schaltung gebastelt, die mir von 24 V auf 5 V über Optokoppler meine Eingangssignale wandelt. Bis an den konfigurierten Eingangspin kommt ein Rechtecksignal (0V-5V) an. Die Frequenz des Signals liegt bei max. 600 Hz. Ich möchte nun die Impulse über einen Zähler hochzählen und ab einem bestimmten Wert ( je nach Fall) diesen zurücksetzen. Noch existiert kein Programm für den Controller. Meine Frage an euch betrifft nun folgende Punkte: 1. wäre das Signal für einen normal als PINC2 konfigurierten Eingang zu hochfrequent, um dieses zu verarbeiten? 2. würde ein Capture-Eingang hier mehr Sinn machen? 3. der Zähler soll bis etwa 8000 zählen können. Wie kann ich hier einen Zähler richtig einsetzen? Muss ich zwangsläufig über Interrupts gehen? 4. hat jmd eine andere Idee, die Zählung umzusetzen? Danke im Voraus! Horst
Naja, ich gehe mal von einem AVR µC aus, dort gibt es sogannte T0 und T1 Eingänge, die die Zählerwerte der Timer0 oder Timer1 direkt beeinflussen. Das wäre mein Ansatz.
@ Horst (Gast) >an. Die Frequenz des Signals liegt bei max. 600 Hz. >Ich möchte nun die Impulse über einen Zähler hochzählen und ab einem >bestimmten Wert ( je nach Fall) diesen zurücksetzen. >Noch existiert kein Programm für den Controller. >1. wäre das Signal für einen normal als PINC2 konfigurierten Eingang zu >hochfrequent, um dieses zu verarbeiten? Nein, das ist eher langsam. >2. würde ein Capture-Eingang hier mehr Sinn machen? Kann man machen, bringt aber als Zähler nicht so viel. >3. der Zähler soll bis etwa 8000 zählen können. Wie kann ich hier einen >Zähler richtig einsetzen? Man kann einen der Hardwarezähler nutzen, um das Eingangssignal zu zählen, im einfachsten Fall Timer 1, der hat 16 Bit und läuft nicht zu schnell über. >Muss ich zwangsläufig über Interrupts gehen? Nein. Man kann sogar die Output COmpare Funktion nutzen, um bei einem bestimmten Zählerstand einen Interrupt auszulösen und die entsprechende Reaktion auszuführen.
Horst schrieb: > 1. wäre das Signal für einen normal als PINC2 konfigurierten Eingang zu > hochfrequent, um dieses zu verarbeiten? Nein. Allerdings mußt Du beim PCINT beachten, daß er auf beide Flanken feuert. Horst schrieb: > 2. würde ein Capture-Eingang hier mehr Sinn machen? Überhaupt keinen. Der ist nur für Zeit- oder Frequenzmessung gut. Du willst aber die Anzahl.
ersteinmal vielen Dank für die Antworten! ich habe die Erfassung der Pulse nun über einen Timer mit CTC geregelt. Über den 8-Bit-Timer 0 des Controllers wird Encoder 1 ausgewertet und funktioniert wie gewünscht. Über den 16-Bit-Timer 1 des Controllers wird Encoder 2 ausgewertet und funktioniert nicht ganz synchron. Ich habe die Funktion des Timer1 im AVR Studio getestet und es dauert trotz gleicher Konfiguration des Timers eine Ewigkeit, bis die ISR(TIMER1_COMP1A_vect) aufgerufen wird. Diese verschafft mir bei jedem neuen Aufruf keine vergleichbaren Werte da diese mal wesentlich größer oder mal wesentlich kleiner als bei vorherigem Aufruf sind. Ich habe mein Programm so geregelt, dass bei Aktion A nur Timer0 "freigegeben" wird (TIMSK |= 1<<OCIE0) und dieser nach der Aktion wieder "gesperrt" wird. Gleiches gilt für Timer1 bei Aktion B. Meine Fragen sind nun: Gibt es wesentliche Unterschiede zwischen dem 8-Bit und dem 16-Bit Timer bezüglich der CTC-Funktion? Benutze ich dann für den Vergleich nur COMP1A oder muss ich COMP1B ebenfalls einbinden?
das Problem hat sich gelöst, das Programm funktioniert jetzt einwandfrei. Die Zähler werten die Daten von Encodermotoren aus, die zwei Achsantriebe eines Dreiachsroboters mit verschiedenen Werkzeugen darstellen. Somit kann dieser optimal mit einer Genauigkeit von etwa 0,5 Grad eine entsprechend angegebene Position anfahren. Danke!
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.