Problema con PIC16F877A y cristal de 20 Mhz.

#1
Buenas...

no soy de escribir pero leo el foro es muy interesante desde ya les agradesco su ayuda.

les cuento este año me recibo de tecnico electronico.

bueno el problema en si, lo tengo con Pic 16f877a con un crystal de 20Mhz.

sin los dos capacitores de 22p funciona perfecto el diseño, pero cuando se los agrego falla no respetando tiempos o directamente se "tilda". probe con diferentes valores de capacitores y pasa lo mismo.
tengo una configuracon con HS y solamente PWRTEN.

bueno al que tenga una idea sera bienvenida.

si necesitan algun dato mas pidanlo.

otra vez desde ya gracias.
 
#2
Si solo tienes activados los fuses HS y PWRTEN, es que tu WDT esta habilitado (con su valor por defecto) y tu pic se resetea a cada rato. Lo mas probable es que sea eso.
 
#4
Hola igual soy nuevo en este foro, de igual manera tengo un problema con un microcontrolador 16f877a no me reconoce el Osc de 20MHz igual lo estoy definiendo en el programa del micro, ya cheque la fuente que los 5v esten bien regulados, solo me agarra el de 4MHz, y estoy usando todos los puertos del micro, estoy utilizando 4 entradas de convercion analogico digital, y el programa que estoy usando es pic basic pro, si alguien pudiera orientarme por favor
Gracias.
 
#5
Hola igual soy nuevo en este foro, de igual manera tengo un problema con un microcontrolador 16f877a no me reconoce el Osc de 20MHz igual lo estoy definiendo en el programa del micro, ya cheque la fuente que los 5v esten bien regulados, solo me agarra el de 4MHz, y estoy usando todos los puertos del micro, estoy utilizando 4 entradas de convercion analogico digital, y el programa que estoy usando es pic basic pro, si alguien pudiera orientarme por favor
Gracias.
Buenas.
Tendrías que poner mas información, el código por ejemplo, asumo que has configurado los fuses como:
Código:
@ DEVICE pic16F877A, HS_OSC
   DEFINE OSC 20    ; Definir que se trabajará con 20MHz. (Osc. EXTERNO)
si no defines los fuses y el oscilador pic basic pro pondrá el que es por default 4mhz
 

Adjuntos

Última edición:
#6
Hola igual soy nuevo en este foro, de igual manera tengo un problema con un microcontrolador 16f877a no me reconoce el Osc de 20MHz igual lo estoy definiendo en el programa del micro, ya cheque la fuente que los 5v esten bien regulados, solo me agarra el de 4MHz, y estoy usando todos los puertos del micro, estoy utilizando 4 entradas de convercion analogico digital, y el programa que estoy usando es pic basic pro, si alguien pudiera orientarme por favor
Gracias.
Hola...¿programa?,¿ circuito?,¿simulación?, puede ser que el cristal este dañado.
Si le pones capacitores grande a ese cristal se negara a oscilar.
Saludos.

Ric.
 
#7
Buenas.
Tendrías que poner mas información, el código por ejemplo, asumo que has configurado los fuses como:
Código:
@ DEVICE pic16F877A, HS_OSC
   DEFINE OSC 20    ; Definir que se trabajará con 20MHz. (Osc. EXTERNO)
si no defines los fuses y el oscilador pic basic pro pondrá el que es por default 4mhz
hola si en mi programa ya lo estoy definiendo lo del oscilador para que trabaje a 20 y aun asi no hace nada

AbrahamMtz dijo:
hola si en mi programa ya lo estoy definiendo lo del oscilador para que trabaje a 20 y aun asi no hace nada
este es mi codigo de programacion inicial

include "modedefs.bas"
DEFINE OSC 20 ' Define Oscilador a 20 Mhz
DEFINE LCD_DREG PORTD ' Indica que el Bus estará conectado en el Puerto D
DEFINE LCD_BITS 4 ' El bus será de cuatro bits.
DEFINE LCD_DBIT 4 ' Selección del Bit de inicio del puerto (0 o 4) en caso
' de utilizar los cuatro Bits mas significativos de la LCD
DEFINE LCD_RSREG PORTB ' Indica al uC que el pin "RS" estará en el Puerto B
DEFINE LCD_RSBIT 1 ' "RS" estará conectado en RB1
DEFINE LCD_EREG PORTB ' Indica al uC que el pin "E" estará en el Puerto B
DEFINE LCD_EBIT 0 ' "E" estará conectado en RB0
DEFINE LCD_LINES 2 ' Define el número de líneas de la pantalla
Define ADC_BITS 10 ' Define la conversión A/D a 10 Bits
DEFINE ADC_SAMPLEUS 50 ' Tiempo de muestreo en el conversor A/D es 50 uS
 
#8
Buenas.
Mmmm no veo en tu configuración el tipo de oscilador que estas utilizando, ¿como configuras los fusibles de tu micro?. Los tipos de osciladores pueden ser LP, XT y HS.
 
#9
Buenas.
Mmmm no veo en tu configuración el tipo de oscilador que estas utilizando, ¿como configuras los fusibles de tu micro?. Los tipos de osciladores pueden ser LP, XT y HS.
Pues es lo que igual quisiera saber, por que si le indico como me mencionaste con anterioridad de lo del " @ DEVICE pic16F877A, HS_OSC " me marca error a la hora de compilar mi programa, y en simulación solo con DEFINE OSC 20MHz si lo hace pero al momento de pasarlo en fisico no hace ninguna función, y ya cambie un buen de veces el cristal y los cap y revice que la fuente este dando el voltaje que necesita para poder usarlo. :cry:
 
#10
En mi programa ya estoy definiendo lo del oscilador para que trabaje a 20 MHz y aún así no hace nada.
No hace nada porque te hace falta la palabra de configuración.
Si no la declaras, el compilador usará la que tiene por defecto en el archivo "16F877A.INC"
Código:
__config _XT_OSC & _WDT_ON & _LVP_OFF & _CP_OFF
Y en esa configuración se está usando _XT_OSC (Oscilador a cristal <= 4 MHz.)
Si usas un cristal superior debes usar el fuse _HS_OSC

Usa esta configuración en la cabecera del programa:
PHP:
;*******************************************************************************
@ Device PIC16F877A     ; Microcontrolador utilizado
; Palabra de configuración:
@ Device HS_OSC, WDT_OFF, PWRT_ON, LVP_OFF
;*******************************************************************************
Define OSC 20           ; Definir que se trabajará con 20 MHz.
Nota:
La palabra de configuración definida en los archivos *.INC, está escrita en lenguaje ensamblador.
En el entorno del editor se debe escribir con la sintaxis del compilador.

Si el compilador te muestra un error al compilar usando la palabra de configuración, debes actualizarlo a la versión 2.60C
 
Última edición:
#11
No hace nada porque te hace falta la palabra de configuración.
Si no la declaras, el compilador usará la que tiene por defecto en el archivo "16F877A.INC"
Código:
__config _XT_OSC & _WDT_ON & _LVP_OFF & _CP_OFF
Y en esa configuración se está usando _XT_OSC (Oscilador a cristal <= 4 MHz.)
Si usas un cristal superior debes usar el fuse _HS_OSC

Usa esta configuración en la cabecera del programa:
PHP:
;*******************************************************************************
@ Device PIC16F877A     ; Microcontrolador utilizado
; Palabra de configuración:
@ Device HS_OSC, WDT_OFF, PWRT_ON, LVP_OFF
;*******************************************************************************
Define OSC 20           ; Definir que se trabajará con 20 MHz.
Nota:
La palabra de configuración definida en los archivos *.INC, está escrita en lenguaje ensamblador.
En el entorno del editor se debe escribir con la sintaxis del compilador.

Si el compilador te muestra un error al compilar usando la palabra de configuración, debes actualizarlo a la versión 2.60C
ya hice el intento como me indicaste con anterioridad y me marca error y la version 3.0
 
#12
ya hice el intento como me indicaste con anterioridad y me marca error y la version 3.0
Buenas
En PBP 3.0 la configuración de los fuses es diferente, por eso es importante que des la máxima información posible.
prueba con esta configuración en tu cabecera del código:
Código:
;.......................................configuracion de fuses PBP3.0......................................
#CONFIG
      __config _HS_OSC & _WDT_OFF & _LVP_OFF & _CP_OFF
#ENDCONFIG

include "modedefs.bas"
DEFINE OSC 20 ' Define Oscilador a 20 Mhz
DEFINE LCD_DREG PORTD ' Indica que el Bus estará conectado en el Puerto D
DEFINE LCD_BITS 4 ' El bus será de cuatro bits.
DEFINE LCD_DBIT 4 ' Selección del Bit de inicio del puerto (0 o 4) en caso
' de utilizar los cuatro Bits mas significativos de la LCD
DEFINE LCD_RSREG PORTB ' Indica al uC que el pin "RS" estará en el Puerto B
DEFINE LCD_RSBIT 1 ' "RS" estará conectado en RB1
DEFINE LCD_EREG PORTB ' Indica al uC que el pin "E" estará en el Puerto B
DEFINE LCD_EBIT 0 ' "E" estará conectado en RB0
DEFINE LCD_LINES 2 ' Define el número de líneas de la pantalla
Define ADC_BITS 10 ' Define la conversión A/D a 10 Bits
DEFINE ADC_SAMPLEUS 50 ' Tiempo de muestreo en el conversor A/D es 50 uS
 
#13
Buenas
En PBP 3.0 la configuración de los fuses es diferente, por eso es importante que des la máxima información posible.
prueba con esta configuración en tu cabecera del código:
Código:
;.......................................configuracion de fuses PBP3.0......................................
#CONFIG
      __config _HS_OSC & _WDT_OFF & _LVP_OFF & _CP_OFF
#ENDCONFIG

include "modedefs.bas"
DEFINE OSC 20 ' Define Oscilador a 20 Mhz
DEFINE LCD_DREG PORTD ' Indica que el Bus estará conectado en el Puerto D
DEFINE LCD_BITS 4 ' El bus será de cuatro bits.
DEFINE LCD_DBIT 4 ' Selección del Bit de inicio del puerto (0 o 4) en caso
' de utilizar los cuatro Bits mas significativos de la LCD
DEFINE LCD_RSREG PORTB ' Indica al uC que el pin "RS" estará en el Puerto B
DEFINE LCD_RSBIT 1 ' "RS" estará conectado en RB1
DEFINE LCD_EREG PORTB ' Indica al uC que el pin "E" estará en el Puerto B
DEFINE LCD_EBIT 0 ' "E" estará conectado en RB0
DEFINE LCD_LINES 2 ' Define el número de líneas de la pantalla
Define ADC_BITS 10 ' Define la conversión A/D a 10 Bits
DEFINE ADC_SAMPLEUS 50 ' Tiempo de muestreo en el conversor A/D es 50 uS
Me marca igual error en estas lineas:
#CONFIG
__config _HS_OSC & _WDT_OFF & _LVP_OFF & _CP_OFF
#ENDCONFIG
 
#16
ya hice el intento como me indicaste con anterioridad y me marca error y la version 3.0
Me marca igual error en estas líneas:
#CONFIG
__config _HS_OSC & _WDT_OFF & _LVP_OFF & _CP_OFF
#ENDCONFIG
Es muy extraño.
Sería interesante saber que versión de PBP estás usando realmente.
Cuando compilas se debe generar un archivo .asm en la misma carpeta de tu proyecto.
Dentro de ese archivo se puede ver la versión del compilador, que no es la misma que la del editor.
El editor o entorno de desarrollo, se llama MicroCode Studio, (MCS) y el compilador se llama PICBasic Pro. (PBP)

Para versiones anteriores o igual a la versión 2.60C, debe tener algo así en la cabecera del archivo:
Código:
; PICBASIC PRO(TM) Compiler 2.60C, (c) 1998, 2011
Y para la versión 3.X.X.X debe tener algo así:
Código:
; PICBASIC PRO(TM) Compiler 3.0.9.1, (c) 1998, 2016
La versión del entorno de desarrollo e igualmente la del compilador, también se puede ver en el "Acerca de..."

Nota:
También se generan errores al compilar cuando se usa Windows a 64 bits y PBP 2.XX.
Pero eso ya no sucede con PBP3.
 
Última edición:
#17
Es muy extraño.
Sería interesante saber que versión de PBP estás usando realmente.
Cuando compilas se debe generar un archivo .asm en la misma carpeta de tu proyecto.
Dentro de ese archivo se puede ver la versión del compilador, que no es la misma que la del editor.
El editor o entorno de desarrollo, se llama MicroCode Studio, (MCS) y el compilador se llama PICBasic Pro. (PBP)

Para versiones anteriores o igual a la versión 2.60C, debe tener algo así en la cabecera del archivo:
Código:
; PICBASIC PRO(TM) Compiler 2.60C, (c) 1998, 2011
Y para la versión 3.X.X.X debe tener algo así:
Código:
; PICBASIC PRO(TM) Compiler 3.0.9.1, (c) 1998, 2016
La versión del entorno de desarrollo e igualmente la del compilador, también se puede ver en el "Acerca de..."

Nota:
También se generan errores al compilar cuando se usa Windows a 64 bits y PBP 2.XX.
Pero eso ya no sucede con PBP3.
Ya lo encontre es Pic Basic Pro 2.50A
y la versión de microcode studio es 3.0.0.5

Entonces tengo que buscar una actualización para que funcione correctamente.
 
#18
Ya lo encontre es Pic Basic Pro 2.50A
y la versión de microcode studio es 3.0.0.5

Entonces tengo que buscar una actualización para que funcione correctamente.
Efectivamente tienes que actualizar el Pic Basic Pro a 2.6c para compilar correctamente.
PD: yo compile sin problemas el programa que subiste con el pic basic pro 2.6:
Código:
;*******************************************************************************
@ Device PIC16F877A     ; Microcontrolador utilizado
; Palabra de configuración:
@ Device HS_OSC, WDT_OFF, PWRT_ON, LVP_OFF
;*******************************************************************************
Define OSC 20           ; Definir que se trabajará con 20 MHz.  
include "modedefs.bas"
DEFINE LCD_DREG PORTD ' Indica que el Bus estará conectado en el Puerto D
DEFINE LCD_BITS 4 ' El bus será de cuatro bits.
DEFINE LCD_DBIT 4 ' Selección del Bit de inicio del puerto (0 o 4) en caso
' de utilizar los cuatro Bits mas significativos de la LCD
DEFINE LCD_RSREG PORTB ' Indica al uC que el pin "RS" estará en el Puerto B
DEFINE LCD_RSBIT 1 ' "RS" estará conectado en RB1
DEFINE LCD_EREG PORTB ' Indica al uC que el pin "E" estará en el Puerto B
DEFINE LCD_EBIT 0 ' "E" estará conectado en RB0
DEFINE LCD_LINES 2 ' Define el número de líneas de la pantalla
Define ADC_BITS 10 ' Define la conversión A/D a 10 Bits
DEFINE ADC_SAMPLEUS 50 ' Tiempo de muestreo en el conversor A/D es 50 uS
 
#19
Hola ya actualice la versión de pic basic pro y me sigue marcando error en lo de @ device hs_osc
pero ya trabajo el oscilador de 20mhz solo con el define osc 20

Pero en la versión anterior no trabajaba, esto es un poco extraño, pero al fin y acabo se soluciono.

Pero ahora tengo otra pregunta, es que ahora quisiera probar con otro pic el 18f452 en el pic basic no hay problema o eso pienso yo, pero al momento de querer grabar el pic mi programador me dice que faltan los bits de hexadecimal.
 
Arriba