Autor Tema: Posible bug ccs4.084  (Leído 3503 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: Posible bug ccs4.084
« Respuesta #15 en: 31 de Enero de 2009, 14:28:21 »
Estoy leyendo el RC5 de phillips y ya veo de dónde sacas los 889ms, es la mitad de tiempo de un toggle. Lo que no sé bien es porque esperas tanto tiempo...

La verdad es que copie ese codigo del foro, y como funcionaba con un mando universal no me preocupe de mas, echare un vistazo al RC5 a ver si comprendo lo que dices.

Un saludo.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: Posible bug ccs4.084
« Respuesta #16 en: 31 de Enero de 2009, 18:48:53 »
Buenas. He estado mirando como funciona el RC5, y por lo que veo un 'o' es un nivel alto durante 889us seguido de un nivel bajo de 889us. Un '1' es un nivel bajo durante 889us seguido de un nivel alto de 889us.

Por otro lado una trama completa consta de dos unos seguidos, llamados bits de star, un bit de 'tongle', que sirve para distinguir una sola pulsación de una pulsacion mantenida, cinco de direccion, y seis de comando.

En teoria para leer una trama, (El receptor de infrarrojos invierte la señal) detectamos una bajada de la salida del detector, contamos 444us, con lo cual nos situamos a 1/4 del primer bit (un bit son 889+889 us), testeamos ese nivel, y contando otros 889us nos situamos a 3/4 del primer bit, testeamos ese nivel, y si es contrario al nivel testeado anteriormente, de momento es un codigo rc5. Guardamos el primer nivel testeado, contamos otros 889us y entonces estamos a 1/4 del segundo bit. Esto se repetiria hasta completar los 14 bit.

Esto se corresponderia con este codigo:

Código: [Seleccionar]
#INT_EXT
void MandoDistancia(){

delay_us(444); //Espera 444

while((nbit++ != 13) && (state == 0)){

   if(input(REC_IR)==0){
        delay_us (889);
        if(input(REC_IR) != 1)
            state=1;
        bit=0;
   }else{
         delay_us(889);
         if (input(REC_IR) != 0)
               state=1;
         bit=1;
   }
   shift_left(data,2,bit);
   delay_us (889); //ESTO ES LO QUE CAMBIA DEL CODIGO ANTERIOR
}

Pues bien, eso no se porqué pero no funciona, sin embargo el codigo puesto por migsantiago un poco mas arriba, si funciona (a 8Mhz claro, a 4Mhz no).

PD: Aqui se puede ver graficamente algo del RC5

http://robots-argentina.com.ar/Comunicacion_protocolorc5.htm

Un saludo.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡


 

anything