Hallo zusammen, Ich möchte die Flankenwechsel eines Trackballs (4 Eingänge am AVR werden zur Richtungsabfrage benötigt) interruptmässig auf einen interrupt-fähigen 5. PIN am AVR legen, da ich nicht genügend externe Interrupt fähige Pins frei habe. Dazu würde ich ein IC oder eine Schaltung benötigen, dessen Sprungfunktion wie im beigefügten PDF die 4 Eingänge in einen Ausgang umsetzt. Kann mir bitte jemand einen Hinweis geben, wie man so etwas einfachst realisiert, bzw. welches IC diese Anforderung erfüllt ??? Ein NE555 kann man sicher prinzipiell dafür verwenden, aber der hat keine 4 Eingänge - oder ? Vielen Dank im voraus.
@ John Schmitz (student) >Ich möchte die Flankenwechsel eines Trackballs (4 Eingänge am AVR werden >zur Richtungsabfrage benötigt) interruptmässig auf einen >interrupt-fähigen 5. PIN am AVR legen, da ich nicht genügend externe >Interrupt fähige Pins frei habe. Ich kenn mich mit Trackballs zwar nicht so aus, aber ich tippe mal, dass dort auch zwei Defakto Drehgeber drin sind. Und die wertet man anders aus. Warum das so ist steht im Artikel ;-) MFG Falk
Hallo Falk, danke für den Hinweis. Ich nutze den Blackberry Trackball. Dieser funzt aber anders - wenn auch recht tricky. Der Trackball treibt über eine Freilaufvorrichtung 4 unabhängige Magneträdchen an, jedes für eine Richtung (x, -x, y, -y). Und den Polwechsel der Rädchen frage ich über 4 zugehörige Hallgeber ab. Deren Ausgänge (Flankenwechsel) möchte auf EINEN Interruptfähigen PIN legen. Danke trotzdem. Grüsse
Dann schalte die doch über Dioden an einen Interrupt. Dann musste an den eigentlichen Pins im Int nur noch abfragen, welcher es nun war, der den Int auslöste. Gruß Fabian
Hi, die Antwort von Falk fand ich gar nicht so schlecht. Wie sieht denn Deine Anforderung aus? Im Allgemeinen reicht es aus, wenn solche Eingänge gepollt werden, entweder durch die HP-Schleife oder über einen Timer-Interrupt. Ich würd noch etwas Zeit investieren, um die Aufgabe zu analysieren. Die Eingänge mußt Du eh alle einzel (durch diesen Sammelinterrupt bedingt) abfragen. Da ist ein flottes Pollen nicht ungeschickt und mehr als nur eine flüchtige Überlegung wert. Nix für ungut.
Hi, OR-Gatter oder NOR-Gatter, je nach Interrupt Auslösung (High oder Low Level Interrupt).
Nee,nee or-Gatter erzeugen keine kurzen Impulse aus Pegelwechseln. Die erzeugen nur wieder Pegelwechsel, die anstehen, bis das Signal abfällt.
> OR-Gatter Bringt nix (die Dioden auch nicht(?)), wenn ich die Anforderung richtig verstanden hab (was um die Uhrzeit nicht unbedingt gegeben sein muss :) Wie wärs mit 74HC123? Da sind zwei monostabile Kippstufen drin, jede mit einem High- und Low-Flanken-getriggerten Eingang, also das Signal jeweils auf beide Eingänge geben. Was allerdings passiert, wenn bei Eingänge die Flanke wechseln, ist nicht beschrieben. Obwohl, wenn man A1/B2 und A2/B1 verbindet, könnts klappen. Die Ausgänge musst du halt wiederum über Dioden entkoppeln und auf deinen Eingang geben. Ralf
Leider kenne bin ich nur Maschinenbauer, insofern here Autodidakt, was ICs und Logik angeht ...! Problem ist: Bleibt ein Pol des Magneträdchens auf dem Hallgeber stehen, so zieht der Hallgeber auf 0 oder 1. Nur wenn das Rädchen in Bewegung ist, wird die Flanke erzeugt - ist ja auch logisch. Aber heisst auch Dioden helfen mir eher nicht.
Mikki Merten wrote: > Oder passenden AVR mit PCINT Eingängen verwenden, der hat dann genügend > interruptfähige Eingänge. ...PCINTs sind leider auch schon alle vergeben ...
Hallo lieber John Schmitz, gibts ein Argument, daß gegen das Pollen spricht? Das ist doch die Lösung ohne viel Bastelkram.
was-willst-du wrote: > Hallo lieber John Schmitz, > > gibts ein Argument, daß gegen das Pollen spricht? Das ist doch die > Lösung ohne viel Bastelkram. Ja, leider, denn ich steuere mit dem Trackball einen Cursor. Die Geschwindigkeit (Beschleunigung) mit der ich den Trackball bewege, soll den Cursor eine kürzere oder weitere Entfernung über den Bildschirm bewegen. Das lässt sich natürlich ideal über die längeren oder kürzeren Delta-Zeiten zwischen zwei Interrupts steuern ...!
Wie wird denn die Zeit zwischen den Interrupts gemessen? Das geht doch sicher genauso mit Polling. Einfach die Zeit zwischen den Zustandsänderungen messen.
was-willst-du wrote: > Wie wird denn die Zeit zwischen den Interrupts gemessen? > > Das geht doch sicher genauso mit Polling. Einfach die Zeit zwischen den > Zustandsänderungen messen. Der AVR (2561) des dispay3000 (www.display3000.com) muss noch viele andere Funktionen steuern (Grafik Output, WLAN Kommunikation über Avisaro, SD-card etc.) Darum würde ich lieber auf Polling verzichten um seine Prozessorzeit auf diese Dinge zu konzentrieren. Ausserdem bewege ich mich bei Polling in einem diskreten Zeitraster, das nie so fein gerastert ist wie ein Trackball, der eevents auslöst und der so beliebige Zeitspannen triggern kann. So abnorm kann meine Anforderung doch gar nicht sein, da gibt's doch bestimmt irgendein ein IC. In welcher Familie müsste ich Eurer Meinung nach denn suchen ??? Danke!
@John Schmitz (student) >ich mich bei Polling in einem diskreten Zeitraster, das nie so fein >gerastert ist wie ein Trackball, der eevents auslöst und der so >beliebige Zeitspannen triggern kann. Und du glaubst ernsthaft, mit deinem naiven Ansatz kannst du die Zeiten genau erfassen. . . ?!?
Also als jemand der Mauscontroller baut kann ich Dir sagen, dass der Ansatz mit dem Interrupt nicht funktionieren wird. Und das alleine schon desshalb weil bei einer schnellen Bewegung des Trackballs so viele Interrupts kommen, dass der Prozessor nichts anderes mehr machen wird als Interrupts bearbeiten. Pollen, nicht basteln.
John Schmitz wrote: > So abnorm kann meine Anforderung doch gar nicht sein, da gibt's doch > bestimmt irgendein ein IC. In welcher Familie müsste ich Eurer Meinung > nach denn suchen ??? Der ATmega2561 hat 18 Interrupteingänge, wo ist das Problem? Die Zeiten sind vorbei, wo man irgendwelche Spezial-ICs entwickelt. Wenn Du so einen IC brauchst, mußt Du ihn Dir selber programmieren, z.B. in einen ATtiny13. Peter
Eigentlich sollten wir ihn in Ruhe basteln lassen. Wenn er ein Spezial IC wünscht soll er es besorgen, programmieren, aus Holz schnitzen oder sich einfach denken. Die Lösungsvorschläge waren üppig, technisch sinnvoll, geradlinig. Was will man mehr? Wer heute noch mit Hardware bastelt, wenn er die Aufgabenstellung elegant durch Software erledigen kann, hat es nicht anders verdient. Nix für ungut.
@ John Schmitz Wenn du es unbedingt auf deine Art versuchen willst, könntest du evtl. 3 XOR-Gatter verwenden: je zwei Eingänge (z.B. E1 und E3) ver-X-odern, die beiden Ausgänge ebenfalls ver-X-odern und auf steigende und fallende Flanken triggern. Ein Problem bekommst du allerdings wenn sich 2 Eingänge gleichzeitig ändern...
Skua wrote: >>bestimmt irgendein ein IC. > Achbeiniger Tiny. Danke für die Empfehlung. Ich denke, damit werde ich es machen.
Peter Dannegger wrote: > Der ATmega2561 hat 18 Interrupteingänge, wo ist das Problem? > Alle Oins anderweitig belegt - 1 Interrupt Pin ist noch frei ...! > Die Zeiten sind vorbei, wo man irgendwelche Spezial-ICs entwickelt. > Wenn Du so einen IC brauchst, mußt Du ihn Dir selber programmieren, z.B. > in einen ATtiny13. > > > Peter Ist mir schon klar, dass man nicht für jedes Problem ein entsprechendes IC findet. Wollte aber sichergehen, dass es für diese Aufgabenstellung KEIN IC gibt, bevor ich mich an die Arbeit mache. Eine solche Vorgehensweise halte ich für logisch und sinnvoll. Und so abnorm ist die Aufgabenstellung ja wohl nicht ...! Danke für die Hilfe! Grüsse
Guido Körber wrote: > Also als jemand der Mauscontroller baut kann ich Dir sagen, dass der > Ansatz mit dem Interrupt nicht funktionieren wird. Und das alleine schon > desshalb weil bei einer schnellen Bewegung des Trackballs so viele > Interrupts kommen, dass der Prozessor nichts anderes mehr machen wird > als Interrupts bearbeiten. > > Pollen, nicht basteln. Ist für mich kein Argument: Das Oszilloskop zeigt mir Impulsbreiten von ca. 10 ms wenn ich die Blackberry Kugel langsam bewege und ca. 1 ms wenn ich die Kugel ganz schnell bewege. Ich sehe nicht, warum hier regelmässiges Polling (in diesem Zeitraster) den Prozessor weniger belastet als sporadische Interrupts. Habe auch kein Problem, dass während der Trackballbewegung andere Funktionen weniger prior behandelt werden. Aber Du bist der Experte - den Anspruch habe ich nicht. Wenn ich fertig bin werde ich berichten. Habe auch kein Problem, dir Recht zu geben, wenn's mit den Interrupts nicht klappt - versprochen. Danke und Grüsse
John Schmitz wrote: > Eine solche > Vorgehensweise halte ich für logisch und sinnvoll. Und so abnorm ist die > Aufgabenstellung ja wohl nicht ...! In der Tat gibt es z.B. für die x86-Line solche Chips. Für die AVRs passen die aber sicher nicht... http://de.wikipedia.org/wiki/Programmable_Interrupt_Controller
Wenn du eh eine zweiten Prozessor dafür nimmst, kann der auch die Zeiten auswerten und krumme Beschleunigungskurven berechnen und dem Hauptrechner liefern. (SPI oder TWI seriell oder sonstwie).
Recht herzlichen Dank Euch allen. Ich glaub's kaum ... habe mich bislang nur mit den grossen Megas auseinandergesetzt ... und habe dabei glatt die ATtinys übersehen. Die sind ja supereinfach zu gebrauchen - alles drin. Insofern habt ihr mir wirklich sehr geholfen, habe gleich 30 bestellt ... Die taugen ja für alles und brauchen noch nicht einmal Peripherie ... genial. Danke noch einmal!
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.