Buscador
YoReparo.com La Web 
www.YoReparo.com

Regístrate gratis para participar de los foros, o si ya estás registrado haz login.

Ayuda con codigo Manchester

comentario del autor Dom Abr 22, 2007 1:19 am
   
Hola, quisiera que me ayuden con un problema con un proyecto que estoy realizando el cual trata de un control inalambrico usando un pic 12c508a como transmisor y un pic 16f84a como receptor. el transmisor consta de 4 pulsadores y el receptor 4 reles y el problema es la codificacion del codigo manchester el cual no se ni como empezar a desarrollarlo.
Me gustaria que aportaran alguna idea ya que creo que este problema podria solucionar dudas de otros usuarios con respecto al tema.
Desde ya muchas gracias.

luchonet

Reputación

asistió a la solución Lun Abr 23, 2007 5:44 pm
   
Ok. Yo te recomiendo que utilices el miKrobasic ya que trae incorporadas las rutinas para generar el manchester:
Rutinas:
**Man_Receive_Config
**Man_Receive_Init
**Man_Receive
**Man_Send_Config
**Man_Send_Init
**Man_Send
**Man_Synchro
Igualmente abajo te adjunto un diagrama de dicho protocolo de transmision.-
Cualquier cosa pregunta.
Aca te dejo un ejemplo:

Transmisor:

Código:program RF_Transmisor

dim i as byte
dim msg as string[6]

main:
  msg = "Prueba"
  PORTB  = 0                 
  TRISB  = %00001110
  ClearBit(INTCON, GIE)     
  Man_Send_Init(PORTB)       ' Inicio Manchester

  while TRUE
    Man_Send($0B)           
    Delay_ms(100)           
    for i = 1 to Strlen(msg)
      Man_Send(msg[i])       
      Delay_ms(90)
    next i
    Man_Send($0E)           
    Delay_ms(1000)
  wend
end.


Receptor, recibe y lo muestra en un LCD:

Código:program RF_Receptor

dim error, ErrorCount, temp as byte

main:
  ErrorCount = 0
  TRISB      = 0
  CMCON = 7
   VRCON = 0 
  Lcd_Init(PortB)               
  Lcd_Cmd(LCD_CLEAR)
  Man_Receive_Config(PORTA,3)   

  while true

    Lcd_Cmd(LCD_FIRST_ROW)

    while true                   
      temp = Man_Receive(error)
      if temp = $0B then
        break
      end if                   
      if error then             
        break
      end if
    wend

    do
      temp = Man_Receive(error)
      if error = true then
        Lcd_Chr_Cp(63)           
        Inc(ErrorCount)
        if ErrorCount > 20 then
          Man_Receive_Init(PORTA)
         
          ' temp = Man_Synchro
          ErrorCount = 0
        end if

      else
        if temp <> $0E then     
          Lcd_Chr_Cp(temp)
        end if
      Delay_ms(20)
      end if
    loop until temp = $0E       

  wend
end.
[/code]

Manchester.JPG  (23.18 KB)

Manchester.JPG

Manchester

mammuky

Reputación

comentario Lun Jun 18, 2007 7:07 pm
   
Hola disculpa y si no tengo el micro basic y quiero implementarla con el pic 16f877 por favor ayudame

Horney_Ma

Reputación

asistió a la solución Lun Jun 18, 2007 10:15 pm
   
Si de plano no lo tienes, pues trata de hacer la funcion tu mismo, solo checa la hoja de codificacion, lo unico que tienes que hacer es ver que dato vas a mandar, solo tienes que mandar transiciones de acuerdo al dato durante la transicion negativa de reloj, por ejemplo, si quieres mandar un 1, entonces mandarias una transicion negativa.

1.- Durante la transicion positiva de reloj tienes que colocar el dato directo a la salida.
2.- En la transicion negativa del reloj solo inviertes el dato.

Esto es para la codificacion del primer diagrama, el segundo que dice que es de la i3e solo tienes que invertir la se;al.

Esto lo puedes implementar muy facilmente en ensamblador si acaso solo puedes hacerlo de esta forma.


El que ya no recuerdo es como es el manchester diferencial.

alexwinger

Reputación



Hacer una pregunta

Reglamento / P+F

Foros

Miembros / Expertos