Hola a todos, estoy intentando crear un soft para 16f84 que emule el funcionamiento de encoders binarios y trinarios sea el UM3750 o el MM145026.
He hecho este programa.
Program Envio_Comandos_RF
' Envios de comandos RF con modulo TM50-1 a puerta automatica
' Protocolo MM145026
' **********************************************************************
' (c) Autor: Randall
'
' HARDWARE:
' MCU: PIC 16F84A
' Cristal: 4 Mhz
' 1- Emisor RF TM50-1 conectado a PORTB.3
' 1- Pulsador conectado a PORTB.2
' **********************************************************************
const Te = 400
const Ti= 400 ' Tiempo de pulso (usg)
const S= 14000 ' Tiempo de space a cero (usg)
const E = 19200
Dim i as byte ' Usado para bucles
Dim Pulsado as byte ' Para evitar rebotes de pulsador
' Sub-rutina para generar space 11,52ms (11,2 + 0,32)
Sub procedure Env_inicio_RF()
Delay_us(S)
clearbit(PORTB,3)
End sub
Sub procedure Env_inter_RF()
Delay_us(E)
clearbit(PORTB,3)
End sub
Sub procedure Bajo()
Delay_us(Ti)
Clearbit(PORTB,3) 'Envia un bit bajo (cero)
Delay_us(Ti)
setbit(PORTB,3) 'Envia un bit bajo (cero)
Delay_us(Ti*7)
clearbit(PORTB,3)
Delay_us(Ti)
setbit(PORTB,3)
Delay_us(Ti*6)
clearbit(PORTB,3)
End sub
Sub procedure Alto()
Delay_us(Ti)
clearbit(PORTB,3) 'Envia 1 bit alto (uno)
Delay_us(Ti*7)
setbit(PORTB,3)
Delay_us(Ti)
clearbit(PORTB,3)
Delay_us(Ti*7)
setbit(PORTB,3)
End sub
Sub procedure Abierto()
Delay_us(Ti)
clearbit(PORTB,3) 'Envia 1 bit alto (uno)
Delay_us(Ti*7)
setbit(PORTB,3)
Delay_us(Ti)
clearbit(PORTB,3)
Delay_us(Ti)
setbit(PORTB,3)
Delay_us(Ti*6)
clearbit(PORTB,3)
End sub
Main:
TRISB = %00000111 ' PORTB.0 1 y 2 como Entradas y .3 como Salida
PORTB.3 = 0 ' Salida a 0
Pulsado = 0 ' Pulsador sin activar
Inicio:
While true
If PORTB.2 = 0 then
If Pulsado = 0 then ' ¿Nueva pulsación?
Pulsado = 1
End if
Env_inicio_RF
Bajo
Alto
Bajo
Abierto
Bajo
Alto
Bajo
Alto
Abierto
Env_inter_RF
Bajo
Alto
Bajo
Abierto
Bajo
Alto
Bajo
Alto
Abierto
End if
If PORTB.2 = 1 then
Pulsado = 0
End if
Wend
End.
El programa trnasmite 9 bits de codigo mientras se este pulsando el pulsador conectado al PortB2 pero el codigo transmitido es siempre el mismo y es el que se escribe en el propio codigo (Bajo , alto , bajo etc) siguiendo el protocolo correspondiente al encoder.Me gustaria que me dijerais como poder hacer alguna rutina que permute el codigo automaticamente pero unicamente de los 2 ultimos bits.Es decir, implementar en el codigo del pic los 7 primeros bits fijos( por ejemplo Alto, Bajo, Bajo, Abierto, Bajo, Bajo, Alto) y que con los 2 ultimos bits haga todas las combinaciones posibles para transmitir los 9 bits correspondientes del encoder y que cada combinacion se ejecute durante 500 mseg antes de pasar a la siguiente
Algo asi...
Alto, Bajo, Bajo, Abierto, Bajo, Bajo, Alto Bajo, Bajo
Alto, Bajo, Bajo, Abierto, Bajo, Bajo, Alto Bajo, Abierto
Alto, Bajo, Bajo, Abierto, Bajo, Bajo, Alto Bajo, Alto
Alto, Bajo, Bajo, Abierto, Bajo, Bajo, Alto Abierto, Bajo
Alto, Bajo, Bajo, Abierto, Bajo, Bajo, Alto Abierto, Abierto
Alto, Bajo, Bajo, Abierto, Bajo, Bajo, Alto Abierto, Alto
Alto, Bajo, Bajo, Abierto, Bajo, Bajo, Alto Alto, Bajo
Alto, Bajo, Bajo, Abierto, Bajo, Bajo, Alto Alto, Abierto
Alto, Bajo, Bajo, Abierto, Bajo, Bajo, Alto Alto, Alto
como se puede ver los 7 primeros bits serian siempre fijos y con los 2 ultimos bits el codigo deberia buscar las diferentes combinaciones entre las 3 posiciones posibles(Alto, bajo, Abierto) y transmitir cada combinacion durante 500mseg.
Supongo que me habreis entendido lo que quiero hacer. creo que es mas dificil de explicar que de entender.
Os agradeceria enormemente una ayuda para modificar el codigo anterior y añadir esta caracteristica.
Un saludo a todos y muchas gracias.