Forum: Mikrocontroller und Digitale Elektronik MSP430 Clock für I2C verringern


von Klaus R. (klara)


Lesenswert?

Hallo,
meine jetzigen Einstellungen:

  BCSCTL1 = CALBC1_1MHZ;               // Set DCO
  BCSCTL2 = DIVS_0;                    // SMCLK-Teiler / 0=1 1=2 2=4 3=8
  DCOCTL = CALDCO_1MHZ;
 //USICKCTL = USIDIV_2+USISSEL_2+USICKPL; // Setup USI clocks: SCL = 
SMCLK/8 (~125 kHz)
  USICKCTL = USIDIV_7+USISSEL_2+USICKPL;   // Setup USI clocks: SCL = 
SMCLK/128 (~7,8 KHz)

Ich kann mit der Clock für den I2C-Bus bis zu 125 KHz hochgehen, mir 
genügen aber auch zur Zeit 7,8 KHz. Dies erhöht die Reichweite.

Jetzt möchte ich noch weiter heruntergehen können. Dazu müsste ich 
vermutlich CALBC1_1MHZ und CALDCO_1MHZ weiter heruntersetzen. In der 
Doku gibt es unter "Typical DCOx Range and RSELx Steps" ein schönes 
Diagramm dazu. Mit RSEL=0 und DCO=0 müsste ich demnach auf unter 100 KHz 
fDCO kommen. Mit RSEL=0 und DCO=7 auf ca. 300 KHz.

Das hiesse, ich könnte mit dem I2C-Takt nochmals um den Faktor 10 
herunter kommen. Kann das jemand bestätigen?

Gruss Klaus.

von Stefan (Gast)


Lesenswert?

Mir scheint, Du hast das Basic Clock Modul des MSP noch nicht ganz 
überblickt?!

1.) Sicher, wenn Du den DCOCLK verringerst, dann verringert sich auch 
der I2C-CLK, denn der wird ja bei Dir vom DCO versorgt.

2.) Die DCO-Frequenz variiert teilweise erheblich (Exemplarstreuung, 
Tempdrift,...). Deshalb gibt es ja auch die Kalibrierwerte im 
INFO-Flash!
Eine genaue Angabe einer DCO-Frequenz bei bestimmten DCO- und 
RSEL-Werten ist so nicht möglich!

3.) Aber wenn Du etwa um den Faktor 10 langsamer werden willst, reicht 
es u.U auch den SMCLK-Teiler (DIVS) von 1 auf 8 zu ändern?!

Ich weiß jetzt allerdings nicht genau, ob I2C (bzw. Dein I2C-Gegenüber) 
eine untere Grenze für den CLK hat!

von Klaus R. (klara)


Lesenswert?

Hallo Stefan,
>>>Mir scheint, Du hast das Basic Clock Modul des MSP noch nicht ganz überblickt?!
Das hast Du ganz recht. Die Doku von TI gibt da teilweise weniger her.

>>> Deshalb gibt es ja auch die Kalibrierwerte im INFO-Flash!
wo finde ich dies?

Für meine Zwecke genügt eine ungefähre Angabe. Ich möchte nur bei 
Aussetzern eben die Taktfreuenz verringern können um die Reichweite zu 
erhöhen.

Wichtig ist nur das eigentiche Timing. Der Takt, das Timing, nuss sehr 
exakt sein. Zumindest beim DS1631.

Gruss Klaus.

von Stefan (Gast)


Lesenswert?

>>Mir scheint, Du hast das Basic Clock Modul des MSP noch nicht ganz überblickt?!
>Das hast Du ganz recht. Die Doku von TI gibt da teilweise weniger her.
Doch. Im Family User Guide (bei Dir vermutlich F2xxx) ist das alles sehr 
gut beschrieben.

>> Deshalb gibt es ja auch die Kalibrierwerte im INFO-Flash!
>wo finde ich dies?
Du verwendest sie schon:
1
BCSCTL1 = CALBC1_1MHZ;               // Set DCO
2
DCOCTL = CALDCO_1MHZ;
Allerdings ist 1MHz -so aus'm Kopf- glaub ich die niedrigste 
Taktfrequenz, die kalibriert vorliegt.

>Für meine Zwecke genügt eine ungefähre Angabe. Ich möchte nur bei
>Aussetzern eben die Taktfreuenz verringern können um die Reichweite zu
>erhöhen.
Dann ändere eben wie schon vorgeschlagen, den SMCLK-Teiler (DIVS). Ein 
gefummel am DCO-Clock würde schließlich auch die CPU-Clock (MCLK) 
ändern, was dann wieder zu anderen negativen "Nebeneffekten" führen 
könnte!

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
Noch kein Account? Hier anmelden.