Hola a todos!
Les comento.. Estoy haciendo una especie de "turnero" por radiofrecuencia.
Estoy usando los modulos RF RWS 434 y el PIC 16F628A.
Tiene que funcionar de la siguiente forma:
- El transmisor debe cambiar tres numeros independientes y enviar el numero de 3 digitos al receptor. Entonces el transmisor tiene 4 pulsadores, el 1º luego de mantenerse pulsado un tiempo selecciona un digito, el 2º y 3º pulsador permiten subir o bajar el numero de 0 a 9, si se aprieta una vez el 1º pulsador cambia al siguiente digito y si se mantiene pulsado otra vez por un tiempo vuelve a la etapa de visualizacion. El 4º pulsador envia los datos serialmente por RF.
Eso en parte esta funcionando bien hasta ahora, mi problema es con el receptor, que debe estar esperando la señal y al mismo tiempo mostrando el numero que ha recibido. Tengo ruido en el receptor asique le agregue una palabra clave para que solo cuando reciba esa palabra reciba el dato y creo que ahi esta el problema, que se queda esperando hasta recibir esa palabra y no me muestra el numero ya que no siguen avanzando los comandos.
Si retiro la palabra clave, el receptor toma cualquier dato.
Soy nuevo en esto asique no estoy del todo seguro si es ese realmente el problema pero es lo unico que se me ha ocurrido.
El programa esta hecho en Microcode Studio y usa la multiplexacion para mostrar el digito.
Aqui el codigo del
transmisor:
INCLUDE "modedefs.bas"
cmcon=7
trisb=%00110000
trisa=%00001100
dato var byte[10]
dato[0]=0
dato[1]=1
dato[2]=2
dato[3]=3
dato[4]=4
dato[5]=5
dato[6]=6
dato[7]=7
dato[8]=8
dato[9]=9
portb=0
porta=0
num var byte
p var byte
q var byte
r var byte
a var porta.0
b var porta.1
c var porta.4
p=0
q=0
r=0
t Var Byte ' declaración de la variable X
t = 0 ' inicializa la variable X
t1 Var Byte ' declaración de la variable X
t1 = 0 ' inicializa la variable X
t2 Var Byte ' declaración de la variable X
t2 = 0 ' inicializa la variable X
t3 Var Byte ' declaración de la variable X
t3 = 0 ' inicializa la variable X
inicio:
GOTO unidad
unidad:
if portb.4 = 1 then
Serout PORTB.6,N2400,["Unidad",p]
pause 5
Serout PORTB.6,N2400,["Decena",q]
pause 5
Serout PORTB.6,N2400,["Centena",r]
pause 5
endif
if porta.2 = 1 then
t=0
goto tiempo
Else
GOTO Mostrar
endif
Tiempo:
WHILE porta.2=1
PAUSE 1000
T=T+1
if T=2 THEN
GOTO Parpadear1
t=0
ENDIF
WEND
Mostrar:
high b
high c
low a
portb=dato[p]
pause 5
high a
high c
low b
portb=dato[q]
pause 5
high a
high b
low c
portb=dato[r]
pause 5
high c
GOTO inicio
Cambiar1:
portb=dato[p]
;Serout PORTB.4,N2400,[p]
high b
high c
low a
portb=dato[p]
pause 5
high a
high c
low b
portb=dato[q]
pause 5
high a
high b
low c
portb=dato[r]
pause 5
high c
t1=0
if porta.2=1 then
WHILE porta.2=1
T1=T1+1
PAUSE 1000
if T1=2 THEN
GOTO Mostrar
t1=0
ENDIF
WEND
goto Parpadear2
else
if portb.5=1 and porta.2=0 then
portb=dato[p]
pause 250
p=p+1
portb=dato[p]
if p=10 then
p=0
portb=dato[p]
endif
else
if porta.3=1 and porta.2=0 then
portb=dato[p]
pause 250
p=p-1
portb=dato[p]
if p=-1 then
p=9
portb=dato[p]
endif
endif
endif
endif
GOTO Cambiar1
Cambiar2:
portb=dato[q]
;Serout PORTB.4,N2400,[q]
PAUSE 5
high b
high c
low a
portb=dato[p]
pause 5
high a
high c
low b
portb=dato[q]
pause 5
high a
high b
low c
portb=dato[r]
pause 5
high c
t2=0
if porta.2=1 then
WHILE porta.2=1
T2=T2+1
PAUSE 1000
if T2=2 THEN
GOTO Mostrar
t2=0
ENDIF
WEND
goto Parpadear3
else
if portb.5=1 and porta.2=0 then
portb=dato[q]
pause 250
Q=Q+1
portb=dato[q]
if Q=10 then
Q=0
portb=dato[q]
endif
else
if porta.3=1 and porta.2=0 then
portb=dato[q]
pause 250
Q=Q-1
portb=dato[q]
if Q=-1 then
Q=9
portb=dato[q]
endif
endif
endif
endif
GOTO Cambiar2
Cambiar3:
portb=dato[r]
;Serout PORTB.4,N2400,[r]
PAUSE 5
high b
high c
low a
portb=dato[p]
pause 5
high a
high c
low b
portb=dato[q]
pause 5
high a
high b
low c
portb=dato[r]
pause 5
high c
t3=0
if porta.2=1 then
WHILE porta.2=1
T3=T3+1
PAUSE 1000
if T3=2 THEN
GOTO Mostrar
t3=0
ENDIF
WEND
goto Parpadear1
else
if portb.5=1 and porta.2=0 then
portb=dato[r]
pause 250
R=R+1
portb=dato[r]
if R=10 then
R=0
portb=dato[r]
endif
else
if porta.3=1 and porta.2=0 then
portb=dato[r]
pause 250
R=R-1
portb=dato[r]
if R=-1 then
R=9
portb=dato[r]
endif
endif
endif
endif
GOTO Cambiar3
Parpadear1:
portb=dato[p]
LOW a
HIGH B
HIGH c
pause 250
high a
pause 250
low a
pause 250
high a
pause 250
low a
pause 500
if porta.2=0 then goto Cambiar1
Parpadear2:
portb=dato[q]
LOW b
HIGH a
HIGH c
pause 250
high b
pause 250
low b
pause 250
high b
pause 250
low b
pause 500
GOTO Cambiar2
Parpadear3:
portb=dato[r]
LOW c
HIGH a
HIGH b
pause 250
high c
pause 250
low c
pause 250
high c
pause 250
low c
pause 500
GOTO Cambiar3
ENDEl del
receptor:
INCLUDE "modedefs.bas"
cmcon=7
trisb=%00000000
trisa=%00001000
dato var byte[10]
dato[0]=64
dato[1]=121
dato[2]=36
dato[3]=48
dato[4]=25
dato[5]=18
dato[6]=2
dato[7]=120
dato[8]=0
dato[9]=16
uni var byte
de var byte
cen var byte
datos var byte
date var byte
date1 var byte
date2 var byte
portb=0
porta=0
p var byte
q var byte
r var byte
y var byte
a var porta.0
b var porta.1
c var porta.2
date=0
date1=0
date2=0
inicio:
uni=date
de=Date1
cen=Date2
high b
high c
low a
portb=dato[uni]
pause 5
high a
high c
low b
portb=dato[de]
pause 5
high a
high b
low c
portb=dato[cen]
pause 5
high c
gosub ver_unidad
Ver_Unidad:
serin PORTA.3,N2400,50,inicio,["Unidad"],date
;serin PORTA.3,N2400,["Decena"],date1
;de=Date1
;serin PORTA.3,N2400,["Centena"],date2
;cen=Date2
return
end
Como veran el codigo tiene variables que no estoy ocupando y otros defectos.. Si pueden ayudarme a solucionar mi problema y si lo pueden exponer mas simple o mejor el codigo lo agradeceria mucho.. Espero sus respuestas y ojala pueda encontrar el problema.
Tambien les dejo los
archivos en Microcode y el esquema por si quieren revisarlos mejor o usarlos para sus ideas..