ImagenImagenImagenImagen
Hazte Socio (El Foro siempre Gratis)
Paga con Tarjetas+ Info www.arde.cc/socios

PINGUINO & RC5 IR CODE

Postea aqui toda la parte de programación del lenguaje C, C++, C#...

Moderador: Junta Directiva

Responder
Avatar de Usuario
EA7FNJ
Visitador del Foro
Visitador del Foro
Mensajes: 88
Registrado: Lun Dic 11, 2006 12:09 am
Nombre: Juan
Ubicación: Malaga
Contactar:

PINGUINO & RC5 IR CODE

Mensaje por EA7FNJ » Mar Dic 28, 2010 6:28 pm

Buenas jóvenes.

Tiempo hace que no paso por estos lares.

A ver, al grano, estoy intentando coger el código RC5 de infrarrojos con el siguiente programa:

Código: Seleccionar todo

/*-------------------------------------------------------------------*/
#define P1     	 13    //LED 1
#define P2     	 16    //LED 2
#define IR     	 17    //signal from IR receiver SFH506
#define halfbit 	889  //time [µs] of 1/2 bit
/*-------------------------------------------------------------------*/
void setup(void)
{
   pinMode(P1,OUTPUT);
   pinMode(P2,OUTPUT);
   pinMode(IR,INPUT);

   digitalWrite(P1,LOW); //LED1 off
   digitalWrite(P2,LOW); //LED2 off  
}
/*-------------------------------------------------------------------*/
uint RC5_data()  //this subfunction waits for a RC5 signal and decodes it.
{
   uint D0,D1,i;
	
	D0 = 0;
	D1 = 65535;

   if (digitalRead(IR))               //skip if 0
   {
      while (digitalRead(IR));        //wait for "1 to 0" edge (falling edge)
      delayMicroseconds(halfbit/2);	//wait 444.5us
      
      for(i=0;i<13;i++)       		  //read the following 13 bits
      {         
         D1=D1*2+(digitalRead(IR));   //and read data
			delayMicroseconds(halfbit);  //wait for a half bit-time
			D0=D0*2+(digitalRead(IR));   //and read inverted data
         delayMicroseconds(halfbit);  //wait for a half bit-time         
      }
            
      if ((D0^D1)==65535) 
      {                                               
			return (D1 & 0x7FF); 
		}
      else return (0);
   }
   else return (0);
}
/*-------------------------------------------------------------------*//
void loop(void)
{
	int datos;
	
	while(1)
	{
      
      datos = 0;
      datos = RC5_data();                    //read RC5 
            
      if (datos==1)
      {
			digitalWrite(P1,HIGH); //if "1" is pressed switch on LED1
			delay(2000);
		}
		
      if (datos==2)
      {
			digitalWrite(P2,HIGH); //if "2" is pressed switch on LED2
			delay(2000);
		}
			
         digitalWrite(P1,LOW);          
         digitalWrite(P2,LOW);           
	}
}
PROBLEMA: no consigo ver si lo hace bien. He probado con un LCD 2x16 y cogia valores muy cercanos pero en ninguno de los casos conseguia coger bien el código. Pero el LCD creo que ha pasado a mejor vida y a falta de un monitor de USB, me las veo mal para verlo.

He pensado en mirarlo por el ICD2 pero implica tocar todo el código y pasarlo a CCS para verlo.

¿Alguna alma candida que lo mire a ver si me he pasado algo?


¡¡Qué bien se vive en el Sur!!

BoOpS
Administrador
Administrador
Mensajes: 1812
Registrado: Lun Sep 19, 2005 7:29 pm
Nombre: Javier

Re: PINGUINO & RC5 IR CODE

Mensaje por BoOpS » Mar Dic 28, 2010 7:08 pm

Por que no usas el modo CDC que es un puerto serie virtual?
Mi Blog de RoBoOpS

Avatar de Usuario
EA7FNJ
Visitador del Foro
Visitador del Foro
Mensajes: 88
Registrado: Lun Dic 11, 2006 12:09 am
Nombre: Juan
Ubicación: Malaga
Contactar:

Re: PINGUINO & RC5 IR CODE

Mensaje por EA7FNJ » Mar Dic 28, 2010 7:11 pm

Si añado una linea mas de programa, rebaso el mapa de memoria asignado por el bootloader, parpadea el diodo de RUN
¡¡Qué bien se vive en el Sur!!

BoOpS
Administrador
Administrador
Mensajes: 1812
Registrado: Lun Sep 19, 2005 7:29 pm
Nombre: Javier

Re: PINGUINO & RC5 IR CODE

Mensaje por BoOpS » Mar Dic 28, 2010 7:13 pm

:S que va! si aun le caben muchas cosas más debe haber algun fallo.
Mi Blog de RoBoOpS

Avatar de Usuario
Sphinx
Usuario Experto
Usuario Experto
Mensajes: 639
Registrado: Jue Abr 03, 2008 4:45 pm
Ubicación: Madrid
Contactar:

Re: PINGUINO & RC5 IR CODE

Mensaje por Sphinx » Mar Dic 28, 2010 8:14 pm

Hola EA7FNJ,

Primero, por un lado, vas a tener problemas con la rutina de creación de retardos, delayMicroseconds. La razón : La actual rutina de generación de delays (ya sea de milisegundos o microsegundos) no está ajustada al reloj interno del 18Fx550. En el post "Problemas con CPU Clock de Pinguino" comentaba este tema hace unos meses.
Para solucionarlo, creé una librería y se la envié a JP Mandon. JP la tiene pendiente de incluir en el próximo IDE de Pinguino. En la release más reciente, la Beta 9.05, todavía no está incluida. Si necesitas la librería, te la puedo enviar o puedes cogerla a través del grupo de Pinguino en Google: En este otro post del grupo explicaba como instalarla y utilizarla (está en inglés, estaba pensando en traducirlo al castellano en mi blog a la vista de lo que está tardando en ser incluida en el IDE. Dime si lo necesitas).

Por otro lado, en esta última versión del IDE que comentaba (Beta 9.05), tengo entendido que se puede enviar strings de vuelta al IDE para depuración. Creo que entre los ejemplos incluidos ahora se puede ver. No te sé decir exactamente como, porque no lo he utilizado aún.

Saludos,
Sphinx.
Tanto si piensas que puedes, como si piensas que no puedes, estás en lo cierto.- Henry Ford
>> Mis experiencias y proyectos robóticos: http://linuxdroids.com

Avatar de Usuario
EA7FNJ
Visitador del Foro
Visitador del Foro
Mensajes: 88
Registrado: Lun Dic 11, 2006 12:09 am
Nombre: Juan
Ubicación: Malaga
Contactar:

Re: PINGUINO & RC5 IR CODE

Mensaje por EA7FNJ » Mar Dic 28, 2010 10:32 pm

Es lo que me estaba temiendo, que no contase bien los microsegundos.

D1: 57464 D0: 06023 D1^D0:63487
D1: 57464 D0: 06023 D1^D0:63487
D1: 58488 D0: 07047 D1^D0:65535
D1: 58488 D0: 07047 D1^D0:65535

D1: 57464 D0: 06023 D1^D0:63487
D1: 57464 D0: 06023 D1^D0:63487
D1: 58488 D0: 07047 D1^D0:65535
D1: 58424 D0: 07047 D1^D0:65471
D1: 57464 D0: 06023 D1^D0:63487
D1: 57464 D0: 06023 D1^D0:63487
D1: 58488 D0: 07047 D1^D0:65535
D1: 58488 D0: 07047 D1^D0:65535

D1: 57464 D0: 06023 D1^D0:63487
D1: 57464 D0: 06023 D1^D0:63487
D1: 58424 D0: 07047 D1^D0:65471
D1: 58488 D0: 07047 D1^D0:65535

El caso es que aproximo el código pero no lo consigo. Dime por donde tienes la libreria a ver si esta noche cojo ya el código RC5 que me hace falta para el concurso.

Gracias

PD: Acabo de pasar a 9.05 y la comunicacion CDC se ha ido al traste.
¡¡Qué bien se vive en el Sur!!

Avatar de Usuario
EA7FNJ
Visitador del Foro
Visitador del Foro
Mensajes: 88
Registrado: Lun Dic 11, 2006 12:09 am
Nombre: Juan
Ubicación: Malaga
Contactar:

Re: PINGUINO & RC5 IR CODE

Mensaje por EA7FNJ » Mié Dic 29, 2010 7:36 pm

Acabo de incorporar un temporizador (T1CON = 0xB0) de 889'1us:

Código: Seleccionar todo

/*-------------------------------------------------------------------*/
void RC5_delay_us()
{
	TMR1H = 0xFA;
	TMR1L = 0XCA;
	PIR1bits.TMR1IF=0;
	T1CONbits.TMR1ON=1;
	while(!(PIR1bits.TMR1IF));
	PIR1bits.TMR1IF=0;
	T1CONbits.TMR1ON=0;
}
/*-------------------------------------------------------------------*/

Problema: ahora leo el CDC asi -->

D1: 5746406023D1: 6143908191D1: 574640602363487D1: 614390819161440D1: 584880704765535D1: 614390819161440D1
¡¡Qué bien se vive en el Sur!!

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados