PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 50 IC's an einem SPI bus?



wiRe
31.03.2008, 15:37
Ich würde gerne 50 CMOS-IC's als Slaves an einem gemeinsamen SPI bus (ATmega16 als Master, CLKmax << 1MHz) betreiben. Bei TTL wären das ja enorme Ströme, ich habe aber keine Ahnung wie das Limit bei CMOS-Bausteinen aussieht und kann auch keine Unterlagen dazu finden. Sehr wahrscheinlich werde ich einen Treiberbaustein oder eine Transitorschaltung für Clock- und Daten-Leitung benötigen.

Kann mir bitte jemand eine Tip geben wie das aussehen könnte?
Vielen Dank bereits im Voraus!

fumir
31.03.2008, 18:14
bei cmos ist das nicht viel anders als bei ttl: ein normaler ausgang kann nur eine begrenzte anzahl eingänge schalten. wieviele genau ist von der serie und dem baustein abhängig, d.h. du mußt die datenblätter konsultieren.

50 sind jedenfalls ne ganze menge. mal von der benötigten treiberleistung abgesehen wird dein spi bus auch ne recht beachtliche länge haben (die 50 IC müssen ja irgendwo untergebracht werden) das macht alles noch mal deutlich komplizierter! stichworte: leitungskapazitäten, leitungswiderstände, verzögerungen der signale, signalform.

ich würds erst gar nicht versuchen 50 IC an einen bus (egal ob spi oder was anderes) zu hängen, sondern mir ne andere architektur überlegen.

BurningWave
31.03.2008, 20:15
Manche Funktionen der ICs lassen sich doch sicher auch mit einem Microcontroller realisieren.

Wie willst du überhaupt 50 ICs an einen SPI Anschluss anschließen? Da braucht man dann doch auch für jeden eine ChipSelect Leitung. So viele hat doch ein AtMega16 gar nicht.

mfg

wiRe
31.03.2008, 20:55
@fumir: würde ja gerne eine andere architektur wählen, aber einzige alternative wäre dann eine anordnung in reihe, aber durch das "durchreichen" der signale würde evtl. eine zu lange laufzeit entstehen. und ja, der bus wäre ziemlich lang, so bis zu 3m.

@_r2d2: ich will ja nicht die volle SPI funktionalität, es reicht ein unidirektionaler bus mit einem master, alle slaves sind nur empfänger und shiften die daten mit dem CLK signal in ihr schiebe-register. also wird nur ein SCK und das MOSI signal verwendet, MISO und slave-select's fallen weg.

wiRe
01.04.2008, 11:57
also laut dem wikipedia-artikel http://en.wikipedia.org/wiki/Fanout haben CMOS chips einen enorm großen fan-out wert:
e.g. using NXP Semiconductor specifications for their HEF4000 series CMOS chips at 25 °C and 15 V gives a fanout of 34 thousandalso 34-tausend eingänge an einem einzigen ausgang, oder verstehe ich da was falsch? dagegen haben TTL's einen wert um die 10.

in meinem fall gilt für den ATmega: Io = max. 20mA
und für die cmos eingänge: Iih/Iil = max. 1µA
demzufolge ein FANout von ~20000
oder nicht?

fumir
02.04.2008, 14:47
ich würde es mit ner art matrix versuchen. oder die 50 IC in gruppen zu je 10 ansteuern.

dem wiki artikel würd ich nicht trauen. die haben einfach max. ausgangsstrom durch eingangsstrom eines gatters geteilt. das stimmt so nur im statischen betrieb.
bei ttl bedingt auch bei arbeitsfrequenzen.
bei cmos jedoch ist das unsinn:

der eingang eines cmos ist praktisch ein kleiner kondensator, der beim umschalten des l,ogikpegels geladen oder entladen werden muss.
damit das richtig funktioniert, muss der kondensator schnell geladen werden. und dazu brauchts große ströme. wenn du an einen HEF4000 ausgang 34000 hef4000 eingänge anschliesst klappt das im prinzip prima solange sich der pegel nicht ändert. sobald sich aber der pegel ändert, wirken die 34000 eingänge zusammen wie ein kurzschluß. der ausgangspegel wird sich erst mal gar nicht und dann nur recht langsam ändern. mit 1mhz ist da schon mal gar nix. aber es kommt noch schlimmer: sobald der pegel dann endlich etwa die mitte zwischen low und high erreicht hat, geraden die 34000 eingänge in nen undefinierten zustand und die 34000 gatter begehen gemeinsam suizid (da beide eingangstransistoren leitend werden und damit die versorgungsspannung mehr oder weniger kurzschliesen)

ein realistischer fanout von hef4000 dürfte wohl eher bei 20-30 liegen und ist stark von der arbeitsfrequenz abhängig.

Hubert.G
02.04.2008, 17:13
Kannst du einmal sagen was du vorhast, möglicherweise gibt es für dein Problem eine wesentlich einfacher Lösung.

wiRe
02.04.2008, 20:15
@fumir: danke für den tip, ich werde es dann mit einer anderen architektur versuchen. also zB. ein treiberbaustein welcher den bus in 5 seperate busse aufteilt. leider müssen dadurch jedoch einiges mehr an kabel verlegt werden. besser wäre es da die treiberausgänge parallel auf ein kabel zu legen. wäre das dann wieder von nachteil? was wäre deiner meinung nach ein geeigneter treiberbaustein?

@hubert: es handelt sich um ein netz aus 50 verteilten anzeigen, alle an einem bus, gesteuert durch den ATmega. der master sollte in der lage sein mit min. 50kbaud zu senden. da der bus sehr lang ist (ca.3m) dürfen nur wenige kabel verwendet werden (max. 4 incl. versorgungsspannung). funk, i2c, can o. ähnl. kommen nicht in frage da sie zu aufwendig zu implementieren sind und weitere/teurere komponenten auf empfängerseite benötigen würden. die daten müssen daher im einfachstromverfahren (pegel bei 0 und 5V) übertragen werden. gibt es dafür eine einfachere lösung?

python_rocks
02.04.2008, 21:04
es handelt sich um ein netz aus 50 verteilten anzeigen, alle an einem bus, gesteuert durch den ATmega. der master sollte in der lage sein mit min. 50kbaud zu senden. da der bus sehr lang ist (ca.3m) dürfen nur wenige kabel verwendet werden (max. 4 incl. versorgungsspannung).
Hallo wiRe!

- RS-485
- mit MAX487 (2,08 € bei Kessler-Electronic)
- bis zu 127 Empfänger
- http://www.alldatasheet.com/view.jsp?Searchword=MAX487

Wenn du jeden Empfänger eine ID gibst, dann brauchst du einfach nur über die UART Nachrichten raus schicken und für alle oder einen Empfänger kennzeichnen. Den Rest machen die MAX487-ICs, die du statt den üblichen MAX232 verwendest.


PRINT "00:irgendein Text fuer alle Empfaenger"
PRINT "01:Ein Text fuer den ersten Empfaenger"
PRINT "02:Ein Text fuer den zweiten Empfaenger"
...

Es genügen drei oder vier Leitungen (wenn du auch VCC mitgibst).
VCC, GND und zwei Datenleitungen.

Ich konnte nirgends herauslesen, wer oder was der Empfänger sein soll. Also, wenn alle Stricke reißen, dann kannst du immer noch ATmega8 oder ATtiny2313 als Vermittler verwenden, die dann die Signale für die Empfänger aufbereiten.

mfg
Gerold
:-)

Volker-01
02.04.2008, 21:13
Ich hab vor ca. 5 Jahren mal eine Laufschrift mit 18 IC's am ca. 2m langen SPI-Bus betrieben. Bei Datenraten von ca. 2Mbit hat das ganze auch noch sehr gut funktioniert. Da die IC's speziell dafür ausgelegt waren, brauchte ich auch nur einen CS für alle. Die Signale sahen da noch relativ gut aus. Daher würde ich jetzt mal schätzen, das sich warscheinlich so ca. 25 dieser IC's noch gut betreiben lassen würden. Aber genau sagen kann ich's jetzt nicht. Bei den IC's handelte es sich um den MAX7221.

Gruß, Volker

wiRe
03.04.2008, 09:03
@python_rocks: hallo gerold! die idee ist gut, aber leider übersteigen die 100EUR mein kosten-limit. sonst würde ich das gerne so machen.

@volker-01: bei mir würden ja bereits 50kbit ausreichend sein. du schätzt also dass da das tatsächliche fanout noch um die 25 betragen könnte? bereits ein weiterer bus würde die anzahl ics auf 25 minimieren. das wäre mit nur 2 weiteren leitungen machbar.

Der Papst
05.04.2008, 18:59
Unterschätzt ja nicht den Gatestrom von FETs!
Natürlich waren das ein paar 100 KHz (da ist was bei der Beschaltung des Ne555 daneben gegangen, sollten nur 2500Hz sein), aber bei mir hat mal der Gatestrom eines richtig großen FETs (600V/16A) den steuernden Ne555 (Imax=500mA(!)) gegrillt...

Besserwessi
05.04.2008, 21:26
Die Leistungsfets sind was ganz anderes. Da sind einige nF als Gate Kappatzität normal und dazu kommt noch der Miller Effect (bei 600 V wohl der Hauptanteil).
Die Logic ICs habe mehr eingangskappatzitäten im 5-10 pF Bereich. 50 Eingänge also ungefähr 0,25nF - 0,5 nF , das ist weniger als ein Leistungsmosfet. Für einen Einzelnen Ausgang kann das etwas langsam für Takteingänge werden. Bei den Logic Chips gibt es oft eine untere Grenze für die Anstiegsgeschwindigkeit (z.B. 500 ns für 74HCTxxx), da hilft die geringe Datenrate also nicht viel.

Man wird also entweder Leistungstreiber oder extra Empfänder (z.B. Schmidtrigger) brauchen. Die Lösung mit den Schmidttriggern führt aber zu Verzögerungen, die eine SPI lösung aus dem Tritt bringen kann.

Der Papst
06.04.2008, 14:54
Die Leistungsfets sind was ganz anderes. Da sind einige nF als Gate Kappatzität normal und dazu kommt noch der Miller Effect (bei 600 V wohl der Hauptanteil).
Der hat nur 12V geschaltet, das ganze war aber der Treiber für eine PKW-Zündspule und da ich primär erst bei 600V kurzschließen (das Ergebnis konnte sich sehen lassen, richtig schöne und lange Lichtbögen) und auch noch viel Strom durchjagen wollte brauchte ich eben so einen großen FET