Forum: Mikrocontroller und Digitale Elektronik Int auslösen beim einlesen von Schieberegister z.B. 4021


von juppi (Gast)


Lesenswert?

Hallo
Ich will mit einen Controller unter anderen Schieberegister Ansteuern 
und Auslesen.
Das ist ist ja kein Problem.
Um aber die Polling Abfrage der 4021 zu vermeiden möchte ich bei einer 
Veränderung an den 4021 Eingängen ein Signal generieren,welches einen 
Int auslösen kann.
Welche Einfachste Lösung gibt es dafür?

von Klaus (Gast)


Lesenswert?

Statt Schieberegister die Eigänge direkt an den µC und Pinchange 
Interrupt

MfG Klaus

von Juppi (Gast)


Lesenswert?

Die Schieberegister bestehen schon und müssen genutzt werden!
Etwas neu machen ist kein Problem.

von Wilhelm F. (Gast)


Lesenswert?

juppi schrieb:

> Welche Einfachste Lösung gibt es dafür?

Die Schieberegister ständig über den Timerinterrupt einlesen, was auch 
kein Polling im Sinne einer Abfrage aus der Main-Schleife heraus ist. 
Das ergibt etwas Interruptbelastung, oder ist der µC schon voll 
ausgereizt und läuft am oberen Anschlag?

Wenns besonders zeitkritisch ist, kommt man wohl nicht um etwas Hardware 
an den Schieberegister-Eingängen herum. Z.B. gibt es 8-bit-Vergleicher 
in der Logikserie 74xx.

von c-hater (Gast)


Lesenswert?

juppi schrieb:

> Ich will mit einen Controller unter anderen Schieberegister Ansteuern
> und Auslesen.
> Das ist ist ja kein Problem.
> Um aber die Polling Abfrage der 4021 zu vermeiden möchte ich bei einer
> Veränderung an den 4021 Eingängen ein Signal generieren,welches einen
> Int auslösen kann.

Das erscheint mir alles andere als logisch. Du schreibst, die würdest 
das Schieberegister ansteuern. Damit weißt du doch bereits alles über 
den Zeitpunkt, wann sich überhaupt etwas an den Ausgängen des 
Schieberegisters ändern kann. Damit macht weder Polling noch Interrupt 
irgendeinen Sinn. Du brauchst nur genau dann auf die 4021-Ausgänge 
schauen, nachdem du entweder an CP oder an PL eine steigende Flanke 
produziert hast.

von Klaus 2. (klaus2m5)


Lesenswert?

c-hater schrieb:
> Das erscheint mir alles andere als logisch. Du schreibst, die würdest
> das Schieberegister ansteuern. Damit weißt du doch bereits alles über
> den Zeitpunkt, wann sich überhaupt etwas an den Ausgängen des
> Schieberegisters ändern kann. Damit macht weder Polling noch Interrupt
> irgendeinen Sinn. Du brauchst nur genau dann auf die 4021-Ausgänge
> schauen, nachdem du entweder an CP oder an PL eine steigende Flanke
> produziert hast.

...wäre richtig, wenn das 4021 ein SIPO Shifter wäre, ist aber ein PISO 
Shifter. Die parallelen Inputs sollen gelesen und Änderungen erkannt 
werden.

: Bearbeitet durch User
von juppi (Gast)


Lesenswert?

Wilhelm F. schrieb:
> Wenns besonders zeitkritisch ist, kommt man wohl nicht um etwas Hardware
> an den Schieberegister-Eingängen herum. Z.B. gibt es 8-bit-Vergleicher
> in der Logikserie 74xx.


Es ist Zeitkritisch,ich muss möglich das maximale an Zeit heraus 
schinden.
Der Controller ist wirklich langsam;-)
Es soll bei jeder Veränderung des Eingangs Musters immer ein
Impuls entstehen,die Vergleicher machen dies nicht.
Mit dem 4030 Gatter habe ich schon öfters bei Pegeländerung ein 
Ausgangsimpuls erzeugt.
Mit 8 Gatter 16R 8C und 8D könnte ich dies erreichen.
Erscheint mir aber recht aufwändig.

von Klaus 2. (klaus2m5)


Lesenswert?

Wenn Du die vermurkste Schaltung unbedingt retten willst, würde ich 
einen Hilfsprozessor (2. AVR?) die Eingangspins überwachen lassen.

: Bearbeitet durch User
von Wilhelm F. (Gast)


Lesenswert?

juppi schrieb:

> Mit dem 4030 Gatter habe ich schon öfters bei Pegeländerung ein
> Ausgangsimpuls erzeugt.

Das wäre denkbar, daß man an jeden Eingangspin z.B. einen nicht 
invertierenden Buffer schaltet, und an dessen Ein- und Ausgang ein 
XOR-Gatter wie den 4030 oder 4070. Die Gatterlaufzeit wird dort 
ausgenutzt, und erzeugt am XOR-Ausgang einen kurzen Impuls. Diese 
Impulse könnte man über ein großes UND-Gatter (oder Dioden) zu einem 
Interrupt-Request zusammen fassen.

Die Buffer müßten eine größere Signallaufzeit als die XOR-Gatter haben.

Nur mal so ne spontane Idee von mir.

von juppi (Gast)


Lesenswert?

Signallaufzeit von Gattern spart natürlich noch zusätzliche diskrete 
Bauteile,dafür aber paar Gatter zusätzlich.
Kann mich daran erinnern,ist lange her.
AVR oder Pic einsetzen erscheint für diesen Fall das günstigste.
....oder gibt es einen IC für diesen speziellen Fall.

von Wilhelm F. (Gast)


Lesenswert?

juppi schrieb:

> AVR oder Pic einsetzen erscheint für diesen Fall das günstigste.

Über sowas würde ich auch eher nach denken, das tut sich vermutlich 
preislich auch nicht viel. Ein kleiner µC kann als Slave-Prozessor die 
Daten einlesen, vergleichen, den Interrupt melden, und aber auch noch 
die Schieberegister ersetzen.

von spontan (Gast)


Lesenswert?

Das alles ist heilloses Gemurkse an einer verkorksten Schaltung mit den 
unpassenden Spezifikationen.

Schnell reagieren und Interrupts auslösen paßt überhaupt nicht zu einer 
Abfrage via Schieberegister. Da liegt der Fehler.

Schnell reagieren auf Ereignisse -> direkter Zugriff auf ein 
Interruptsignal.
Getaktet abfragen -> Schieberegister einsetzten

Des weiteren ist es Murks einen Prozessor an der Leistungsgrenze zu 
betreiben, die gewünschten Funktionen über sinnlose Klimmzüge in die 
Software reinpressen zu wollen.

Schnellerer Prozessor, angepaßte Hardware und schon gehts zuverlässig.

von juppi (Gast)


Lesenswert?

@spontan (Gast)
Du scheinst nicht zu verstehen.

Das Schieberegister System ist kompakt mit Treiber ,Leistungsstufen usw.
in einen alten Funktionsfähigen Gerät.
Jetzt soll Software mäßig Neue und auch Verbesserte Funktionen
eingebracht werden.
Es sind 20*4094 und 2*4021

Ehe alles neu gemacht werden soll,werde ich doch lieber ein wenig 
Zusatzhardware für 10-20Euro einbauen.


@Wilhelm F. (ferkes-willem)

Leider soll nichts ersetzt werden,es reicht schon wenn eine INT Leitung 
zusätzlich eingebunden werden soll

von c-hater (Gast)


Lesenswert?

Klaus 2m5 schrieb:

> ...wäre richtig, wenn das 4021 ein SIPO Shifter wäre, ist aber ein PISO
> Shifter.

Nein, das ist immer richtig.

> Die parallelen Inputs sollen gelesen und Änderungen erkannt
> werden.

Das bedeutet, daß es eigentlich nichts mit dem 4021 zu schaffen hat, 
sondern nur mit dem, was an dessen Eingängen hängt. Und damit wird auch 
gleich eine Lösung durch bzw. mit Hilfe des 4021 unmöglich. Der kann 
selber nicht auf Änderungen an den Parallelladeeingängen reagieren, 
sondern braucht die Flanke an PL, um davon irgendwas mitzubekommen.

Bleibt also nur der µC. Damit der jede Änderung an den Eingängen 
mitbekommen kann, muß er mit allen Eingängen verbunden sein. Wenn er das 
aber ist, ist wiederum der 4021 komplett überflüssig, weil er dann dann 
den Kram einfach selber parallel einlesen kann und nicht erst in das SR 
laden und dann bitweise wieder rausclocken muß.

Sprich: das Schieberegister macht überhaupt nur dann irgendeinen Sinn, 
wenn PL "von außen" betätigt wird. Und wenn das so ist, muß man 
natürlich nicht die Eingänge überwachen, sondern ausschließlich PL.

von juppi (Gast)


Lesenswert?

..gerade eingefallen!

Könnte man nicht den I2C Port  PCF 8574 dafür benutzen?
Habe jetzt keine Möglichkeit das zu testen!

von Klaus 2. (klaus2m5)


Lesenswert?

c-hater schrieb:
> Nein, das ist immer richtig.

Sorry, habe Dich falsch verstanden.

c-hater schrieb:
> Sprich: das Schieberegister macht überhaupt nur dann irgendeinen Sinn,
> wenn PL "von außen" betätigt wird. Und wenn das so ist, muß man
> natürlich nicht die Eingänge überwachen, sondern ausschließlich PL.

Wenn ich ein Schieberegister pollen will, kann PL durchaus vom 
Controller gesteuert werden. Dass die Schaltung dadurch aber nicht 
interruptfähig ist, war sogar dem Fragesteller von Anfang an klar.

von Reinhard Kern (Gast)


Lesenswert?

juppi schrieb:
> Das Schieberegister System ist kompakt mit Treiber ,Leistungsstufen usw.
> in einen alten Funktionsfähigen Gerät.

Wenn das stimmt, wozu dann der Aktionismus? Wenn die Eingänge nicht oft 
genug erfasst werden, dann ist das vorhandene Gerät nicht wirklich 
funktionsfähig. Ausserdem, im (einzig interessanten) Worst case 
entlastet eine Interruptlösung den Prozessor nicht verglichen mit einer 
Abfrage per Time Interrupt, im Gegenteil, bei schnell wechselnden 
Eingängen kann die Belastung beliebig anwachsen, während sie beim Time 
Interrupt immer gleich bleibt.

Gruss Reinhard

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

juppi schrieb:
> Könnte man nicht den I2C Port  PCF 8574 dafür benutzen?

Ja, anstelle all dieser Schieberegister. Das Ding hat eine 
Interruptleitung, die bei Zustandsänderung an einem der Eingänge 
aktiviert und durch Auslesen zurückgesetzt wird.
1
The PCF8574 provides an open-drain output (INT) which can be fed
2
to a corresponding input of the microcontroller. 
3
4
An interrupt is generated by any rising or falling edge of the
5
port inputs in the input mode.
6
7
Resetting and reactivating the interrupt circuit is achieved 
8
when data on the port is changed to the original setting or 
9
data is read from or written to the port which has generated 
10
the interrupt.

(Quelle: http://www.nxp.com/documents/data_sheet/PCF8574.pdf)

von Wilhelm F. (Gast)


Lesenswert?

Was hatte ich denn in einer Hardware schon mal am I2C-Bus? Ich müßte 
nachsehen, aber glaube, der Stein hieß PCA9555 von Philips bzw. NXP. Ein 
I/O für 16 bit. Wenn ich mich nicht täusche, hatte der auch einen Pin 
Change Interrupt, aber das müßte ich, wie gesagt, nachsehen. Das wärs 
doch.

von juppi (Gast)


Lesenswert?

....aber Schieberegister und I2C auf gleichen Steuerleitungen?
Wie geht das SICHER.

von juppi (Gast)


Lesenswert?

juppi schrieb:
> ....aber Schieberegister und I2C auf gleichen Steuerleitungen?
> Wie geht das SICHER.

Das ist wieder mal aktuell!

von m.n. (Gast)


Lesenswert?

Wenn Du beim 4021 bleiben würdest, könntest Du die Änderungen an den 
Eingängen mit einem 4531 erfassen. 
http://www.reichelt.de/ICs-C-MOS-DIL/MOS-4531/3/index.html?ACTION=3&LA=446&ARTICLE=12668&GROUPID=2924&artnr=MOS+4531&SEARCH=4531

von spess53 (Gast)


Lesenswert?

Hi

>Wenn Du beim 4021 bleiben würdest, könntest Du die Änderungen an den
>Eingängen mit einem 4531 erfassen.

Nach fast 4 Jahren?

MfG spess

von m.n. (Gast)


Lesenswert?

spess53 schrieb:
> Nach fast 4 Jahren?

Da rechne noch mal nach!
Ich denke, daß juppi = juppi ist, der auch den Beitrag ins Leben gerufen 
hat. Warum kann er seine Frage nicht erneut stellen, wenn er immer noch 
keine Lösung hat?

von Joe F. (easylife)


Lesenswert?

Mit welcher Versorgungsspannung arbeitest du?
Wenn es 5V ist könnte ein SN54F521 bzw. SN74F521 helfen.
http://www.ti.com/lit/ds/symlink/sn74f521.pdf
Oder ein anderer sogenannter "8-bit identity comparator".

Es vergleicht 2 8-bit Worte.
Du müsstest an deine Ausgabe-Schieberegister-Kette noch 1 Register 
dranhängen, in das du den letzten Stand der Inputs reinschreibst.
Die 8 Ausgänge dieses Schieberegisters gehen zum SN54F521, sowie die 8 
Eingänge.
Wenn sich etwas im Vergleich zum letzten Stand an den Eingängen ändert, 
geht der "P=Q" Ausgang des SN54F521 auf low. Dieses Signal könntest du 
als Interrupt nehmen, den neuen Input-Zustand auslesen, und dann wieder 
in das zusätzliche Ausgabe-Schieberegister schreiben. Ab dem Moment ist 
"P=Q" wieder high.

Gibts auch mit invertiertem P=Q Signal.
http://www.ti.com/lit/ds/symlink/sn74als518.pdf

Update:
Wenn du bei der 4000er CMOS Serie bleiben willst, könnte man auch 2 4063 
(HCF4063B, CD4063B) oder 4585 (HEF4585B, MC14585B, CD4585B) kaskadieren.

: Bearbeitet durch User
von fop (Gast)


Lesenswert?

Eine Sparversion fällt mir noch ein. Prüfen, ob die Schieberegister mit 
der SPI des Mikrokontrollers angesteuert werden können. Läuft autark bis 
alle Bits im Kontroller sind und wirft im Idealfall dann einen 
Interrupt. In dem kann man dann zeitnahh auf Änderungen testen.

von Michael U. (amiga)


Lesenswert?

Hallo,

eine mögliche Hardwarelösung hat oben Wilhelm F. (ferkes-willem) schon 
geschrieben.
Gatter + XOR. Das Gatter kann auch invertieren sein, also 74HC04 + 
74HC4030 o.ä.

Die Impulslänge kann man mit kleinen Kondensatoren am Gatterausgang 
gegen GND ausreichend beeinflussen.

Die Ausgänge dann mit Wired-OR oder Wired-AND über Dioden 
zusammenfassen,
je nachdem ob das Gatter invertierend oder nicht.

Gruß aus Berlin
Michael

von Joe F. (easylife)


Lesenswert?

Michael U. schrieb:
> Gatter + XOR.

Naja, die meisten Gatter (Inverter) habe 6 Gates, brauchst du also 
schonmal 2 ICs dafür.
XOR: quad -> nochmal 2 ICs.
Dann noch Kondensatoren, Widerstände und Dioden.

Da finde ich Kombi aus 1 zusätzlichem Ausgangs-Schieberegister und 8-bit 
identity comparator (insgesamt 2 ICs) günstiger.

von Dieter W. (dds5)


Lesenswert?

Joe F. schrieb:
> Oder ein anderer sogenannter "8-bit identity comparator".

Da käme z.B. auch der HC688 in Frage.

Um das zweite Schieberegister zu sparen, lassen sich auch die Signale 
einmal direkt und einmal über ein kleines RC-Glied verzögert an die 
Vergleichseingänge legen.

Dann bekommt man bei jedem Pegelwechsel einen kurzen "ungleich" Impuls 
bis das RC-Glied umgeladen ist.

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

Dieter W. schrieb:
> Um das zweite Schieberegister zu sparen, lassen sich auch die Signale
> einmal direkt und einmal über ein kleines RC-Glied verzögert an die
> Vergleichseingänge legen.
Auch ne schöne Idee.

Wenn man gerne Kondensatoren und Dioden auflötet, kann man es natürlich
auch ganz analog erledigen (s. Anhang).

von juppi (Gast)


Lesenswert?

m.n. schrieb:
> spess53 schrieb:
>> Nach fast 4 Jahren?
>
> Da rechne noch mal nach!
> Ich denke, daß juppi = juppi ist, der auch den Beitrag ins Leben gerufen
> hat. Warum kann er seine Frage nicht erneut stellen, wenn er immer noch
> keine Lösung hat?

Der juppi ist in den letzten Jahren mit vielen Nicksen unterwegs.
Glaube aber nicht das jetzt juppi =juppi ist,
der muss ja schon 75 Jahre alt sein.
Das nur nebenbei!

von m.n. (Gast)


Lesenswert?

juppi schrieb:
> Glaube aber nicht das jetzt juppi =juppi ist,

Steht juppi drauf, ist juppi drin. Zumindest als "alternative Wahrheit".

> der muss ja schon 75 Jahre alt sein.

Na und, man sollte auch im Alter lernfähig bleiben ;-)

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.