Guten Tag Ich habe einen ganzen Haufen Fragen zum I2C Bus. Da ich ein PCB anfertigen lassen muss (€€) will ich unbedingt sicher sein dass der I2C optimal fukntioniert, zumals dass er stark belastet sein wird. 1. Ich habe in der offizielle Dokumentation gelesen dass ein Rs Widerstand in Serie mit dem SDA und SCL Eingänge der I2C Chips gut wäre. (Kann nicht schaden oder?) http://www.nxp.com/documents/user_manual/UM10204.pdf Aber sie geben nicht die mathematische Formel um den Maximalwert zu berechnen: http://img15.hostingpics.net/pics/224900721.png Wie ist es mit dem 3.3V??? 2. Die Bus Kapazität ist wichtig mit I2C. Wie brechnet man es? "input capacitance" einzelner Chips + Kabel Kapazität? Richtig? Wie berechnet man (ungefähr) die Kabelkapazität???? Es hängt vom Design vom PCB nehme ich an. Kann Eagle das berechnen? 3. In der Dokumentation eines Philips LED Driver habe ich gelesen dass es ratsam wäre ein Widerstand in Serie mit den Adress-Pins zu schalten (wenn an Vcc angechlossen natürlich) "A standard 10 kOhm pull-up resistor is required to obtain the best system level ESD performance." Wichtig oder nicht? 4. Ich nehme an dass die SDA und SCL Leiterbahnen die gleiche Länge haben müssen. Wie hoch ist da die Toleranz bei 1MHz (ist es im mm oder cm Bereich)??? 5. Ich habe I2C Kontakte pin am Ende der Kette, um später Erweiterungen anzuschliessen. Wenn unbenutzt, muss ich sie in Serie mit einen starken Widerstand anschliessen (um Echo im Signal zu vermeiden)? 6. Muss man ein 0.10μF zwischen Vcc und Masse der I2C Chips anschliessen??? Sehe keine in der Schaltung in den Datenblätter. Danke :-)
1) Der SPI Bus wird durch im Open-Collector Modus angesteuert. Die Ausgänge aller Bus-Teilnehmer können daher parallel geschaltet werden. Weger der Open-Collector Betriebsart sind Pull-Up Widerstände zwingend nötig. Was Open-Collector ist, weisst Du aber, oder? Wenn nicht, schau mal bei Wikipedia. In der Regel benutzt man 10k Ohm Widerstände. Bei Lego Mindstorm muss man 82k Ohm nehmen. 2) Die Kapazität ist die Summe der Eingangskapazitäten der Busteilnehmer (siehe Datenblatt) plus Kabel. Wobei die Kapazitäten der Chips typischerweise viel höher sind, als die der Kabel. 3) Manche Chips arbeiten besser, wenn man die Eingänge direkt auf VCC/GND legt, andere wiederum arbeiten besser, wenn man VCC nicht direkt sondern über einen Widerstand anschließt. Hier würde ich dem Ratschlag des jeweiligen datenblattes folgen. Falls da nichts relevantes drin steht, dann bei TTL Technologie über 1k Ohm Widerstand, bei MOS direkt an VCC anschließen. 4) Ich denke, dass die SDA Leitung nicht zwingend die gleiche Länge haben muss, wie die SCL Leitung. Es werden immer zuerst das Datenbit angelegt, und danach ein Taktimpuls gesendet. Dazwischen muss genügend Zeit verstreichen, um die Kapazitäten umzuladen und die vom jeweiligen Slave verlangten Vorlaufzeiten zu erfüllen. Solange das Timing passt, spricht nichts gegen unterschiedliche Leitungslängen. Wir reden hier doch von Zentimetern, nicht Kilometern. 5) Der I2C Bus wird NICHT terminiert, so wie Du das vermutlich von Ethernet oder FBAS Leitungen gewohnt bist. Der I2C Bus ist so kurz, dass entsprechende Schwingungen gar nicht entstehen bzw so schnell abklingen, dass sie keine Rolle spielen. Deswegen ist die maximal erlaubte Bitrate auch gering. 6) Jeder Chip benötigt einen (persönlichen) Kondensator zwischen VCC und Masse. Wenn im Datenblatt keine Enpfehlung steht, dann nimm 100nF, sonst den Wert, den das Datenblatt empfiehlt. Mit I2C hat dieser Punkt nichts zu tun, er gilt immer.
Stephan S. schrieb: > Ich habe einen ganzen Haufen Fragen zum I2C Bus. > Da ich ein PCB anfertigen lassen muss (€€) will ich unbedingt sicher > sein Hallo Stephan, auch I2C kann ein bischen fricklig sein. Wenn Du auf den ersten Schuss das PCB hinbekommen musst dann wäre ein Prototyp auf Lochraster/SMD-Raster ratsam. rgds
@ Stephan S. (dipsy) >Widerstand in Serie mit dem SDA und SCL Eingänge der I2C Chips gut wäre. >(Kann nicht schaden oder?) >http://www.nxp.com/documents/user_manual/UM10204.pdf Naja, ein Angstwiderstand. Ist nicht wirklich wichtig. >Aber sie geben nicht die mathematische Formel um den Maximalwert zu >berechnen: >http://img15.hostingpics.net/pics/224900721.png >Wie ist es mit dem 3.3V??? Liegt irgendwo zwischen 2,5 und 5V. >2. Die Bus Kapazität ist wichtig mit I2C. Wie brechnet man es? >"input capacitance" einzelner Chips + Kabel Kapazität? Richtig? Ja. >Wie berechnet man (ungefähr) die Kabelkapazität???? Es hängt vom Design >vom PCB nehme ich an. Ja. > Kann Eagle das berechnen? Nein. Pi mal Daumen vielleicht 1pF/cm. >3. In der Dokumentation eines Philips LED Driver habe ich gelesen dass >es ratsam wäre ein Widerstand in Serie mit den Adress-Pins zu schalten >(wenn an Vcc angechlossen natürlich) >"A standard 10 kOhm pull-up resistor is required to obtain the best >system level ESD performance." >Wichtig oder nicht? Nein. >4. Ich nehme an dass die SDA und SCL Leiterbahnen die gleiche Länge >haben müssen. Nein, das ist vollkommen unkritisch, selbst 1m Differenz würde funktionieren. >Wie hoch ist da die Toleranz bei 1MHz (ist es im mm oder >cm Bereich)??? ;-) >5. Ich habe I2C Kontakte pin am Ende der Kette, um später >Erweiterungen anzuschliessen. Wenn unbenutzt, muss ich sie in Serie mit >einen starken Widerstand anschliessen (um Echo im Signal zu vermeiden)? Nein, I2C ist viel zu langsam und im Normalfall die Leitungen viel zu kurz, damit das Thema Wellenwiderstand greift. Ausserdem ist I2C hochohmig, das kann gar keine Terminierung treiben. >6. Muss man ein 0.10μF zwischen Vcc und Masse der I2C Chips >anschliessen??? IMMER! http://www.mikrocontroller.net/articles/Kondensator#Entkoppelkondensator
@ Stefan @ Falk Brunner Vielen Dank für Ihre Antworten. Ist sehr Lehrreich. "Naja, ein Angstwiderstand. Ist nicht wirklich wichtig."/ Diser Vorfall (überspannung an dem I2C-Bus), kann nur vorkommen wenn man den I2C bus über Kontaktstifte bei laufendem Betrieb anschliesst (funken am Kontakt....)? Richtig? "1pF/cm" Das ist recht wenig, bin erleichtert. Ich werde maximal 50cm Leiterbahnlänge haben. @ 6A66 Naja das Problem ist dass auf dem I2C Bus folgendes angeschlossen sein wird: 1x I2C Switch 12x Led Driver 4x Temperatursensoren 1x ADC 1x I/O 1X eeprom Müsste ich es vorerst auf einer Lochraster/SMD-Raster ausprobieren würde es sehr kompliziert sein. (Ist nicht für eine Serienproduktion)
@ Stephan S. (dipsy) >Diser Vorfall (überspannung an dem I2C-Bus), kann nur vorkommen wenn man >den I2C bus über Kontaktstifte bei laufendem Betrieb anschliesst (funken >am Kontakt....)? >Richtig? Ja. Aber dann macht man nur EINMAL diese Längswiderstände rein, nämlich direkt am Steckverbindern. Dazu noch Klemmdioden an SDA und SCL und gut. >"1pF/cm" >Das ist recht wenig, bin erleichtert. Ich werde maximal 50cm >Leiterbahnlänge haben. Das ist stark abhängig, wie nah andere Signale, vor allem Masse(flächen) sind. Aber bei 50cm passt das schon, du bist nicht der Erste, der sowas baut.
Hallo, ich finde es lustig, dass Du Dir so viele Gedanken um die Spezifikationen machst, das ganze aber dann mit einem Takt betreiben willst der weit außerhalb der Spezifikation liegt. 1 MHz ist deutlich höher als die max 400 kHz. Sollte aber trotzdem funktionieren. Eckhard
@ Eckhard I2C gibts in 4 Varianten (Alle abwertskompatibel): Standard-mode 100kHz Fast-mode 400kHz Fast-mode+ 1MHz High-speed mode 3,4MHz Alle Chips die ich verwenden werde unterstützen mindestens den Fast-mode+. (Ausser den I2C Switch, habe noch keinen gefunden der mehr als 400kHz unterstützt, muss noch weiter suchen.) EDIT: Und seit kurzem gibt es auch den Ultra Fast-mode (5MHz).
@ Stephan S. (dipsy)
>Und seit kurzem gibt es auch den Ultra Fast-mode (5MHz).
Man kann alles übertreiben. I2C ist mit 400kHz schon OK, mehr ist IMO
ein Krampf, den nachträglich drangefrickelt wurde. Wenn es schnell sein
soll, nimmt man SPI.
Stephan S. schrieb: > Standard-mode 100kHz > Fast-mode 400kHz > Fast-mode+ 1MHz > High-speed mode 3,4MHz > Und seit kurzem gibt es auch den Ultra Fast-mode (5MHz). OMG können die das nicht einfach xxx-k/MHz-mode nennen? Ist ja schlimmer als USB... Aber danke fürs Zusammentragen, dachte bis eben auch bei 400kHz ist Schicht.
Falk Brunner schrieb: > @ Stephan S. (dipsy) > >>Und seit kurzem gibt es auch den Ultra Fast-mode (5MHz). > > Man kann alles übertreiben. I2C ist mit 400kHz schon OK, mehr ist IMO > ein Krampf, den nachträglich drangefrickelt wurde. Wenn es schnell sein > soll, nimmt man SPI. Ja also ich kann mir schon gut vorstellen dass so viele IC (20) am I2C Bus es schwerig machen werden den Bus mit 1MHz zu betreiben. An SPI hatte ich auch schon gedacht, aber der braucht zu viele I/O.
@ Stephan S. (dipsy)
>An SPI hatte ich auch schon gedacht, aber der braucht zu viele I/O.
Für dein paar ICs reicht I2C mit 400kHz locker aus.
Was soll das Ding denn machen? Themometer mti Anzeige?
Pro I2C Bus ~50 RGB MulitLED Led antreiben. Die Thermometer dienen nur als Schutz, sie schalten den Spannungsregler der LEDs aus wenn der PCB zu warm werden sollte.
@Stephan S. (dipsy) >Pro I2C Bus ~50 RGB MulitLED Led antreiben. Naja, wenn man damit schnelle Bildwechsel/Animationen machen will, würde ich das mit TLC5922 & Co und SPI machen. Den lahmarschigen Kram dann per I2C.
Es sind 3 PCB, mit je: - 50 RGB MultiLeds (150 Leds) (11 Driver) - 30 RGB MultiLeds (90 Leds) (7 Driver) - 50 RGB MultiLeds (150 Leds) (11 Driver) Die 3 PCBs sind an einem I2C Switch angeschlossen, das heisst sie teilen sich die Bandbreite eines einziges I2C Master (USB Adapter, 400kHz limitiert, momentant) Der refresh-rate würde ich gerne bei 4Hz-5Hz halten. Ich würde sagen 50% der MultiLeds werden meistens statisch sein und nur selten ihr Status ändern. Zusätzlich werde ich meistens die Primärfarben benutzen, d.h ich werde selten die 3 LEDS der RGB MultiLeds gleichzeiten ansteuern. Glauben Sie dass der I2C Bus damit überlastet wird (nehmen wir an er würde mit 400kHz funktionieren)? Ich glaube ich werde mal mit der PC Steuerung Software anfanken, und mal schauen wieviel Bandbreite ich tatsächlich brauchen werde.
@ Stephan S. (dipsy) >- 50 RGB MultiLeds (150 Leds) (11 Driver) >- 30 RGB MultiLeds (90 Leds) (7 Driver) >- 50 RGB MultiLeds (150 Leds) (11 Driver) >Die 3 PCBs sind an einem I2C Switch angeschlossen, das heisst sie teilen >sich die Bandbreite eines einziges I2C Master (USB Adapter, 400kHz >limitiert, momentant) Aua. >Der refresh-rate würde ich gerne bei 4Hz-5Hz halten. Naja. >Glauben Sie dass der I2C Bus damit überlastet wird (nehmen wir an er >würde mit 400kHz funktionieren)? Mal gerechnet? Wieviel Bytes müssen für einen Update übertragen weren, incl. I2C Adresse ? >Ich glaube ich werde mal mit der PC Steuerung Software anfanken, und mal >schauen wieviel Bandbreite ich tatsächlich brauchen werde. Nö, man macht erstmal eine Überschlagsrechnung, alles andere ist Bastelmurks.
Autsch, im schlimmsten Fall brächte ich 2000kbit/s, wenn ich mit dem PWM/Lichtstärke rumspielen :-S. Wenn ich aber nur die LEDs an/aus mache bin ich um die 800kbit/s. Ok, sowieso war die zweite Phase vom Project, PIC Controller zu benutzten um du PC-Software zu entlasten. Es scheint als hätte ich keine andere Wahl als diese von vornherein zu integrieren (um mehrere I2C Master zu haben). SPI, gefällt mir nicht so sehr.
@Stephan S. (dipsy)
>SPI, gefällt mir nicht so sehr.
Warum? Zu einfach und zu schnell?
Oups, habe bit/s und kBit/s verwechselt :D Wird schon gehen dann. Zum SPI, es gefällt mir nicht so sehr wegen die zusälichen Leitungen die es benötigt (mein PCB ist schon überfüllt). Zusätzlich habe ich gelesen dass mehr als 1.5Mhz wäre nicht drin ab einer bestimmte länge (relativ kurz). Der SPI daisy-chaining scheint interessant zu sein, habe aber nicht heraus finden können ob der AS1112 LED Driver kompatibel wäre (In der Datenblatt steht nichts davon)
Stephan S. schrieb: > Zusätzlich habe ich gelesen > dass mehr als 1.5Mhz wäre nicht drin ab einer bestimmte länge (relativ > kurz). Quelle?
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.