Nabend. Ich habe mir grad einen Software I2C Master geschrieben und habe dazu nun eine Frage. Die meisten Chips undterstützen nur 400kHz, wenn der Master dennen zu schnell ist können sie diesen Ausbremsen indem sie die SCL auf 0 ziehen. Halten sich alle Chips daran oder hattet ihr schonmal welche die das Ignoriert haben. Mein Vorhaben: Ohne auf Timing zu achten die Daten raushauen und bevor SCL wieder auf Low gezogen wird warten bis SCL auf High ist. Bild: 5V-2µs/Div 8MHz ATmega, 10kOhm PullUp
Michael Dierken schrieb: > und bevor SCL wieder auf > Low gezogen wird warten bis SCL auf High ist. wiederspricht sich das nicht irgendwie? mfg
Widerspricht sich nicht. Ich schalte den Ausgang des µC Hochohmig. Dadurch wird SCL über den PullUp auf High gezogen, sollte der Slave bereits fertig sein. Ist der Slave nochnicht bereit das nächste Bit zu empfangen so zieht er die Datenleitung auf Masse. Wenn ich nun zwar den Ausgang hochohmig habe aber dennoch Masse messe weiß ich das der Slave nochnicht so weit ist und sollte ihn hochohmig lassen. Wenn ich nun einen High Pegel messe weiß ich das der Slave fertig ist und ich anfangen kann das nächste Bit zu senden.
spess53 schrieb: > Hi > >>10kOhm PullUp > > Mach dich erst mal mit I2C vertraut. > > MfG Spess Da bin ich gerade bei (deswegen auch dieses Projekt). Die Dimension des PullUp habe ich von hier: Beitrag "Re: Benötigt der i2c-Bus einen Pull-UP"
Hi >Die Dimension des PullUp habe ich von hier: >Beitrag "Re: Benötigt der i2c-Bus einen Pull-UP" Was willst du mir Second Hand Informationen? http://www.nxp.com/documents/other/39340011.pdf MfG Spess
3.9 Clock stretching Clock stretching pauses a transaction by holding the SCL line LOW. The transaction cannot continue until the line is released HIGH again. Clock stretching is optional and in fact, most slave devices do not include an SCL driver so they are unable to stretch the clock. On the byte level, a device may be able to receive bytes of data at a fast rate, but needs more time to store a received byte or prepare another byte to be transmitted. Slaves can then hold the SCL line LOW after reception and acknowledgment of a byte to force the master into a wait state until the slave is ready for the next byte transfer in a type of handshake procedure (see Figure7). On the bit level, a device such as a microcontroller with or without limited hardware for the I2C-bus, can slow down the bus clock by extending each clock LOW period. The speed of any master is thereby adapted to the internal operating rate of this device. In Hs-mode, this handshake feature can only be used on byte level (see Section5.3.2). dat sollte doch dann klar sein oder?
spess53 schrieb: > Hi > >>Die Dimension des PullUp habe ich von hier: >>Beitrag "Re: Benötigt der i2c-Bus einen Pull-UP" > > Was willst du mir Second Hand Informationen? Dachte den Aussagen des falk kann man ruhig etwas vertrauen. > > http://www.nxp.com/documents/other/39340011.pdf > > MfG Spess Muss ich morgen mal gucken wenn ich wieder am Arbeitsplatz sitze ... musste mein Lappi neu machen und habe noch kein Adobe drauf. Runterladen kann ich vergessen da dieser "Client" nun 4x gesacht hat das es ihm zu lange dauert und er die Daten wegwirft und abbricht. XYZ schrieb: > dat sollte doch dann klar sein oder? Jupp .. einfach raushauen kann gut gehen, muss es aber in den meisten Fällen nicht. Dann werde ich einfach ne 15Takte Warteschleife einbauen die das ganze auf 400kHz begrenzt.
1 | The supply voltage limits the minimum value of resistor Rp due to the specified minimum sink current of 3 mA at VOLmax = 0.4 V for the output stages. |
2 | VDD as a function of Rp min is shown in Fig.37. |
3 | The required noise margin of 0.1VDD for the LOW level, limits the maximum value of Rs. |
4 | Rs max as a function of Rp is shown in Fig.38. |
5 | The bus capacitance is the total capacitance of wire, connections and pins. This capacitance limits the maximum value of Rp due to the specified rise |
6 | time. Fig.39 shows Rp max as a function of bus capacitance. |
7 | |
8 | The maximum HIGH level input current of each input/output connection has a specified maximum value of 10 mA. |
9 | Due to the required noise margin of 0.2 VDD for the HIGH level, this input current limits the maximum value of Rp. |
10 | This limit depends on VDD. The total HIGH level input current is shown as a function of Rp max |
Wenn ich das nun richtig verstanden habe: Rp muss ausreichend klein sein dass die RiseTime eingehalten wird. Daher das ich zwei Geräte am Bus habe und die maxRiseTime bei 300ns liegt: 1/(2pi*3,33MHz*20pF) = ~2,5kOhm Desweiteren dürfen bei einer Last von 10µA pro Gerät über Rp nicht mehr als 0,2V abfallen: 0,2V/20µA = 10kOhm Was die Serienwiderstände angeht verstehe ich die Bedingungen nicht ganz. Bei einem Mindeststrom von 3mA dürfen nicht mehr als 0,4V abfallen. Der benötigte Rauschabstand für den Low Level beträgt 0,1V und begrenzt die größe vom Serienwiderstand. Heißt das: Mindestens: 5V/3mA = 1,66kOhm Maximal: So das Low min. 0,1V unter dem Höchsten als Low erkannten Pegel liegt. Habe ich da irgendwelche Fehler drinne oder habe ich das richtig verstanden? Quelle: Obriges .pdf Seite 39
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.