RELÓGIO DE PRECISÃO VIA SATÉLITE – C/ PIC 16F628A (REF327)

Obtenha hora certa usando a precisão dos satélites do sistema de posicionamento global (GPS)…

Atualmente é muito fácil encontrar módulos de GPS de tamanhos reduzidos e relativamente baratos, próprios para montagens experimentais. Então resolvi adquirir um módulo NEO-6M para iniciar alguns experimentos em conjunto com microcontroladores. Assim, como primeira montagem resolvi tirar proveito da contagem de tempo precisa dos satélites para obter um relógio de precisão. Veja o esquema abaixo:

O módulo GPS NEO-6M se comunica a 9600 bauds com o microcontrolador PIC16F628A. O protocolo usado é o NMEA, baseado no envio de sentenças com informações especificas. Mais detalhes sobre este protocolo pode ser facilmente encontrado em um pesquisa na internet.
Para o nosso programa, envolvendo obtenção de valores de tempos, usamos apenas a sentença iniciada por $GPRMC. Veja abaixo, de forma bem detalhada, como ela é formada:

$GPRMC,225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,020.3,E*68

Sendo:
225446 time of fix 22:54:46 UTC
A Navigation receiver warning A = OK, V = warning
4916.45,N Latitude 49 deg. 16.45 min North
12311.12,W Longitude 123 deg. 11.12 min West
000.5 Speed over ground, Knots
054.7 Course Made Good, True
191194 Date of fix 19 November 1994
020.3,E Magnetic variation 20.3 deg East
*68 mandatory checksum

Basicamente, capturamos os primeiros 6 caracteres que contém a horas, minutos e segundos. Estes caracteres estão prontos para ser enviados ao LCD para mostrar a hora padrão mundial ou hora UTC (Coordinated Universal Time).
Mas para podermos obter a hora local devemos informar o fuso horário em que nos encontramos e adiciona-lo ou subtrai-lo da hora UTC.
No começo do programa devemos alterar o valor do fuso horário da região do país em que estamos e depois recompilar o arquivo C com o CCS C Compiler, para obter a nossa hora local de forma correta. Note que os valores devem ser informados com sinal de + ou -.
Ex1: “-03:00” significando 3 horas atrasadas em relação a hora padrão UTC.
Ex2: “+10:00” significando 10 horas adiantadas em relação a hora padrão UTC.
Ao fazer a alteração certifique que a casa de dezenas de horas esteja preenchida, mesmo com ‘0’.
Ex3: “-03:15” correto
Ex4: “-3:15″ incorreto (causará mau funcionamento no programa)
O valor do fuso horário ficam salvos nos primeiros endereços da EEprom do PIC. Desta forma também é possível alterar o valor usando um programador de PIC.

Como fazer isto?
1º)Grave no PIC o hex fornecido.
2º)Leia todo o código do PIC incluindo a EEprom interna.
3º)Abra o conteúdo da EEprom e edite os valores para o novo fuso horário, seguindo o código ASCII para números.
4º)Salve as alterações e regrave todo o código de volta no PIC.

A visualização no LCD será desta forma:
linha 1 = hora UTC e linha 2 = hora local.
Ex5:
UTC=12:00:00
LOC=09:00:00

Ao ligar a alimentação, poderá demorar alguns segundos, até mesmo minutos, para o módulo GPS encontrar os satélites e começar a enviar informações corretas para o PIC. Isto dependerá muito dos obstáculos do ambiente em que a montagem se encontra. Se for o caso, mude a posição da montagem visando obter melhor recepção dos satélites. Durante este período sem sinal, aparecerá a mensagem na tela do LCD:”Aguarde o envio de dados corretos”. Caso ocorra falta de comunicação do módulo GPS com o PIC aparecerá a seguinte mensagem:”Sem comunicação com o modulo GPS”. Neste caso convém verificar as ligações entre os dois componentes, e conferir se a alimentação está sendo fornecida ao módulo GPS.
A obtenção das informações poderiam ter sido feitas com um buffer maior e usando biblioteca de manipulação de strings. Mas isto geralmente resulta em um consumo muito grande de espaço na memória de programa. Por este motivo optei em usar um código diferenciado. Até sobrou 50% de espaço na flash!

Obs. Esta montagem é experimental, sendo de caráter didático, montada apenas em placa experimental (do tipo “Protoboard”), sujeita a “bugs” ainda não detectados. Está sendo fornecido os arquivos para que cada hobista possa alterar o programa segundo suas necessidades.

Segue pasta zipada com os arquivos da montagem:

RELOGIO_GPS_ZIP

Manuais:
PIC16F628A
GPS NEO-6M DATASHEET

Curiosidades:
O encantador peixe-palhaço
O pescoço da formiga
Quem foi Erasmo de Roterdã?
Vença a guerra contra as doenças
O ciclo de vida da cigarra-periódica
Alergia alimentar e intolerância alimentar – Qual a diferença?

Outros assuntos:
Vale a pena ser pontual
O que realmente acontece quando morremos?
Como ajudar um amigo ou parente doente?
Três perguntas que as pessoas gostariam de fazer a Deus?

Vídeos:
Porque existe tanto sofrimento?
Vídeo Clip – Nunca estou só
Vídeo Clip – Na frente dos meu olhos
Como a vida começou
As maravilhas da criação revelam a glória de Deus – A água
Deixe a tristeza de lado
Eu me cansei das religiões

Até o próximo artigo!

7 comments on “RELÓGIO DE PRECISÃO VIA SATÉLITE – C/ PIC 16F628A (REF327)

    1. Sim, compilado para horário de Brasília. São -3h em relação a hora padrão mundial. Mas se você morar em um estado com fuso horário diferente, então poderá corrigir no arquivo C e recompilar usando o CCS C Compiler v3.200. Sei que o Brasil tem 4 fusos horários diferentes: Hora de Brasília (-3), do Acre (-5), do Amazonas (-4) e de Fernando de Noronha (-2).

  1. Olá Claudio.
    Interessante, o projecto.
    Qual é a versão do programa, compiler, CCS C que você usa, também a versão do compiler Xc8. ( Houve uma falha no meu PC e perdi os programas, já há bastante tempo que não pratico e não sei quais as versões).
    Obrigado.
    Cumprimentos.
    Eusébio

    1. Olá Eusebio
      Eu continuo usando as mesmas versões. Mas se puder baixar as versões mais novas é melhor, pois elas tem inovações e correções de bugs. Eu particularmente sou um pouco negligente nisto. Geralmente ao trocar de versão sempre ocorre algum “probleminha” para ficar corrigindo, ou tendo de baixar algum “plugin”. Outro problema é que rodo Windows XP na máquina que programo. Se eu troco para um Window mais novo eu não consigo usar alguns programas antigos baseado ainda em DOS. Enfim, sigo o ditado “Time que está ganhando não se mexe”.
      Agora se fosse mexer com os novos pics e microcontroladores ARMs então teria que trocar tudo: Windows mais recente, maquina mais potente, e uma cascata de problemas relacionados aos “velhos e bons programas”.

  2. Olá Marcos!
    Infelizmente, quando se trata de controle remoto com Ht6p20B está acontecendo um problema interessante. Deixe-me contar a minha experiência:
    Em uma casa de um conhecido, havia um conjunto Rossi instalado para acionar o portão. Quebrou uma engrenagem, que não compensava arrumar. Então troquei o conjunto completo com motor + placas + controles remotos. Este usavam o ci Ht6p20b.
    Instalei e começou a usar. Não demorou muito para a vizinha de umas 4 casas para baixo vir reclamar que quando o portão era acionado também acionava o dela. Para não ter de comprar outros controles resolvi deixar a placa Rossi e os controles antigos.
    Conclusão: Muitos controles com Ht6p20b estão sendo clonados com mesmos códigos e vendidos muitas vezes na mesma região. Já a placa Rossi tem o sistema rolling code (hope coding) com o Hcs300.
    Eu particularmente não uso mais este modelo de C.I. visto que ele tem estes problemas. Acredito que possa estar acontecendo isto.
    Tente programar outros controles apagando todos os atuais.

  3. boas Claudio a coisa continua falhando esse projeto FAÇA SUA PLACA DE CONTROLE REMOTO PARA PORTÃO AUTOMÁTICO – COM PIC 12F629 (VERSÃO PARA CI HT6P20B) fica abrindo sozinho dando sutos de funcionamento sem que seja acionado o controle remoto ele abre sozinho ja gravei e regravei o controle diversas vezes consegue fazer uma atualizaçao definitiva nesse projeto. forte abraço

Comments are closed.

Back To Top