PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ca. 60 Displays über Bus ansteuern



DuNDy
12.11.2004, 14:04
Hi,
kennt jemand eine geeignete Lösung wie ich ca. 60 Displays (8 Zeichen) an einem Bus vom PC aus ansteuern kann? z.B. I²C oder direkt per USB an den PC?
Ich habe für den I²C-Bus zwar schon möglichkeiten gefunden, doch waren die meisten Controller irgendwie nur in der Lage 3-bit zu adressieren, da die restlichen fest codiert sind... Oder weiß jemand eine bessere Lösung?

Danke für Tipps.

Gottfreak
12.11.2004, 14:10
doch waren die meisten Controller irgendwie nur in der Lage 3-bit zu adressieren, da die restlichen fest codiert sind

Wenn die Geschwindigkeit nicht so wichtig ist(und das wird sie wohl nicht sein, denn beim Display-Ablesen ist der Mensch wohl der begrenzende Faktor.), kannst du z.B. bei den AtmelAVRs auf Software-I2C-zurückgreifen. Da gibt's fertige Bibliotheken, die diese Einschränkung meines Wissens nicht aufweisen(guck' mal im AVR-Forum nach I²C, da gibt's schon 'ne Menge.).

Nommo
12.11.2004, 14:10
Was ist ein I²C-Bus????

DuNDy
12.11.2004, 14:21
Was ist ein I²C-Bus????

I²C = IIC = Inter-IC bus

2-Wire Serial Bus - wurde ca. 1992 von Phillips entwickelt. Der Bus besteht wie der Name schon sagt, aus 2 bidirektionalen Leitungen (SDA und SCL). Einmal die Daten und einmal ein Takt. Die einzelnen Slaves können direkt adressiert werden.

tristate
12.11.2004, 14:29
Soll auf den 60??(was soll das denn werden?) "Displays" überall das selbe angezeigt werden oder willst du sie alle einzeln ansteuern?
Seh ich das richtig das das ganz"normale" LCD's mit nem 8Bit Bus sind? Oder kann man die direkt mit I²C steuern? Oder meinst du nur 7Segment Anzeigen?

Frank
12.11.2004, 15:26
Hier noch ein paar Erläuterung zum I2C-Bus:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=4585

peterguy
12.11.2004, 17:21
Hi DuNDy,

ich gehe einfach mal davon aus, daß du Alphamnumerische Displays meinst...

Wie wäre es dann mit diesem Controller hier:

http://www.channaa.com/html/i2c_lcdisplay.html

Damit kann man bis zu 64 Displays ansteuern.
Allerdings kommst du auch auf ca. 700€ bei 60 Displays... 8-[
Ich denke mal, daß du aber auch keine Variante finden wirst, die unter 400€ kostet(nur die Controller!!!).

Mich würde ja wirklich interessieren, was du vorhast, mir fällt auch bei längerem Nachdenken keine Anwendung ein, die 60 Displays erfordert. :-k

Beschreib doch mal kurz dein Vorhaben!


Gruß

Peter

12.11.2004, 18:50
@DuNDy

60 Standard-LC-Displays am I²C-Bus sind kein Problem.
Steuere Sie einfach über PCF8574 & PCF8574A Portexpander an.
Dann mußt Du den I²C-Bus nurnoch in vier Stränge MUXen und schon ist es geschafft. ;-)
MUXen kann man beispielsweise sehr schön mit dem MAX4572.
Mit diesem Baustein kann man zwischen bis zu 7 Bussen umschalten.

ciao ...

12.11.2004, 21:15
@Gast

muss man etwa für jedes LCD ein PCF8574 & ein PCF8574A verwenden (120 ICs)?? und dazu noch ein MAX4572?? und vier I²C-Busse??

Michael Holoubek
12.11.2004, 22:16
hi

Wenn du so ein Megaprojekt machst, dann verwende doch nicht I2C. Der I2C Bus wurde für die Verbindung von IC's entwickelt, die sich auf einer Platine in
ein und dem selben Gerät befinden. Klar kann er mehr aber das ist IMHO Unsinn.

Ich würde dir RS485 für den BUS, einen zb. PIC16F628 als "Displaycontroller" und einen MAX485 als Pegelwandler für RS485 empfehlen. RS485 ist wesentlich unempfindlicher gegen Störungen am Bus und kann deutlich mehr Geräte adressieren. Das Limit hierbei ist eher ein Physikalisches, denn solange der Schnittstellenwandler den Bus treiben kann läuft es. (für genauere infos Datenblatt lesen). RS232-RS485 Wandler für den PC-kannst du dir selber bauen, bzw. fertig kaufen.

CAN-BUS wäre auch noch eine Möglichkeit ist aber etwas komplizierter.

Was hast du den bitte mit sechzig Displays vor ??????????


MfG
Mike

x-ryder
12.11.2004, 22:26
Was ist denn mit nem einfachen 74hc595???

Der iss 1. billig und 2. leicht anzusteuern und 3. braucht er bei 60 displays immer noch nur 3 leitungen am controller...

Du bräuchtest dann zwar 60 Chips aber das iss nicht wirklich teuer und angemessen für son Projekt... :cheesy:

Martin

BlackBox
13.11.2004, 00:52
Die Variante von Mike ist die einzig sinnvolle für so eine Anwendung. Egal ob PIC oder AVR. Die 60 Displays sind doch bestimmt nicht in einem Raum oder?

13.11.2004, 09:17
Hallo

Zudem ist I2C mehr für kurze Entfernung gebaut, und damit mehr oder wenig unbrauchbar. Es gibt zwar spezielle Chips um die Reichweite zu erhöhen, aber dann wird es ja noch mehr ein IC Grab.

Daher ist der Vorschlag von Mike schon die richtige Richtung.

MFG
Dieter

13.11.2004, 10:50
Zudem ist I2C mehr für kurze Entfernung gebaut, und damit mehr oder wenig unbrauchbar. Es gibt zwar spezielle Chips um die Reichweite zu erhöhen, aber dann wird es ja noch mehr ein IC Grab.

So ein Schmarrn.
Der I²C-Bus wurde zwar ursprünglich als Busssystem innerhalb von
Geräten entwickelt, aber das ist schon laaaaaaaaaange her.

Einen I²C-Bus auf über 100m aufzubauen ist heutzutage kein Problem mehr.
Es gibt genug ICs (und Schaltungen), die es ermöglichen diese Reichweiten
zu schaffen und sogar sicher zu übetragen.
Das gängiste wird der P82B715 sein, gefolgt vom P82B96, mit dem man lt.
Phillips noch schönere Sachen anstellen kann. ;-)
(z.B. Differential-Bus etc. )

Also ist die Aussage, daß der I²C-Bus nur für kürzeste Strcken geeignet ist,
völlig antiquiert.



muss man etwa für jedes LCD ein PCF8574 & ein PCF8574A verwenden (120 ICs)?? und dazu noch ein MAX4572?? und vier I²C-Busse??


Nein. Man braucht insgesamt einen MAX4572. Zu diesem führt der I²C-Bus vom Controller.
Vom MAX4572 aus kann man bis zu 7 Subbusse wegführen.
Den MAX4572 muß man sich wie einen einfachen Schalter vorstellen,
bei dem Man den vom Controller kommen Bus auf bis zu 7 verschiedenen
"Leitungen" (Bussen) umschalten kann.
Nur wird dieser nicht per Hand, sondern über den I²C-Bus angesteuert.

Für jedes Display benötgt man exakt einen PCF8574 oder PCF8574A
Mit je 8 PCF8574 und 8 PCF8574A kann man an einem Subbus bis zu 16
Displays anschließen.
(Der PCF8574A hat einen anderen Adressbereich, als der PCF8574 ohne A)
Mit Hilfe eines MAX4572 könnte man so z.B. bis zu 112 Displays betreiben.

ciao ...

x-ryder
13.11.2004, 11:00
was habt ihr denn immer alle mit eurem teuren i²c?

warum einfach wenn auch schwer geht?

nen 74hc595 iss nen 8-bit portexpander bloß mit 3 ttl-kompatiblen steuer- und datanleitungen. man kann ihn überall einsetzten, er ist kaskadierbar und kann bis zu 100MHz schalten.

Da die leitungen ttl-kompatibel sind isses auch einfach das über längere strecken zu machen.

martin

13.11.2004, 12:17
so viele schöne Ideen...
mit den meisten hier vorgeschlagenen Ideen hängt auch viel Arbeit!! Mit Ausnahme, die Idee von peterguy. Hier braucht man sich um die LCDs selbst nicht mehr kümmern. Die Controller übernehmen alles, z.B die Initialiesierung der 60 LCDs. Wenn man ein Zeichen schreiben möchte, da schickt man nur die Addresse, Command und das Zeichen. d.h. man muss Steuerung für das LCD auch nicht programmieren. Man programmiert nur die I²C-Routinen. Auch noch nicht mal Busse umschalten!!! Lesen geht es mit dem Teil auch.
Was auch da gut ist: mit einem Befehl kann man die 7 benutzer def. Zeichen ins CGRAM schreiben. Diese können gespeichert werden, und werden immer automatisch beim Start ins CGRAM wieder geschrieben.
Also man macht das nur einmal, bis man andere Zeichen haben möchte.

13.11.2004, 13:26
@x-ryder

Schieberegister wären hier Spielerei.
Denn Lege einmal eine mehrere Meter lange Leitung zu den SRs und
schalte in der Nähe einmal eine Leuchtstoffröhre ein.
Hier gibts die schönsten Effekte.
SR mögen zwar billig sein, aber dafür sind diese auch seeeeehr Empfindlich,
was Einstreuungen über die Signalleitungen angeht. (Data, Shift, Strobe)

Die Lösung über I²C ist wahrscheinlich vom Preis/Leisungsverhältnis und dem nötigem
Aufwand die beste.
Die Lösung von peterguy ist wieder etwas teuerer.

Mit PCF8574 fährt man wirklich am günstigesten.
Man bekommt diesen Portexpander bei entsprechender Stückzahl schon unter EUR 2,-.

Der MAX4572 ist mit fast EUR 7,- etwas teurer. Aber man benötigt nur einen.

Wenn Du alles selber lötest, kommst Du ca. auf 300 bis 350 EUR. (ohne Displays)

Und Arbeit macht die PCF8574-Lösung wahrscheinlich am wenigsten.
Es gibt hierfür schon etliche Platinen oder sogar schon fertige Displays
in allen möglichen Größen, die so angesteuert werden.
Und softwareseitig sollte das auch kein größeres Problem werden,
da es für viele µController bereits passende Routinen gibt.

Schau einfach mal hier unter Links in die Kategorie "Bezugsquellen für Elektronik/Roboterteile".
Oder google einfach einmal nach "LCD Interface PCF8574 Platine".
Da ist sicher etwas dabei.

ciao ...

DuNDy
13.11.2004, 13:52
Soll auf den 60??(was soll das denn werden?) "Displays" überall das selbe angezeigt werden oder willst du sie alle einzeln ansteuern?


Es sollen auf einigen der Displays gleichzeitig verschiedene Nummern angezeigt werden. Meistens jedoch nicht auf allen gleichzeitig. Die 5-steilligen Ziffern können verschieden sein. Bin mir noch nicht ganz sicher, vielleicht reicht es auch, wenn überall die selbe Nummer steht, wobei in dem Fall dann einige Displays gespart werden könnten und es per LED realisiert werden kann. Daher gehe ich momentan noch davon aus, daß versch. Werte gleichzeitig ausgegeben werden sollen.


Seh ich das richtig das das ganz"normale" LCD's mit nem 8Bit Bus sind? Oder kann man die direkt mit I²C steuern? Oder meinst du nur 7Segment Anzeigen?
Also es sollten ganz normale Displays sein, leine 7-segment Anzeigen. Wie diese angesteuert werden bin ich mir eben noch nicht ganz sicher. Die Überlegung ist z.b. über den I²C bus, oder eben irgendwie anders...

DuNDy
13.11.2004, 14:00
ich gehe einfach mal davon aus, daß du Alphamnumerische Displays meinst...
ja


Damit kann man bis zu 64 Displays ansteuern.
Allerdings kommst du auch auf ca. 700€ bei 60 Displays... 8-[
Ich denke mal, daß du aber auch keine Variante finden wirst, die unter 400€ kostet(nur die Controller!!!).
Ja das kostenproblem habe ich auch schon entdeckt, aber dies stört vorerst einmal nicht. Insbesondere da ich es momentan sowieso erst mal im kleine Rahmen testen möchte um es später aber dann vielleicht auf mehere Displays 60 oder ggf. mehr erweitern möchte.


Mich würde ja wirklich interessieren, was du vorhast, mir fällt auch bei längerem Nachdenken keine Anwendung ein, die 60 Displays erfordert. :-k

Ich möchte gerne auf den Displays versch. Nummern ausgeben, daß man an Hand der Nummern direkt sehen kann welcher Artikel unter dem Display liegt, um hierüber die einzelnen Artikel zu sortieren. Daher soll es am Anfang wie gesagt auch erst einmal nur im kleinen getestet werden. Also z.b. mit 4 Displays oder so und ggf. später auf mehr erweitert werden, daher auch direkt die Anfrage damit auch alle auf einaml adressiert werden können.
Die Werte auf den Displays sollen vermutlich verschieden sein und abhängi g ob ein Artikel vorhanden ist, einen Wert ausgeben. ..

DuNDy
13.11.2004, 14:04
60 Standard-LC-Displays am I²C-Bus sind kein Problem.
Steuere Sie einfach über PCF8574 & PCF8574A Portexpander an.
Dann mußt Du den I²C-Bus nurnoch in vier Stränge MUXen und schon ist es geschafft. ;-)
MUXen kann man beispielsweise sehr schön mit dem MAX4572.
Mit diesem Baustein kann man zwischen bis zu 7 Bussen umschalten.
gut, das hört sich so in etwa an, wie ich es mir auch überlegt hatte. Ich dachte vorher nur, daß es vielleicht noch eine andere Variante als das Muxen gibt. Aber zur Not könnte es auch so gelöst werden.

IngBo
13.11.2004, 14:04
oder du kannst folgendes einsetzen:

RN-DIGI Große I2C Digitalanzeige für Controller (http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=66&products_id=19)


IngBo

Michael Holoubek
13.11.2004, 16:18
Ok mal ganz nüchtern und grob betrachtet !

Variante I2C (je Anzeige):
1xPCF8574 Farnell €4,70
1x82B715 (keine differentielle Übertragung) Farnell €6,40
1xLP82B96 (für differentielle Übertragung) hab ich nirgends gefunden
1x82C250(für differentielle Übertragung) Farnell €2,30
1xLCD Pollin €6,95
Zusätzlich 1x MAX4572 ev. Sample bei Maxim sonst nicht gefunden
Es wird entweder der 82B715 oder LP82B96 + 82C250 verwendet !


Variante RS485 (je Anzeige)
1xuC PIC 16F628 Conrad €7,19
1xRS485 Transseiver MAX485/LT485 Conrad €2,95
1xLCD Pollin €6,95

Das man mit der Menge und der Wahl eines anderen Lieferanten auch noch bessere Preise bekommt ist klar
und gilt für beide Varianten. Zu I2C gibt es noch einen Pluspunkt. Bei Pollin gibt es ein LCD mit bereits integriertem
PCF8574 um knapp 7€. Aber ansonsten würde ich mal in den Punkten Preis, Verfügbarkeit und Einfachheit der
Schaltung auf RS485 setzten.

Viel Spass beim grübeln :)

13.11.2004, 19:17
Das ist ja eine Rechnung. *grins*
Farnell ist nicht gerade für seine günstigen Preise bekannt.

Nun ein paar Preise aus dem Link hier unter Elektronikbezugsquellen: cctools

PCF8574: € 1,95 ab 10Stck.
P82B715: € 4,50 ab 10 Stck. (bzw. 4,90 bei 1Stck.)
P82B96: € 4,40 ab 10Stck.
PCA82C250: € 1,75 ab 10Stck.
MAX4572: € 6,90

Zusätzlich gibt es dort auch noch passende Platinen ...

Ob hier jedoch wirklich mit Differential gearbeitet werden muß, entscheidet
hauptsächlich die Leitungslänge und das elektrische Umfeld.
Wahrscheinlich reicht sogar die Verwendung von einem P82B96 pro Subbus aus.
Evtl. noch je einen zusätzlichen P82B96, um den Bus zu segmentieren.
(z.B. pro Segment 8 Displays)

ciao ...

Waxo
14.11.2004, 00:01
wenn du spass am verdrahten hast dann kannst du ja sternförmig verdrahten und naja zwischen 60 x 8 leitungen schalten (je nachdem wieviele du brauchst) wäre auf kurze strecken die billigste lösung(was kostet Draht?). Brauchst dann nur einen µC und einen oder mehrere MUX -Bausteine :P

Naja bescheuerte Lösung.
Aber was billigeres ist mir nicht eingefallen

MfG
Waxo

DuNDy
15.11.2004, 09:38
Könnte man nicht anstelle des PCF 8574(A) auch einen MAX7311AWG verwenden. Dieser liefert eine Porterweiterung für 64 Adressen...
Wobei an diesen dann zusätzlich noch ein MAX4572 angeschlossen werden könnte, um mögliche weitere Geräte anzuschliessen.

stegr
16.11.2004, 06:51
Was mir grade noch einfällt: bei normalen HD44wasweisichwas-Displays hab ich doch ne Enable-Leitung. Wenn man nun für alle einen gemeinsamen Datenbus nimmt und nur die Enableleitung muxt, dürfte das ganze recht einfach werden. Allerdings wäre es dann nicht mehr mit I2C zu machen, sondern im Standard 8-bit-Modus des Controllers. Den 4-Bit-Mode würde ich dann nicht empfehlen, weil es bei der Menge einfach zu langsam wird.

Ist aber nur eine bisher unausgegorene Idee... ist noch früh am Morgen ;)

MfG
Stefan

Michael Holoubek
16.11.2004, 07:49
Wenn man nun für alle einen gemeinsamen Datenbus nimmt
Die sechzig Displays werden ja etwas voneinander entfernt sein, d.h. man müsste die parallelen Datenleitungen von einem zum anderen verlegen, was viele Leitungen benötigt und SEHR anfällig für Störungen ist. Eine wie auch immer geartete, serielle Übertragung, ist hier auf jeden Fall das richtige.
RS485 zum Beispiel :)

stegr
16.11.2004, 08:16
Ist aber nur eine bisher unausgegorene Idee... ist noch früh am Morgen ;)

Jo, stimmt... aber hab ja schon geschrieben, dass mir das nur so als idee gekommen war, aber ich noch nicht wach genug war, um mir das genauer zu überlegen ;)

Vom Prinzip her würde ich auch sagen serielle, nur was für eine muss man sich überlegen... ich würde eher I2C sagen und dann in die Hauptadressbereiche multiplexen, da die Displays ja dann schon ne I2C-Schnittstelle haben (alles andere wäre bei der Menge an Displays zu teuer).

DuNDy
16.11.2004, 14:44
Die 60 Displays sind doch bestimmt nicht in einem Raum oder?

Doch, sind sie. Ich denke die maximale Länge des Busses wird 15m betragen.





Variante I2C (je Anzeige):
1xPCF8574 Farnell €4,70
1x82B715 (keine differentielle Übertragung) Farnell €6,40
1xLP82B96 (für differentielle Übertragung) hab ich nirgends gefunden
1x82C250(für differentielle Übertragung) Farnell €2,30


Was bedeutet differentielle Übertragung?

Michael Holoubek
16.11.2004, 16:22
Hi

Mit differentieller Übertragung ist gemeint, dass High oder Low nicht einfach anhand eines Spannungspegels bezogen auf Masse definiert sind.
Also normalerweise ist High = 5V und Low = 0V bezogen auf Masse.
Bei differentialer Übertragung wird High und Low als Differenz zwischen zwei Spannungspegeln übertragen, d.h. wenn Ausgang A auf -1V und B auf +1V ist, bedeutet es High und wenn A und B gleich sind bzw. floaten dann Low.
Dadurch wird das ganze natürlich unempfindlicher gegen Störungen am Bus, da Einstreuungen ja immer beide Signale gleichermaßen beeinflussen -> die Differenz bleibt (fast)gleich.
Bei der normalen Übertragung gibt es aber nur ein Signal und wenn dass beeinflusst wird, kann aus einem Low schon mal ein High werden.

Die genauen Pegel für High und Low sind natürlich je nach Bussystem bzw. Logikfamilie anders aber das Prinizip ist immer gleich.

DuNDy
16.11.2004, 18:01
Also ist eine differentielle Übertragung zu bevorzugen, da hierdurch die Fehleranfälligkeit verringert wird...

Michael Holoubek
16.11.2004, 18:18
Wenn entlang des Busses Stromleitungen liegen, Leuchtstofflampen, große Verbraucher, etc. in der Nähe sind dann JA !
Bei 15m gut geschirmten Kabel und ohne nennenswerte Störeinflüsse in der Nähe wird es vieleicht auch so funktionieren.

Waxo
16.11.2004, 18:39
15m is nicht sooo viel aber auch nicht wenig ... man kann sich zumindest einen haufen arbeit und einen haufen geld ersparen wenn man einfach die enable leitung muxt ... wäre aber denk ich einen versuch wert
ich find die idee eigentlich besser als ein komplettes netzwerk aufzubaun um eigentlich nur displays anzusteuern... wie auch immer...
Bleibt wohl im ermessen von DuNDy

DuNDy
10.12.2004, 13:48
Ich habe gelesen, daß ich bei RS485 wohl auch nur 32 Displays an einen Bus hängen kann, wie kann dies behoben werden. Gibt es hier auch entsprechende Techniken zum muxen?

Meine zweite Idee war, zwischenzeitlich alles per USB-Displays anzuklemmen, nur scheint dies wegen der sternförmigen Verkabelung auch zu aufwändig zu werden.
Gibt es z.b. einen Adapter USB auf RS485 oder I2C umd die Steuerung vom PC aus durchzuführen?

stegr
10.12.2004, 20:47
USB-> I2C: Einfach nen FT232 von FTDI nehmen. Bei denen auf der Homepage gibt es eine Beispielschaltung, wie man da direkt USB nach I2C-Adapter bauen kann...

MfG
Stefan

Michael Holoubek
11.12.2004, 09:28
hi

Die 32 Teilnehmer am Bus gelten nur für Max485-485 und Max488-491. Der MAX487 (Unidirektional) und
MAX1487 (Bidirektional) können bis zu 128 Teilnehmer treiben.

Alternativ zu den RS485-Umsetzern, kannst du auch einen CAN-Umsetzer nehmen.
Der 82C250 verkraftet um die 100 Teilnehmer. Ich habe diesen Chip anstelle des
MAX485 eingesetzt um einige Raumfühler, die Terrariumsteuerung und einen PC
zu vernetzen, da der 485'er Chip beim Umschalten der Datenrichtung Probleme machte.