Autor Tema: AYUDA RECEPCION RS232 + 18F4550 + 20MHz  (Leído 2642 veces)

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

Desconectado Sacahe

  • PIC12
  • **
  • Mensajes: 68
AYUDA RECEPCION RS232 + 18F4550 + 20MHz
« en: 10 de Enero de 2012, 14:27:35 »
Hola amigos!!!

He realizado un programa que me permite recibir via RS232 datos desde un dispositivo a una velocidad de 2400 bps y los datos son visualizados en un LCD. He tenido inconvenientes al implementar este Programa en PicBasic con un pic 18F4550 y un cristal externo de 20MHz. La comunicacion la realizo utilizando la UART y no por software. La simulacion en Proteus me funciona perfectamente pero en el circuito real no me trabaja la comunicacion. Estoy seguro que el problema es en el PIC, es decir en la configuracion de "las palabras de configuracion" o  "fuses", en la asignacion del tipo de oscilador. A continuacion les dejo el Programa:

DEFINE OSC 48
PORTA = 0
LATA = $00
CMCON = $07         ;COMPARADORES APAGADOS
TRISA = $00         ;CONFIGURA EL PUERTOA COMO SALIDA, ACA SE CONECTA EL LCD
ADCON1 = %00001111  ;CONFIGURA ADCON1, PINES PORTA Y PORTB COMO I/O DIGITALD

LATC = $00   
TRISC = %10111111    ;
PORTC = 0
SPBRG = 129         ;VEL.TRANSFERENCIA DE 2400
RCSTA = %10010000   ;CONFIGURACION DE LA USART,
TXSTA = %00100000   ;ACTIVAMOS LA TRANSMISION
DATO_RX VAR BYTE
DATO VAR BYTE[9]
REG VAR BYTE[9]
I VAR BYTE
J VAR BYTE

I = $01
REG[0] = 2
REG[1] = $C0
REG[2] = $C5
REG[3] = $CA
REG[4] = $CF
REG[5] = $94
REG[6] = $99
REG[7] = $9E
REG[8] = $A3

;*******************************************************************************
DEFINE LCD_DREG     PORTA   ;EL BUS ESTARA CONECTADO EN EL PUERTOA
DEFINE LCD_BITS     4       ;EL BUS SERA DE CUATRO BITS
DEFINE LCD_DBIT     0       ;SELECCION DEL BIT DE INICIO DEL PUERTO
DEFINE LCD_RSREG    PORTA   ;EL PIN "RS" ESTARA EN EL PUERTOA   
DEFINE LCD_RSBIT    4       ;"RS" ESTARA CONECTADO EN RA4
DEFINE LCD_EREG     PORTA   ;EL PIN "E" ESTARA EN EL PUERTOA
DEFINE LCD_EBIT     5       ;"E" ESTARA CONECTADO EN RA5
;*******************************************************************************
   
        GOTO    INICIO
;*******************************************************************************
RX:     IF  PIR1.5 = 1 THEN DATO_RX = RCREG : RETURN     
        GOTO RX 
;*******************************************************************************         
     
INICIO: CALL  RX
        if DATO_RX = "="  THEN  GOTO ACA
        GOTO INICIO
;*******************************************************************************       
ACA:   CALL  RX
        DATO = DATO_RX 
        if  DATO_RX = " "  THEN  GOTO FIN       
        I =  I + 1
        GOTO    ACA             
;*******************************************************************************
FIN:    LCDOUT $FE,1        ;LIMPIA LA PANTALLA
        LCDOUT $FE,2,"PESO CAPTURADO!!!"
        LCDOUT $FE,$94,"RECIBIDO: ",DATO[1],DATO[2],DATO[3],DATO[4],DATO[5]
        LCDOUT $FE,$D4,"ORDENADO: ",DATO[I-2],DATO[I-3],DATO[I-4],DATO[I-5],DATO[I-6]
        I = $01
;******************************************************************************* 
        GOTO    INICIO

        END


 :-/ Les agradezco que me logren colaborar en el tema!!! :-/

Desconectado Sacahe

  • PIC12
  • **
  • Mensajes: 68
Re: AYUDA RECEPCION RS232 + 18F4550 + 20MHz
« Respuesta #1 en: 12 de Enero de 2012, 14:34:14 »
AMIGOS POR FIN PUDE CONFIGURAR ADECUADAMENTE LOS FUSES DEL PIC PARA LOGRAR LA COMUNICACION SERIAL UILIZANDO LA USART, USANDO UN CRISTAL DE 20MHz. POR UN MOMENTO PENSE QUE EL PBP ERA TRONCO DE VAINA JOPO,,,JAJAJA. A CONTINUACION LES DEJO EL FRAGMENTO DEL PROGRAMA DE COMO LO HICE:

DEFINE OSC 20
   
        OSCCON = $00    ;SELECCIONA RELOJ DE OSCILADOR PRIMARIO

    @    __CONFIG    _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
    @    __CONFIG    _CONFIG1H, _FOSC_HS_1H
    @    __CONFIG    _CONFIG2H, _WDT_OFF_2H & _WDTPS_512_2H
    @    __CONFIG    _CONFIG3H, _PBADEN_OFF_3H
    @    __CONFIG    _CONFIG4L, _LVP_OFF_4L & _ICPRT_OFF_4L & _XINST_OFF_4L


PORTA = 0
LATA = $00
CMCON = $07         ;COMPARADORES APAGADOS
TRISA = $00         ;CONFIGURA EL PUERTOA COMO SALIDA, ACA SE CONECTA EL LCD
ADCON1 = %00001111  ;CONFIGURA ADCON1, PINES PORTA Y PORTB COMO I/O DIGITALD

LATC = $00   
TRISC = %10111111   ;
PORTC = 0
SPBRG = 129         ;VEL.TRANSFERENCIA DE 2400
RCSTA = %10010000   ;CONFIGURACION DE LA USART,
TXSTA = %00100000   ;ACTIVAMOS LA TRANSMISION

PARA EDITAR Y CONFIGURAR LOS FUSES (EN ROJO) DESDE EL PROGRAMA PRINCIPAL DEBEN IRSE A LA LIBRERIA c://PBP/18F4550.INC, Y COLOCAR UN ";" AL COMIENZO DE CADA FUSE ASI:
       
        ;   __CONFIG    _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
        ;   __CONFIG    _CONFIG1H, _FOSC_HSPLL_HS_1H
        ;   __CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H
        ;   __CONFIG    _CONFIG3H, _PBADEN_OFF_3H
        ;   __CONFIG    _CONFIG4L, _LVP_OFF_4L & _ICPRT_OFF_4L & _XINST_OFF_4L
       

DE ESTA MANERA EL COMPILADOR NO LO TIENE EN CUENTA, Y YA SE PUEDEN CONFIGURAR LOS FUSES COMO SE DESEE DESDE EL PROGRAMA PRINCIPAL.
         
PARA ENTENDER MEJOR COMO SE CONFIGURAN LOS FUSES QUE TIENEN QUE VER CON EL FUNCIONAMIENTO DEL OSCILADOR (_CONFIG1L Y _CONFIG1H) LES DEJO EL SIGUIENTE ENLACE (ES EN INGLES):
       
        http://www.mikroe.com/forum/viewtopic.php?t=10646

       
 :)  ESPERO LES SEA DE GRAN UTILIDAD   :)

Desconectado KonKong

  • PIC10
  • *
  • Mensajes: 8
Re: AYUDA RECEPCION RS232 + 18F4550 + 20MHz
« Respuesta #2 en: 19 de Marzo de 2012, 14:04:17 »
Yo estoy usando PBP y al colocar la linea:

OSCCON = $00    ;SELECCIONA RELOJ DE OSCILADOR PRIMARIO

me coloca puros cuadros negros en la lcd, al omitir esa linea funciona el programa pero no a 20MHz.

Es mas, le quito el oscilador y sigue funcionando. Lo que quiere decir que esta funcionando con el oscilado interno.
Me puedes ayudar?






 

anything