Zähler für Encoder-Daten ATmega8

Gast #3308741
Lesenswert?

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
#3308813
Lesenswert?

@ 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.
#3309750
Lesenswert?

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.
Gast #3324397
Lesenswert?

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?
Gast #3335231
Lesenswert?

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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren