mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C zu langsam bei CCS Compiler / Flankensteilheit - FAST-MODE


Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Roger Steiner (edge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.