PICAXE y RFA001

4

Tengo dos 40x2 con una RFA001 .

Quiero enviar un 1 si presiono el pulsador y un led alto 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
    
pregunta GerardMT

2 respuestas

1

Esos tipos de receptores de RF no les gusta tener un componente de CC en los datos que se envían y reciben. Normalmente, al enviar datos, debe usar algo como la codificación Manchester para mantener equilibrado el número de unos y los ceros. Atmel tiene un buen documento llamado Fundamentos de codificación de Manchester:

enlace

Sin embargo, en su caso, ya que está enviando un solo byte, probablemente pueda simplificar las cosas. En este momento está enviando el valor 1, que en binario con un bit de inicio 0 y un bit de parada termina siendo:

0 1 0 0 0 0 0 0 0 1

Como puedes ver, tiene una larga cadena de ceros, lo ideal es algo con un conjunto de ceros bastante equilibrado y como este:

0 1 0 1 0 1 0 1 0 1

Lo que en hexadecimal es 0xAA, intente enviar eso en lugar de uno. También se está apagando cuando no se reciben datos o si hay un error de transmisión, es mejor que tenga un código separado transmitido para indicar que la salida debe estar desactivada, por ejemplo:

0 1 1 0 0 1 1 0 1 1

Que en hexadecimal es 0xCD, así como el segundo paso cambia tu lógica para que solo desactive la salida cuando se reciba. También tenga en cuenta que cuando no se reciba ningún proveedor, recibirá una gran cantidad de "basura" que confundirá al UART receptor.

La forma habitual de solucionarlo es agregar un preámbulo, pero en su caso, probablemente pueda transmitir el byte varias veces para asegurarse de que se reciba. También intente mantener la línea de transmisión en alto durante un tiempo (por ejemplo, 5 ms) antes de enviar cada byte para asegurarse de que se detecte el bit de inicio.

Como nota final que usa un solo byte, es probable que encuentre que la basura aleatoria recibida también ocasiona falsos disparos. Una vez que funcionen los aspectos básicos, es posible que desee ver el envío de una secuencia más larga, como 32 bits / 4 bytes.

    
respondido por el PeterJ
1

Ahora funciona, el pin 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
    
respondido por el GerardMT

Lea otras preguntas en las etiquetas