segunda-feira, 20 de janeiro de 2014

Tutorial: Utilizando código .CPP na programação da Arduino

Este post visa demonstrar uma forma de programar a Arduíno sem utilizar sua IDE. Eu me inspirei no post deste link:

Tutorial: Using Atmel Studio 6 with Arduino projects

Se você tiver alguma sugestão, por favor, adicione nos comentários.

Se você estiver usando Linux, veja este post:
Programar o Arduino em linguagem C++ via comando de linha (em Linux) e sem uso da IDE ou qualquer interface gráfica de usuário

A IDE da Arduíno funciona muito bem, para que, então ter todo este trabalho?

Organização, quando seu projeto começa a ficar grande é importante você organizar o seu código em arquivos diferente com classes, etc. Essa não é a forma que os arquivos .PDE ou .INO funcionam, logo o ideal é trabalhar com os arquivos .h .c .cpp padrões do código C ou C++.

Não carregar o Arduíno bootloader, a Arduíno inclui junto com o seu código o bootloader (mais informações aqui), isto pode ser um problema se você está com o processador embarcado (sem uma Arduíno), pois podem ser produzidos sinais nas diversas portas I/O que podem provocar comportamentos não esperados do seu circuíto.

Se você está procurando esta alternativa para ter acesso ao arquivo .HEX, não é necessário! Quando você compila seu código na IDE da Arduíno o arquivo .HEX é gerado no diretório:

C:\Users\nome do usuário\AppData\Local\Temp\build.tmp

Com o arquivo .HEX basta utilizar a USBtinyISP para transferir os binários para o processador usado na sua placa. IMPORTANTE - Sempre que você transfere o .HEX através do USBtiny, você perde o bootloader se este é o seu objetivo tudo bem. Se você perdeu o bootloader e quer restaurá-lo basta usar a própria USBtiny e a IDE da Arduíno (recomendo fazer isso com uma conta de administrador do Windows, se você estiver usando Windows):

Tools->Board
Tools->Programmer->USBtinyISP
Tools->Burn Bootloader


Se você quer trabalhar os seu código da Arduíno arquivos .INO no Atmel Studio, basta instalar a Extensão Arduino Ide for Atmel Studio no Extention Manager no AtmelStudio, e não precisa seguir este tutorial.



Passo a Passo


Estou trabalhando com Windows 7 

Material necessário:


Arduíno UNO





USBtinyISP



Você pode fazer uma com as instruções contida neste link. Caso você faça uma USBtinyISP lembre-se de garantir que o cabo (que você fizer) conecte o pino 1 dela com o pino 1 da outra placa.






Atmel Studio 6

Baixe instale e execute o update. (você precisa fazer isso com uma conta com direitos de administrador no Windows)

Eu usei o Atmel Studio 6.1 update 2.0 (build 2730)
E o update recomendado foi o Atmel Kits




IDE Arduíno

Baixe e instale a versão compatível com o processador que você vai usar, eu recomendo que você use a última versão estável.

Eu usei a versão 1.05






Copiando a biblioteca Arduíno Core


Abra a IDE da Arduíno.
Selecione a placa Arduíno que possui o mesmo processador que você usa, no meu caso escolhi a Arduíno Uno, pois eu uso o processador ATmega328P.

IMPORTANTE: A IDE da Arduíno vai gerar uma biblioteca Arduíno Core considerando o processador da Arduíno que você escolheu.

Abra um exemplo (eu usei o Blink), clique em Verify (para compilar).





Vá ao diretório:

C:\Users\nome do usuário\AppData\Local\Temp\build.tmp

Se existirem vários parecidos, escolha aquele que foi criado na data e hora que você compilou o código.

Copie o arquivo core.a que está neste diretório e renomeie para libcore.a e guarde para passos futuros.

Criando o Projeto

Abra o Atmel Studio.

Crie um novo projeto:



Escolha GCC c++ Executable Project.

Coloque o nome que desejar.




Escolha o seu processador, eu trabalho com o ATmega328P (lembre-se que tem que ser o mesmo que foi escolhido para gerar a core.a na IDE da Arduíno).






Configurando o Projeto


Entre nas propriedades do projeto



Neste ponto, o ideal seria fazer as modificações em  All Configurations, mas (na minha instalação) ocorreu o erro abaixo, então eu fiz as configurações em Debug e Release.





Telas das Configurações (as duas Release e Debug):

Para 16MHz use:             
F_CPU=16000000L  

Para 8MHz use:               
F_CPU=8000000L

Versão da IDE da Arduino, no meu caso 1.05, logo:
ARDUINO=105


AVR/GNU C++ Compiler - Symbols




AVR/GNU C++ Compiler - Directories

Estes dois são obrigatórios, pois apontam para a Arduino.h e pins_arduino.h

Direcione para os diretórios da instalação da sua IDE da Arduíno, no meu caso são estes.

C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino
C:\Program Files (x86)\Arduino\hardware\arduino\variants\standard

Vou incluir mais um apontando para uma biblioteca, a EEPROM se você não for usá-la não precisa incluir, mas neste post eu vou fornecer um código que utiliza esta biblioteca

C:\Program Files (x86)\Arduino\libraries\EEPROM





Preste bem a atenção se você está configurando em C++ e não em C por engano, caso você erre irá receber este erro quando for gerar o .HEX, o erro:

Error 1 Arduino.h: No such file or directory

Especificamente se refere ao diretório:
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino



AVR/GNU C++ Compiler - Optimization

-fdata-sections

Selecione “prepare functions for garbage collection”
no meu caso já estava selecionado




AVR/GNU C++ Compiler - Miscellaneous
-fno-exceptions




AVR/GNU Linker - Optimization
Selecione “Garbage Collect unused sections (-Wl, –gc-sections)”no meu caso já estava selecionado



Resumo das configurações para você copiar-e-colar:



Atenção é no AVR/GNU C++

AVR/GNU C++ Compiler - Symbols
F_CPU=16000000L
ARDUINO=105

AVR/GNU C++ Compiler - Directories
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino
C:\Program Files (x86)\Arduino\hardware\arduino\variants\standard
C:\Program Files (x86)\Arduino\libraries\EEPROM

AVR/GNU C++ Compiler - Optimization
-fdata-sections

Selecione “prepare functions for garbage collection”
no meu caso já estava selecionado

AVR/GNU C++ Compiler - Miscellaneous
-fno-exceptions


AVR/GNU Linker - Optimization
Selecione “Garbage Collect unused sections (-Wl, –gc-sections)” no meu caso já estava selecionado

Clique em Save All

Adicionando a biblioteca libcore.a

Copie a libcore.a (que você separou no começo do tutorial) e cole no diretório do seu projeto, junto como o arquivo .cpp.

C:\Users\nome do usuário\Documents\Atmel Studio\6.1\nome do projeto\nome do projeto\


Abra o Solution Explorer



Clique com o botão direito do mouse em Libraries e Selecione Add Library



Clique em Browse Libraries e procure a libcore.a no diretório:
C:\Users\nome do usuário\Documents\Atmel Studio\6.1\nome do projeto\nome do projeto\







IMPORTANTE: Esta libcore.a deve ser gerada para o mesmo processador

que você escolheu na criação do projeto no AtmelStudio, caso o processador seja diferente (quando for compilar) você receberá o erro:

Error 12 skipping incompatible 

Caso isto ocorra, basta gerar a core.a novamente (selecionando a Arduíno que possui o mesmo processador), renomeie ela para libcore.a, remova a errada e adicione a nova.


Vamos compilar algum código....não, hahahaha, ainda não.


Vamos configurar as ferramentas para transferir o .HEX para o processador



Adicionando a biblioteca EEPROM


Se você não for usá-la não precisa incluir, mas neste post eu vou fornecer um código que utiliza esta biblioteca

Clicando como botão direito do mouse no projeto, crie uma pasta para organizar as bibliotecas:



Coloque o nome EEPROM





 Clicando como botão direito do mouse na pasta, adicione um item existente.




Direcione para o arquivo cpp da biblioteca, no meu caso a biblioteca EEPROM fica no diretório:

C:\Program Files (x86)\Arduino\libraries\EEPROM\EEPROM.cpp





AVRDUDE

Clique em Tool -> External Tools ...






Baixe e instale a última versão do AVRdude

Tem no diretório da Arduíno IDE (no meu caso 1.05)
 C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe  
mas ele não aceitava a opção -c (interpretava como -C), por este motivo estou instruindo a usar a versão no link acima. Se a versão que veio junto com a sua IDE da Arduíno funcionar, pode usá-la.


Vamos adicionar quatro ferramentas usando o Avrdude.exe:

Duas ferramentas usam o Serial-USB para você transferir o .HEX para uma Arduino, você precisa saber em que COM está sua Arduíno, no meu caso é COM17. Nestas duas eu uso o AVRdude que vem junto com a IDE da Arduíno.

Duas ferramentas usam a placa USBtiny  para você transferir o .HEX através da conexão ICSP, para isso você precisa ter (comprar ou montar) uma USBtiny e instalar os driversNestas duas eu uso o AVRdude que foi baixado à parte.

Para todas você vai precisar colocar o código correspondente ao processador que você usa (o mesmo que você selecionou no projeto (no meu caso é o Atmega328P) o código é m328p você pode encontrar os códigos aqui, ou procure na internet as palavras "avrdude options").



External Tools

Troque o processador em todos argumentos e a Com no dois primeiros.



Release:
Title: Release - USB-Serial Programmer: COM17
Command: C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe
Arguments: -C"C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf" -v -v -v -v -pm328p -carduino -P\\.\COM17 -b115200 -D -Uflash:w:"$(ProjectDir)Release\$(ItemFileName).hex":i

Selecione “Use Output window”






Debug
Title: Debug - USB-Serial Programmer: COM17
Command: C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe
Arguments: -C"C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf" -v -v -v -v -pm328p -carduino -P\\.\COM17 -b115200 -D -Uflash:w:"$(ProjectDir)Release\$(ItemFileName).hex":i

Selecione “Use Output window”







Title: Release - USBtiny Programmer
Command: C:\WinAVR-20100110\bin\avrdude.exe
Arguments: -c usbtiny -p m328p -U flash:w:"$(ProjectDir)Release\$(ItemFileName).hex":i

Selecione “Use Output window”





Title: Debug - USBtiny Programmer
Command: C:\WinAVR-20100110\bin\avrdude.exe
Arguments:-c usbtiny -p m328p -U flash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":i

Selecione “Use Output window”






Compilando Código


Quando você criou o projeto foi criado automaticamente um código:

#include <avr/io.h>

int main(void)
{
    while(1)
    {
        //TODO:: Please write your application code 
    }

}
Como a ideia é mostrar o funcionamento do AtmelStudio com pelo menos um biblioteca eu escolhi, a EEPROM.

O código abaixo é muito simples ele grava 0 na EEPROM, depois lê e apresenta na serial (o led pin13 fica apagado), grava 1 (led aceso), lê e apresenta na serial (led apagado), grava 1 (led aceso) e assim por diante.

Desta forma você pode abrir o serial monitor (9600) e ver a leitura.

Sobrescreva o código acima com este código abaixo:
#include <Arduino.h> /* IMPORTANTE */
#include <EEPROM.h>

void setup();
void loop();
#line 10
int led = 13;
int address = 0;
int count = 0;
byte value;


int main(void)
{
 init();

  #if defined(USBCON)
 USBDevice.attach();
 #endif
 
 setup();
 
 for (;;) {
  loop();
  if (serialEventRun) serialEventRun();
 }
 
 return 0;
}


void setup()
{
 Serial.begin(9600);
 while (!Serial) {
  ; // wait for serial port to connect. Needed for Leonardo only
 }
 // write a 0 to all 512 bytes of the EEPROM
 for (int i = 0; i < 512; i++)
  EEPROM.write(i, count);
 
 pinMode(led, OUTPUT);
}

void loop()
{
 
 // read a byte from the current address of the EEPROM
 value = EEPROM.read(address);
 
 Serial.print(address);
 Serial.print("\t");
 Serial.print(value, DEC);
 Serial.println();
 
 // advance to the next address of the EEPROM
 address = address + 1;
 
 // there are only 512 bytes of EEPROM, from 0 to 511, so if we're
 // on address 512, wrap around to address 0
 if (address == 512)
  {
  digitalWrite(led, HIGH);
  address = 0; 
  count++; 
  if(count == 256) count=0;
  
  for (int i = 0; i < 512; i++)
   EEPROM.write(i,count);
   
  
  }
 
 
 delay(3);
 digitalWrite(led, LOW);
}




Você pode compilar pressionando o F7 e transferir o código usando a External Tool, se você estiver trabalhando na versão Release e com uma Arduíno conectada na USB:


Tools-> Release - USB-Serial Programmer: COM17

Para a versão Debug use:
Tools-> Debug - USB-Serial Programmer: COM17


Mas o objetivo é transferir o código através da USBtinyISP, então conecte ela no micro e conecte no seu circuito (ou uma Arduíno pela pora ICSP nela), se for porta ICSP da Arduíno, lembre-se que você irá perder o bootloader.


Tools-> Release - USBtiny Programmer

Para a versão Debug use:

Tools-> Debug - USBtiny Programmer

Pronto !!!

Se você perdeu o bootloader e quer restaurá-lo basta usar a própria USBtiny e a IDE da Arduíno (recomendo fazer isso com uma conta de administrador do Windows, se você estiver usando Windows):

Tools->Board
Tools->Programmer->USBtinyISP
Tools->Burn Bootloader




terça-feira, 6 de agosto de 2013

Reprogramando o SensorTag da Texas Instruments

O objetivo desta postagem é relatar o processo para re-programar o SensorTag da Texas Instruments tratasse de um dispositivoBluetooth low energy (BLE também conhecido como Bluetooth 4.0 e Bluetooth smart) que possui vários sensores:


  • Sensor de temperatura por Infravermelho
  • Sensor de humidade
  • Sensor de pressão
  • Acelerometro
  • Giroscópio
  • Magnetometros
  • 2 botões para comandos



Texas CC2541 Sensor Tag

Na prática podem existir várias formas de programar o este e outros dispositivos da família CC2540 e CC2541 (chips BLE), meu objetivo é mostrar uma que funciona, se desejar contribuir fique à vontade para comentar.

Além do próprio SensorTag seguem algumas ferramentas básicas que utilizei:

Visualizando o funcionamento do SensorTag:

Este é um aplicativo muito útil para você ver o SensorTag funcionado e para entender as mudança que você venha a fazer no código.

Programador: 

CC2540 Development Kit
Acredito que também seria possível utilizar o programador CC2540 Mini Development Kit  (inclusive é mais barato), mas novamente meu objetivo e relatar como e eu fiz (e eu não tenho ele) e não a melhor maneira de fazer, portanto o usa-lo ao invés do CC2540 Development Kit é uma opção sua.

CC2540 Mini Development Kit


Código fonte:

Com os stack vem o código fonte que podemos alterar como exemplos, além dos arquivos .Hex mais atualizados para reprogramar o SensorTag ou o Dongle. Meu teste usou o Stack 1.3.2.

Flash Programmer:

Necessário para aplicar o arquivo .Hex no SensorTag. Meu teste usou a versão 1.12.7.

IDE:

Os chips CC2540 ou CC2541 possuem um processador 8051 interno, atualmente (agosto de 2013) é a forma oficial da Texas para programar. Ele é um software pago, para o efeito de aprendizado desta postagem é necessário escolher a licença com período de expiração de 30 dias (existe uma outra opção de licença com limitação do tamanho do código em 4K que não funciona para o SensorTag, pois seu código é maior que isso). Meu teste usou a versão 8.20.1 com 30 days Evaluation edition License.

Você pode pesquisar se outras IDEs já suportam o CC2540 / CC2541, dois candidatos para o futuro são:

SDCC - Small Device C Compiler
http://sdcc.sourceforge.net/

Texas Code Composer Studio (CCStudio)
http://www.ti.com/tool/ccstudio

Passo a passo

Reprograme o Dongle

O dongle que vem no CC2540 Mini Development Kit está com um firmware de sniffer que precisa ser substituído. Instale o Bluetooth low energy software stack and tools e o SmartRF Flash Programmer.

Conecte a Evaluation Board SmartRF05(qualquer uma das duas) do CC2540 Mini Development Kit conforme abaixo:


Não esqueça da chave liga-desliga na evaluation board.

Os dois conectores USB precisam estar conectados, especificamente o que fica conectado na evaluation board (esquerda da foto) será utilizado para passar informações, o cabo conectado ao dongle (direita da foto) serve somente para alimentar o dongle.



MUITA ATENÇÃO: Na posição do cabo de debug, veja o fio vermelho na posição 1 indicada no dongle.


Abra o Flash Programmer:

Provavelmente irá aparecer esta janela informando que o firmware dela é antigo e precisa ser atualizado:



Configure conforme a imagem abaixo, para atualizar o firmware da evaluation board:


Feche o programa e abra novamente.

Configure conforme a imagem abaixo:


Em FlashImage utilize o .hex abaixo (o meu dongle usa o chip CC2540):
C:\Texas Instruments\BLE-CC254x-1.3.2\Accessories\HexFiles\CC2540_USBdongle_HostTestRelease_All.hex

Clique em Perform Actions para transmitir o firmware para o dongle

Uma vez reprogramado o dongle já pode ser utilizado, quando for conectado pela primeira vez será necessário o driver que está no diretório:
C:\Texas Instruments\BLE-CC254x-1.3.2\Accessories\Drivers

Mais informações no documento 4505.Reprogramming_CC2540_USB_dongle.pdf

Teste o Dongle e o SensorTag

Antes de reprograr o seu SensorTag, veja ele funcionando. Instale o Bluetooth low energy (BLE) Device Monitor e teste os SensorTag.

Desconecte a evaluation board o dongle o cabo de debug, e conecte somente o dongle no seu computador.

Abra o BLE Device Monitor. (instruções mais detalhadas aqui.)

Pressione o botão lateral do SensorTag:

No BLE Device Monitor click em Scan, aguarde aparecer o SensorTag, selecione ele e clique em Connect.

Uma vez conectado, e Attributes(à direita) expanda o item 93, depois o 94,  no 96 em Value escreva: 01:00

Aperte os botões do SensorTag e note que o valor de 95 irá mudar para 01 e 02 (de acordo com o botão que você apertar), em EventLog (à esquerda).


Isto demonstrou que o seu Dongle está configurado adequadamente e o SensorTag está se comunicando corretamente.

Clique em Disconnect e feche o BLE Device Monitor.


Configurando a IDE


Instale o IAR Embedded Workbench for 8051 (lembre-se de escolher a licença com período de expiração de 30 dias).

Copie o diretório:
C:\Texas Instruments\BLE-CC254x-1.3.2\Projects\ble\SensorTag

Para 
C:\Texas Instruments\BLE-CC254x-1.3.2\Projects\ble\MySensorTag

Somente para preservar o código original.

Abra o IAR Embedded Workbench, clique em File->Open->Workspace...



Selecione o arquivo:

C:\Texas Instruments\BLE-CC254x-1.3.2\Projects\ble\MySensorTag\CC2541DB\SensorTag.eww

Se aparecer a janela de mensagem abaixo clique em Sim.



Em Workspace clique com o botão direito em SensorTag-CC2541DK-Sensor e em seguida em Rebuild All.


Provavelmente dará o erro: Error[e16]: Segment SLEEP_CODE (size: 0x9 align: 0) is too long for segment definition. At least 0x1 more bytes needed. The problem occurred while ...









Existem um workaround que vou utilizar, mais informações aqui.

Expanda HAL->Target->Drivers e abra o arquivo hal_sleep.c procure a função:

 void halSetSleepMode(void)

Substitua:

PCON = halSleepPconValue; 

por:

asm("MOV     0x87,halSleepPconValue");



Salve, e execute o Rebuild All novamente somente para verificar se está tudo corrigido. 

Deve ter sido gerado com sucesso um arquivo em:

C:\Texas Instruments\BLE-CC254x-1.3.2\Projects\ble\MySensorTag\CC2541DB\CC2541DK-Sensor\Exe\SensorTag.hex

Renomeie este arquivo para SensorTagOri.hex. (Vamos usar este arquivo para voltar o SensorTag para a configuração original depois de modificá-lo.

Re-programando o SensorTag


Vamos gerar alguma modificação no código somente para provar que o ciclo completo foi realizado.

Quando apertamos os botões do SensorTag é transmitido o número 01 ou 02 dependendo do botão acionado. Vamos modificar estes número para 03 e 04.

Expanda APP  e abra o arquivo SensorTag.c procure a função:

static void sensorTag_HandleKeys( uint8 shift, uint8 keys 

procure a linha:

SK_Keys |= SK_KEY_LEFT;

Modifique para:

SK_Keys |= 0x03;//SK_KEY_LEFT;

Agora procure a linha:

SK_Keys |= SK_KEY_RIGHT;

Modifique para:

SK_Keys |= 0x04;//SK_KEY_RIGHT;


Salve, e execute o Rebuild All


Conecte o SensorTag na Evaluation Board e ela no computador:


Atenção para a posição do pino 1 (fio vermelho do cabo de debug)





Abra o Flash Programmer:

Reprograme o SensorTag com o arquivo:

C:\Texas Instruments\BLE-CC254x-1.3.2\Projects\ble\MySensorTag\CC2541DB\CC2541DK-Sensor\Exe\SensorTag.hex

Que acabou se ser gerado.

feche o Flash Programmer, desconecte a evaluation board e o SensorTag do cabo de debug.

Conecte o Dongle no computador e abra o BLE Device Monitor, conecte o SensorTag e veja que os números 03 e 04 são enviados quando os botões do SensorTag são pressionados.


Pronto! 

Agora, reprograme o SensorTag usando o SensorTagOri.hex (aquele que foi gerado antes da modificação), caso tenha pulado esta etapa, volte o código ao original e gere um novo .hex.


Dicas adicionais:


Fatal Error[e89]

A primeira vez que tentei reprogramar o SensorTag utilizei o IAR com a licença que limita o código em 4k, apresentou: 

Fatal Error[e89]: Too much object code produced (more than 0x1000 bytes) for this package 

Substitui a licença pela outra que é por tempo (30 dias), e o erro continuou. Aparentemente o IAR deixou algum arquivo que informava o a licença antiga no diretório do projeto.

Para resolve-lo é necessário  (fechar e abrir o IAR), copiar o diretório com o código fonte original e começar novamente a partir deste diretório "limpo".

Target Selection

Sempre compile através do Rebuild All.

O botão com um triangulo verde tem a Donwload e Debug que não é aplicável no nosso caso (eu cai nessa):


Quando você clica nele aparece a mensagem abaixo solicitando o Target Selection, que também não é necessária.


Em resumo: use o Rebuild All.


SensorTag e Python
Acesse o Blog da Isabela:


Conectando dois SensorTags no mesmo Dongle
Acesse o blog do Arthur:





quarta-feira, 10 de julho de 2013

Interfaces de entrada para Cadeira de rodas motorizada



Muitos projetos em eletrônica visam criar interfaces de entrada para pessoas com deficiências. Nesta postagem vou apresentar como podem ser feitas duas interfaces básicas o Joystick e o Penta.

O Joystick é uma interface analógica que possui uma escala suave de posições, permitindo alta capacidade de manobra da cadeira de rodas motorizada.



Joystick JC200 (Part Number: JC200BS1K1Y de 12V ) fonte: Farnell


Por outro lado temos uma interface digital (Penta) composta por cinco chaves (4 direções: frente, trás, esquerda e direita; e uma quinta chave adicional), esta interface é a base para a maioria de outras interfaces, devido a simplicidade de controlar estas cinco chaves. Por exemplo uma interface de sopro é tratada como Penta, interface por impulsos mio-elétrico também, interface por EEG normalmente é simplificada para uma única chave. 




Interface Penta fonte: Turning Point Technology 


Módulos de controle da PG Drives como o Omni possuem conexão DB9 macho, uma interface de entrada (Joystick ou Penta) precisa no seu cabo um conector DB9 fêmea com a seguinte pinagem.





Detalhe do conector DB9 fêmea


O pino 5 (detecta) deve ser conectado ao Terra no dispositivo e não dentro do conector DB9 (em caso de acidente, se o cabo do dispositivo for partido é importante que o detecta fique aberto para parar a cadeira) isto deve ser feito tanto para o Joystick quanto para o penta.

Dica: O sinal do pino 3 tem metade da tensão para o Joystick e 0 ou 1 (tensão máxima) para o Penta, se você estiver projetando o circuito no qual a interface de entrada vai ser conectada, você pode usar este sinal para detectar qual interface está conectada no seu sistema.

Montando um Joystick

O datasheet do JC200 pode ser encontrado aqui, existe um padrão nas cores dos fios do joystick que muitas vezes se repete com outros fabricantes:







No hardware do joystick não tem um fio para o Detecta, escolha um cabo com 6 fios, o fio que sobrar conecte no detecta (pino 5 do conector DB9) e na outra ponta do fio conecte ao terra, novamente é importante que este fio faça a conexão com o terra no lado próximo ao joystick (nunca no conector DB9), em caso de rompimento do cabo o módulo de controle irá detectar a desconexão. 

Montando um Penta

Para fazer um penta bastam 5 chaves, um cabo com 7 fios e 5 resistores de 3,3KΩ, não é necessário um fio para levar alimentação (pino 9) para a interface e nem a ligação do pino 9 e 7. Exceto se você desenvolver um penta mais sofisticado, por exemplo, um penta touch precisaria de um fio adicional para levar a alimentação de 12v para a interface e a ligação entre o pino 9 e 7.


Circuito de um Penta simples


Note novamente que o Detecta deve ser conectado ao Terra dentro a interface.








sexta-feira, 5 de abril de 2013

Blackberry Trackball na Arduino

O objetivo deste post é mostrar como ler os sinais de movimento do trackball usando uma Arduino.

Utilizei a Blackberry Trackballer Breakout da Sparkfun:



Ela possui quatro leds que não irei tratar aqui.

Utilizei uma Arduino Mega ADK, mas poderia ser uma Arduino qualquer.

Conexões do da breackout board com a Arduino.

Breakout  ->  Arduino

UP                 Digital 7 (configurado como IN) (fio Amarelo)
DWN            Digital 8 (configurado como IN) (fio Laranja)
LFT               Digital 3 (configurado como IN) (fio Verde)
RHT              Digital 5 (configurado como IN) (fio Roxo)
BTN              Digital 11 (configurado como IN) (fio Azul)
GND             GND (fio Marrom)
VCC              5v     (fio Vermelho)

Veja as conexões:






Com estas conexões só falta o código (utilizei a IDE Arduino 1.0.1), que pode ser encontrado aqui:


                  Obs.: O código que desenvolvi aqui foi totalmente inspirado neste projeto:

Você pode mudar a sensibilidade alterando a variável "threshold".

Uma vez que realizar o Upload para a Arduino, abra o Serial Monitor. Para o movimento acima do trackball irá aparecer o texto UP, para baixo DOWN, e assim por diante. Se você pressionar o trackball ira acionar um botão, no Serial Monitor irá aparecer BUTTON e o led da Arduino irá mudar de estado (se estiver apagado acende, se estiver aceso apaga.

Veja abaixo a tela do Serial Monitor: