Página 1 de 1

HT6P20B (da teoria para a pratica)...

MensagemEnviado: 20 Mai 2007 12:12
por Fabio_Jerena
Acho que começo pecando no meu programa pela forma com que eu estou abordando o problema, minha ideia para decodificar esse CI é a seguinte:
- Medir a largura dos pulsos existentes na word(eu encontrarei duas larguras, a do startbit/24 clocks e a dos bits/3 cloks, pela largura eu consigo identificar quando o código começa, daí eu ia ler a cada T de bit/2, ou seja, eu seja, a cada borda de descida eu aguardo meio período de bit e faço a leitura neste momento (pois se for um vou ler zero e se for zero vou ler um)).
Só que eu estou achando que esse método é furado pois só uma leitura no bit fará com que a leitura seja totalmente susceptível a problemas devido ruído já que se ele ler errado um bit perde a word inteirinha...
Quem já fez esse decoder resolveu o problema como, medindo a largura do pulso em nível 1 e em nível 0, usou interrupções e etc???
Eu estou medindo a largura de pulso com o modulo CCP do 16F628A, qualquer ajuda é bem vinda, muito obrigado!!!

MensagemEnviado: 21 Mai 2007 08:07
por fabim
- Medir a largura dos pulsos existentes na word(eu encontrarei duas larguras, a do startbit/24 clocks e a dos bits/3 cloks..

de onde vc tirou isso ???

fabim

MensagemEnviado: 21 Mai 2007 11:43
por Fabio_Jerena
Olhando o manual têm a forma com que o CI transmite o código + informação, o Startbit possui uma largura de 24 cliclos de máquina do HT, 23 em nível 0 e um em nível 1, já os bits possuem 3, podendo ter 2 ciclos em nível 0 ou um...
Só não entendi muito bem se ele dá um tempo entre as word´s, se não der são somente duas larguras de pulso, sendo que exatamente no meio do T dos bits consegue se diferenciar o valor do bit!

MensagemEnviado: 21 Mai 2007 12:47
por EDSONCAN
Na verdade eu dividi em 4 larguras:
- inicio bloco
- fim bloco
- bit 0
- bit 1
O resto sao contadores em um timer fixo.
Para evitar ruidos, conta em zero e conta em em 1 consecutivamente.
Um serve para validar o que contou em zero.
Conforme o estado anterior do sistema, o zero pode ser inicio ou fim do bloco ou bit 0 e bit 1.
Tem um monte dessas rotinas por ai, acho que ate no forum tem alguma coisa pronta.
Edson

MensagemEnviado: 21 Mai 2007 15:18
por Fabio_Jerena
Eu já dei uma pesquisada pelo fórum e têm o programa para assembly, eu podia muito bem colocá-lo no meu projeto em C mesmo e tocar prá frente, mas queria tentar fazer o meu programa, desenvolver o conceito, eu não consegui entender a técnica de medição dos níveis 0 e 1 do programa escrito pelo Fabim...
Eu tb não entendi muito bem a carta de tempos desse CI, o que eu entendi agora depois de dar uma olhada é que ele transmite uma word e espera o tempo de uma word em zero, é isso???

MensagemEnviado: 23 Mai 2007 00:13
por Fabio_Jerena
Dá certo eu medir as larguras de pulso assim:

while(!entrada)
{
tempo_nivel_zero = tempo_nivel_zero +1;
}

while(entrada)
{
tempo_nivel_um = tempo_nivel_um +1;
}

if (tempo_nivel_zero > tempo_nivel_um)
{
valor_bit = 1;
}
else
{
valor_bit = 0;

}

E estava pensando em fazer uma jogada com o Timer0 para identificar o Startbit, se não zerar o timer antes de ocorrer uma borda de descida por exemplo as próximas leituras já serão a word...

Eu estou tendo uma dificuldade danada com esse software, não tenho osciloscópio, é terrível ficar só no mundo virtual, mas mesmo assim eu ainda não desisti, agradeço quem puder me dar uns toques ou com programação, ou entendendo o CI, até agora eu não entendi se ele fica um tempo sem transmitir nada ...

MensagemEnviado: 24 Mai 2007 19:31
por cristian
boa noite , bla bla....

estou fazendo um decoder do 6p20 e uso o ccp do pic identifico o startbit que fica em Low e aguardo a borda de subida ligo o timer1 e aguarda a borda de descida...desligo o timer pego seu valor e vou pra tabela testar se o tempo foi maior do x microseg emtao ele é Nivel alto e vice versa

o problema do ruido com o osciloscopio percebi que sem recepçao tinha uns picos e tal

dai o pic aguarda o birstart a 1 word e so na segunda ele salva o codigo acabou meus problemas de ruido

MensagemEnviado: 28 Mai 2007 16:35
por cristian
qual a melhor forma de decodificar o HT

espera o sinal piloto e de tempo em tempo checa a porta se é 1 ou 0
ou
medindo a largura do pulso ?

MensagemEnviado: 06 Jun 2007 13:02
por Fabio_Jerena
cristian escreveu:qual a melhor forma de decodificar o HT

espera o sinal piloto e de tempo em tempo checa a porta se é 1 ou 0
ou
medindo a largura do pulso ?


Ainda acho que a melhor forma é medindo a largura de pulso, pois gera uma redundancia de informações (já que vc acaba medindo o periodo inteiro que ele fica em 0 ou em 1), não só num instante, onde pode a verdade ler uma interferência momentânea, fora que será mais versátil com o controle que pode possuir diversos resistores (oscilador).

MensagemEnviado: 06 Jun 2007 13:27
por fabim
huahuahua.. aiai. Desculpem mais não resisti.

Ta vendo, se conhecessem um tiko de asm..

Abraços

Fabim

Não existe a forma certa de se fazer

MensagemEnviado: 06 Jun 2007 22:53
por Andre Rasminio
Acho que não existe a forma "mais correta de se fazer" , e sim a forma com que funcione com os seus periféricos disponíveis.
Fiz este decodificador sem utilizar nenhuma interrupção de timer ou externo, fiz isso pq eu não tinha periféricos disponíveis, tava utilizando os dois timers e tambem a interrupção externa para outra coisa.
Se alguem quiser a função que fiz para isto eu envio por email.

Re: Não existe a forma certa de se fazer

MensagemEnviado: 08 Jun 2007 08:01
por fabim
Andre Rasminio escreveu:Acho que não existe a forma "mais correta de se fazer" , .


OBS.. Existe sim, no caso de digital sempre existe a forma correta, simples, complicada = derivando isso pega-se a que funciona.

Eu bolei o programinha pra decodificar HT6P20B pro 16F628 e acabei passando o 12f629 por ser bem pequeno o programa.
Meu programa ao mesmo tempo para quem não conhece asm é complicado, mais pra quem começou com asm como eu e muitos outros aqui no forum, o programa é simples e correto.

Abraços

Fabim

OBS, ja expliquei exatamente como o meu fonte funciona em outros post´s, sem mais nem menos.