Inhaltsverzeichnis
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