PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 60 - IO's 74HC595



nob
01.10.2010, 22:53
Hallo Zusammen

Ich bin schon seit langem auf der suche nach einer einfachen und guten Lösung um viele Pins per USB zu steuern.

Konkret:
Ich möchte per USB 30 Taster abfragen und 30 Leds einschalten können. Jetzt hat mir ein Kollege das Bauteil 74HC595 von Philips (http://www.nxp.com/documents/data_sheet/74HC_HCT595.pdf) empfohlen.

Nun meine Frage:
Wie schliesse ich dieses Ding an meinem PC an. Geht das mit RS232? (und dann mit einem RS232 to USB converter...)
So weit ich das verstanden habe, kann ich mit diesem Bauteil nur 8 Pins setzen, kann aber mehrere hintereinander schalten und somit auch mehr als 8 Pins setzen, ist das richtig? Geht das mit den Eingangs-Signalen gleich?

Vielen Dank für eure Hilfe

Jaecko
02.10.2010, 09:05
Das mit dem Kaskadieren stimmt; da kannst du so viele hintereinanderhängen, wie du willst (theoretisch). Wo in der Praxis die Grenze ist, weiss ich garnicht. Aber die dürfte hoch sein.
Ich vermut mal, dass man auf ne Europlatine garnicht so viele draufkriegt.

Mit RS232 ansteuern geht "indirekt". Also du kannst die Clock/Data-Signale zwar schon mit den RS232-Steuerleitungen erzeugen. Aber macht wohl keiner. Bei einem USB/RS232-Konverter sind u.U. (je nach Preisklasse) die Steuerleitungen aber sowieso nicht verschaltet => geht eh nicht.

Eher einen kleinen Controller (AVR, etc.) dazwischenhängen, der direkt ein Byte der Schnittstelle rausschiebt; ist komfortabler.

Zum Einlesen von Tastern wurde mir der 74HC166 bzw. 74HC597 empfohlen (https://www.roboternetz.de/phpBB2/viewtopic.php?t=56029), habs aber noch nicht testen können.

nob
02.10.2010, 09:28
Danke für deine Antwort.
Ist das nicht ein Overkill? Ich möchte eigentlich direkt vom PC aus meine Pins steuern (brauche keine logik dazwischen). Und wenn ich das richtig gesehen habe, wird dieser Controller per Parallelport programmiert, welchen ich auch nicht habe... (und wenn ich dann einen hätte, könnte ich den 74HC595 nicht direkt am Parallelport anschliessen?)

Kann ich dann den 74HC595 und den 74HC597 hintereinander hängen? Oder muss ich diese trennen? Noch kurz zum Verständnis: Verstehe ich das richtig, dass ich 3 Leitungen benötige um n bits zu setzen?
Eine um ein Bit zu setzen und mit der anderen Leitung kann ich sagen, dass er quasi diese gesetze Bit nach hinten schieben soll, bis ich alle aufgefüllt habe und mit der dritten kann ich sagen, dass ich fertig bin?

Freue mich auf eure Antworten - Danke

Jaecko
02.10.2010, 13:30
Zum Controller Programmieren gibts mittlerweile verschieden Möglichkeiten. Parallel/LPT war die erste; gibts auch per RS232/USB. Wenn du nen Parallelport hast: 74HC595 hin und fertig. Dafür ist der eigentlich gut geeignet. Ich würd sowas für mich einfach schon aus Gewohnheit mit nem AVR machen.

Die 595 und 597 müssten "nebeneinander" arbeiten; also hintereinander hängen geht nicht, da die Datenrichtung bei beiden ja unterschiedlich ist.
Du kannst aber beide mit dem gleichen Takt versorgen, dann geht Schreiben und Lesen gleichzeitig.

Das mit den 3 Leitungen stimmt so.
1x Takt, d.h. jedes Mal werden die Bits 1 weitergeschoben.
1x Daten, d.h. ob ne 0 oder 1 reingeschoben wird.
1x "Update", d.h. erst jetzt werden die Daten auf die Ausgänge gelegt (man kann das auch dauerhaft einschalten, dann sieht man halt die Bits durchrauschen; für ein Lauflicht mitunter auch sinnvoll)

Richard
02.10.2010, 17:47
Es gibt noch eine Möglichkeit. ein USB zu I²C Adapter und zum Taster lesen oder LED's u.s.w. schalten I²C Bus Expander einsetzen. Wenn man Taster und LED's über eine Matrix anschließt können bis zu 16 pro IC bearbeitet werden.

Gruß Richard

nob
02.10.2010, 22:20
Hallo zusammen

@Jaecko
Der Parallelport hätte ja genügend Pins um
ein 595 und ein 597 anzuschliessen und somit könnte ich fast
unendlich viele in und outputs haben, sehe ich das richtig?
Kann ich die Beiden einfach an ein Kabel löten et voilà?
Wenn ja, könnte ich dann einen USB zu LPT Adapter verwenden (ist halt leider schon wieder etwas teurer..)?
Oder gibt es eine gute Alternative wie ich sowas am PC anschliessen kann.
Ich dachte immer so ein Problem müsste doch schon x mal gelöst worden sein und irgendjemand müsste doch schon einmal ein Tutorial oder ähnliches veröffentlicht haben...


@Richard
Meinst du so etwas http://www.mikrocontroller.net/articles/Port-Expander_PCF8574 ?
Aber da habe ich doch auch das Problem wie ich das Ding am PC anschliesse oder?


Danke vielmals für eure HILFE! :-)

Jaecko
02.10.2010, 23:00
Du kannst da beide am LPT gleichzeitig verwenden. Wenn ich mich richtig erinner, gibts beim normalen SSP-Modus ja 8 Ausgänge und 5 Eingänge (schon länger her). Reicht also für noch mehr. Beim Löten/Basteln nur etwas aufpassen: Die Ausgänge vom LPT sind nicht sonderlich belastbar bzw. kurzschlussfest.
Die 595/597 müssten also per Vcc extra versorgt werden.

USB-LPT-Adapter funktionieren hier nicht. Zumindest nicht die "normalen", die man bei Ebay/Mediamarkt o.ä. nachgeworfen kriegt. Für den ein oder anderen Drucker taugen die zwar was, aber zu mehr auch nicht. Bei sowas brauchts die teueren; und die sind dann wirklich "teuer"; zwar schon bezahlbar, aber im Vergleich zum "Wozu brauch ichs eigentlich?" zu viel.

Solche Probleme gibts immer wieder; nur sind eben die Anforderungen jedes Mal total anders, so dass es eben jedes Mal andere Lösungen gibt.
Einmal sinds nur LEDs, ein anderer braucht gleich ne Schaltleistung für 230V/16A. Einmal solls ne Ansteuerung über Schieberegister sein, ein anderer bevorzugt Matrix/Multiplex-Schaltung.
"Die" perfekte Lösung gibts eigentlich kaum.

Richard
03.10.2010, 05:48
http://www.mikrocontroller.net/articles/Port-Expander_PCF8574[/url] ?
Danke vielmals für eure HILFE! :-)

Ja, genau das meinte ich.

>Aber da habe ich doch auch das Problem wie ich das Ding am >PC anschliesse oder?

Es gibt USB > I²c Adapter.
Gruß Richard

screwdriver
03.10.2010, 07:22
Hi,

den Vorschlag von Richard, einen USB-I2C-Adapter zu verwenden gefällt mir auch am besten. Alternativ könntest du dich noch hier umsehen:

http://www.recursion.jp/avrcdc/

Da gibt es einen USB-SPI-Adapter. Damit könntest du dann wieder deine Schieberegister verwenden. Oder du nimmst direkt den CDC-IO. Ist alles zum Selberbauen. Die Programmierung der AVR sollte mit einem günstigen Evaluationsboard von Pollin keine größeren Probleme bereiten.

screwdriver

Richard
03.10.2010, 08:38
Bei allen Arten sollte erwähnt bleiben, die Reichweite ist stark eingeschränkt. Wenn Taster/Sensoren oder Aktoren über weite Strecken arbeiten sollen, muss man z.b. auf CAN oder RS485 zugreifen. Das geht aber nur mittels µC und passende Treiber Bausteine wie z.B. sn74167 (RS485)..

Gruß Richard

kaltloeter
03.10.2010, 09:52
Hallo,

zu diesem Thema habe ich mir zwei Bücher besorgt die in kurzer (englischer) Sprache die Verbindung von PC und Hardware beschreiben. Es wird allerdings als Programmiersprache C# und VB eingesetzt. Ich komme damit gut klar und habe auch schon einige Themen ausprobiert. Ich kann es also nur empfehlen, mir hat es einiges an Verständnis zu den Technischen Abläufen gebracht und man kann es gut an anderer Hardware, z.B. in Verbindung mit Mikrocontrollern einsetzen.
Complete Practical Measurment Systems using a PC, Yury Magda
und
C# 2008 and .NET Programming, John Allwork
beide Elektor Verlag.
im ersten Buch wird mit I2C das erwähnte PCF8574, oder Bits schubsen mit 74HC(T)4051, 4067 erklärt.
Gruß
kaltloeter

Zu Anschluß der Hardware habe ich den FT232 benutzt. Der liefert mir alle Serial Signale und nicht wie die einfachen Adapter nur RX TX. Wenn dich das interessiert kann ich dir mein Schalbild/ Layout geben, die Platine dafür habe ich mir selbst gebaut. Eagle Dateien habe ich noch irgendwo auf meiner Platte.
[/img]

nob
04.10.2010, 12:30
Hallo zusammen

Danke für euren Input. Ich habe jetzt mal den I2C studiert. Ich tappe da aber einfach noch zu sehr im Dunkeln... (bin Programmierer und habe leider fast keine Ahnung von HW) und preislich kommte es aber fast aufs gleiche wie wenn ich einfach einen LPT USB Adapter kaufe... und das scheint mir doch viel einfacher zu sein? Wenn ich einen USB zu I2C Adapter verwende, kann ich dann auch je ein 595 und ein 597 anschliessen (und an die natürlich wieder x beliebig viele (hintereinander))? Wenn ja, wie?
Doch wiso funktionieren nicht alle USB-LPT-Adapter? Die können ja nicht einfach gewisse Pins weglassen?
Auf was müsste ich achten beim kaufen?

Wenn ich jetzt doch so einen Adapter kaufe, kann ich das dann wie folgt verbinden?

Jeweils
LPT D0 an 595 DS (14)
LPT D1 an 595 SH_CP (11)
LPT D2 an 595 ST_CP (12)

Und über Netzteil:
GND (8)
Vcc (16) (5V)


Meine 30 Taster werden mit je 3.3 Meter Kabel am Baustein angeschlossen, könnte dies ein Problem sein?
Die Leds sollten keine Probleme bereiten, da ein Kollege von mir etwas gebastelt hat, damit ich mit den 5V die ich dann später habe 12V schalten kann.

Danke euch im Voraus

Richard
04.10.2010, 14:03
Mit I²C kannst Du die Schieberegister nicht ansteuern, I²C ist ein Bus System die einzelnen Busexpander weden über Ihre Schreib/lese Adresse angesprochen und dann ein Byte gesendet oder gelesen. Bei Taster oder LED's ist die Anschluss länge nicht so tragisch. Aber die Länge der Datenleitung ist recht begrenzt.

Dieses Längenproblem der Datenleitung wirst Du aber auch bei reiner serieller Bit- Schieberei haben, das hat etwas mit der Leitungskapazität zu tun. Die meisten IC's können keine großen Kapazitäten treiben. Dafür gibt es spezielle Bus Treiber und damit wird das ganze schon ein Fall für µC Steuerung.

Wenn möglich schildere doch einmal was wie real gemacht werden soll b.z.w. wie weit der PC von Schalter und Anzeige entfernt ist. Wichtig könnte auch noch sein wie schnell die Daten übermittelt werden sollen/müssen. Früher (?) wurde in der Industrie auch gerne eine so genannte Strom Schnittstelle verwendet, die reagiert nicht auf "Übersprechen", ist aber nicht die schnellste.

In wie weit man heute noch echt auf die Hardware Register der Schnittstellen zugreifen kann? Zu DOS Zeiten war das sehr einfach, heute hält win ja die Hand davor. :-( Allerdings zeigen ja die CNC Bauer das es immer noch geht, die steuern ja ihre Fräsmotoren über LTP.

Gruß Richard

Jaecko
04.10.2010, 14:14
Naja auf einen echten LPT zugreifen ist mit entsprechenden Mitteln bis WinXP kein Problem (z.B. inpout32.dll)

Bei den Billig-LPT-Adaptern scheint es so zu sein, dass man vom PC aus nicht sagt "Setze diese und jene Pins", sondern einfach "Schick das Kommando". Was dann die Elektronik im Adapter draus macht... tja, deren Sache, Hauptsache der Drucker verstehts.
Spart so gesehen auch Bandbreite, da z.B. das ganze Gewackel mit der Strobe-Leitung nicht mitübertragen werden muss.

Bei den "teueren", die dann wirklich als LPT-Schnittstelle arbeiten und nicht als "USB LPT Printer Adapter" o.ä., hat man dann wieder Kontrolle über die einzelnen Pins.

nob
04.10.2010, 17:30
Okey, dann fragt sich nur noch wie ich weiss ob es sich um ein "echter" LPT-USB-Adapter handelt oder nicht... hmm

Im Anhang findet ihr ein Bild wie es aussehen soll.
Es muss nicht schnell sehr schnell sein, der Taster wird vermutlich so um die 0.5s lang gedrückt und in dieser Zeit müsste ich halt feststellen ob das der Fall war oder nicht. (Ich gehe mal davon aus, dass ich ständig den Port abfragen muss ob gedrückt wurde..)

Dann ist nur noch wichtig, dass es sich um ca. 30 LEDs und 30 Taster handelt, die je mit einem 3.5m langem Kabel an das "Ding" was ich bauen möchte angeschlossen werden.

Danke & Gruss

Richard
04.10.2010, 19:04
O.K. jetzt wissen wir mehr, eine Bus länge von ~1m ist OK. Damit sollte alles gehen egal wofür Du Dich entscheidest LPT zu
Seriell oder I²C. Bei Schieberegister hängst Du einfach alle aneinander und gehst vom letzten zurück zur LPT. Dann kannst Du die Bit's kreisen lassen,vorne einschieben und hinten auslesen.
also quasi senden und empfangen gleichzeitig. nach 60 Bit dann immer die Steuerleitungen bedienen und die eingelesenen Bits auswerten.

Bei I²c Adresse setzen 8Bit Parallel lesen/setzen, Adresse erhöhen.....u.s.w. bis alles durch ist. Ich bin mir nicht wirklich sicher (zu lange zurück) ob der PCF8574 IRQ fähig ist. Wenn ja, würde jeder Tasten Druck in "Echtzeit" übertragen. Das würde natürlich viel Zeit sparen.

Gruß Richard

nob
04.10.2010, 22:30
Jetzt bin ich ein bisschen verwirrt.. bedeutet das, dass ich nur den 595 brauche um die Taster zu lesen und die LEDs zu setzen? Und muss ich das DS (14), SH_CP (11) und ST_CP (12) vom 595 an die Datenbits vom LPT schliessen?

Hmm das mit der Echtzeit wäre schon schöner, als dauernd zu pollen. Es scheint als wäre der PCF8574 IRQ fähig. Trotzdem verstehe ich überhaupt nicht wie das mit dem I²c funktionieren sollte. Okey, ich weiss ich brauche ein USB zu I2C Adaptermodul (siehe Anhang). Das Ding hat wiederum 5 Pins welche ich irgendwie mit dem I2C verbinden muss. Und an den kann ich dann den 595 und den 597 schliessen?

Danke Euch...
Gruss

nob
16.10.2010, 15:59
Hallo zusammen

Nach dem ich mich jetzt nochmals schlau gemacht habe und ich euren Rat, dass ein USB2Parallel-Adapter nicht die ideale Lösung sei zu Herzen genommen habe, habe ich mich entschlossen so ein FTDI - MM232R (USB to Serial UART Converter) (http://www.farnell.com/datasheets/11539.pdf) zu verwenden.

Dann brauche ich nur noch ein Shift Register einmal mit Serial-In / Parallel-Out und einmal mit Serial-Out / Parallel-In, ist das korrekt? Kann ich da irgendwelche nehmen oder spielt es eine Rolle? (es gibt sooo viele) Dann schliesse ich noch die Shift Register an txd rts clk12 beziehungsweise rts rxd clk12 vom MM232R und das wars?

Ich hoffe ihr könnt mir noch einmal helfen.
Danke & Gruss