Mehrere Signale über einen Interrupt erkennen
Moin moin,
Ich will mit einem ATMega8 mehrere PWM-Signale von verschiedenen Quellen einlesen. Neulich hatte jemand in diesem Forum die Idee, jedes Signal auf einen eigenen Eingangspin zu legen und außerdem alle (über Dioden) auf einen gemeinsamen Interrupt zu führen. Der Interrupt merkt dann, daß eins der Signale auf high geht und man kann in der Interruptroutine rauskriegen, welches. Die eigentlich Auswertung des Signals macht man dann an dessen Eingangspin.
Mein Problem ist jetzt: Wenn eines der Signale auf high steht, ist damit der Interrupt für alle anderen Signale geblockt, weil ja konstant high-Pegel anliegt. Wie kriege ich das weg?
Ich hab mir überlegt, für jedes Eingangssignal je einen weiteren Pin als Ausgang zu benutzen, um ein Signal, das den Interrupt ausgelöst hat, erstmal vom Interrupt zu trennen, damit die anderen Signale wieder die Chance haben, ihn auszulösen. Allerdings bräuchte ich dazu einen elektronischen Schalter, der Spannungen unterbricht. Ein Transistor ist ja mehr zur Stromregelung da, gibt's sowas auch entsprechend für Spannungen?
Ich stell mir das so vor, daß ich am Kollektor die Signalquelle habe (Die natürlich weiterhin zu ihrem Eingangspin geht), der "Emitter" geht zum Interrupt, und an der Basis hängt der zu diesem Signal gehörende Ausgangspin, der das Signal vom Interrupt trennen soll (mit high oder low Pegel ist ja erstmal wumpe). Wenn jetzt ein Signal auf high geht, wird erstens über die Interruptroutine festgestellt, welches Signal das ist, dann wird der entsprechende Ausgang gesetzt, um dieses Signal vom Interrupt zu trennen und der Interrupt horcht wieder auf alle anderen Signale.
Bloß welches Bauteil wirkt wie so ein Schalter?
Weiß jemand, was ich meine, oder muß ich dochmal versuchen, das in Paint aufzumalen? ;-)
Nils
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
und auch Transistoren kann man als Schalter benutzen (Schaltplan im Bild).
Der Kondensator C1 und RB1 sind nicht unbedingt nötig (sind nur da, um schneller zu schalten).
RB ~ 470 Ohm, RB1 ~ 470 Ohm, C1 ~ 100pF, RL ~ 470 Ohm bei VCC=5V.
Es gibt da aber noch was anderes: 74HC4066, CD4066
Das sind Schalter für 4 analoge Spannungen, der Strom und die Spannung sind aber begrenzt - man kann nicht alles schalten!
schöne Grüße,
Alex
Re: Mehrere Signale über einen Interrupt erkennen
Zitat:
Zitat von Minifriese
Bloß welches Bauteil wirkt wie so ein Schalter?
Nils
Analogschalter nennen die sich
CD4016, 4066
und Kollegen. 4stück pro IC. Andere Anaolgschalter wirken als 1 zu n Multiplexer.
Damit müßte es gehen.
Es ist aber eine logische Verknüpfung für die man nicht unbedingt einen Schalter braucht. Manchmal sind die logischen Funktionen aber leichter mit Schaltern realisierbar als mit Gattern.
Manfred
Doch, die Antwort war schon da (siehe oben)
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn ich das Problem richtig verstanden habe, dann ist eine Oder-Verknüpfung hier nicht zielführend.
Minifriese will ja PWM-Signale auswerten. Dazu muss die Zeit messen die das das Signal High ist (T1) und ins Verhältnis zur Gesamtzeit (T2) setzen.
Soweit ich weiß hat der Meaga8 ein sog. Input Capture Pin (ICP) mit dem man PWM Signale einfach messen kann. Ein bereits angesprochener Analog-Switch kann dazu vernwendet werden um jeweils nur ein PWM Signal mit dem ICP zu verbinden. Vorteil dieser Methode ist der relativ geringe Programmieraufwand und die hohe Genauigkeit des Messverfahrens. Nachteil ist dass man die einzelnen Signale nicht gleichzeitig sondern nur nacheinender messen kann.
Als zweite Methode kann man wie auch schon angesprochen ein Interrupt Pin verwenden um den Mikrocontroller zu signalisieren dass sich eines der Signale geändert hat, der dann über ein eigenes Pin pro Signal checkt welches Signal das betrifft und so die x Signale gleichzeitig messen.
Sowohl Und-Verknüpfung als auch Oder-Verknüpfung der einzelenen Signale zum interrupteingang bringen hier aber nicht den gewünschten Effekt. (Bei UND würde man nur den Übergang zwischen den Zusatand 'Alle Signale sind High (T1)' und 'mindestens ein Signal ist low' feststellen können - bei ODER würde man nur den Übergang zwischen 'kein Signal ist high' und 'mindestens ein Signal ist high' feststellen können).
Mir fällt keine logische Funktion ein die genau den hier gestellten Anforderungen gerecht wird. Was man am ehesten noch verwenden könnte wäre ein Exklusives Oder (XOR). Mit einem XOR das die 4 Signale verknüpft würde sich der Ausgang des XOR's immer dann ändern wenn sich eines der Eingangssignale ändert. Ändern sich 2 genau zum gleichen Zeitpunkt, könnte man dies nicht feststellen.
Ansonsten könnte man auch noch die Signale über einfache RC-Glieder integrieren und die resultierende Spannnung mit dem ADC des Mega8 messen.
Hoffe meine Ausführungen sind halbwegs verständlich, Kommentare sind willkommen.
lG
Re: Mehrere Signale über einen Interrupt erkennen
Zitat:
Zitat von Minifriese
Bloß welches Bauteil wirkt wie so ein Schalter?
guckste hier
lG