Autor Tema: ayuda comunicaion serie PIC17F877A  (Leído 3452 veces)

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

Desconectado raul1485

  • PIC10
  • *
  • Mensajes: 5
ayuda comunicaion serie PIC17F877A
« en: 11 de Abril de 2007, 22:08:01 »
Saludos a todos loq ue estan aqui en el foro:
mi asunto es el siguiente estoy haciendo un proyecto de invernadero en el que necesito la comunacion serie asincrona del pic17f877a, dese transmitir y recibir hacia una pc. ya he logrado transmitir datos desde el PIC hacia la PC  los h podido manejar a mi gusto.
Pero no he podido recibir datos de la PC al PIC, bueno si los recibo solo que mal, por ejemplo si mando una 'a' desde el hyperterminal no sale el dodigo ascci de dicha ´'a' que es un (65h), si no u sal oo numo como un 124h algo asi, otro problema es que si mando otra letra el programa como que se traba y tengo que resetear el pic para que buelva a recibir. si me pueden ayudar se los agradeceria.
bueno les mando el programa para que me digan cual es el problema:
la comunicaionn es a 300 baudios con un crital de 4mHz estoy utilizando el max232 y la transmicion funciona pérfectamente solo
la recepcion no.
;***********************************************************
list p=16f877A
   #include<p16f877A.inc>
   __CONFIG _CP_OFF & _CPD_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _LVP_OFF & _XT_OSC


   org 0x00
    nop
    nop
 
    bsf STATUS,RP0 ;Ir banco 1
    bcf STATUS,RP1
 
    clrf TRISA ;PORTA salida
    clrf TRISB ;PORTB salida
    clrf TRISC ;PORTC salida
    clrf TRISD ;PORTD salida
    clrf TRISE
    bsf TRISC,7 ;RC7/Rx entrada, pin de recepción
    movlw d'207' ;300 baud rate Xtal=4Mhz
    movwf SPBRG
 
    bcf TXSTA,BRGH ;Selección de baja velocidad
    bcf TXSTA,SYNC ;Modo asíncrono
 
    bcf STATUS,RP0 ;Ir banco 0
    bcf STATUS,RP1
 
    bsf RCSTA,SPEN ;habilita el puerto serie
 
    bcf RCSTA,RX9 ;8 Bits de datos
    bsf RCSTA,CREN ;Para Rx Continuo
   


_espera
    btfss PIR1,RCIF ;Pregunta si el buffer de RX es full
    goto _espera ;No, ir _espera
    movf RCREG,W ;Si, W=RCREG y pone a cero el RCIF
   movwf PORTB
   goto _espera   
   end

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ayuda comunicaion serie PIC17F877A
« Respuesta #1 en: 12 de Abril de 2007, 12:00:11 »
En los pics 16F, debes poner los bit TRISC<6:7> ambos en uno para configurarlos como usart.

También revisa el tema del baudeaje.  Realmente quieres transmitir a 300 bps?  Configuras la misma velocidad en la pc?
- 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 raul1485

  • PIC10
  • *
  • Mensajes: 5
Re: ayuda comunicaion serie PIC17F877A
« Respuesta #2 en: 12 de Abril de 2007, 15:16:36 »
Hola Maunix:
en cuanto a la configuracion de la PC esta configurada correcta menete a 300 baudios desde el hyperterminal de windows,
ademas de que como he dicho la transmicion PIC-PC ya esta lograda incluso con un programa similar a este.

en cuanto a los pines TRESC<6 7> esta configurado el pin 6 como salida y el pin 7 como entrada como puedes ver en el programa ya que el pin 7 es la entrada a al recepcion.


Desconectado Vayadespiste

  • PIC12
  • **
  • Mensajes: 53
Re: ayuda comunicaion serie PIC17F877A
« Respuesta #3 en: 12 de Abril de 2007, 16:57:08 »
Hola Raul ¿Se ha de poner el bit de salida  (trisc)a 0?, al leer tu configuración recordé algo que me paso como a ti y encontré esto:

The USART can be configured in the following modes:
• Asynchronous (full duplex)
• Synchronous - Master (half duplex)
• Synchronous - Slave (half duplex)
Bit SPEN (RCSTA<7>) and bits TRISC<7:6> have
be set in order to configure pins RC6/TX/CK and
RC7/RX/DT as the Universal Synchronous Asynchronous
Receiver Transmitter.
A mi el problema se soluciono colocando los 2 bits de configuración (trisc) tal y como dice el datasheet (pag. 97) en 1.

Suerte y un saludo.
« Última modificación: 12 de Abril de 2007, 17:00:58 por Vayadespiste »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ayuda comunicaion serie PIC17F877A
« Respuesta #4 en: 12 de Abril de 2007, 20:06:40 »
Vayadespiste, gracias por el aporte.  Eso mismo le estaba diciendo yo...  pero viene bien la referencia al datasheet.

raul1485, revisa además el bit RCSTA,OERR , si está seteado debes apagar y reencender el módulo usar, sino dejará de recibir datos.

- 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 raul1485

  • PIC10
  • *
  • Mensajes: 5
Re: ayuda comunicaion serie PIC17F877A
« Respuesta #5 en: 14 de Abril de 2007, 15:34:59 »
MAUNIX Y VAYADESPISTE, gracias por su aportacion la verdad ya resolvi ese detalle que tenia. Ahora el problema es que no recibo los mismos datos.

Por ejemplo si mando una 'A' desde el hyperterminal me manda un 15d en el el pic y si le vuelvo a mandar una 'A' me manda otro numero aleatorio y asi se la pasa y nunca me manda el 65h que es en realidad el codigo ASCII de la 'A' rara vez repite un mismo numero. Aunque ahora si ya no se me traba el programa como antes gracias a esa configuracion que me mandaron, no se que pueda ser si me pueden dar una pista o mandar un programa que funcione se los agradeceria. Ahi les va el programa:

   list p=16f877A
   #include<p16f877A.inc>
   __CONFIG _CP_OFF & _CPD_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _LVP_OFF & _XT_OSC


   org 0x00
    nop
    nop
   bcf STATUS,RP0 ;Ir banco 0
    bcf STATUS,RP1
     bsf RCSTA,SPEN ;habilita el puerto serie

    bsf STATUS,RP0 ;Ir banco 1
    bcf STATUS,RP1
   
    bsf TRISC,7 ;RC7/Rx entrada, pin de recepción
   bsf TRISC,6 ;
   
    clrf TRISA ;PORTA salida
    clrf TRISB ;PORTB salida
    clrf TRISD ;PORTD salida
    clrf TRISE


    movlw d'207' ;300 baud rate Xtal=4Mhz
    movwf SPBRG
 
    bcf TXSTA,BRGH ;Selección de baja velocidad
    bcf TXSTA,SYNC ;Modo asíncrono
 
   
     bcf STATUS,RP0 ;Ir banco 0
    bcf RCSTA,RX9 ;8 Bits de datos
    bsf RCSTA,CREN ;Para Rx Continuo

_espera
    btfss PIR1,RCIF ;Pregunta si el buffer de RX es full
    goto _espera ;No, ir _espera
    movf RCREG,W ;Si, W=RCREG y pone a cero el RCIF
   movwf PORTB
   goto _espera
   end

Desconectado Mady

  • PIC10
  • *
  • Mensajes: 19
Re: ayuda comunicaion serie PIC17F877A
« Respuesta #6 en: 07 de Mayo de 2007, 12:08:57 »
Tengo un problema similar, adjunto el código que he hecho para enviar datos desde el hyperterminal. Enciendo un led primero como garantía de que el pic se ha programado. Luego envío el caracter desde hyperterminal, el led se apaga al recibir, y tras un segundo saca por los led de PORTB el código ASCII. Eso es al menos, lo que pretendo, ya que todo va bien excepto que en los leds siempre se muestra el mismo código, independiente mente de la tecla que pulse en hyperterminal.
EL hardware va bien, lo fue en la operación de TX, es un entrenador PICTrainer.

PB_SALIDA
Banco_1

;Configuración de la puerta C
;*******************************
      movlw   b'11111111'
      movwf   TRISC      ;RC7/Rx entrada, RC6/Tx salida?
;Configuración USART:
;*******************************************
      bcf      TXSTA,BRGH   ;Velocidad baja
      
      movlw   .25         ;5 para reloj de 3,686MHz
      movwf   SPBRG      ;9600 baudios con Fosc=4MHz
   
      bcf      TXSTA,SYNC   ;Selecciona modo asíncrono

Banco_0
;Habilitación puerto serie
;*************************
      bsf      RCSTA,SPEN   
;Habilita recepción
;********************
      bsf      RCSTA,CREN


;*********************PROGRAMA PRINCIPAL***********************
;**************************************************************
      
inicio2       clrf   PORTB   
         bsf      PORTB,0
         call   Recepcion
         bcf      PORTB,0
         call   delay_1s
         movwf   PORTB
         call   delay_1s
         goto   inicio2

;*****************************************************************
;*                  SUBRUTINAS                         *
;*****************************************************************
                                                                                                           
Recepcion   btfss   PIR1,RCIF
      goto   Recepcion
RX_Ok      movf   RCREG,W
         movwf   dato
         return



Desconectado Mady

  • PIC10
  • *
  • Mensajes: 19
Re: ayuda comunicaion serie PIC17F877A
« Respuesta #7 en: 07 de Mayo de 2007, 14:40:25 »
Ya encontré el fallo, error de principiante, el valor cargado en SPBRG no era el de 9600. Gracias de todos modos.


 

anything