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 ]