Autor Tema: Problema comunicacion serie 18F  (Leído 20929 veces)

0 Usuarios y 6 Visitantes están viendo este tema.

Desconectado kafefefe

  • PIC10
  • *
  • Mensajes: 15
Problema comunicacion serie 18F
« en: 01 de Septiembre de 2006, 08:20:38 »
Muy buenas

He realizado el siguiente programita para comprobar el funcionamiento de la comunicacion serie del pic 18F8722.

Lo he complilado sin problemas pero la simulacion no funciona, no consigo que el bit (flag de recepcion) RC1IF del registro PIR1 se active. Tambien he programado el pic y he intentado que el dato enviado por el pc al pic lo devuelva pero nada.

He seguido los pasos de la data sheet pero no consigo hacerlo funcionar. ¿Que puede faltar?


   LIST     P=18F8722                      ;Tipo de procesador
   INCLUDE <P18F8722.INC>          ;Definicion del archivo donde estan
                                                   ;definidos todos los registros del P18F8722
                                  
                                  
;------------------ VARIABLES

DATO_RECEPCION                         equ 0x10 ;Variables VARIAS



;CODIGO

   ORG   0x00                     ;inicio en el vector de reset
   goto  INICIO                   ;va a la primera instrucción de programa

INICIO
     
;recepcion dato
       
        clrf  PORTC
        movlw b'10111111'
        movwf TRISC
        movlw .15                    ;9600 baudios
        movwf SPBRG1
        movlw .0                 
        movwf SPBRGH1

        bcf   TXSTA1,BRGH         
        bcf   BAUDCON1,BRG16
       
       
        bcf   TXSTA1,SYNC   ;comunicacion asincrona
        movwf TXSTA1
        bsf   RCSTA1,SPEN   
       
        bsf   RCSTA1,CREN  ;habilitamos recepcion
       
       
ESPERAR_RECEPCION
       
       
        btfss PIR1,RC1IF
        goto  ESPERAR_RECEPCION         ;vacio = no hay dato (esperamos)
        movf  RCREG1,W
        movwf DATO_RECEPCION
        bcf   RCSTA1,CREN              ;limpiamos posibles errores
        bsf   RCSTA1,CREN              ;deshabilitando y habilitando CREN
       
       
       
       END


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problema comunicacion serie 18F
« Respuesta #1 en: 01 de Septiembre de 2006, 08:45:59 »
1) ¿Qué clock estas usando? ¿Usas el PLL?  No lo veo en tu código pero no conozco ese pic en lo puntual y tal vez no tenga seteo de PLL por software sino que se haga por los FUSES.

2) ¿A qué te refieres con que no puedes simular que el flag de recepción se active? ¿Cómo estas queriendo simular esto?

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado kafefefe

  • PIC10
  • *
  • Mensajes: 15
Re: Problema comunicacion serie 18F
« Respuesta #2 en: 01 de Septiembre de 2006, 09:13:50 »

El clock del micro es de 10 MHz (HS), no uso el pll

Lo intento simular poniendo en el registro de recepcion RCREG1 un dato y ver si se activa el flag de recepcion. Pero cuando lo hago el RC1IF nunca se activa

¿Hay alguna forma mejor de activar el flag de recepcion?


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problema comunicacion serie 18F
« Respuesta #3 en: 01 de Septiembre de 2006, 09:16:14 »

El clock del micro es de 10 MHz (HS), no uso el pll

Lo intento simular poniendo en el registro de recepcion RCREG1 un dato y ver si se activa el flag de recepcion. Pero cuando lo hago el RC1IF nunca se activa

¿Hay alguna forma mejor de activar el flag de recepcion?

¿Estamos hablando que estás usando el MPLAB no?  ¿Qué versión estás usando?
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado kafefefe

  • PIC10
  • *
  • Mensajes: 15
Re: Problema comunicacion serie 18F
« Respuesta #4 en: 01 de Septiembre de 2006, 09:32:53 »
Uso MPLAB IDE v7.40

y MPLAB SIN

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problema comunicacion serie 18F
« Respuesta #5 en: 01 de Septiembre de 2006, 09:52:17 »
Uso MPLAB IDE v7.40

y MPLAB SIN

Bueno, en esa versión de MPLAB no puedes 'borrar' los bits de los módulos manualmente.

Le debes generar 'estímulos' de usart.

1) Haz un archivo de texto cualquiera con el contenido de caracteres que le quieras ingresar por la usart.

2) Ve a Debugger, SCL Generator, New WorkBook.

3) Selecciona la pestaña Register Injection.  Fíjate la imagen que adjunto. 

4) En browse for filename adjunta el archivo de texto

5) Clickea en Generate SCL from Workbook

6) Ve a Debugger, Stimulus Controller, New Scenario

7) Selecciona el archivo SCL que generaste en el punto 5.


De esta forma, a medida que pase el tiempo, se irán generando caracteres en el RCREG, los cuales irás leyendo con tu software.  Al leer el caracter del RCREG el bit RCIF se borrará (es así como funciona en el hardware realmente).  En este punto el simulador actualmente refleja con mucho mayor detalle lo que ocurre en la realidad.


Te paso un texto de cómo podría ser el archivo para la usart.

0x01
0x04
0x08
0xA1
0xF3



Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado kafefefe

  • PIC10
  • *
  • Mensajes: 15
Re: Problema comunicacion serie 18F
« Respuesta #6 en: 01 de Septiembre de 2006, 13:53:15 »


Gracias por tus comentarios pero el ultimo paso no lo entido muy bien, porque selecciono el archivo y cojo el registro RCREG1 de esa misma pantalla pero no se que hacer a continuacion.

He intentado simularlo y nada

Ademas he metido el programa en el pic junto con algunas instrucciones mas para comprobar que con el hyperterminal de windows me devuelve el dato introducido por teclado y no devuelve nada. Asi que creo que el problema esta en codigo y por mas vueltas que le doy no consigo saber que es.

¿Podria influir alguna de las palabras de configuracion? yo solo selecciono el tipo de reloj HS y lo demas lo deshabilito todo.

Tiempo atras programe un 18F8720 y me funciono (ese modelo tenia una USART) y este tiene una EUSART.

No se que puede estar pasando

un saludo

Desconectado kafefefe

  • PIC10
  • *
  • Mensajes: 15
Re: Problema comunicacion serie 18F
« Respuesta #7 en: 01 de Septiembre de 2006, 14:39:47 »
LIST     P=18F8722                      ;Tipo de procesador
   INCLUDE <P18F8722.INC>          ;Definicion del archivo donde estan
                                                   ;definidos todos los registros del P18F8722
                                   
                                   
;------------------ VARIABLES

DATO_RECEPCION                         equ 0x10 ;Variables VARIAS



;CODIGO

   ORG   0x00                     ;inicio en el vector de reset
   goto  INICIO                   ;va a la primera instrucción de programa

INICIO
     
;recepcion dato
       
        clrf  PORTC
        movlw b'10111111'
        movwf TRISC
        movlw .15                    ;9600 baudios
        movwf SPBRG1
        movlw .0                 
        movwf SPBRGH1

        bcf   TXSTA1,BRGH         
        bcf   BAUDCON1,BRG16
       
       
        bcf   TXSTA1,SYNC   ;comunicacion asincrona
 
        bsf   RCSTA1,SPEN   
       
        bsf   RCSTA1,CREN  ;habilitamos recepcion
       
       
ESPERAR_RECEPCION
       
       
        btfss PIR1,RC1IF
        goto  ESPERAR_RECEPCION         ;vacio = no hay dato (esperamos)
        movf  RCREG1,W
        movwf DATO_RECEPCION
        bcf   RCSTA1,CREN              ;limpiamos posibles errores
        bsf   RCSTA1,CREN              ;deshabilitando y habilitando CREN
       
       
       
       END

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problema comunicacion serie 18F
« Respuesta #8 en: 01 de Septiembre de 2006, 18:03:32 »
Te propongo revisar tu código, y armarte un pequeño que subiré para recibir y responder por usart en un 18F.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problema comunicacion serie 18F
« Respuesta #9 en: 01 de Septiembre de 2006, 21:40:29 »
Te propongo revisar tu código, y armarte un pequeño que subiré para recibir y responder por usart en un 18F.

Saludos

Lo prometido es deuda así que te he subido el proyecto aquí

Ejemplo de ECO USART para PIC18F452

En tu código así a simple vista, veo que has configurado mal tu TRISC<6> debiera estar en uno.  De todas formas, lee el ejempo que subí , creo que podrás sacar algunas cosas de él.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado kafefefe

  • PIC10
  • *
  • Mensajes: 15
Re: Problema comunicacion serie 18F
« Respuesta #10 en: 01 de Septiembre de 2006, 21:51:44 »
Muchas gracias por tu ayuda.

Ya he coseguido simular el envio y transmision  por la USART gracias a los de añadir archivos de donde leer y escribir.

Ahora lo he programado y estoy intentando visualizar por el hyperterminal el envio y recepcion de datos pero no consigo visualizar nada.

He configurado el hyperterminal de windos de la siguinte manera:

9600 baudios
8bists de datos
1de stop
sin paridad
control == he probado con los tres tipos

el cable que utilizo es un null moden (solo tres hilos: masa y Tx y RX cruzados)

Podrias sugerirme algo


un saludo

Desconectado kafefefe

  • PIC10
  • *
  • Mensajes: 15
Re: Problema comunicacion serie 18F
« Respuesta #11 en: 01 de Septiembre de 2006, 21:54:57 »
El trisc<6> esta a cero porque es el pin de TX y para configurarlo como salida debo ponerlo a "0"

Desconectado kafefefe

  • PIC10
  • *
  • Mensajes: 15
Re: Problema comunicacion serie 18F
« Respuesta #12 en: 01 de Septiembre de 2006, 22:22:21 »
con este programita consigo recorrer todos los caracteres ASCII y enviarlos. Lo he simulado y funciona porque consigo generar el archivo .txt de salida con esos datos. El problema es que no consigo visualizarlo por el hyperterminal.



   LIST     P=18F8722              ;Tipo de procesador
   INCLUDE <P18F8722.INC>          ;Definicion del archivo donde estan
                                   ;definidos todos los registros del P18F8722
                                  
                                  
;------------------ VARIAB

DATO                         equ 0x13


;CODIGO

   ORG   0x00                     ;inicio en el vector de reset
   goto  INICIO                   ;va a la primera instrucción de programa

INICIO
     
;recepcion dato
       
        clrf  PORTC
        movlw b'10111111'
        movwf TRISC
        movlw .15                    ;9600 baudios
        movwf SPBRG1
        movlw .0                 
        movwf SPBRGH1

        bcf   TXSTA1,BRGH         
        bcf   BAUDCON1,BRG16
       
       
        bcf   TXSTA1,SYNC
     
        bsf   RCSTA1,SPEN
       
        bsf   TXSTA1,TXEN              ;habilitamos trasmision
        bcf   RCSTA1,CREN              ;deshabilitamos recepción

        movlw .0
       
        movwf DATO
ENVIAR
 
                         
                                     
        movf  DATO,W           
       
        movwf TXREG1                 ;cargamos dato y enviamos
       
ESPERAR_TRANSMISION
       

        btfss TXSTA1,TRMT              ;esperamos registro TSR vacio (flag TRMT=1)
        goto  ESPERAR_TRANSMISION                   ;no vacio, esperamos
        bcf   PIR1,TX1IF
        incf DATO
     
        goto ENVIAR
       
                 
       END

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problema comunicacion serie 18F
« Respuesta #13 en: 01 de Septiembre de 2006, 23:58:44 »
El trisc<6> esta a cero porque es el pin de TX y para configurarlo como salida debo ponerlo a "0"

Lee el datasheet, sección usart, por favor para que se te aclare este punto.

En el hyperterminal ponelo como sin control de flujo.

¿Has podido ver mi ejemplo?
« Última modificación: 02 de Septiembre de 2006, 00:08:07 por maunix »
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado kafefefe

  • PIC10
  • *
  • Mensajes: 15
Re: Problema comunicacion serie 18F
« Respuesta #14 en: 02 de Septiembre de 2006, 06:45:55 »

  lo he revisado y esta correcto