TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: Fulguitron en 01 de Octubre de 2017, 18:48:48
-
He leido que este pic tiene dos osciladores, uno a 4MHZ y otro a 48khz. Veo que por defecto sale el del 4 MHZ, como cambio al de 48?? He leido el datasheet y veo esto
(https://preview.ibb.co/eJFQvb/bits_16f628.jpg) (https://ibb.co/f4YCab)
Supongo que tendré que cambiar algo de aquí, pero que??
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_OFF
LIST P=16F628A
INCLUDE <P16F628A.INC>
Un saludo y muchas gracias.
-
El PIC16F628 tiene esos 2 relojes internos, pero segun el datasheet que poseo es de 4Mhz y de 37KHz.
El PIC16F628A tiene pero los valores 4Mhz y 48Khz, asi que creo que estas intentando saber sobre este ultimo.
Como dice el datasheet, podes ponerlo como oscilador interno a los fuses ( como ya lo tenes realizado ) Y luego solo falta acomodar el bit de ese registro para cambiar de velocidad. Es decir:
-
Como siempre muchísimas gracias, funciona perfectamente. Y siguiendo con mis lecciones del datasheet, entiendo que a esta veloicdad el consume también es bastante menor no?? Como diez veces menos??
(https://image.ibb.co/f7TSJw/Sin_t_tulo.jpg) (https://imgbb.com/)
-
Creo que esos valores son bastantes optimistas, en el datasheet, dentro de las especificaciones electricas tenes una tabla que te dice cuanto es el consumo del micro, del BOR, del WDT, etc por separado, segun sea la frecuencia y la tension utilizada.
Tambien casi al final tenes los graficos de como varia la corriente con la tension aplicada, para cada uno de los casos, como varia con la temperatura, etc.
-
Seguimos con mis problemas, hace tiempo pensaba que había solucionado el problema pero no es así. Estoy haciendo pruebas con un programa simple pero no doy con la tecla para seleccionar el oscilador interno de 48khz. En que falla????
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_OFF
LIST P=16F628A
INCLUDE <P16F628A.INC>
CBLOCK 0x20
Status_temp
W_temp
segundos
ENDC
ORG 0x0000
bsf STATUS,RP0
clrf TRISA
movlw b'00000011'
movwf TRISB
movlw b'00000000'
bcf STATUS,RP0
movlw 0x07
movwf CMCON
BCF PCON, OSCF
mostrar
movlw d'1'
movwf segundos
movwf PORTA
movwf PORTB
call Retardo_50ms
clrf PORTA
clrf PORTB
call Retardo_50ms
goto mostrar
INCLUDE <RETARDOS.INC>
END
-
El registro PCON para cambio de frecuencia se encuentra en el banco 1. Recuerda que los PIC16F necesitas seleccionar el banco. En tu codigo estas en el banco 0 tratando de escribir al banco 1. Entonces muevete al banco 1 y cambia el bit. Debera funcionar.
Saludos
-
Lo pongo con la boca pequeña, pero creo que me ha salido (obviamente con vuestra ayuda, sino aún estaría despotricando a todo lo que me rodea, no os pasa de vez en cuando? :lol: :lol: :lol:)
Os dejo el código, el cambio es notable, el led parpadea muchísimo más lento.
Gracias a todos.
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_OFF
LIST P=16F628A
INCLUDE <P16F628A.INC>
CBLOCK 0x20
Status_temp
W_temp
segundos
ENDC
ORG 0x0000 ; Vector de reset
bsf STATUS,RP0
clrf TRISA
movlw b'00000011' ; Configurado como salidas excepto los dos primeros.
movwf TRISB
movlw b'00000000' ; Configurado como salidas
bcf PCON,OSCF
bcf STATUS,RP0
movlw 0x07
movwf CMCON
mostrar
movlw d'1'
movwf segundos ; mostramos las horas por el display de leds.
movwf PORTA
movwf PORTB
call Retardo_50ms
clrf PORTA
clrf PORTB
call Retardo_50ms
goto mostrar
INCLUDE <RETARDOS.INC>
END