TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Sacahe 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!!! :-/
-
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 :)
-
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?