foi construida com o intuito de trabalhar com perifericos I2C com tensoes de 3.3V ou 5V de forma simples e direta. Vale lembrar que os microcontroladores PIC quando alimentados com uma tensao de 5V, entendem como nivel logico alto uma tensao superior a 2V, portanto podemos conectar os pinos TX e RX do acelerometro nos pinos do microcontrolador que os niveis logicos serao entendidos. Comunicacao I2C A comunicacao foi estabelecida pelo protocolo I2C na frequencia de 100Khz a 3.3V sendo respeitado a tabela de tempos conforme datasheet. Para efetuarmos as leituras referentes aos eixos, primeiro precisamos configurar o acelerometro para informar como desejamos receber os dados, para isto devemos seguir a seguinte sequencia. # Inicializar o barramento # Informar o comando de escrita para o LIS3LV02DL # Escrever o conteudo do registrador CTRL_REG1 (Ja vem indexado) # Escrever o conteudo do registrador CTRL_REG2 Apos este procedimento podemos efetuar as leituras propriamente ditas seguindo a sequencia abaixo. # Inicializar o barramento # Informar o comando de escrita para o LIS3LV02DL # Informar qual o endereco desejamos ler inicialmente # Reinicializar o barramento novamente # Informar o comando de leitura para o LIS3LV02DL # Efetuar a leitura de forma sequencialmente dos eixos Por fim, como a leitura do acelerometro se da em 12 bits, precisamos concatenar esses dois bytes para obtermos a informacao desejada para enfim apresentarmos os resultados no display LCD e via porta serial. Alguns registradores internos ao Acelerometro WHO_AM_I Endereco padrao deste CI no barramento I2C... CTRL_REG1Configuracoes para habilitacao de leitura dos eixos, self test... CTRL_REG2Selecao de escala, interrupcoes... CTRL_REG3Ajuste de clock e filtros passa alta... Software O software para este exemplo mede a aceleracao dos 3 eixos em 12 bits apresentando os valores lidos no display LCD, e envia os dados periodicamente via porta serial para o terminal serial do PC a 9600bps. /****************************************************************************** JL Audio Manutencao Eletronica Data: 23/04/2011Autor: Jean CarlosProjeto: MEMS ST - Acelerometro ( LIS3LV02DL )Microprocessador: PIC18F4550Clock do processador: 8MHzEstacao de desenvolvimento: PK2Lab V1.1Versao atual: V 1.0Descricao: Este projeto demonstra o uso de um MEMS(Sistema Micro eletromecanico) da ST, modelo LIS3LV02DL que se trata de um acelerometro digital de 3 eixos (2G e 6G) *******************************************************************************///Variaveis Globais unsigned char XL,XH,YL,YH,ZL,ZH;unsigned int X,Y,J;char txt[7]; //****************************************************************//Rotinas Auxiliares void Le_Acelerometro() { I2C_Start(); I2C_Wr(0x3A); // Endereco do acelerometro para escrita. I2C_Wr(0xA8); // Endereco do registrador Eixo X Lower (0x28), ainda foi setado o setimo bit do registrador para indicar a indexacao automatica do endereco. I2C_Repeated_Start(); I2C_Wr(0x3B); // Endereco do acelerometro para leitura. XL = I2C_Rd(1); XH = I2C_Rd(1); YL = I2C_Rd(1); YH = I2C_Rd(1); // Carrega as informacoes referentes aos eixos ZL = I2C_Rd(1); ZH = I2C_Rd(0); I2C_Stop(); } void Envia_Serial() { Usart_Write(X); Usart_Write(Y); Usart_Write(J); } //****************************************************************//Rotina Principal void main() // Inicio do programa principal{TRISA = 0b00000000;PORTA = 0b00000000;TRISB = 0b00000000;PORTB = 0b00000000;TRISC = 0b00000000;PORTC = 0b00000000;TRISD = 0b00000000;PORTD = 0b00000000;TRISE = 0b00000000;PORTE = 0b00000000;ADCON1 = 0X0F; // Entradas digitais. Lcd_Config(&PORTB,2,3,1,7,6,5,4); // Configuracao PK2Lab V.1.1Lcd_Cmd(Lcd_Cursor_Off);Lcd_Cmd(Lcd_Clear);Lcd_Out(1,1,"*** PK2Lab ***");Lcd_Out(2,1," Acelerometro ");Delay_ms(3000);Lcd_Cmd(Lcd_Clear);Lcd_Out(1,1,"X:");Lcd_Out(2,1,"Y:");Lcd_Out(2,9,"Z:"); Usart_Init(9600); // Inicia comunicacao RS232I2C_Init(100000); // Inicia comunicacao I2C I2C_Start(); // Inicia comunicacao I2C I2C_Wr(0x3A); // Endereco do LIS3LV02DL para escrita I2C_Wr(0xA0); //