quinta-feira, 6 de janeiro de 2011

I²C Expander

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.


Pin Name
Description
Analog0,1,2
Analog Input, Vref-> VDD,GND
Digital0,1
Digital0 only Input | Digital1 I/0
PWM0,1,2,3,4,5,6,7
PWM servo Output
SDA
I2C Data Input/Output
SCL
I2C Clock Input
VDD
Positive Supply (1.8V to 5V)
GND
Ground




COMANDOS

Comando
Descrição
0x41 –‘A’
Muda o endereço actual do slave I2C
0x42 –‘B’
Comando para devolver ADC
0x43 –‘C’
Actualiza valores do PWM de TODOS servos
0x44 –‘D’
Actualiza valor do PWM de UM servo
0x45 –‘E’
Activa ou desactiva o PWM dos servos
0x46 –‘F’
Comando para devolver pinos digitais
0x47 –‘G’
Faz SET dos valores em portas digitais
0x48 –‘H’
Modifica input/output nos 2 pinos digitais
0x56 –‘V’
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

Download Indisponível

Sem comentários:

Enviar um comentário