Com o aumento de roubos, a indústria de alarme tem prosperado. Temos também, os controles remotos de portões automáticos. São inúmeros modelos e a maioria utiliza pequenos controles remotos com o circuito integrado HCS 200 a 301. O preço de tais ‘chaveirinhos’ varia de R$10,00 a R$50,00 (depende do ‘luxo’).
Muitas vezes, precisamos de um controle remoto especifico para nossa aplicação (ex. alarme,painel de fila, portão). Mas o HCS vem programado com uma ‘chave’ (KEY) própria e funciona somente em equipamento da mesma empresa, com a mesma ‘chave’. E se pudéssemos ‘escolher’ a nossa ‘chave’ e reprogramar estes ‘chaveirinhos’ para nossa aplicação?
Com certeza, ficaria bem mais prático. Procurando informações sobre estes circuitos integrados na rede mundial, encontrei vários datasheets e até um modelo de programador usando um pic. Mas o circuito parece bem limitado, necessitando reprogramar este PIC cada vez que eu queiramos mudar, por exemplo, o ‘Serial Number’ ou a ‘Key’ . Mas serviu de base para este projeto – HCS_PROG, que usa um AT89S52 ( com bastante memória de programa (8KB), uma EEprom externa do tipo 24C04 para salvar dados a serem programados, e mais alguns componentes como fontes,diodos, leds, resistores, etc. Veja o esquema abaixo:
Nota-se uma entrada DB9 (serial) para comunicar com um PC via um terminal serial (ex. HyperTerminal). Pode-se por este meio, configurar valores da chave a ser usada (Key 0…4), mudar o numero serial ( “Serial Number”), mudar o valor do numero discriminador (“Disc”), etc. Sobre a função de cada um dos dados, leia os datasheets do modelos, que não é muito difícil de entender o funcionamento.
Ao ligar o HCS_PROG , já conectado ao PC e o terminal ligado a 9600 bauds, 8 bits, s/paridade,normal, deverá aparecer o nome do programador e nas linhas seguintes os comandos:
V= ver dados a serem gravados,
C= alterar dados (key,serial,etc),
G=gravar dados no HCS desejado ,
M= alterar o modelo que se deseja gravar e
A= ajuda.
Sem alterar manualmente o Serial Number, ele será automaticamente incrementado a cada chip programado com sucesso.
Também na função ‘D’ ‘Disc’ após clicar em ‘C’ , aparecerá se deseja fazer o numero de discriminação = aos 12 bits menos significativos da ‘Serial Number’. Penso que em futuros projetos deste blog, Disc=Ser será bem usado, por ser o método mais simples de determinar a aceitação ou não de uma transmissão.
Recapitulando: quando o ‘chaveirinho’ envia uma transmissão, junto vai um número chamado ‘discriminador’ que ,após a decriptação (desembaralhar) dos dados, se o valor de Disc for igual ao valor do Serial Number, basta apenas comparar estes no receptor. Se o valor de Disc no TX for diferente do Serial Number, teremos que salva-lo na memória EEprom da aplicação, ficando difícil usar o método de ‘aprender’ o controle.
Este programador, após ser escolhido os dados para os modelos, pode ser usado sem o PC (Stand Alone). No botão “modelo” podemos escolher de HCS 200 a 301. Também acenderá o respectivo led do modelo .
No botão “programar”, será usado para programar, e no led “sucesso/falha” teremos a seguinte indicação:
1 piscada – gravação bem sucedida
varias piscadas = falha na gravação.
Verifique se está usando modelo certo, se tem chip no soquete, etc.
Se ocorrer algum travamento, deverá ser usado o botão “reset”.
Lembre-se sempre: A chave programada no chip HCS tem que ser a mesma usada na Decriptação na aplicação. Se não , não haverá aceitação ao tentar ‘aprender’ o controle. Logicamente, este projeto visa apenas ajudar hobistas e não deve usado para fins comerciais. O codigo ASM é bem extenso, porque , com tanta memória, fiquei tentado a colocar muitas mensagens e não me preocupei muito com o tamanho das rotinas. Por ora, temos uma Note Aplication que tem um circuito que pode ser usada para testar o sucesso da programação ou usar esta montagem do próprio blog, chamada de receptor genérico. Breve teremos outras. Aguarde!
Segue abaixo o código ASM para o AT89s52:
Segue abaixo o código HEX para o AT89s52:
Segue os links para os datasheets abaixo:
Errata: Corrigido falha que não permitia mudar o Serial Number (os arquivos acima foram corrigidos).
Corrigido falha ao digitar ‘Config’.
Abaixo temos a visualização da tela do PC com o HyperTerminal rodando, ligado o programador.
Abaixo temos uma representação de como devemos inserir os vários valores de configuração, lembrando que o primeiro digito é o mais significativo e o segundo o menos significativo ( o que as vezes, gera confusão). Pode-se usar um “control_tester” para visualização.
Quanto a valores que devem ser setados antes de programar um HCS, deve-se dar atenção especial para o 12º byte ( byte11 de 16 bits), chamado de ‘CONFIGURATION WORD’ ou palavra de configuração. Veja o que é cada bit para cada modelo abaixo:
Modelo HCS 200
bit 0 = discrimination 0 ( o bit ‘LSB’ da palavra de ‘discriminação’ que será comparada com o valor recebido da parte encriptada)
bit1 = discrimination 1
bit2 = discrimination 2
bit3 = discrimination 3
bit4 = discrimination 4
bit5 = discrimination 5
bit6 = discrimination 6
bit7 = discrimination 7
bit8 = discrimination 8
bit9 = discrimination 9
bit10 = discrimination 10
bit11 = discrimination 11 ( o bit ‘MSB’ da palavra de ‘discriminação’ que será comparada com o valor recebido da parte encriptada)
bit12 = Low Voltage Trip Point Select (seleção de voltagem mínima da bateria) se 1= +- 8,5 volts (para baterias de 12 ou 9 v) ; se= 0 +- 4,5 volts(para baterias de 6v) Função:seta o penúltimo bit recebido chamado ‘ Vlow’ da transmissão) indicando que é hora de trocar a bateria).
bit13 = Baud Rate Select (seleção do Baud Rate da transmissão) se=0, teremos períodos de cada bit transmitido de 400us e se=1, teremos períodos de 200us
bit14 = 0 (não usado, resetar)
vit15 = 0 (não usado, resetar)
Modelo HCS201
bit0 = osc0 (sintonia fina do oscilador interno em +- 10% da frequência nominal em 16 níveis possíveis)
bit1 = osc1 (idem)
bit2 = osc2 (idem)
bit3 = osc3 (idem)
bit4 = Vlow (nível de indicação de bateria fraca) Sendo: = 0 , indicará com 4,4 volts; sendo =1 e s3set=0, indicará com 9 volts e sendo=1 e s3set=1,indicará com 6,75 volts. Quando a tensão da bateria for menor que os valores ajustados em ‘Vlow’ e ‘S2set’ irá setar o penúltimo bit da transmissão (Vlow).
bit5 = BRS (Baud Rate Select) Se=0 teremos períodos de cada bit transmitido de 400us e se=1, teremos períodos de 200us.
bit6 = MTX4 (1 ou 4 transmissões sucessivas) Se MTX4=0, uma única transmissão a um toque de botão. Se MTX4 =1 e BRS=1 , teremos 4 transmissões consecutivas e completas a um toque de botão.
bit7 = TXEN (transmite um pulso de ‘start’ antes da transmissão normal) . Se TXEN=0 , sem ‘start pulse’. Se TXEN=1, envia ‘start pulse’.
bit8 = S3SET (Valor de bit s3 na transmissão e nível de tensão da bateria). Se S3SET= 0 , S3 será espelho de S2 e se S3SET=1 , S3 será sempre ‘1’ e habilitará outro nível de tensão para aviso de bateria fraca.
bit9 = XSER (‘Serial Number’ estendido). Se XSER=0 , serão transmitidos 28 bits de ‘Serial Number’ mais os 4 botões. Se XSER=1, será transmitidos todos os 32 bits do ‘Serial Number’ sem os botões. (Atenção com este bit, ao programar).
bit10 a 15 = 0 ( não usados, resetar).
Modelo HCS300
bit 0 = discrimination 0 ( o bit ‘LSB’ da palavra de ‘discriminação’ que será comparada com o valor recebido da parte encriptada)
bit1 = discrimination 1
bit2 = discrimination 2
bit3 = discrimination 3
bit4 = discrimination 4
bit5 = discrimination 5
bit6 = discrimination 6
bit7 = discrimination 7
bit8 = discrimination 8
bit9 = discrimination 9
bit10 = OVR0 (‘over flow 0’, aumenta números possíveis de sincronização sem repetir o código transmitido (até 131072 vezes).
bit11 = OVR1 (‘over flow 1’, aumenta números possíveis de sincronização sem repetir o código transmitido (até 198608 vezes).
bit12 = Low Voltage Trip Point select (seleção de voltagem mínima da bateria) se 1= +- 8,5 volts (para baterias de 12 ou 9 v) ; se= 0 +- 4,5 volts(para baterias de 6v) Função:seta o penúltimo bit recebido chamado ‘ Vlow’ da transmissão) indicando que é hora de trocar a bateria).
bit13 = BSL0 (seleção do Baud Rate da transmissão) com BSL1=0 e BSL0=0, teremos períodos de cada bit transmitido de 400us e se BSL=1, teremos períodos de 200us
bit14 = BSL1 (seleção do Baud Rate da transmissão) se=1, teremos períodos de cada bit transmitido de 100us (independente do valor de BSL0) e se BSL1=0 , dependerá somente de BSL0)
vit15 = 0 (não usado, resetar)
Obs. O bit mais significativo do ‘Serial Number’ bit31 se for setado (=1) irá habilitar um timer de 25 segundos que desliga a transmissão, mesmo se a pessoa mantém os botões acionados. Se =0 , ficará desabilitado.
O último bit recebido em uma transmissão, será o RPT. Este indicará se = 0 , que é a primeira transmissão, e se=1 , botão apertado e recebendo novas transmissões sucessivas e repetidas.
Modelo HCS301
bit 0 = discrimination 0 ( o bit ‘LSB’ da palavra de ‘discriminação’ que será comparada com o valor recebido da parte encriptada)
bit1 = discrimination 1
bit2 = discrimination 2
bit3 = discrimination 3
bit4 = discrimination 4
bit5 = discrimination 5
bit6 = discrimination 6
bit7 = discrimination 7
bit8 = discrimination 8
bit9 = discrimination 9
bit10 = OVR0 (‘over flow 0’, aumenta números possíveis de sincronização sem repetir o código transmitido (até 131072 vezes).
bit11 = OVR1 (‘over flow 1’, aumenta números possíveis de sincronização sem repetir o código transmitido (até 198608 vezes).
bit12 = Low Voltage Trip Point Select (seleção de voltagem mínima da bateria) se 1= +- 8,5 volts (para baterias de 12 ou 9 v) ; se= 0 +- 4,5 volts(para baterias de 6v) Função:seta o penúltimo bit recebido chamado ‘ Vlow’ da transmissão) indicando que é hora de trocar a bateria).
bit13 = BSL0 (seleção do Baud Rate da transmissão) com BSL1=0 e BSL0=0, teremos períodos de cada bit transmitido de 400us e se BSL=1, teremos períodos de 200us
bit14 = BSL1 (seleção do Baud Rate da transmissão) se=1, teremos períodos de cada bit transmitido de 100us (independente do valor de BSL0) e se BSL1=0 , dependerá somente de BSL0)
vit15 = 0 (não usado, resetar)
Obs. O bit mais significativo do ‘Serial Number’ bit31 se for setado (=1) irá habilitar um timer de 25 segundos que desliga a transmissão, mesmo se a pessoa mantém os botões acionados. Se =0 , ficará desabilitado.
O último bit recebido em uma transmissão, será o RPT. Este indicará se = 0 , que é a primeira transmissão, e se=1 , botão apertado e recebendo novas transmissões sucessivas e repetidas.
Curiosidades:
Como se mede a temperatura do planeta Terra?
A arte e a ciência da previsão do tempo
Seu filho está com febre?
Cuidado com os alimentos!
Robert Boyle
Outros assuntos:
Desempenhem bem seu papel de pais
Como lidar com sogros
Como lidar com dívidas
Como parar de discutir com seu cônjuge
Como sobreviver ao primeiro ano de casamento
Até o próximo artigo!
Olá gostaria de saber se consigo clonar um controle da marca pecinnin pois ele usa um hcs201. Ou seja. Pegar um ja programado e clonar e nao precisar de programar de novo no receptor
Olá Nrchaves!
Os circuitos integrados da familia ‘hcs’ são projetados com o sistema ‘ hopping code’ ou ‘código esperado’. A cada transmissão é calculado um novo valor a transmitir e o sistema receptor ‘espera’ receber este valor. É baseado em criptografia e não pode ser clonado, uma vez que necessita de uma ‘key'(sequencia de números para embaralhar) e o ‘serial number'(número do tx de fabrica) para gerar o novo código a transmitir. Só é possivel clonar ‘hcs’ quando são usados em modo não criptografado,usando apenas seu ‘serial number’, que não é o caso da placa ‘pecinnin’.
Claudio
Claudio tudo bom.quando eu conecto o programador no terminal do pc,ele escreve o nome do programador,e as
teclas de comando,: V= ver dados a serem gravados, C= alterar dados, G=gravar dados no HCS desejado, M= alterar o modelo que se deseja gravar e A= ajuda.
até ai tudo bem,mas quando vou configuar,eu digito as teclas,v,c,g,m,a, não responde aos comandos.
Eu não consigo configurar o programador.
exemplo;digito a tecla = C , não tenho resposta.
Prezado Sandro
Pelo que posso perceber, o programador está comunicando com o Pc mas o Pc não está comunicando. Certifique que o sinal chega ao pino 10 do at892051. Use um osciloscópio, ou senão dispor, use o metodo ‘caseiro’ de colocar um fone de cristal para ouvir o sinal na hora que voce teclar os comandos.Eu uso um de campainha de telefone em serie com resistor de 1k. Siga o sinal do pino 10 até a db9 pino 3. Geralmente, é comum se enganar com a polaridade dos diodos d1 e d2. Cheque as ligações e a montagem do transistor q2, que podem estar trocados o emissor pelo coletor, na hora de soldar na placa. Eu montei o circuito no protoboard e não tive este problema.Verifique o cabo db9, se não está interrompido o fio do pino 3 de um lado ao outro. Faça esta checagem, depois me da um retorno.
Olá Cladio,montei o hcs prog aparece o nome do programador e os comandos,mas as teclas que pede
p/ configurar os comandos não obedece.
Já chequei tudo, o terminal esta ligado a 9600 bauds,8 bits, s/paridade,normal,o circuito esta
fazendo todos os comandos.
A onde esta o erro,vc pode me ajudar!
Fico muito agradecido.
Oi Sandro
Não entendi bem. Voce diz que está ‘fazendo todos os comandos’ e ‘para configurar não obedece’!
Por favor, descreva ‘com mais palavras’, o que está acontecendo quando voce faz determinado comando, para ter uma idéia melhor do problema. Enquanto espero sua resposta, vou pegar o esquema e o codigo hex do site e remontar para ver se não tem ‘gato no telhado’. Claudio
Prezado Sandro
Realizando os testes, verifiquei que o pino de alimentação no esquema postado anteriormente estava com sendo ‘4’ e na realidade tem que ser ‘8’ (veja datasheets). Por favor, verifique isto no seu circuito, corrija se necessário e me de um retorno. Quanto ao codigo hex e asm, não encontrei nada de errado que pudesse dar algum problema. Claudio