domingo, 24 de abril de 2011

Conectando o NXT com PIC 16F877

Este final de semana inteiro, trabalhei em 2 bibliotecas para conectar o PIC com NXT.
Vejam o vídeo para ter uma idéia do que é que estou falando...



Precisei muito disso, e nunca encontrei nada parecido pela internet, oque me motivou a fazer mais ainda.
O porque de usar o PIC? é um microcontrolador, é bastante conhecido e de fácil acesso. O que usei, é um 16F877, mas pode ser usado qualquer outro com hardware para I²C.
I²C é um protocolo de comunicação, que o NXT usa para ler sensores especiais, como o de ultrasom, giro, aceleração... O PIC 16F877 possui o hardware para leitura do mesmo.


A parte mais complicada, foi tudo. Não tinha um osciloscópio para realizar medições, portanto foi tudo na tentativa e erro.

Afinal, qual a vantagem de se comunicar com o PIC? Vamos lá. O NXT só possui 4 portas de sensores, o que nos limita a 4 sensores correto? O microcontrolador, nesse caso, servira como um expansor de sensores, e também, como uma plataforma para integrar quaisquer tipos de sensores e atuadores como servo motor, motores de passo, sensores analógicos e digitais... E a quantidade de sensores que pode ser ligadas a ele, é limitada a quantidade de pinos que possui, nesse caso, cerca de 30 e poucos...

O compilador usado para programar o NXT foi o RobotC (em C) e para o pic foi o CCS, portanto aconselho a usar esses para não ocorrer nenhuma incompatibilidade.

BAIXE AQUI OS ARQUIVOS!

Configurar um sensor no PIC, é bastante simples. Você precisa configurar 4 coisas:
- Um registrador unico, que esteja entre 0 e 127 (em hexadecimal)
- Um valor default, que sera carregado junto com o PIC (uma constante, ou um dado do eeprom)
- Uma função a ser executada quando esse registrador for chamado
- Uma função a ser executada quando esse registrador for alterado (opcional)

No NXT, para configurar é bem simples:
- Use a função 'PIC877_init(PORTA);' para iniciar o PIC;
- Use a função 'PIC877_sendCmd(PORTA,REGISTRADOR,DADO);' para enviar um comando ao PIC;
- Use a função 'PIC877_getData(PORTA,REGISTRADOR);' para receber um dado do PIC

Se tiverem duvidas quanto ao seu uso, não fique com vergonha, poste um comentário que serei muito grato em responder.
É capaz de melhorar o código? ótimo! melhore e só não esqueça de enviar para mim, afinal, divulgar faz parte
Sigam meu blog e o twitter (twitter.com/techlego) para dar uma força!

8 comentários:

  1. Muuuuito bacana, camarada!! Parabéns!
    O vídeo ficou muito massa!!

    ResponderExcluir
  2. Interessante, não sabia dessa possibilidade. Parabéns pelo trabalho!

    Vou ver se consigo informações para você neste site
    http://pt.lego.wikia.com/wiki/Wiki_Lego

    ResponderExcluir
  3. Este comentário foi removido pelo autor.

    ResponderExcluir
  4. Jefferson Fernando:

    E ae Ivan!

    Parabéns pelo seu trabalho e pelo apoio a comunidade!!!

    Abração e sucesso!!!

    ResponderExcluir
  5. Parabens... esse post ta salvando minha vida...

    ResponderExcluir
  6. O PIC são 5v. Cada pilha são quantos volts? Quantas pilhas você está usando? Sucesso!!

    ResponderExcluir
  7. cada pilha da 1.2v, sendo 4 pilhas, total de 4.8v (acho que esta certo! rs)
    Abraço!

    ResponderExcluir
  8. Ivan, primeiramente parabens!! Muito bom!!
    Help me!! Estou desenvolvendo meu TCC (Eng Automaçao e controle) e preciso controlar o acionamento de um servomotor através da leitura de um sensor de rotação. O controle é do tipo: aumenta giro = servo aciona sentido horario / diminui giro = servo anti-horario. É possivel fazer isso com PIC e NXT? Tem uma maneira mais facil? (por ser 1 sensor e 1 servo)
    É caro este material (PIC 16F877 e NXT)?
    O que é o NXT exatamente? O PIC não pode ser programado para a função diretamente sem NXT?

    Agradeço desde já

    ResponderExcluir