fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

PINGUINO & RC5 ...
 
Avisos
Vaciar todo

PINGUINO & RC5 IR CODE

7 Respuestas
3 Usuarios
0 Reactions
26 K Visitas
ea7fnj
Respuestas: 88
Topic starter
(@ea7fnj)
Trusted Member
Registrado: hace 18 años

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:

/*-------------------------------------------------------------------*/
#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?

Responder
6 respuestas
boops
Respuestas: 1813
(@boops)
Ardero
Registrado: hace 19 años

Por que no usas el modo CDC que es un puerto serie virtual?

Responder
ea7fnj
Respuestas: 88
Topic starter
(@ea7fnj)
Trusted Member
Registrado: hace 18 años

Si añado una linea mas de programa, rebaso el mapa de memoria asignado por el bootloader, parpadea el diodo de RUN

Responder
boops
Respuestas: 1813
(@boops)
Ardero
Registrado: hace 19 años

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

Responder
sphinx
Respuestas: 651
(@sphinx)
Ardero
Registrado: hace 17 años

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.

Responder
Página 1 / 2
Compartir: