Hallo, ich möchte einen Interupt Pin von einem µC (z.B. B0 von einem PIC
18F6722) von unterschiedlichen Bauteilen setzen lassen. Diese setzen
jeweils über die gleiche Leitung einen weiteren Input Pib am PIC (ohne
Interupt). Der ausgelöste Interupt checkt nun die in frage kommenden
Pins und erkennt so welches Bauteil den Interupt ausgelöst hat. Hierfür
bräuchte ich jedoch ein IC welcher mir den z.B. B0 Pin auffächert in
z.B. 4-8, damit ich mit einem Ausgangspin von dem Bauteil jeweilc den
Interuptpin als auch den weiteren PIN setzen kann. Was für IC's sind
hier geeignet?
>Oder du nimmst einen fertigen Multiplex-IC, wie z.B. 74LS151>(8-Eingänge, 1-Ausgang).
Da können Ints verloren gehen wenn ein Int während des scannens auftritt
und zu kurz anliegt. Elektrisch sauber wird es mit den erwähnten Dioden
oder einem Odergatter.
MW
@gast (Gast)
>mit dem multiplexer weiss er aber dafür welches bauteil den interrupt>ausgelöst hat, das wird bei wired-or schwer.
Ist dennoch Unsinn. Der Sin von Interrupt sit ja, in jedem beliebigen
Moment azuftreten zu können und die CPU sofort zur Reaktion zu
veranlassen (ISR anspringen). Ein Mux muss geschaltet werden, das ist
effektiv nur Polling. Das genaue Gegenteil eines Interrupts.
@ Chris (Gast)
>Hallo, warum verhält sich das beim Multipexer anders wie bei den Dioden
Siehe oben.
>Eigentlich wollte ich moeglichst wenige Baulteile verwenden.
Spare jederzeit, dann hast du immer Not. Nimm Dioden oder ein grosse
AND-Gatter.
MFg
Falk
Chris wrote:
> Eigentlich wollte ich moeglichst wenige Baulteile verwenden.
Dann überleg Dir erstmal, ob Du wirklich auf die Ereignisse innerhalb
1µs reagieren mußt.
Z.B. mechanische Kontakte haben Schaltzeiten >10ms, d.h. ein
Timerinterrupt alle 10ms reicht völlig und belastet Deinen MC kaum.
Bei den AVRs gibt es auch einen Pin-Change-Interrupt, der kann fast alle
IOs auf Wechsel überwachen.
Peter
Dein PIC hat doch 4 Interrupt-On-Change Eingänge (RB4-RB7). Diese kannst
du dafür benutzen. Ggf. schaltest du noch einen Dezimal-zu-BCD Decoder
davor. Dann kannst du 16 unterschiedliche Interrupts detektieren und
benötigst für jede Quelle nur einen PIN.
Sven
Nimm nen PCFxxx-Portbaustein für I2C, wenns ganz elegant sein soll. Der
hat ne Pin-change-interrupt-Leitung und kann indes noch seine Pins
auseinanderhalten.
4078 8-Input NOR/OR
wenn du dir sicher bist, dass nie zwei interrupts gleichzeitig
auftreten, kannst noch einen 4532 (8bit priority(!) binärcoder) nehmen.
Die große Frage hierbei ist eine andere.
Wie lange dauert die zu überwachende Signaländerung?
Egal ob mit polling oer wired OR muss das signal eine gewisse
mindestzeit anliegen, um es erkennen zukönnen.
Wired or: Der IRQ wird ausgelöst wenn der Eingang den Zustand wechselt.
Danach muss die IRQ routine die möglichen parallelen Eingänge abtasten
um festzustellen welcher Eingang es war.
Probleme in dem Fall:
1. Das Signal ist so kurz das in der IRQ alle Eingänge wieder
zurückgewechselt haben, also nicht mehr feststellbar ist, welcher
Eingang den IRQ ausgelöst hat.
2. Ein Signal geht auf "1" solange dieses Signal auf "1" ist kann kein
weitere Eingang einen IRQ auslösen.
MUX:
Die Eingänge werden abgepollt. Vorteil, es ist immer bekannt welcher
Eingang gerade geprüft wird.
Nachteil: Ist das Signal zu kurz wird es nicht erkannt weil es in der
Kücke zwischen zwei Abtastungen liegt.
Darüber solltest du dir mal Gedanken machen, die kann dir niemand
abnehmen.
Alternativ ist auch durchaus eine Möglichkeit einen µC auszuwählen, der
die
entsprechende Anzahl an IRQ fähigen Pins hat.
Das Signal für den Interrupt zusätzlich auf FLIPFLOP führen (für
jedes ext. Ereignis eins). Beim Interrupt die FF abfragen und
rücksetzen.
Also Or-für Verknüpfung FF für selektion.
Gruß hans
Ralph wrote:
> Die große Frage hierbei ist eine andere.> Wie lange dauert die zu überwachende Signaländerung?
naja, das ist jetzt ein bisschen hochgegriffen. mein mehrfach-OR hat
eine gatterlaufzeit von grob 100ns. schneller sind 74HC teile - da
braucht man dann vllt 2 oder 3 stück - mit grob 20ns. das is grad mal
grob ein takt bei 55MHz.
wenns wirklich soo~oo schnell sein soll, nimmt man halt ein RS-FF
dazu...
> Alternativ ist auch durchaus eine Möglichkeit einen µC auszuwählen, der> die> entsprechende Anzahl an IRQ fähigen Pins hat.
vorsicht! die pin-change interrupts, auf die du vermutlich anspielst,
sind wesentlich langsamer als ein externer interrupt!
wenn schon die kohle rauspfeffern, dann für ein CLPD
Der zeitkritische Pfad ist nicht die Laufzeit in den Gattern, sondern im
Pic die Zeit von externem Signal bis Abarbeitung der Sourcenabfrage in
der IRQ routine.
Ich denke nicht unbedingt an die PinChange IRQ, sondern ganz allgemein
an einen anderen µC.
Dies könnte auch ein 8052, AVR, ARM7 ,...... sein.
Hier ist wieder der typische Fehler passiert. Es wure ein µC ausgewählt
und danach wird geackert um damit die Erfodernisse abzudecken.
Richtig wäre erst die Erfordernisse erarbeiten, und DANACH den passenden
µC auswählen der alles so gut wie möglich erfüllt.
@Ralph (Gast)
>Der zeitkritische Pfad ist nicht die Laufzeit in den Gattern, sondern im>Pic die Zeit von externem Signal bis Abarbeitung der Sourcenabfrage in>der IRQ routine.
Nicht wirklich. Denn sinnvollerweie beleibt ein Interruptsiganl solange
aktiv, bis die Software das Ereignis erkannt und per Software
zurückgesetzt hat. Das FlipFlop zur Speicherung ist praktisch schon in
er Interruptquelle drin. Von Ausnahmen wir Tastaturen etc. mal
abgesehen.
MFG
Falk