HCS_PROG – PROGRAMADOR DE HCS 200/201/300/301 COM AT89S52

1

Com o aumento de roubos, a industria de alarme tem prosperado.  Temos também, os controles remotos de portões automaticos.   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)   propria e funciona somente em equipamento da mesma empresa,  com a mesma  ‘chave’.   E se pudessemos ‘escolher’ a nossa ‘chave’ e reprogramar estes ‘chaveirinhos’ para nossa aplicação?

Com certeza, ficaria bem mais prático. Procurando informações sobre estes ci’s na rede mundial, encontrei varios 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 dificil  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 metodo mais simples de determinar a aceitação ou não de uma transmissão. Traduzindo: quando o ‘chaveirinho’ envia uma transmissão, junto vai um numero chamado ‘discriminador’ que ,após a decriptação (desembaralhar) dos dados, se disc for igual ao serial number , basta apenas
comparar estes no receptor. Se disc for diferente, teremos que salva-lo na memória eeprom da aplicação, ficando dificil usar o metodo 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, chamadade receptor genérico.  Breve teremos outras. Aguarde!

Segue abaixo o codigo asm para o AT89s52:

HCS_PROG_ASM2

Segue abaixo o codigo Hexa para o AT89s52:

HCS_PROG2_HEX

Segue os links para os datasheets abaixo:

HCS200 HCS201 HCS300 HCS301

Errata: Corrigido falha que não permitia mudar o Serial Number (os arquivos acimas 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 minima 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útimo 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 nivéis possíveis)

bit1 = osc1 (idem)

bit2 = osc2 (idem)

bit3 = osc3 (idem)

bit4 = vlow (nivel 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’ extendido). 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’,extende números possíveis de sincronização sem repetir o código transmitido (até 131072 vezes).

bit11 = OVR1 (‘over flow 1’,extende 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 minima 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útimo 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’,extende números possíveis de sincronização sem repetir o código transmitido (até 131072 vezes).

bit11 = OVR1 (‘over flow 1’,extende 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 minima 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útimo 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 conjuge
Como sobreviver ao primeiro ano de casamento

Até o próximo artigo!

1

7 comments

  1. 0

    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

    1. 0

      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

  2. 0

    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.

    1. 0

      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.

  3. 0

    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.

    1. 0

      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

      1. 0

        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

Comments are closed.