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
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.
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
"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ß
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).
Hallo Tom, nimm einen ATmega8 dazu, dann haste noch 3 Timer. Warum denn mit TTL rumkaspern. Gruß, Arno
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
Oder einen tiny mit 8 pins. Der ist dan variabel auch ohne umlöten der gatter-verbindungen. Gruß, Florian
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.