Forum: Analoge Elektronik und Schaltungstechnik 74HC573 als Eingangserweiterung


von A. R. (and)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

Ich würde gerne mit dem 74HC573 die "Eingänge" meines Atmel 2560 
erweitern.
Anbei der Schaltplan.
LE ("C") liegt dauerhaft auf 5V.  Somit werden die eingänge direkt 
übernommen.
OE ("OC") wird nach und nach umgeschaltet, so das immer nur ein Baustein 
die Werte weiter gibt und der Rest bleibt hochohmig.

Wird das so funktionieren?

von karadur (Gast)


Lesenswert?

Was soll der ULN am Eingang?  Da fehlen Pullup-Widerstände am ULN.

von uwe (Gast)


Lesenswert?

Nö...
Du mußt die Latch Enable nLE einzeln aunsteuern sonst übernehmen 
(latchen) ja alle das gleiche Byte vom Eingangsbus...
OE kann man zusammen ansteuern wenn man will...

von uwe (Gast)


Lesenswert?

sorry deine Beschriftung sagt: ist schon OK
Was sind denn das für bekloppte Bezeichner C und OC an den ICs.

von uwe (Gast)


Lesenswert?

Ich guck mir jetzt nicht das Datenblatt an was Pin 11 ist... beachte was 
ich vorher geschrieben habe...

von A. R. (and)


Lesenswert?

War leider in der Eagle Bibliothek so die Bezeichnung.

ULN ist dafür, da ich mit 24V Signalen ankomme als eingangssignal.
Wofür den Pull Up?

von M.A. S. (mse2)


Lesenswert?

A. R. schrieb:
> Wird das so funktionieren?
Nein, denn:

karadur schrieb:
> Da fehlen Pullup-Widerstände am ULN.



karadur schrieb:
> Was soll der ULN am Eingang?
Die Frage stelle ich mir auch: der ULN ist ein Treiberbaustein, sowas 
schaltet man an Ausgänge, nicht an Eingänge.

von M.A. S. (mse2)


Lesenswert?

A. R. schrieb:
> ULN ist dafür, da ich mit 24V Signalen ankomme als eingangssignal.
> Wofür den Pull Up?

Ohne Pullup-Widerstände kann der Treiberbaustein ULN... die Eingänge der 
74HC573 nur auf GND (->L) ziehen aber nicht auf +5V (->H). Schlimmer 
noch: wenn eigentlich H sein sollte, floaten sie vor sich hin und tun 
undefiniertes.

von Christian S. (roehrenvorheizer)


Lesenswert?

Warum begrenzt Du die Eingangsspannung nicht mit Z-Dioden und 
Widerständen?
Welche Frequenz haben die Eingangssignale?

MfG

: Bearbeitet durch User
von A. R. (and)


Lesenswert?

Frequenz am Eingang wird die 10Hz nicht überschreiten.

von Mr.OCD (Gast)


Lesenswert?

Schenial: allg. Signallaufrichtung Ext-->Int v.r.n.l. gezeichnet, also 
gegen die eingebürgerte Leserichtung v.l.n.r.
m-)

Na gut: es trainiert die geistliche Flexvirilität...

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

A. R. schrieb:
> LE ("C") liegt dauerhaft auf 5V.  Somit werden die eingänge direkt
> übernommen.

Hi,
dachte ich vor dem Experiment  auch.
Aber:
Der LE-Impuls sollte so kurz wie unbedingt nötig,
dagegen die Zwischenspeicherung so lang wie möglich sein.
Wozu ULN-Treiber, besser CD 4010, dann gibts die Pegelwandlerfunktion 
gratis.
Sind zwar nur 6 pro Chip, also entsprechend mehr ICs spendieren.
Wie schaltest Du die nicht selektierten Zwischenspeicher auf Tristate?
Sonst funktioniert das nicht.
Zitat:
"...OE
 does not affect the internal operations of the latches. Old data can be 
retained or new data can be entered
while the outputs are in the high-impedance state.
To ensure the high-impedance state during power up or power down, OE
 should be tied to VCC through a pullup
resistor; the minimum value of the resistor is determined by the 
current-sinking capability of the driver..."
Zitat aus Dabla.

Die Aufbereitung der Impulse erfolgt durch Monoflops CD4098. Sind dann 
"nur" 250 µs lang. Das reicht.


ciao
gustav

: Bearbeitet durch User
von M.A. S. (mse2)


Lesenswert?

Karl B. schrieb:
> besser CD 4010
Lieber nicht: absolut max. Rating, any pin 15,5V!

A. R. schrieb:
> ULN ist dafür, da ich mit 24V Signalen ankomme als eingangssignal.

von Karl B. (gustav)


Lesenswert?

M.A. S. schrieb:
> A. R. schrieb:
>> ULN ist dafür, da ich mit 24V Signalen ankomme als eingangssignal.

OK.
Im Prinzip ging es mir darum, die Zwischenspeicherfunktion zu 
"synchronisieren" mit dem Auslese-Zyklus. Bei meinem Experiment 
wechselte die Eingangsinformation ständig, deswegen die LE so kurz wie 
irgend möglich. Was in der Zwischenzeit passiert, fällt dann unter den 
Tisch. Die Anzeige zappelt dann auch nicht so.
Also, zwei Dinge:
Einmal Latch Enable (Zwischenspeicherfunktion)
und dann Output Enable (Signal auf Bus legen oder "hochohmig" werden)
(Dann dafür sorgen, dass es keine Datenkollision gibt, für den Fall, 
dass evtl. mehrere OEs durchschalten. Diese OE-Impulse müssen dann auch 
aufbereitet bzw. jeweils mit einer Latenz zueinander "verriegelt" 
werden.
Das macht wohl die SW des µP.)

ciao
gustav

: Bearbeitet durch User
von A. R. (and)


Lesenswert?

Software würde alle OE nach dem starten auf High schalten und dann:
- erster OE auf low
- warten
- eingänge einlesen
- warten
- erster  OE auf high
 - zweiter OE auf low
-.....

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Ich würde 74HC165 nehmen, da macht das Layout deutlich weniger Arbeit.
Der 2560 hat 4 UARTs. Mit einer UART im SPI-Mode kannst je Interrupt 2 
Byte einlesen.
Und für 24V einfach Spannungsteiler davor.

von G. O. (aminox86)


Lesenswert?

A. R. schrieb:
> Wird das so funktionieren?

Nein, weil du dir offensichtlich nicht über die Funktion von 
Tri-State-Bussystemen im klaren bist und außerdem das Datenblatt des 
´573 nicht sorgfältig gelesen hast.

: Bearbeitet durch User
von karadur (Gast)


Lesenswert?

74573 LE=1 D-In => Q-Out
LE = 0  Zustand gespeichert.

OE macht Tri-State.

passt.

Nur der Teil mit dem ULN passt nicht.

von G. O. (aminox86)


Lesenswert?

G. O. schrieb:
> Nein, weil du dir offensichtlich nicht über die Funktion von
> Tri-State-Bussystemen im klaren bist und außerdem das Datenblatt des
> ´573 nicht sorgfältig gelesen hast.

Habe mich völlig vergallopiert, Beitrag einfach vergessen.

von Zeno (Gast)


Lesenswert?

Den C-Eingang fest auf +5V bringt nichts. Intern sind im 573 D-FF. Also 
man muß mit einem kurzen Impuls die Daten übernehmen. Wenn ich mich 
recht entsinne werden mit der LH-Flanke die Daten in die Latches 
übernommen und mit der HL-Flanke an die Ausgänge durchgeschalten. 
Anschließend kann man mit OE=L die Daten für jedes Register abfragen. 
Die Eingänge OE sollten unbedingt auf definierten Potential liegen, da 
sie sonst floaten (wurde ja schon in einem anderen Zusammenhang 
erläutert).

von A. R. (and)


Lesenswert?

karadur schrieb:
> 74573 LE=1 D-In => Q-Out
> LE = 0  Zustand gespeichert.
>
> OE macht Tri-State.
> passt.

Dann habe ich es ja im Prinzip korrekt.
Also ist kein Impuls an LE notwendig?

Der ULN ist klar generell von der Leistung überdimensioniert, aber bei 
meinem Layout Platz technisch eine gute Wahl als smd.

Mit uart gäbe es zwei Probleme, das erste wären die nicht so perfekten 
Kenntnisse in der programmierung  von solchen Bausteinen sowie das ich 
auch noch 48 eingänge realisieren möchte.

von Stefan F. (Gast)


Lesenswert?

Ich würde auch Schieberegister verwenden, diese allerdings per Software 
mit Bit-Banging abfragen. Dabei kann man mühelos auf ziemlich hohe 
Übertragungsraten kommen - auf jeden Fall wesentlich mehr als per 
USART+Interrupt.

von A. R. (and)


Lesenswert?

Ok,
habe gerade das Beispiel hier auf der Seite gesehen dazu:
"AVR-Tutorial: Schieberegister"

Im prinzip könnnte ich das Kaskadieren bis zu beliebig vielen Eingängen.

Quellcode wäre dann der unter Ansteuerung Software? Müsste ich mich ma 
mit auseinander setzten, würde dann ggfls. noch etwas Platz auf der 
Platine schaffen, da nicht soviele Leitungen vom Conttroller benötigt 
würden.

von karadur (Gast)


Lesenswert?

@Zeno der 74574 ist Flankengetriggert.

von A. R. (and)


Lesenswert?

Das habe ich gerade auch gelesen in einem älteren Thread.
Der 573 lädt dauerhaft Eingang in Ausgang (bei entsprechender 
beschaltung) und der 574 nur auf Flanke.

Demnach dürfte die Schaltung so funktionieren, wenn an den uln ein Pulli 
up wäre.

von Peter D. (peda)


Lesenswert?

Stefanus F. schrieb:
> Ich würde auch Schieberegister verwenden, diese allerdings per Software
> mit Bit-Banging abfragen. Dabei kann man mühelos auf ziemlich hohe
> Übertragungsraten kommen - auf jeden Fall wesentlich mehr als per
> USART+Interrupt.

Das möchte ich mal sehen, wie Du mit Bit-Banging schneller als F_CPU/2 
sein willst.
Niemand zwingt Dich, die UART mit Interrupts zu benutzen. In der Tat 
dürfte der Interruptoverhead in C etwas kosten, aber langsamer als 
Bit-Banging ist es auch dann nicht.


A. R. schrieb:
> Mit uart gäbe es zwei Probleme, das erste wären die nicht so perfekten
> Kenntnisse in der programmierung  von solchen Bausteinen

Ach komm, das Kapitel "USART in SPI Mode" ist fix gelesen und enthält 
auch Beispielcode.

A. R. schrieb:
> sowie das ich
> auch noch 48 eingänge realisieren möchte.

6 Stück 74HC165 zu kaskadieren ist kein Problem.
Ab 100 Stück (= 800 Eingänge) würde ich vielleicht noch Treiber 
zwischenschalten und nicht die vollen 8MHz Baudrate nehmen.

von Stefan F. (Gast)


Lesenswert?

Bei cpu/2 ist die Interrupt-Rate zu hoch.

von Peter D. (peda)


Lesenswert?

Stefanus F. schrieb:
> Bei cpu/2 ist die Interrupt-Rate zu hoch.

Sicher?
Ich habs nicht probiert, aber <32 Zyklen je Interrupt klingt nicht 
unmöglich. Zumindest in Assembler ist es bequem zu schaffen.

Selbst F_CPU/4 ist immer noch deutlich schneller als Bit-Banging.
F_CPU/4 sind 64 Zyklen alle 2 Bytes, das reicht bequem für nen 
Interrupthandler in C.

von Stefan F. (Gast)


Lesenswert?

Peter D. schrieb:
> Ich habs nicht probiert, aber <32 Zyklen je Interrupt klingt nicht
> unmöglich. Zumindest in Assembler ist es bequem zu schaffen.

Ja, ich denke, es ist machbar, wenn man sich wirklich bemüht.

> Selbst F_CPU/4 ist immer noch deutlich schneller als Bit-Banging.

Ich wollte nicht ausdrücken, dass Bitbanging schneller sei. Es ging mir 
nur darum, dass man mit Bitbanging auch ansprechende Geschwindigkeit 
erreichen kann.

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.