suche programmierbarer 8 bit counter

Gast #67389
Lesenswert?

Hi
wie schon im Topic erwähnt. Mir gehen die Counter in meinem ATMega 128
aus. Klingt blöd, is aber so. Ich habe habe hier einen Robotterarm
desen bewegungen ich mit 4 signalgebern messe. Das dumme ist, zwei der
4 counter des ATMega brauche ich schon für etwas anderes. Deswegen
bräuchte ich jetzt einen externen Baustein welchem ich einen Zählerwert
einproggen kann und er mir beim erreichen dieses Wertes ein Signal
liefert.
Per Software bekomme ich das Poblem nicht gelöst, es sei den jemand hat
eine idee wie ich ohne eine while schlife verhindern kann das das
gleiche high Signal mehrfach gezählt wird. Ich hab da keine idee.
Oder gibt es eine andere nette Möglichkeit 4 rechtechimpulse von
Gabellichtschranken zu zählen ohne den Programmablauf zu sehr zu
verlangsamen?
Danke für eure Ideen!

Gruß! Tom
Gast #67390
Lesenswert?

je nach Geschwindigkeit der Impulse:
wenn relativ langsam, einen zenrtalen Zeitgeber-Int nutzen und dort
dann alle betreffenden Eingänge pollen und je nach Ergebnis
Software-Zähler incrementieren.
Sind die Ereignisse schneller: ext. Interrupt verwenden, dazu wieder 2
Möglichkeiten: für jedes Signal einen eigenen Int-Eingang verwenden
(die gehen dann aber schnell zur Neige) oder die Signale an getrennte
Eingänge legen, über ein ODER-Glied EIN Int-Signal für alle
Zählereingänge erzeugen, in der entsprechenden ISR dann die EIngänge
abfragen und Zähler aktualisieren. Externe Zähler sind meiner Meinung
nach entbehrlich, ist aber eine Frage der Geschwindigkeit der Impulse
und der Geschicklichkeit der Programmierung.
#67391
Lesenswert?

Nur so als Richtwert, ein Interrupt sollte nicht schneller als alle 100
Takte aufgerufen werden, damit auch das Hauptprogramm noch genügend
Rechenzeit übrig hat.

D.h. bei 16MHz Quarz kann somit jedes Ereignis langsamer als 16/100 =
160kHz in Software bearbeitet werden.

Wie gesagt, als Faustregel, in C könnte es manchmal auch etwas länger
dauern.


Peter
Gast #67392
Lesenswert?

"Deswegen bräuchte ich jetzt einen externen Baustein, welchem ich einen
Zählerwert einproggen kann und er mir beim erreichen dieses Wertes ein
Signal liefert."

die Methode "zu Fuß" wäre folgendermaßen:
74HC590 als 8-Bit-Zähler, acht Und-Gatter, Achtfach-UND-Gatter,
8-fach-Latch z.B. 74HC573 an die Und-Gatter anschließen, in das Latch
das Bitmuster einspeichern

ist zwar umständlich, gibt aber abhängig vom Bitmuster, das im Latch
gespeichert ist, ein Signal ab.

Gruß
Gast #67395
Lesenswert?

Danke an alle für eure Antworten!
@crazy horse: Die Impulse sind doch sehr langsam (ca. alle 250ms) daher
werde ich das mit dem Softwarezähler mal versuchen. Es könnte jedoch
sein das mein Echtzeitbetriebssysem nicht so mit dem Interrupt zurecht
kommt wie ich das gerne hätte. In der Anleitung steht das Interrupts
erst freigegeben werden wenn Das Betriebssystem keinen Task ausführt
bzw. der default task aktiev ist. Wenn sich jedoch mein Robotter bewegt
ist meist dieser task aktiev und die anderen bekommen nur recht wenig
Prozesszeit ab. Mal kucken ob ich das hinbekomme.
@Chris: Wenn externer Counter dann müsste es einer sein welcher
möglichst wenig Ports benötigt. Idealerweise Programierbar mit I²C.
Denn es wird jetzt schon knapp mit den Ports da ich auch noch ein
Graphikdisplay und eine Digitalkammera angeschlossen habe. Darum habe
ich mir auch schon überlegt einen weiteren Controller zu verwenden wie
es Conlost vorschlägt.

Tom

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