RTC on chipKIT Max32 [Arduino PIC32]


Utilizando o RTC na placa do Chipkit Max32 [Arduino PIC32]

Seja bem vindo a este post, onde estarei demonstrando uma solução para o uso do periférico RTC na placa ChipKit Max32, que utiliza várias bibliotecas portadas, desenvolvidas para a plataforma Arduino.
E para quem quiser acompanhar o desenvolvimento destas bibliotecas, segue o link para a página wiki do ChipKit.

É comum para os desenvolvedores e hobbystas criarem aplicações onde possam colocar os diversos periféricos dos kits de desenvolvimento, especialmente dos microcontroladores para funcionar. Seja em aplicações isoladas para testar apenas alguns módulos, ou em aplicações mais amplas, onde é interessante se utilizar da maioria dos periféricos existentes no hardware utilizado.
Após a aquisição do ChipKit Max32, comigo não foi diferente. E uma das minhas primeiras idéias era utilizar o módulo RTC nativo do microcontrolador PIC32 existente nesta placa. E após várias pesquisas como: datasheet do microcontrolador, esquema elétrico da placa, amigos e páginas na internet, percebi que a maioria das pessoas que tinham esta mesma idéia, não encontraram uma forma para utilizar o RTC, ou mesmo as que estavam no caminho certo, não haviam de fato realizado os procedimentos necessários para colocar o RTC na placa MAX32 para funcionar.
É interessante saber que em outra solução oferecida para o ChipKit, que é a plataforma Chipkit UNO32, existe na placa os terminais acessíveis para a inserção do cristal de 32.768KHz necessário para o clock do RTC, e na plataforma do Max32 não existe.
Vale dizer que o propósito do post é solucionar um possível problema que encontrei na placa Max32, não sabendo até o momento se é algo que pode ocorrer em todas, ou se eu fui o sortudo por me deparar com ele.
Para os que possuem a placa UNO32, até o momento podem ficar tranquilos.Pois eu e o Cesar fizemos o teste de inserir um cristal de 32.768KHz  nos terminais do periférico do RTC, e ele funcionou perfeitamente. Segue a imagem da placa montada:

Foto da placa UNO32 com cristal do RTC:

Para quem possui esta placa, a montagem é tranquila, uma vez que já existe na placa os terminais para a inserção do cristal do RTC. Bastando apenas que incluam em seus projetos a biblioteca RTC, e que escolham corretamente o board utilizado.


Para quem possui o Max32, descrevo à seguir os problemas e soluções que encontrei. E espero que ninguém mais tenha este problema, tornando o uso deste periférico o mais fácil possível.

A primeira tentativa, foi utilizar algumas idéias encontradas em alguns posts, que citavam a inserção do cristal, juntamente com os capacitores acoplados ao mesmo, diretamente nos pinos do microcontrolador SOSCI e SOSCO, responsáveis pelo clock do RTC. Observando o esquema elétrico da placa e o meio físico, encontramos o seguinte:


Esquema Elétrico do ChikiptKit Max32:


Foto da placa onde estão ligados os pinos do microcontrolador:


Aparentemente seria uma tarefa fácil. Tendo apenas que ter um pouco de cuidado ao lidar com o ferro de solda e saber trabalhar com componentes SMD. A primeira dúvida seria a interferência do duplo-diodo e dos resistores na oscilação do cristal. Como eu não pretendia utilizar os pinos para outra tarefa, resolvi retirar este componentes. Caso fosse necessário, eu os colocaria de volta na placa.
Seguindo com esta idéia. Retirei o diodo D7G2, o R5 e o R6. E nos terminais do PIC32, SOSCI e SOSCO, coloquei o cristal de 32.768KHz + 2 capacitores de 22pF. Sendo que mais tarde alterei estes valores para 30pF.
Observando as bibliotecas existentes na wiki do ChipKit, encontrei um link para a biblioteca do RTC. E após ler as observações e tendo visto a implementação de exemplo que vem inclusa, coloquei a placa do Max32 para funcionar. Para minha surpresa ela funcionou de primeira, tendo como indicação o timer que estava constantemente sendo incrementado, e sendo enviado pela console serial da MPIDE do Arduino.
Porém, tive problemas com a contagem do tempo, onde observei que a cada 1 segundo do relógio, a contagem efetiva era de 6 segundos no módulo RTC. Tendo este problema em mente, resolvi observar o circuito oscilador com um osciloscópio, e constatei que a frequência de oscilação nos pinos SOSCI e SOSCO era de aproximadamente 196KHz, o que indicava que a frequência do cristal de 32.768KHz estava 6 vezes acima do normal. Primeira tentativa para solucionar foi alterar os valores dos capacitores ligados ao cristal. Efetuando mudanças desde 15pF até 33pF, obtive a mesma frequência de aprox. 196KHz.
Então comecei a concluir que poderia ser alguma configuração das bibliotecas portadas utilizadas no ChipKit. Após estudá-las, não consegui encontrar nada que pudesse gerar este problema. Então teria que encontrar outra solução.
Coloquei novamente o diodo D7G2 e os resistores R5 e R6 na placa. Retirei o cristal e os capacitores. E resolvi montar um oscilador externo. De modo à ter pouco impacto sobre o hardware, além de não ter que encontrar outro tipo de solução por software, pois neste caso estaria retirando a compatibilidade de projetos desenvolvidos para a plataforma do Arduino. A melhor solução foi fazer um oscilador CMOS com portas inversoras, como as existentes no CI 4069. Sendo que para este tipo de solução é possível utilizar portas NAND ou NOR, sendo de extrema importância serem da família CMOS.
Devido à sua impedância de entrada e algumas características elétricas, este tipo de tecnologia é capaz de fazer com que um cristal possa ser utilizado em conjunto para gerar um oscilador em uma enorme faixa de frequência.Tendo em mãos o esquema, resolvi fazer a seguinte montagem:


Esquema do PIC32 com o Oscilador CMOS:



Este tipo de oscilador tem uma configuração bem fácil para montagem. Utilizei mais uma porta inversora ao final do estágio oscilador, para que sirva como buffer. Além de não influênciar na frequência em questão, pois na aplicação de RTC, é uma questão importante não haver mudanças nesta frequência.Após a montagem, fiz a seguinte ligação na placa do ChipKit Max32:

Ligação do Circuito Oscilador RTC Externo:



 Verifiquei se a frequência do oscilador não sofria nenhuma interferência após a montagem na placa. E com um osciloscópio constatei que estava tudo normal.


Frequência de 32.768KHz do Oscilador CMOS:





Próximo passo seria verificar novamente o funcionamento do periférico do RTC através do software. Para isto utilizei o projeto que estará disponível ao final deste post.Mas tirei um screenshot do resultado obtido:

Teste da biblioteca do RTC e software:


Após isto conclui que o oscilador externo acabou sendo uma alternativa válida para o problema ocorrido com o cristal ligado diretamente aos pinos do microcontrolador, como seriam nos esquemas usuais para o periférico do RTC.

Caso, alguém tenha tido o mesmo tipo de problema, ou esteja querendo implementar esta solução ou alguma outra para o módulo RTC, gostaria de saber das idéias e/ou seus resultados obtidos. Assim podemos contribuir para todos que estejam utilizando esta plataforma em seus projetos.

Até a próxima.

Daniel Cezar.

[ DOWNLOAD ] 



Simulino: simulando Arduino

Vamos simular o Arduino?

Essa ideia não é nova, existem vários tutoriais por aí de como utilizar o Proteus ISIS para simular um Arduino, mas aqui vai um projeto mais organizado, com aparência e funcionalidade mais fiéis possíveis às queridas plaquinhas.
O apelido proposto para esse projeto é o "Simulino".

Simulino Uno no Proteus ISIS

O primeiro projeto é baseado no Arduino Uno R3, e tentei deixar com a mesma "cara" da placa, como mostra a figura acima.
No pacote de download, está disponível uma demostração simples, utilizando um LCD, teclas, LEDs e um terminal serial.


Para testar esta demostração, apenas abra o arquivo "SimulinoUno_Demo.DSN" e selecionar "PLAY".
Enviem suas alterações e melhorias! Espero que isso ajude os iniciantes, principalmente quando temos dificuldades de conseguir componentes para testar junto com nossos Arduinos.

PIC18DevBoard: simulando placa de desenvolvimento para PIC18

Estou trabalhando em algumas "placas" de desenvolvimento simuladas no Proteus VSM. O objetivo destes projetos é desenvolver plataformas de baixo custo para iniciantes em microcontroladores, junto com códigos de exemplo simples mostrando os primeiros passos para no desenvolvimento de sistemas embarcados.
A primeira plataforma traz um PIC18, muito difundido entre estudantes e hobbistas. A placa ainda não está completa, mas já possui recursos suficientes para testarmos muitas características do microcontrolador.

PIC18DevBoard

Download

[DOWNLOAD]

Esse pacote trás os projetos de hardware e firmware. Apenas descompacte o arquivo no local que preferir.


Hardware

A primeira versão da placa traz os seguintes recursos:
  • PIC18F4520;
  • 4x LEDs;
  • 4x chaves;
  • LCD 16x2;
  • Potenciômetro para conversor A/D;
  • Terminal serial;
  • EEPROM SPI 512 kbit.
Utilize o Proteus ISIS 7 para abrir a placa localizada no caminho: "PIC18DevBoard\Board".
Mais recursos serão adicionados ao hardware nas próximas versões.


Firmware

Para facilitar o trabalho com o microcontrolador e prever compatibilidade, estou escrevendo bibliotecas de drivers. Estas bibliotecas fazem uma interface entre o programa escrito pelo usuário e o hardware do microcontrolador.
Nessa versão inicial estão disponíveis 5 projetos de exemplo:
  • BasicDemo: código fonte com o mínimo necessário para ler uma entrada e ativar uma saída do PIC18. Sugiro que iniciantes comecem por este exemplo;
  • InputOutput: praticamente as mesmas funções do BasicDemo, mas utiliza o driver de I/Os e manipula mais entradas e saídas;
  • HelloLCD: imprime uma mensagem no LCD, utilizando o driver;
  • HelloSerial: imprime uma mensagem no terminal serial, utilizando o driver UART;
  • ADConverter: exemplo mais completo, lê a tensão do potenciômetro por meio do conversor A/D e mostra o resultado nos LEDs, no LCD e no terminal serial;
Mas tenha em mente: o uso desse tipo de bibliotecas facilita o desenvolvimento, mas limita o aprendizado.
Utilize o MPLAB X IDE para abrir os projetos. Os projetos de exemplo estão localizados no caminho: "PIC18DevBoard\Firmware\Examples".
Em breve irei escrever postagens dedicadas para cada exemplo, explicando cada um com detalhes, além de mais exemplos utilizando os demais recursos do microcontrolador.


Toolchain

Os projetos foram testados utilizando o MPLAB X IDE, e duas opções de compilador: MPLAB C18 e SDCC. As versões utilizadas foram as seguintes (clique nos links para downloads):
Porém o projeto não deve se limitar a essas ferramentas e essas versões.


Compilando e executando os exemplos

Vamos utilizar o exemplo "HelloLCD" para demonstração:

1 - Inicie o MPLAB X e selecione "File->Open Project...";


2 - Localize a pasta "PIC18DevBoard\Firmware\Examples\HelloLCD.X" e clique em "Open Project";


3 - Agora vamos compilar o projeto. Selecione "Run->Clean and Build Prject (HelloLCD)";


4 - Após o processo de compilação terminar, devemos obter um resultado semelhante ao da figura abaixo;


5 - Com o firmware compilado, vamos executar a simulação no Proteus ISIS. Inicie o Proteus e selecione "File->Open Design...";


6 - Localize o arquivo em "PIC18DevBoard\Board\PIC18DevBoard.DSN" e selecione "Abrir";


7 - Com o projeto aberto, clique com o botão direito sobre o PIC18F4520 e selecione "Edit Properties";


8 - Na janela de propriedades do componente, clique no ícone com o símbolo de uma pasta;


9 - Localize o arquivo "PIC18DevBoard\Firmware\Examples\HelloLCD.X\dist\PIC18DevBoard_C18\production\
HelloLCD.X.production.cof" e selecione "Abrir". Esse é o arquivo binário que seria gravado no microcontrolador. Depois clique em "OK";


10 - Pronto, agora é só iniciar a simulação clicando no botão "PLAY", no canto inferior direito da tela.


O resultado esperado é que o microcontrolador imprima as seguintes mensagens no LCD:


Para os demais exemplos, siga o mesmo passo-a-passo.


Colaborações são bem vindas! Não hesite em propor melhorias e correções.

Olá!


Esta é minha primeira postagem!

Neste blog irei escrever sobre sistemas embarcados, mas especificamente sobre microcontroladores.

O objetivo é ajudar os iniciantes nessa área e incentivar meus próprios estudos.

Seja bem vindo!