HMC6983
A documentação da bússola em si não é difícil encontrar. O integrado usado é o HMC5983, cujo datasheet pode ser baixado do site do fabricante. De forma resumida:
- Possui três sensores magnetoresistivos, que são medidos utilizando um ADC de 12 bits
- Suporta interfaces seriais I2C e SPI
- Requer alimentação entre 2,16 e 3,6 V
- Possui um sensor de temperatura interno e compensa automaticamente as medições
Internamente o HMC5983 possui 15 registradores, sendo 2 para configuração, 1 para seleção do modo de operação, 1 de status, 3 de identificação do chip e 4 pares para ler os três eixos e a temperatura:
O acesso aos registradores usa um ponteiro interno.
Comunicação I2C
Lembrando, a comunicação I2C utiliza dois sinais, dado (bidirecional) e o clock (gerado pelo mestre). Portanto é necessário estabelecer a direção (leitura ou escrita) dos bytes transferidos.
A comunicação I2C deve sempre começar com um byte com o endereço do dispositivo (0x1E) e a indicação de leitura ou escrita.
Na escrita (primeiro byte é 0x3C), o byte seguinte será um endereço de registrador, que será salvo no ponteiro. Os bytes seguintes, se presentes, serão escritos no registrador endereçado pelo ponteiro, a cada escrita o ponteiro é incrementado. Se nenhum byte for enviado após o endereço do registrador, o efeito é apenas carregar o ponteiro.
Na leitura (primeiro byte é 0x3D) são enviados o byte apontado pelo ponteiro; a cada byte lido o ponteiro é incrementado.
Confuso? Vamos ver alguns exemplos ([start] e [stop] são as sinalizações correspondentes no I2C):
- [start] 0x3C 0x00 0x70 0xA0 [stop]: escreve 0x70 no registrador CRA (0x00) e 0xA0 no registrador CRB (0x01).
- [start] 0x3C 0x0A [stop]: coloca o endereço 0x0A (primeiro registrador da identificação) no ponteiro interno. Para ler a identificação, deve ser enviado em seguida [start] 0x3D, seguido da leitura de três bytes e um [stop] para encerrar a transação.
Na comunicação SPI o endereçamento é feito através de um sinal (CS), não existindo o byte de endereço do dispositivo. Na forma mais comum (4 fios) são sempre transferidos dois bytes, um em cada sentido.
O início de uma transação é feito acionando o sinal CS e o seu fim desacionando-o. O primeiro byte da transação contém o endereço de um registrador, a operação (leitura ou escrita) e uma indicação se o ponteiro deve ou não ser incrementado a cada byte transferido. Os bytes seguintes são de dados.
Vejamos como seriam feitos os mesmos comandos mostrados acima ([start] é o acionamento de CS e [stop] o seu retorno ao repouso):
- [start] 0x40 0x70 0xA0 [stop]: 0x40 indica endereço 0, escrita, incremento
- [start] 0xCA seleciona o endereço 0A, leitura e incremento. Em seguida devem ser lidos os três bytes da identificação e encerrada a transação ([stop])
Agora que já conhecemos o HMC5983 precisamos saber como ele está ligado no módulo. Encontrei esta informação em um anúncio antigo no Ebay. Para o caso do anúncio sumir, o material está em GY282.zip nos arquivos do blog. Indo direto ao que interessa:
- O pino VIN do conector está ligado a um regulador (LDO). Desta forma pode ser alimentado sem susto com qualquer tensão entre 3 e 5V.
- Dois jumpers (I2C/SPI e 3V3/CS, ver na foto) possibilitam selecionar entre SPI e I2C. A placa veio configurada para I2C (solda entre o terminal I2C e o pino central no jumper de cima e jumper de baixo fechado). Para operar em SPI é necessário mudar o jumper de cima pra ligar SPI ao pino central e desconectar os pinos do jumper de baixo.
O uso do pino DRDY é opcional, este sinal é normalmente alto e pulsa quando um resultado está disponível.
No próximo post vamos ligar o módulo a um Arduino.
Nenhum comentário:
Postar um comentário