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?
Was soll der ULN am Eingang? Da fehlen Pullup-Widerstände am ULN.
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...
sorry deine Beschriftung sagt: ist schon OK Was sind denn das für bekloppte Bezeichner C und OC an den ICs.
Ich guck mir jetzt nicht das Datenblatt an was Pin 11 ist... beachte was ich vorher geschrieben habe...
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?
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.
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.
Warum begrenzt Du die Eingangsspannung nicht mit Z-Dioden und Widerständen? Welche Frequenz haben die Eingangssignale? MfG
:
Bearbeitet durch User
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...
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
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.
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
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
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.
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
74573 LE=1 D-In => Q-Out LE = 0 Zustand gespeichert. OE macht Tri-State. passt. Nur der Teil mit dem ULN passt nicht.
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.
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).
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.
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.
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.