Forum: Mikrocontroller und Digitale Elektronik I²C Portbaustein nur von Philips?


von britneypunter (Gast)


Lesenswert?

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!

von Christian Schifferle (Gast)


Lesenswert?

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

von Matthias (Gast)


Lesenswert?

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

von Tobias Breckle (Gast)


Lesenswert?

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.

von Ratber (Gast)


Lesenswert?

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.

von Wilfried Nesensohn (Gast)


Lesenswert?

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

von Tobias Breckle (Gast)


Lesenswert?

>>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.

von Ratber (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

@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

von Ratber (Gast)


Lesenswert?

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.

von Tobias Breckle (Gast)


Lesenswert?

@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?

von Peter D. (peda)


Lesenswert?

@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

von Ratber (Gast)


Lesenswert?

@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.

von Peter D. (peda)


Lesenswert?

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

von Ratber (Gast)


Lesenswert?

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.

von ERDI - Soft (Gast)


Lesenswert?

@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.

von Ratber (Gast)


Lesenswert?

@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.

von ERDI - Soft (Gast)


Lesenswert?

@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...).

von Ratber (Gast)


Lesenswert?

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.

von Tobias Breckle (Gast)


Lesenswert?

: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.

von hoschi (Gast)


Lesenswert?

Andere Möglichkeit: geht aber nur bei 8051-Systemen!

Adressbus dekodieren (74HC138) und 74HC574 als Porterweiterungen.
Beliebig ausbaubar, günstig, schnell.

gruß, hoschi

von Matthias (Gast)


Lesenswert?

Hi

und mit gigantischen Verdrahtungsaufwand verbunden.

Matthias

von Andreas S. (andreas) (Admin) Benutzerseite


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.