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

Wechseln zu: Navigation, Suche
Rasenmaehroboter Test

Two-wire Serial Interface

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

In diesem Artikel soll nur auf Besonderheiten der Atmel Microcontroller eingegangen werden, Einzeilheiten zu I2C finden sich in den entsprechenden Artikeln.

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]

Kommt ein Wert kleiner 10 heraus, sollte eine höhere CPU-Frequenz gewählt werden. Wird eine krumme CPU-Frequenz verwendet was kein Ganzzahliges Ergebnis zur folge hat, kann man mit der 1. Formel überprüfen ob der Wert auf- oder Abgerundet wird. Auf der sicheren Seite ist man, wenn der Wert aufgerundet wird, das entspricht einer grösseren Teilung, also eine geringfügig kleinere Bitrate und liegt deshalb im Standard.

Quellen

Atmel Datenblätter

Siehe auch


LiFePO4 Speicher Test