O I²C Expander permite com um interface I²C controlar até 9 servos, 3 entradas analógias e 2 entradas/saidas digitais. Este IC é útil para sistemas em que o uso de muitos pinos do microcontrolador não está disponível. Como usa o protocolo I²C apenas usa 2 pinos de dados do microcontrolador (SDA e SCL). O I²C Expander é um dispositivo slave logo terão que existir 2 resistências de pull-up no bus I²C.
| |
| Analog Input, Vref-> VDD,GND |
| Digital0 only Input | Digital1 I/0 |
| |
| |
| |
| Positive Supply (1.8V to 5V) |
| |
| |
| Muda o endereço actual do slave I2C |
| Comando para devolver ADC |
| Actualiza valores do PWM de TODOS servos |
| Actualiza valor do PWM de UM servo |
| Activa ou desactiva o PWM dos servos |
| Comando para devolver pinos digitais |
| Faz SET dos valores em portas digitais |
| Modifica input/output nos 2 pinos digitais |
| Devolve versão do firmware e data |
Exemplos
Funções:
writeI2C(slave_adress, numero_bytes, dataOUT[]);
readI2C(slave_adress, numero_bytes, dataIN[]);
Muda o endereço actual do slave I2C (0x41)
writeI2C(0xA0, 2, 0x41A2 );
//troca o endereço actual 0xA0 pelo endereço 0xA2
Comando para devolver ADC (0x42)
writeI2C(0xA0, 1, 0x42 ); //envia comando para devolver ADC
readI2C(0xA0, 3, ADCvalues); //guarda em ADCvalues os valores dos 3 adc
Actualiza valores do PWM de TODOS servos (0x43)
writeI2C(0xA0, 9, 0x435566FF7F7F7F7F7F);
//carrega valores de PWM, pwm0 = 0x55, pwm1 = 0x66, etc…
Actualiza valor do PWM de UM servo (0x44)
writeI2C(0xA0, 3, 0x4405FF); //carrega o pwm5 com 0xFF
Activa ou desactiva o PWM dos servos (0x45)
writeI2C(0xA0, 2, 0x45FF); //activa todos os pwm (0xFF), 0x00 desactiva todos
//0x01 activa o pwm0
Comando para devolver pinos digitais (0x46)
writeI2C(0xA0, 1, 0x46 ); //envia comando para devolver DIGITAIS
readI2C(0xA0, 1, digitaisVALUE); //cada bit de digitaisVALUE corresponde e um pino digital
Faz SET dos valores em portas digitais (0x47)
writeI2C(0xA0, 2, 0x47FF);
//activa todos os pinos digitais (0xFF), 0x00 desactiva todos
Modifica input/output nos 2 pinos digitais digitais (0x48)
writeI2C(0xA0, 2, 0x48FF); // (0xFF) tudo input, 0x00 tudo output
//0x01 põe o pino0 como input e o resto out
Devolve versão do firmware e data (0x56)
writeI2C(0xA0, 1, 0x56 ); //envia comando para devolver versão
readI2C(0xA0, 21, stringVERSAO); //guarda em stringVERSAO a versão
//tem sempre 21chars de tamanho
Funcionamento
6 servos a correr em simultâneo. Refrescados a 20ms. 5 na posição central (1.5ms) e um na posição final (2.1ms)
Especificações
Resolução ADC - 8bits
Resolução Servos - 8bits, aprox 0.71º
Alimentação - 1.8V a 5V