Aus RN-Wissen.de
Version vom 25. Dezember 2005, 17:19 Uhr von Linux 80 (Diskussion | Beiträge) (Bit Rate Generator)

Wechseln zu: Navigation, Suche
LiFePO4 Speicher Test

Two-wire Serial Interface

Bezeichnung von Atmel für den auf vielen AVR's vorhandenen I2C.

In diesem Beitrag soll nur auf besonderheiten der Atmel Microcontroller eingegangen werden, einzeilheiten zu I2C finden sich in den entsprechenden Beiträgen.

Merkmale

  • Master- und Slavemodus
  • Multimaster
  • 7-Bit Adressierung (als Master möglicherweise auch 10-Bit Adressierung)
  • Übertragungsrate von bis zu 400kBit/s


TWI benutzen

Master

Bit Rate Generator

Zur Übertragung gibt es die Bitraten Standard, mit bis zu 100kBit/s, und FastMode, mit bis zu 400kBit/s. Der Master muss immer den Takt erzeugen, der bei bedarf auf der Leitung SCL angelegt wird. Der SCL-Takt ist beim AVR abhängig von der CPU Frequenz, deshalb ist es von Vorteil (im gegensatz zu RS232), wenn man Frequenzen mit geraden Werten verwendet, zB. 8.0 MHz, da sich der Wert besser teilen lässt um auf 100kHz bzw. 400kHz zu kommen.

Im TWI-Modul des AVR gibt es zwei stellen, an denen man die Teilung der Frequenz einstellen kann.

  • die Prescaler Bits (TWPS), diese 2 Bits befinden sich im TWI Status Register (TWSR)
  • für die genauere Einstellung das TWI Bit Rate Register (TWBR)

Formel zur Berechnung der SCL-Frequenz:

[math]\mathrm{SCL{-}Frequenz = \frac{CPU{-}Frequenz}{16\ +\ 2\ ( TWBR )\ 4 ^ { TWPS } } }[/math]

Da ein AVR zur Zeit max. mit 20MHz getaktet werden kann, ist es nicht nötig den Prescaler zu benutzen, bzw. er wird auf den Teiler 1 gestellt, was keiner Teilung entspricht. Mit diesem Teiler können alle CPU-Frequenzen und TWI-Takte abgedeckt werden.

Mögliche Prescaler Werte:

BitWert Teiler
00 1
01 4
10 16
11 64

Die Werte von TWBR gehen von theoretisch 0 bis 255. Laut Atmel soll der Wert aber mind. 10 Betragen, da es sonst zu Problemen bei der Übertragung kommen kann.

Beispiel Berechnung

Es soll eine SCL-Frequenz von 100kHz erzeugt werden, die CPU-Frequenz beträgt 8.0MHz, der Teiler (Prescaler) ist, wie oben erwähnt, auf 1 (TWPS = 0).

Laut der Formel ergibt das dann:

100kHz = 8.0MHz / (16 + 2 * x * 4^0 )    / 1 fällt weg
100kHz = 8.0MHz / (16 + 2 * x )          / *(16 + 2 * x )
100kHz * (16 + 2 * x ) = 8000kHz         / kürzen : 100
16 + 2 * x  = 80                         / -16
2 * x  = 64                              / :2
x = 32

Ergebnis: Der Wert für TWBR muss 32 sein, damit die SCL-Frequenz 100kHz, bei 8.0MHz CPU-Frequenz, ergibt.

Es Ergibt sich somit Folgende Formel zum Berechnen von TWBR:

[math]\mathrm{TWBR = \frac{ \frac {CPU{-}Frequenz}{SCL{-}Frequenz} - 16}{2}}[/math]

Quellen

Atmel Datenblätter

Siehe auch


LiFePO4 Speicher Test