Forum: Mikrocontroller und Digitale Elektronik suche programmierbarer 8 bit counter


von Tom (Gast)


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

von crazy horse (Gast)


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.

von Peter D. (peda)


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

von Chris (Gast)


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ß

von Marko B. (Gast)


Lesenswert?

82C54. Wenn du Portpins sparen willst, über HC595 anschließen, dann
brauchst Du gerade mal drei Pins. Schau im Datenblatt unter Mode 0
(Interrupt on Terminal Count).

von Conlost (Gast)


Lesenswert?

Hallo Tom,
nimm einen ATmega8 dazu, dann haste noch 3 Timer.
Warum denn mit TTL rumkaspern.
Gruß,
Arno

von Tom (Gast)


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

von Florian Pfanner (Gast)


Lesenswert?

Oder einen tiny mit 8 pins. Der ist dan variabel auch ohne umlöten der
gatter-verbindungen.

Gruß, Florian

von Tom (Gast)


Angehängte Dateien:

Lesenswert?

Fals es euch interesieren sollte, ich habe das Problem nun doch
programmtechnisch gelöst. Im Anhang ist der Auszug aus dem Programm,
die Zähler findet ihr ganz unten.

Gruß Tom

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
Noch kein Account? Hier anmelden.