Hola Suky, sigo haciendo pruebas con el nuevo protocolo MM145026.
Dispongo de una maquina que me lee lo que emiten los mandos a distancia.Codigo, frecuencia, tiempos emitiendo con un mando sobre ella.Y hecho esto , la maquina me indica si es trinario, binario etc y la posicion de los dips.Alguna cosa debo hacer mal en el ptrotocolo del MM145026 porque cuando grabo el pic y emito sobre la maquina , esta me reconoce que es trinario pero el codigo que aparece sobre la pantalla no se corresponde con el grabado en el 16f84.Por lo menos he consegido que me reconozca que es trinario, algo es algo.Ahora debo de averiguar porque falla el codigo.He cogido un mando original y he emitido sobre la maquina para ver los tiempos y luego he ido ajustando los del pic hasta aproximarlos a los del original.Aqi te dejo el codigo que tengo a ver si ves donde puede fallar el protocolo para intentar una transmision reconocida por la maquina.Ni que decir tiene que el sofware de la maquina esta preparado de tal manera que el el momento que detecte una transmision correspondiente a un MM145026 nos la muestra en pantalla con la posicion de los microinterruptores, ahora bien, esta transmision debe estar totalmente acorde al protocolo exigido por el MM145026 y ahi creo que es donde falla mi codigo.A ver si ves tu el error.
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.
Un saludo Suky y de nuevo muchisimas gracias por tu interes y paciencia conmigo.