Hallo,
ich habe ein Programm bei dem ich mit den I2C Routinen vom CCS-Compiler
ein EEPROM auslese.
Dabei ist mir aufgefallen, dass die Geschwindigkeit der Datenübertragung
nur etwa 50KHz beträgt - obwohl im standard-speed-mode doch 100KHz sein
sollten.
Ich habe Delay mit 10M(Hz) eingerichtet.
#use i2c(master,sda=PIN_C4,scl=PIN_C3,FORCE_HW) // 100KHz
Wenn ich i2c so einrichte
#use i2c(master,sda=PIN_C4,scl=PIN_C3,FAST,FORCE_HW) // 400KHz
ist die Flankensteilheit so gering, dass das Auslesen gar nicht klappt -
ausserdem sind es auch dann keine 400KHz.
Gruß,
Tobias
Tobias John schrieb:
> ist die Flankensteilheit so gering, dass das Auslesen gar nicht klappt -> ausserdem sind es auch dann keine 400KHz.
Was für Pullups hast Du denn angeschlossen?
Nimm mal je 1,8k an SCL, SDA.
Peter
Peter Dannegger schrieb:
> Was für Pullups hast Du denn angeschlossen?> Nimm mal je 1,8k an SCL, SDA.
Hallo, es sind 10k Pullups - die kann ich leider nicht verändern, da sie
im Speicher-Chip integriert sind.
Aber der Hinweis könnte der Richtige sein... da werd ich mal den
Hersteller anschreiben.
Aber was könnte der Grund für die Geschwindigkeit sein... es sind immer
maximal 50KHz...
Gruß,
Tobias
Tobias John schrieb:
> Hallo, es sind 10k Pullups - die kann ich leider nicht verändern, da sie> im Speicher-Chip integriert sind.
???
I2C-ICs sind am Bus immer open-drain, d.h. die I2C-Pullups müssen immer
extern rangepappt werden.
Manche MCs erlauben es, die internen Pullups zu konfigurieren, die sind
aber mit ~50k wirklich nur ein Notnagel bei kurzen Leitungen und
langsamer Bitrate.
> Aber der Hinweis könnte der Richtige sein... da werd ich mal den> Hersteller anschreiben.
Der wird nicht extra für Dich spezielle ICs backen, weil Du die
I2C-Spezifikation nicht gelesen hast.
> Aber was könnte der Grund für die Geschwindigkeit sein... es sind immer> maximal 50KHz...
Vielleicht ein Problem in Deinem Wizzard. Ich benutze generell keine
Wizzards, sondern programmiere die Peripherie immer direkt (nach Lesen
der Registerbeschreibung im Datenblatt).
Peter
Peter Dannegger schrieb:
> Tobias John schrieb:>> Hallo, es sind 10k Pullups - die kann ich leider nicht verändern, da sie>> im Speicher-Chip integriert sind.>> ???>> I2C-ICs sind am Bus immer open-drain, d.h. die I2C-Pullups müssen immer> extern rangepappt werden.
Der Meinung bin ich auch - das ist ja auch normalerweise der Fall - es
sei denn man verwendet ein RFID-Tag mit Dual-Port-Memory
(http://microsensys.de/products/sensors/TELID200.html) => Leider kein
Datenblatt zum Download.
Jedenfalls sind die 10K-Pullups integriert - da hat sich wohl keiner
Gedanken gemacht beim Entwickeln der Tags... Vielleicht ist der Grund
für die Integration jedoch das Anwendungsgebiet und die
außergewöhnlichen Anforderungen an das Tag.
>> Aber der Hinweis könnte der Richtige sein... da werd ich mal den>> Hersteller anschreiben.>> Der wird nicht extra für Dich spezielle ICs backen, weil Du die> I2C-Spezifikation nicht gelesen hast.
Ich kann da wohl nichts für... ich weiß eigentlich, dass man die Pullups
extern anschließt!
>> Aber was könnte der Grund für die Geschwindigkeit sein... es sind immer>> maximal 50KHz...>> Vielleicht ein Problem in Deinem Wizzard. Ich benutze generell keine> Wizzards, sondern programmiere die Peripherie immer direkt (nach Lesen> der Registerbeschreibung im Datenblatt).
Ich habe es schon öfter mal probiert (mit PICC-Pro-Compiler von Hi-Tech)
das MSSP-Modul zum Laufen zu bringen - jedoch wie man in diversen
Beiträgen im Forum lesen kann ohne Erfolg... Wirklich zufrieden bin ich
mit der CCS-I2C-Version auch nicht. Gelesen habe ich die Datenblätter
und Application-Notes von Microchip zu genüge.
Gruß,
Tobias
Tobias John schrieb:
>> Was für Pullups hast Du denn angeschlossen?>> Nimm mal je 1,8k an SCL, SDA.>> Hallo, es sind 10k Pullups - die kann ich leider nicht verändern, da sie> im Speicher-Chip integriert sind.
Was passiert wohl wenn du zusaetzlich einen Pullup von 2,2k dranhaengst?
Cheers, Roger
Tobias John schrieb:
> Jedenfalls sind die 10K-Pullups integriert
Das scheint ja auch kein einzelner IC zu sein, sondern ne Baugruppe.
Zu große Pullups schaden ja nichts, einfach noch welche parallel
schalten. I2C-ICs können mindestens 3mA ab.
> Ich habe es schon öfter mal probiert (mit PICC-Pro-Compiler von Hi-Tech)> das MSSP-Modul zum Laufen zu bringen - jedoch wie man in diversen> Beiträgen im Forum lesen kann ohne Erfolg... Wirklich zufrieden bin ich> mit der CCS-I2C-Version auch nicht. Gelesen habe ich die Datenblätter> und Application-Notes von Microchip zu genüge.
Ich kenne das I2C der PIC nicht, nur das der 8051 (NXP, Atmel), daß auch
für die AVR und LPC übernommen wurde. Es ist schon etwas tricky (viele
Seiten im Datenblatt).
Gibts denn keine Beschreibung zu dem "#use i2c"?
Wizzardfunktionen benötigen auch immer die Angabe Deiner Quarzfrequenz.
Peter
Peter Dannegger schrieb:
> Das scheint ja auch kein einzelner IC zu sein, sondern ne Baugruppe.> Zu große Pullups schaden ja nichts, einfach noch welche parallel> schalten. I2C-ICs können mindestens 3mA ab.
Genau, eine Baugruppe ;-)
Die Pullups parallel schalten wäre wohl eine Idee - das probier ich mal
aus.
> Ich kenne das I2C der PIC nicht, nur das der 8051 (NXP, Atmel), daß auch> für die AVR und LPC übernommen wurde. Es ist schon etwas tricky (viele> Seiten im Datenblatt).
Tricky ists wohl - ich werde es an anderer Stelle noch einmal mit
eigenen Routinen versuchen!!!
> Gibts denn keine Beschreibung zu dem "#use i2c"?> Wizzardfunktionen benötigen auch immer die Angabe Deiner Quarzfrequenz.
In der Hilfe zum Compiler gibt es nur wenig Infos zum I2C...
Die Quarzfrequenz habe ich angegeben.
Gruß,
Tobias
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.