Hey freak's, gibt es auch einen I²C Portbaustein von anderen Herstellern außer von Philips? Vieleicht erfüllt ja z.B. ein 74HCx die selben aufgaben wie der doch recht teure PCF 8574 von Philips? Ich möchte mir nämlich eine Led Matrix aufbauen und aus diesem Grund brauche ich ein paar mehr Portbausteine, was allerdings mit den PCF8574 ein doch recht teures unterfangen würde. Ich wäre euch echt dankbar für nen tip!
Wenn's nicht unbedingt Ultra High Speed sein muss tut's für eine LED-Matrix sicherlich auch ein Schieberegister Serial In Parallel Out. Die LED's schliesst du dann (evtl. über Treiber) an die Ausgänge an. Ich hab's zwar bis jetzt noch nicht gemacht aber ich möchte mir eine elektronische Sanduhr mit LED's für die Sauna bauen, die ich genau so ansteuern will. Gruss Christian
Hi I2C ist alles andere als HighSpeed. Takt max. 100kHz. Ich habe gerade ne 32x32 LED-Matrix fertiggestellt. Als Porterweiterungen kamen da 12x74HC595 zum Einsatz. Ansteuerung mit 4MHz. So bleiben noch ca. 90% der Rechenzeit eines Mega16 frei. Bilder der Hardware hab ich mal hier irgendwo gepostet. Matthias
würde auch ein schieberegister benutzen. ist auch extrem leicht anzusteuern, da eigentlich nix schiefgehen kann. hab für mein 32 led lauflicht mit nem 2313 4 SN74LS164N für 0,27€ pro stück verwendet. ist also auch sehr günstig.
Yo,für Intensive Operationmen ist das eher weniger geeignet denn I2C ist genaugenommen ein "Steuerbus" und kein "Datenbus" (Das war Ironie) aber 100Khz sind ja gerademal die alte Obergrenze. Weiter ging es mit 400khz und jetzt stehen wir bei 3.4Mhz. Allerdings gibt es da noch wenige Bausteine für. Bei genügend freien Ports ist ein Schieberegister allerdings wesentlich schneller.
Wenns unbedingt I2C sein muss, Maxim hat 28bit Portexpander (MAX7300), gehn aber nur bis 400kHz. Und da wir schon bei Maxim sind, nach kurzem rumstoebern stach mir dieser Baustein ins Gesicht: MAX6955 7-, 14-, 16-Segment LED Display Driver (Sehr) teuer, aber scheint das zu sein was du brauchen koenntest, damit spart man sich auch sonst eventuell noetige Vorwiderstaende. mfg
>>Bei genügend freien Ports ist ein Schieberegister allerdings
wesentlich schneller.
@Ratber:
wieso bei genügend freien ports? du kannst doch die schieberegister
auch in reihe schalten, sodass der letzte ausgang gleichzeitig der
eingang am nächsten register ist. somit braucht man auch nur 2
leitungen.
Da haste was falsch verstanden. Damit meinte ich die Ports am Controller. Jede Schieberegisterkette verbrät ja mal eben nen paar Leitungen da ja nicht Adressiert werden kann. Bei I2C kommste mit den 2(3 mit Int) Leitungen besser weg da du ja dort die Bausteine adtressieren kannst. Obendrein läßt sich noch Kaskadieren (Mehrere Stränge per Expander) usw. Es ist einfach ne Frage der Geschwindigkeit. I2c ist bei den gängigen Bausteinen auf 100 bzw. 400 Khz Bustakt beschränkt wobei ein schieberegister natürlich schneller vorran kommt. Dieses wird aber dann träge wenn die Kette zu lang wird da man ja bei jeder Wertänderung (Egal welches Bit.Ob erstes oder letztes) immer den kompletten Strang neu schreiben muß. Man muß also zwischen Kosten,Geschwindigkeit,usw. abwägen was man macht. Universell ist sogut wie garnix.
@Rather, du brauchst immer nur 3 Leitungen unabhängig, wie viele 74HC595 Du hintereinanderschaltest. Adressieren must Du da garnichts. Du must eben bloß für 8 * 74HC595 auch immer 8 Byte reinschieben. Mit Hardware-SPI bist Du auch sauschnell gegenüber I2C. Peter
Das sagte ich doch schon. Mir ist das vollkommen klar nur wollte ich auf die Systembedingten Einschränkungen beider Modelle hinweisen. Schieberegister: -Geschwindigkeit nur von Controller und Schieberegistern abhängig -Lange Ketten = Längere Zugriffe (Logisch oder ?). -Pro Kette 3 Portbits nötig (Ist auch nachvollziehar) -Da die einzelnen Chips einer Kette nicht Adressierbar sind muß bei Änderung die ganze Kette beschrieben werden. I2C: -Maximale Geschwindigkeit ist immer festgelegt (100,400 Khz....usw. je nach Bausteinen) -Da Adressierbar ist ein Baustein (Oder auch nur ein Port des Bausteins) gezielt ansprechbar. -Bei vielen zugriffen oder hohen Datenströmen ist der Overhead natürlich sehr hoch weil Adressiert wird. -Nur 2 Portbits für den ganzen Bus nötig Desweiteren sagte ich das man sich,je nach Anwendung,eben das raussuchen kann was einem mehr liegt. Nicht mehr und nicht weniger.
@ratber: ja da ham wir aneinander vorbeigeredet :) aber warum schreibt ihr 2 immer von 3 portbits pro schieberegisterkette? ich hab bei meinen nur 2. einmal clock und einmal data input...oder ist das bei manchen registern anderst?
@Tobias, beim 74HC164 brauchst Du nur 2, aber die Daten werden durch jeden Ausgang hindurchgeschoben. Bei LEDs stört das nicht sehr, wenn man es schnell macht. Aber für andere Lasten kann das stören. Deshalb nimmt man dann den 74HC595, da kann man in Ruhe die Daten durchschieben und dann mit einem Latchimpuls in die Ausgangsregister übernehmen. Dazu ist dann der 3. Draht nötig. Das ist auch ein Vorteil gegenüber I2C, alle Register ändern sich gleichzeitig. Zum Thema längere Zugriffe: Der PCF8574 kann nur 100kHz (=10µs Bitzeit). D.h. um auch nur ein Byte zu ändern, braucht man 20 * 10µs = 200µs Schließt man 8 * 74HC595 an einen Mega8 an, kann man mit 8MHz takten, das ergibt dann 64*0,125µs = 8µs, da hat der I2C ja noch nicht mal das Startbit gesendet. Vom PCF8574/A kann man max 16 Stück an einen Bus hängen. Beim 74HC595 wirkt nur die Pinkapazität als Begrenzung. Z.B. 100 * 74HC595 haben 100*10pF=1nF, da geht man dann mit der Frequenz etwas runter oder schaltet Treibergatter dazwischen. 800 Ausgänge ist ja auch schon etwas extrem, aber eben nicht unmöglich. Peter
@Tobias >ja da ham wir aneinander vorbeigeredet :) Yo,haben wir. Peace Den Rest hat Peter schon gebracht. Zusatz: Wenn ich die Int. Leitung (Innteruppt) nutzen will dann ist natürlich beim I2C noch ne weitere leitung erforderlich (zb. bei Tastatureingaben damit der Controller es auch rechtzeitig mitbekommt.Also genauso wie ne direkte Tasta am Cointroller) @Peter Kleine Korrektur. Bei I2C wird auch erst am Ende das Muster auf den Ausgang gelegt.(Also beim Ack nach dem Dadenbyte.Sehr schöhn zu sehen wenn man die Signalisierung per hand macht oder den Takt in den Keller runterschraubt) Beim 8473 stimme ich dir zu das bei 100 Khz ende ist (Geht aber noch etwas weiter) Der PCA9554 zb. geht schonmal bis 400 kHz und ein Typ den ich jetzt nicht finde sogar bis 3.4 Mhz aber der ist zu Teuer als das er für ne Simple Anzeige in frage kommt. Der PCA9501 dagegen hat 6 (0xxxxxx)Freie Asdressbits so das man von diesem Baustein dann 64 an eine Leitung hängen kann. Nebenbei befinden sich auf jedem Chip auch noch ein 256 Byte Eeprom (1xxxxxx)das zusätzlich genutzt werden kann aber das spielt hier keine Rolle. Sooooo schlecht ist I2C nu auch nicht (Nein ich will keinen bekehren)nur muß´man sich ,wie gesagt) natürlich überlegen wofür man es nutzt. Beim M16 den ioch derzeit nutze ist das natürlich ladde da genug Ports vorhanden sind. Nen Display baue ich dann (und auch sonst wenn möglich )per Schieber auf da es einfach billiger ist. Ich brauche den 8574 häufig wenn mehrere LC-Displays gleichzeitig angesteuert werden müssen denn jedesmal 7-8 Bit sind bei 2-3 Displays dann schon zuviel. Bei I2C geht das alles mit 2 Bits und die Geschwindigkeit ist egal solange ich nicht anfange irgendwelche Beragraphen darzustellen. In diesem Falle (Thema) kommt dann auch der MAX7219 wieder ins gespräch (Nein diesesmal nicht wegen Stromhunger sondern weil er bis zu 8 Stellen in einem Chip bietet was die Schaltung übersichtlicher macht.(Wird natürlich mit mehr Kosten erkauft) Naja,nur nen Vorschlag.
Ich hab ja nichts gegen I2C, z.B. nehme ich gerne EEPROMs 24C02...24C512. Aber die PCF8574 sind im Vergleich zum 74HC595 völlig schamlos überteuert. Übrigens, das Gegenstück zur Eingangserweiterung nennt sich 74HC165. Mit insgesamt 5 Leitungen hast Du dann also unbegrenzt viel Ein- und Ausgänge. Peter
Zum Preis: Da stimme ich voll zu aber was macht man wn es nciht anders geht ? (Alte Videorecorder und Fernseher auschlachten)*gg* Am liebsten würde ich nen TCP/IP Ijterface nehmen (Strecken sind kaum nen Problem,Genug geschwindigkeit,genug Adressen,Einbindung ins Web usw.)aber der Preis schreckt da gewaltig ab also bleibts bei Schieberchen und Einfachbus.
@Ratber: "wenn mehrere LC-Displays gleichzeitig angesteuert werden müssen denn jedesmal 7-8 Bit sind bei 2-3 Displays dann schon zuviel" Wieso? Kannst die Displays ja parallel an den Bus hängen. Auswählen tust du das Display, das du aktualisieren wills, dann über die (dafür vorgesehene) Enable-Leitung des entsprechenden Displays.
@Erdi Ich Kompletiere mal meine Asusage in der Richtung das ich nicht 2-n Mal das gleiche Anzeigen will sondern die Displays getrennt mit Unterschiedlichen Informationen beschicke. Das geht alsio nur wenn ich jedem 7 bzw. 8 Bit(Beleuchtung) Spendiere womit der Controller schnell am Ende ist. Da in den allerwenigsten fällen die Daten "Hyperschnell" und laufend aktualisiert werden müssen reicht da ein I2C-LCD locker aus. Selbst 64LC's am I2C-Bus könnte ich da oft grenug aktualisieren wenn es hart kommt und brauche da nur 2 Leitungen für. Beispiel auser Praxis: Habs für ne Manuelle Abfüllung von Tierpräparaten (Damits Pferdchen gut läuft)gemacht. 4 Personen sitzen um eine 120x129cm Säule duch die se das Präparat bekommen und das problem war das die Kundenbestellungen (Mischung nach Wunsch.)jedesmal andrs waren so das jeder seinen Zettel mit den Daten brauchte.Das ewige abholen war Zeitraubend da nebenbei noch andere Aufgaben zu erledigen waren.Ergo hab ich dem Rechner ,der ca. 4 eter entfernt stand und auf dem Per Netz die Daten ankamen ein einfaches I2C-Interface für die Serielle verpasst das über die Decke an die Säule gelegt wurde. Jeder Mitarbeiter bekommt seine Daten (zum Mischen) auf ein 4x20 Display (+ einigen Tasten zum Scrollen,Bestätigen usw.) direkt an den Platz gelegt und kann sich die ewige rennerei sparen. Insgesammt waren das 8 PCF8574 (Je einmal Diplay und einmal für die Tasten). Das ganze war simpel angelegt ,atellte aber ne Erleichterung dar. Obendrein ist das natürlich wesentlich billiger als alles dafür Umzubauen denn auch hier ist Geld knapp.Zudem war der Spaß schnell erledigt (Hab für alles ,dank der Mithilfe der Kollegen,3 Tage gebraucht wobei ein Tag für die Soft drauf ging.) Bei "einem" Diplay hänge ich das natürlich direkt an wenn ich nicht gerade alle Ports für anderes belege.Keine Rede.
@Ratber: Schon klar, aber mittels des Enable-Pins bist du ja in der Lage, auf jedes Display was anderes zu schreiben, und das, obwohl du D0-D7, RS und RW zusammenhängen hast. Nur dass dann jedes Display über die Enable-Leitung getrennt aktiviert wird. Somit brauchst du (im 4Bit Mode) 6 Leitungen für die Steuersignale und dann für jedes Display noch ne Enable-Leitung (bei 8 Displays nochmal 8 Leitungen...).
Yo,und das wären dann schon 2 Ports. Ginge zwar aber dann kommt wieder das Alte Problem mit den Leitungen denn wer "zb." 8 Diplays verwendet der hängt sie "Höchstwarscheinlich" auch etwas räumlich getrennt auf so das auch die Zuleitungen länger werden. Damit ich Signalproblemen direkt ausweiche nehme ich in solchen fällen lieber die mehrkosten für nen 8574 in kauf. Mit etwas reduzierter Taktrate kann ich da gut und gerne auf etliche meter gehen (Wie im Beispiel mit den Präparaten) ohne mir darüber gedanken machen zu müssen. Is eben immer ne Sache wie der Fall liegt. Da Displays normalerweise nicht Superschnell versorgt werden müssen ferschiebe ich gerne alles Seriell und bin in der Verdrahtung flexibel, Meine Alte Lüftersteuerung habe ich auch komplett auf I2C (8-Fach AD,8-Fach DAC,Einige 8574 für Tasten,Display und Sonderfunktionnen) aufgebaut so das ich ,bis auf die Software, nen kleinen 8 Poligen Controller nehmen kann.Natürlich haben die Winzlinge leider nicht genug Speicher fürs Programm.Deswegen bin ich ja kürzlich erst auf den AVR ungestiegen.
:O kaum ist man mal kurz weg entwickeln sich hier ja die heissesten diskussionen ;) @peter & ratber: danke! dann weiss ich ja jetzt was ich mir nächstesmal kaufen muss. dachte nämlich das die schieberegister immer gleich den ausgang schalten. hab zwar nur leds dran, aber des sind superhelle und die flackern obwohl ich mit das register mit 4mhz ansteuer immer kurz auf.
Andere Möglichkeit: geht aber nur bei 8051-Systemen! Adressbus dekodieren (74HC138) und 74HC574 als Porterweiterungen. Beliebig ausbaubar, günstig, schnell. gruß, hoschi
Hi und mit gigantischen Verdrahtungsaufwand verbunden. Matthias
Das Bild im Anhang zeigt wie man mehrere (n) 74HC595 an einen SPI-Bus (CPHA=0, CPOL=0) anschließen kann. Ansteuerung: EN auf low setzen, n Bytes raussenden, warten bis die Übertragung beendet ist, EN high, fertig.
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.