Comprobando el adaptador de radio HM-TRP para los datos iniciales

0

Tengo varios adaptadores de radio HM-TRP (que consisten en el chip HM-TRP con un encabezado hembra conectado) de la misma versión. Lo probé en un mini circuito donde la PC hace E / S directa con el adaptador HM-TRP. Ese circuito funciona porque cuando la PC comprueba los caracteres, tan pronto como enciendo el circuito, obtengo "HM-TRP-V02". en mi pantalla como se esperaba.

Ahora estoy tratando de lograr lo mismo con un microcontrolador (AT89S52) pero el primer byte no se detecta correctamente.

En ambas pruebas, todas las velocidades establecidas para el adaptador son 56Kbps

Este es mi fragmento de código relevante:

org 0h
ljmp init
org 03h ;put string near beginning so we can increment DPL instead of DPTR
;String we expect to see returned serially
hmtrpstrval:
db 'M-TRP-V02',00h ;Not sure if I should add the "H"

;returnable statuses
RADIOOK equ 0h ;Radio is OK
NORADIO equ 1h ;No radio or timeout
MFRADIO equ 2h ;Bad character: radio malfunction

checkradinit:
  ;setup pointer and make A=0 and R1=0
  mov DPTR,#hmtrpstrval
  clr A
  mov R1,A
  gnb:
    mov R3,A       ;Here, R3=0 and A=0. R3 is the delay counter
    movc A,@A+DPTR ;Get data from address DPTR
    jz exhmt       ;If byte in = 0 then exit. we're ok.
    wgb:
      ;Here we could stall for at least 65281 clocks
      ;(about 32mS) since crystal used is 22.1184Mhz
      ;but if ANY character is received, we process it
      jbc RI,exsc
      djnz R4,wgb
      djnz R3,wgb
      ;here, more than 32mS passed which is way too long
      ;so assume we haven't received the character and
      ;exit
      mov R5,#NORADIO
      ret
    exsc:
    ;See if incoming data matches byte
    xrl A,SBUF
    jnz hmerr
      ;The byte matches 
      inc DPL ;so we move to next character we expect to receive
      mov R1,A ;and reset the chance counter explained below
  sjmp gnb
  hmerr:
  ;It doesn't but we give the radio up to 65534 more chances
  ;because it could have processed one byte without us knowing
  clr A ;so make A=0 and read same code byte again
  djnz R2,gnb
  djnz R1,gnb
  ;Here, too many chances were given and at least the wrong set of characters 
  ;were received so we return a radio fault
  mov R5,#MFRADIO
  ret
  exhmt:
  ;here the valid string is received so we return OK.
  mov R5,#RADIOOK
ret

init:
  mov PCON,#80h  ;set PCON.7 for speed trick. maybe turn off?
  mov SCON,#50h  ;enable serial port in mode 1
  mov TMOD,#021h ;set timer 1 in mode 2 (auto reload)
  mov TH1,#0FEh  ;set reload values to 0FEh
  mov TL1,#0FEh
  setb TR1       ;start timer
lcall checkradinit

El condensador que alimenta directamente el módulo de radio HM-TRP tiene una clasificación electrolítica de 100uF a 16V.

Estoy publicando esta pregunta aquí porque estoy tratando de explicar el peor de los casos en la detección exitosa del adaptador. Actualmente está cableado en modo de datos (no en modo de configuración) y la única otra manera que puedo probarlo es tener un sistema remoto con el mismo adaptador para enviar datos, pero quiero evitar hacerlo en este momento.

¿Hay algo mejor que pueda hacer con mi código para que la prueba sea más confiable? Me preocupan más los tiempos de los personajes.

También verifiqué que el adaptador HM-TRP funciona porque lo volví a colocar en mi mini circuito y lo probé allí.

¿Mi lógica está bien con mi código? ¿O debería ser más indulgente y detectar solo la parte final de la cadena? o debo detectar la cadena completa? ¿Debe cambiarse TH1 o TL1 para una mejor alineación? ¿El 100uF es un valor de condensador incorrecto?

La configuración básica del oscilador para el micro es 22.1184Mhz de cristal con capacitores cerámicos de 33pF entre cada cable de cristal y tierra.

Por favor, hágamelo saber a dónde me voy mal.

    
pregunta Mike

0 respuestas

Lea otras preguntas en las etiquetas