4 votos

PICAXE y RFA001

Tengo dos 40x2 con un RFA001 .

Quiero enviar 1 si el empuje el empujador y alta un led para saber si recibió el código. Parece que eso no funciona. ¿Es correcto?

Transmisor:

main:
  if pinD.3 = 1 then 
    high D.2
    W1 = 1
    serout 7,N2400,(W1)
  else
    low D.2
    W1 = 0 
  end if
  goto main

Receptor:

  high D.1
  high D.2
  pause 1000
  low D.1
  low D.2

main:
  serin 0,N2400,W1
  if W1 = 1 then
    high D.1
  else
    low D.1
  end if
  if pinD.3 = 1 then
    high D.2
  else
    low D.2
  end if
  goto main

1voto

xilun Puntos 261

A este tipo de receptores de RF no les gusta tener un componente de CC en los datos que se envían y reciben. Normalmente cuando se envían datos se debe utilizar algo como la codificación Manchester para mantener el número de unos y ceros que se envían equilibrados. Atmel tiene un buen documento llamado Manchester Encoding Basics:

http://www.atmel.com/images/doc9164.pdf

Sin embargo, en tu caso, como estás enviando un solo byte, probablemente puedas simplificar las cosas. De momento estás enviando el valor 1, que en binario con un bit de inicio 0 y un bit de parada acaba siendo:

0 1 0 0 0 0 0 0 0 1

Como puedes ver eso tiene una larga cadena de ceros, lo que quieres idealmente es algo con un conjunto bastante equilibrado de ceros y unos como este:

0 1 0 1 0 1 0 1 0 1

Que en hexadecimal es 0xAA, así que intenta enviar eso en lugar de uno. También está apagando cuando no se reciben datos o hay un error de transmisión, puede ser mejor tener un código separado transmitido para indicar la salida debe ser apagado, por ejemplo:

0 1 1 0 0 1 1 0 1 1

Que en hexadecimal es 0xCD, así que como segundo paso cambia tu lógica para que sólo se apague la salida cuando se reciba eso. También ten en cuenta que cuando no se recibe ninguna portadora recibirás mucha "basura" que confundirá a la UART receptora.

La forma habitual de hacer frente a esto es añadir un preámbulo, pero en tu caso probablemente puedas transmitir el byte varias veces para asegurarte de que se recibe. Intenta también poner la línea de transmisión en alto durante un tiempo (digamos 5mS) antes de enviar cada byte para asegurarte de que se detecta el bit de inicio.

Como nota final al usar un solo byte, probablemente encontrarás que la basura aleatoria recibida también causa ocasionalmente falsos disparos. Una vez que lo básico esté funcionando, puede que quieras mirar el envío de una secuencia más larga como 32-bits / 4 bytes.

1voto

Alex Puntos 111

Ahora funciona, el pasador estaba mal.

Transmisor:

high D.1
high D.2
pause 1000
low D.1
low D.2

main:
if pinD.3 = 1 then 
high D.2
W1=1
else
low D.2
W1=0
end if
serout B.7,N2400,(W1)
sertxd ("The value W1 is ",#W1,13,10)
goto main

Receptor:

high D.1
high D.2
pause 1000
low D.1
low D.2

main:
serin D.0,N2400,W1
sertxd ("The value W1 is ",#W1,13,10)
if W1 = 1 then
high D.1
else
low D.1
end if
goto main

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X