I2CPort / I2CClk Frequenz Problem?

  • 1
  • 2
  • 3
  • 4
  • Page 1 of 4
mc-electronic
Benutzer
Avatar
Gender: n/a
Location: Sauerland NRW
Posts: 372
Registered: 03 / 2008
Subject:

I2CPort / I2CClk Frequenz Problem?

 · 
Posted: 05.01.2011 - 18:29  ·  #1
Hallo AVRco's,

in meinem Projekt laufen diverse I2C Bausteine über die I2CPort Implementierung von AVRco. Als ich das Ganze entworfen und getestet habe, lief alles auf 400 kBit/sec Busgeschwindigkeit. Ich habe jetzt aber das Problem, daß der Bus viel zu langsam läuft. Bei 400 kBit/sec sollte das CLK-Signal des ATMEGA Masters eigentlich 400 kHz haben, d.h. 2,5 µSec Periodendauer. Hat es aber nicht mehr, mein Oszi zeigt 17,5 µSec (= 57 kBit/sec) an, also um den Faktor 7 zu langsam. Entsprechend verlängern sich die Wartezeiten für die Datenübertragung. Das hat mal funktioniert, aber jetzt sind die Probleme da.

Die Fuses meiner Systeme (ATMega 2561) sind OK, die Taktrate 14,7 MHz, Timer, UART alles normal. Nur das Soft-TWI nicht.

Anbei mein Header mit der Berechnung zu I2CClk:

Code
Define
  ProcClock       = 14745600;       {Hertz}
  SysTick         = 10;             {msec}

  StackSize       = $0100, iData;
  FrameSize       = $0880, iData;

  RTClock         = iData, DateTime;{Time, DateTime}
  RTCsource       = SysTick;
  DCFclock        = iData;
  DCFport         = PinE, 7, positive; {Port, Pin#, Polarity}                   // Set this to the Fast Input that can be the DCF77 Input (normally PE7)

  I2Cport         = PortD;  // use port PortD for the Soft-I2C
  I2Cclk          = 0, 36;   // Use PortD.0 for the SCL. The second number gives the # of µP Cycles for one Clock:
                           // With 14.745.600 Hz one cycle is ~ 67,8 nSec.
                           // So:  36 x 67,8 nSec =  2,4408 µSec = 409 kHz   (for 400 kBit/Sec)
                           // So: 148 x 67,8 nSec = 10,0344 µSec = 100 kHz   (for 100 kBit/Sec)
  I2Cdat          = 1;                                                    // Use PortD.1 for the SDA

  Serport         = 230400, Stop2; //, TimeOut; //921600 460800 230400 115200


Mit dem Wert von 36 Prozessor-Taktzyklen kommt die zu niedrige Rate von 57 kBit/sec (17,5 µsec) raus, erst wenn ich einen Wert von I2Cclk 0, 1 setze, kommt annähernd 400 kBit/sec raus.

Hab ich was falsch oder ist im AVRco was NIO?

Gruß, Michael
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 70
Posts: 250
Registered: 11 / 2009
Subject:

Re: I2CPort / I2CClk Frequenz Problem?

 · 
Posted: 06.01.2011 - 09:56  ·  #2
hallo michael,
probier mal aus, testweise andere sachen am portD wegzulassen. ich bin da auch schon ausgebremst worden. aber lässt sich das problem nicht einfach lösen durch nutzung des hardware-twi, die portpins passen ja dafür.

golf
mc-electronic
Benutzer
Avatar
Gender: n/a
Location: Sauerland NRW
Posts: 372
Registered: 03 / 2008
Subject:

Re: I2CPort / I2CClk Frequenz Problem?

 · 
Posted: 06.01.2011 - 10:11  ·  #3
Hallo Golf,

ja, ursprünglich hatte ich die Bausteine über den Hardware TWI betrieben, bis der LM76 Ärger machte. Dazu gibt es hier einen anderen Thread, in dem Rolf Hofmann mir geraten hat, das Soft TWI zu nehmen. Damit war dann erst mal alles OK (das Problem liegt wohl in der nicht korrekten Implementierung des ATMeag Hardware TWI). Zurück zum HW TWI geht also nicht.

Ich habe den Soft-TWI, als ich ihn einsetzte, auch von den Timings her am Oszi vermessen. Da war noch alles OK. Ist vielleicht 3/4 Jahr her. Jetzt hatte ich andere Timing-Probleme, über die ich das I2C Interface noch einmal vermessen habe - und jetzt stimmt die Clock-Rate eben nicht mehr, um den Faktor 7.

Ich vermute, daß das im Zusammenhang mit der XMega TWI Implementierung steht, es sollte ja auch funktionieren. Aber ausser messen und testen kann ich ja nicht viel machen...

Ich verwende am Port D sonst nichts.

Gruß, Michael
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: I2CPort / I2CClk Frequenz Problem?

 · 
Posted: 10.01.2011 - 14:45  ·  #4
Hallo Michael,

um code zu sparen und wegen dem XMega wurde das I2C Delay von x NOPs auf sDelay(x) umgestellt. Da das Sdelay aber ca. 3..4 CPU Zyklen pro Durchlauf braucht, hat sich das Timing gegenüber früher bei gleichen Werten erheblich verlängert. Mit einem Wert von 8..10 sollte hier 400kBit/sec wieder erreicht werden.

rolf
mc-electronic
Benutzer
Avatar
Gender: n/a
Location: Sauerland NRW
Posts: 372
Registered: 03 / 2008
Subject:

Re: I2CPort / I2CClk Frequenz Problem?

 · 
Posted: 10.01.2011 - 14:57  ·  #5
Hallo Rolf,

ah, OK. Ursache ist damit klar. Bezüglich der 8..10 muß ich widersprechen, es ist bei mir der Faktor 7: ich erreiche maximal mit einem Wert von 1 eine Clock-Rate von 330 kHz. Mehr ist nicht drin (0 geht nicht..), und mir fehlen jetzt 20% Geschwindigkeit beim "Sampling" vom AD Wandler. Ich habe 14,7 MHz CPU Takt, da dürften andere User mit niedrigeren Takten noch mehr Probleme haben.

Das ist nicht so klasse, zumal ja der Übergang vom Hardware TWI auf die AVRco Lösung Timing-Probleme (LM76) beseitigen sollte.

Können Sie da noch etwas retten - und auch die Doku anpassen?

Gruß, Michael
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: I2CPort / I2CClk Frequenz Problem?

 · 
Posted: 10.01.2011 - 16:11  ·  #6
Hallo Michael,

die Manuals sind jetzt angepasst.
Bei 14.7MHz und einem Delay Wert von 1 komme ich über 500kbit/sec TWI speed.

rolf
mc-electronic
Benutzer
Avatar
Gender: n/a
Location: Sauerland NRW
Posts: 372
Registered: 03 / 2008
Subject:

Re: I2CPort / I2CClk Frequenz Problem?

 · 
Posted: 10.01.2011 - 17:05  ·  #7
Hallo Rolf,

mein Oszi zeigt 3 µsec Abstand von steigender Flanke zu steigender Flanke auf dem SCL Signal. Bei 14,7 MHz µP und I2Cclk = 0, 1; Also von 500 kHz weit entfernt, 400 ist auch nicht einstellbar.
Ich habe das auf 2 Hardware-Systemen nachgemessen, mit und ohne Merlin Optimizer compiliert. Das Ergebnis ist das gleiche. Die Zeitbasis des Oszi habe ich auch überprüft.

Das ist in der Hardware definitiv so, ich sehe es auch in der Gesamt-Sampling Rate.

Haben Sie das auf Hardware-Basis nachvollziehen können?

Michael
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: I2CPort / I2CClk Frequenz Problem?

 · 
Posted: 10.01.2011 - 18:15  ·  #8
Hallo Michael,

ich habe das im SIM getestet. War für mich ok. Vielleicht funkt da das MultiTask dazwischen?

rolf
  • 1
  • 2
  • 3
  • 4
  • Page 1 of 4
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   141   155 · Page-Gen-Time: 0.024272s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI