Difference between revisions of "I2C (Deutsch)"
m (→TSL2561 Licht/Digital-Wandler) |
|||
(12 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{i18n|I2C}} | {{i18n|I2C}} | ||
+ | |||
+ | |||
+ | {{Module | ||
+ | |NAME=I2C | ||
+ | |MENUCONFIG={{I/O}}-{{I2C Master}} | ||
+ | |STATUS={{stable}} | ||
+ | |PINNING=no | ||
+ | |ECMD={{has_ecmd}} | ||
+ | |CONTROL6= - | ||
+ | |DEPENDS= - | ||
+ | |REQUIRES= CONFIG_EXPERIMENTAL | ||
+ | |CODE=[https://github.com/ethersex/ethersex/tree/master/hardware/i2c/master https://github.com/ethersex/ethersex/tree/master/hardware/i2c/master] | ||
+ | }} | ||
+ | |||
+ | |||
Der I2C-Bus (Inter Integrated Circuit) ist ein einfacher Zweidraht-Bus, der für die Kommunikation zwischen ICs innerhalb eines größeren Systems verwendet wird. Insbesondere bietet er sich an zur Kommunikation zwischen Microcontrollern und Peripheriegeräten. | Der I2C-Bus (Inter Integrated Circuit) ist ein einfacher Zweidraht-Bus, der für die Kommunikation zwischen ICs innerhalb eines größeren Systems verwendet wird. Insbesondere bietet er sich an zur Kommunikation zwischen Microcontrollern und Peripheriegeräten. | ||
Line 6: | Line 21: | ||
In der Atmel-Dokumentation wird I2C als TWI (Two Wire Interface) geführt. | In der Atmel-Dokumentation wird I2C als TWI (Two Wire Interface) geführt. | ||
+ | =Allgemeines= | ||
==Master Mode== | ==Master Mode== | ||
Line 17: | Line 33: | ||
==Slave Mode== | ==Slave Mode== | ||
− | * Kann per I2C auf die [[ECMD]] Schnittstelle zugegriffen werden. | + | * Kann per I2C auf die [[ECMD (Deutsch) | ECMD ]] Schnittstelle zugegriffen werden. |
* In menuconfig -> Protocols -> ECMD -> I2C aktivieren | * In menuconfig -> Protocols -> ECMD -> I2C aktivieren | ||
− | + | ||
+ | [[I2C/Slave Example (Deutsch) | Beispielimplementierung]] mit Ethersex (Slave) und einem zweiten AVR (Master). | ||
==Anschluss== | ==Anschluss== | ||
− | Die Leitungen SCL (Clock) und SDA (Data) liegen als "Alternate Function" auf I/O Leitungen der Controller. Beim ATmega32 sind dies PC0 (SCL) und PC1 (SDA). | + | Die Leitungen SCL (Clock) und SDA (Data) liegen als "Alternate Function" auf I/O Leitungen der Controller. Beim ATmega32/644/644p sind dies PC0 (SCL) und PC1 (SDA). |
− | == | + | ==Levelshifter 3,3V 5V== |
+ | Link: [[User:Djmaster#Levelshifter_3.3V_5V|Levelshifter 3,3V 5V]] | ||
− | + | =Etherrape= | |
− | + | Beim [[Etherrape_(Deutsch)|Etherrape]] ist der I2C-Bus auf einem separaten Steckverbinder herausgeführt. | |
− | Beim Pollin [[AVR-NET-IO]] liegen die Leitungen des Ports C auf J3, dem 25poligen SUB-D Steckverbinder. Dort lassen sich auch Versorgungsspannung und Masse für die angeschlossenen Slaves abgreifen: | + | =Pollin AVR-NET-IO= |
+ | |||
+ | Beim Pollin [[AVR-NET-IO_(Deutsch)|AVR-NET-IO]] liegen die Leitungen des Ports C auf J3, dem 25poligen SUB-D Steckverbinder. Dort lassen sich auch Versorgungsspannung und Masse für die angeschlossenen Slaves abgreifen: | ||
{|class=wikitable | {|class=wikitable | ||
Line 50: | Line 70: | ||
|} | |} | ||
− | + | =Konfiguration= | |
− | Die Leitungen sind fest vorgegeben, daher muss keine Konfiguration des Pinnings erfolgen. | + | Die Leitungen sind fest vorgegeben, daher muss <b>keine</b> Konfiguration des Pinnings erfolgen. |
− | Die Einstellungen für den Master-Mode finden sich unter | + | Die Einstellungen für den Master-Mode finden sich unter: |
+ | │ │ Load a Default Configuration ---> | ||
+ | │ │ General Setup ---> | ||
+ | │ │ Network ---> | ||
+ | │ │ I/O ---> | ||
+ | │ │ I2C ---> | ||
+ | │ │ [*] I2C master ---> | ||
+ | │ │ [*] I2C detection support | ||
− | + | = ECMD = | |
− | = I2C = | + | == I2C == |
Mittels "i2c detect" werden die gefundenen I2C Adressen aufgelistet | Mittels "i2c detect" werden die gefundenen I2C Adressen aufgelistet | ||
Line 79: | Line 106: | ||
wird ein Word von der Adresse 170 des Chips mit der Adresse 72 gelesen. Damit wird die Temperatur des DS1631 ausgelesen. Die Umrechung muß man dann per Hand durchführen. | wird ein Word von der Adresse 170 des Chips mit der Adresse 72 gelesen. Damit wird die Temperatur des DS1631 ausgelesen. Die Umrechung muß man dann per Hand durchführen. | ||
− | = | + | =I2C Sensoren= |
− | |||
− | |||
− | |||
− | |||
− | |||
− | = DS1631 = | + | == DS1631 == |
Ein DS1631 Temperatursensor muß nach dem Einschalten der Stromversorgung erst aktiviert werden. Der erste DS1631 mit der Adresse 0x48 hat im Befehl die Adresse 0. Mit dem folgenden Befehl wird die Temperatur-Konvertierung eingeschaltet: | Ein DS1631 Temperatursensor muß nach dem Einschalten der Stromversorgung erst aktiviert werden. Der erste DS1631 mit der Adresse 0x48 hat im Befehl die Adresse 0. Mit dem folgenden Befehl wird die Temperatur-Konvertierung eingeschaltet: | ||
Line 99: | Line 121: | ||
Wahrscheinlich können auch DS1621-Sensoren ausgelesen werden, das wurde aber noch nicht getestet! | Wahrscheinlich können auch DS1621-Sensoren ausgelesen werden, das wurde aber noch nicht getestet! | ||
− | = PCF8574 = | + | |
+ | |||
+ | == LM75 == | ||
+ | |||
+ | Um den LM75 Temperatursensor auszulesen (Basisadresse 0x48) muss die IC Adresse angegeben werden. In diesem Falle ist das "0" weil die IC Adresse a0 bis a2 auf Masse gesetzt werden. -> binär 000 = 0 | ||
+ | |||
+ | lm75 0 | ||
+ | 21.5 | ||
+ | |||
+ | |||
+ | |||
+ | == PCF8574 == | ||
Für die Porterweiterung gilt das Schema "pcf8574x read adresse chip" wobei die adresse 0-7 sein kann, und chip "0" oder "1", je nachdem ob man den pcf8574 oder den pcf8574A benutzt. | Für die Porterweiterung gilt das Schema "pcf8574x read adresse chip" wobei die adresse 0-7 sein kann, und chip "0" oder "1", je nachdem ob man den pcf8574 oder den pcf8574A benutzt. | ||
Line 109: | Line 142: | ||
d.h. die ersten 4 Ausgänge werden auf "1" die anderen 4 Ausgänge auf "0" gesetzt. | d.h. die ersten 4 Ausgänge werden auf "1" die anderen 4 Ausgänge auf "0" gesetzt. | ||
pcf8574x set 5 0 F0 | pcf8574x set 5 0 F0 | ||
+ | |||
+ | |||
+ | |||
+ | == TSL2561 Licht/Digital-Wandler == | ||
+ | (tested commit e927b0e) | ||
+ | |||
+ | I/O --> I2C--> [*]I2C master --> [*] I2C detection support | ||
+ | [*] I2C TSL2561 light sensor | ||
+ | |||
+ | |||
+ | <b>Abfrage via http ecmd:</b> | ||
+ | /ecmd?i2c detect // detected at: 0x39 (57), funktioniert und wird erkannt. | ||
+ | /ecmd?tsl2561 raw // parse error, funktioniert derzeit nicht?. 24.01.2016 | ||
+ | /ecmd?tsl2561 lux // parse error, funktioniert derzeit nicht?. 24.01.2016 | ||
+ | /ecmd?tsl2561 lux 0 // -1 | ||
[[Category:Ethersex]] | [[Category:Ethersex]] |
Latest revision as of 17:28, 14 September 2017
I2C | |
---|---|
Status | Stable
|
menuconfig | I/O-I2C Master Support |
Pinning | no |
Ecmd | yes |
Control6 | - |
Depends on | - |
Requires | CONFIG_EXPERIMENTAL |
Code | https://github.com/ethersex/ethersex/tree/master/hardware/i2c/master |
Der I2C-Bus (Inter Integrated Circuit) ist ein einfacher Zweidraht-Bus, der für die Kommunikation zwischen ICs innerhalb eines größeren Systems verwendet wird. Insbesondere bietet er sich an zur Kommunikation zwischen Microcontrollern und Peripheriegeräten.
Das Ethersex-System kann sowohl als Master als auch als Slave in einem I2C-Bus arbeiten.
In der Atmel-Dokumentation wird I2C als TWI (Two Wire Interface) geführt.
Contents
Allgemeines
Master Mode
Im Master-Mode kann das Ethersex-System auf angeschlossene I2C-Slaves zugreifen. Unterstützt werden im Moment:
- 24cXX EEPROMs (Als Storage Backend für das Virtuelle Dateisystem)
- LM75 Temperatursensoren
- PCA9531 8 bit LED Dimmer
- PCF8574x Port Extension
Slave Mode
- Kann per I2C auf die ECMD Schnittstelle zugegriffen werden.
- In menuconfig -> Protocols -> ECMD -> I2C aktivieren
Beispielimplementierung mit Ethersex (Slave) und einem zweiten AVR (Master).
Anschluss
Die Leitungen SCL (Clock) und SDA (Data) liegen als "Alternate Function" auf I/O Leitungen der Controller. Beim ATmega32/644/644p sind dies PC0 (SCL) und PC1 (SDA).
Levelshifter 3,3V 5V
Link: Levelshifter 3,3V 5V
Etherrape
Beim Etherrape ist der I2C-Bus auf einem separaten Steckverbinder herausgeführt.
Pollin AVR-NET-IO
Beim Pollin AVR-NET-IO liegen die Leitungen des Ports C auf J3, dem 25poligen SUB-D Steckverbinder. Dort lassen sich auch Versorgungsspannung und Masse für die angeschlossenen Slaves abgreifen:
Pin | Funktion |
---|---|
2 | PC0 (SCL) |
3 | PC1 (SDA) |
15 | 5V |
18 | GND |
Konfiguration
Die Leitungen sind fest vorgegeben, daher muss keine Konfiguration des Pinnings erfolgen.
Die Einstellungen für den Master-Mode finden sich unter:
│ │ Load a Default Configuration ---> │ │ General Setup ---> │ │ Network ---> │ │ I/O ---> │ │ I2C ---> │ │ [*] I2C master ---> │ │ [*] I2C detection support
ECMD
I2C
Mittels "i2c detect" werden die gefundenen I2C Adressen aufgelistet
i2c detect detected at: 0x20 (32) detected at: 0x48 (72) detected at: 0x60 (96)
Mit den allgemeinen I2C-Kommandos können alle I2C-Chips angesprochen werden. Mit dem Befehl
i2c wbb 72 81
wird z. B. die Temperatur-Konvertierung auf einem DS1631 gestartet. Geschrieben wird ein Byte mit dem Wert 81 an den Chip mit der Adresse 72.
Mit dem Befehl
i2c rwd 72 170
wird ein Word von der Adresse 170 des Chips mit der Adresse 72 gelesen. Damit wird die Temperatur des DS1631 ausgelesen. Die Umrechung muß man dann per Hand durchführen.
I2C Sensoren
DS1631
Ein DS1631 Temperatursensor muß nach dem Einschalten der Stromversorgung erst aktiviert werden. Der erste DS1631 mit der Adresse 0x48 hat im Befehl die Adresse 0. Mit dem folgenden Befehl wird die Temperatur-Konvertierung eingeschaltet:
ds1631 convert 0 1
Jetzt kann die Temperatur ausgelesen werden. Die Genauigkeit beträgt immer die vollen 12bits.
ds1631 temp 0 22.875
Wahrscheinlich können auch DS1621-Sensoren ausgelesen werden, das wurde aber noch nicht getestet!
LM75
Um den LM75 Temperatursensor auszulesen (Basisadresse 0x48) muss die IC Adresse angegeben werden. In diesem Falle ist das "0" weil die IC Adresse a0 bis a2 auf Masse gesetzt werden. -> binär 000 = 0
lm75 0 21.5
PCF8574
Für die Porterweiterung gilt das Schema "pcf8574x read adresse chip" wobei die adresse 0-7 sein kann, und chip "0" oder "1", je nachdem ob man den pcf8574 oder den pcf8574A benutzt.
pcf8574x read 0 0 FFFF
Schalten von Ausgängen mit Wert 0xF0 am PCF8574 mit Adresse 5 (Das bedeutet das a0=1 und a2=1 ist, ergo 101) d.h. die ersten 4 Ausgänge werden auf "1" die anderen 4 Ausgänge auf "0" gesetzt.
pcf8574x set 5 0 F0
TSL2561 Licht/Digital-Wandler
(tested commit e927b0e)
I/O --> I2C--> [*]I2C master --> [*] I2C detection support [*] I2C TSL2561 light sensor
Abfrage via http ecmd:
/ecmd?i2c detect // detected at: 0x39 (57), funktioniert und wird erkannt. /ecmd?tsl2561 raw // parse error, funktioniert derzeit nicht?. 24.01.2016 /ecmd?tsl2561 lux // parse error, funktioniert derzeit nicht?. 24.01.2016 /ecmd?tsl2561 lux 0 // -1