Autor Tema: emular UM3750 con pic 16f84  (Leído 2155 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado randall

  • PIC10
  • *
  • Mensajes: 10
emular UM3750 con pic 16f84
« en: 12 de Septiembre de 2009, 15:38:49 »
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.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: emular UM3750 con pic 16f84
« Respuesta #1 en: 13 de Septiembre de 2009, 11:12:55 »
Se cierra el tema porque se encuentra repetido.

http://www.todopic.com.ar/foros/index.php?topic=26068.0