Banner publicitario de PCBWay

Poco a poco me paso del F84 al F88.

Hola:

Viendo que en los locales cada vez se vende menos PIC 16F84A y más el 16F628A, me cuentan que el sustituto directo del famoso y popular 16F84 es el 16F88 en definitica. Antes no se creía que podría del el 16F628A, veo que no.

Por si acaso que dejen de fabricar el 16F84A como ocurre con los 16F876A/877A desde la Web del fabricante no los vende, ahora son los 16F886/887 con mejores prestaciones.

La idea es aprender a pasar de 16F84A al 16F88 que me llegarán a principios de Enero 2010. En este caso se utilizará el cristal de cuarzo externo a 4 MHz como el 16F84 aunqu el 16F88 aguante a 20 MHz. Quiero hacer el código fuente de este circuito del detector por movimiento y luz del F84 al F88 a ver si no es tan complicado como parece.

senpir.jpg


Ver: Luz por detector de movimiento y crepuscular Senpir


sobre todo me interesa la parte del __CONGIG que quiero dejarlo lo más parecido al 16F84A.

16f84a.jpg


Código:
    LIST    P=16F84A            ; Procesador.
    INCLUDE <P16F84A.INC>

__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
En el 16F88 lo he dejado así, no se si será el correcto.

16f88.jpg



Viendo el archivo P16F88.INC que me viene en el MPLAB v8.43 parece que me puedo guiar y adivinar los del __CONFIG.

Lo veo complicado y no quiero equivocarme. Al menos quiero ser como se hace el __CONFIG más adecuado. Ya me encargaré de pasar los bankos de memoria o actualizrlos en cada librería que encuentre con el PIC.

Data Sheet
16F84A
16F88

Un cordial sludo.
 
Última edición:
:cool:La verdad que estas en lo cierto a mi me paso que fui a comprar el f84 y solo tenian el f88 y no me anime a comprarlo pues en ese entonces solo deseaba aprender a programar pic16f84, uno basico como para empezar.Viendo el datasheet del f88 a mi parecer creo que la palabra de configuracion 1 esta bien, lo que no entiendo :unsure: es el FCMEM y el IESO de la palabra configurac 2

saludos(y)
 
He encontrado la posible solución:

Código:
[COLOR=#006600][COLOR=#000099]__CONFIG [COLOR=#330033]_CONFIG1, _CP_OFF & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC[/COLOR]

[COLOR=#006600]; _CP_OFF:            Protección de código DESACTIVADO.
; _DEBUG_OFF:         Debug en circuito DESACTIVADO.
; _WRT_PROTECT_OFF:   Protección a escritura en memoria de programa DESACTIVADO.
; _CPD_OFF:           Protección de código de datos DESACTIVADO.
; _LVP_OFF:           Programación en baja tensión DESACTIVADO.
; _BODEN_OFF:         Reset por Brown-out DESACTIVADO.
; _MCLRE_ON:          Reset por pin externo ACTIVADO.
; _PWRTE_ON:          Retraso al reset ACTIVADO.
; _WDT_OFF:           Watchdog DESACTIVADO.
; _XT_OSC:            Oscilador externo del tipo XT.
[/COLOR]
 [COLOR=#000099]__CONFIG[/COLOR] [COLOR=#330033]_CONFIG2, _IESO_OFF & _FCMEN_OFF[/COLOR]

[COLOR=#006600]; _IESO_OFF:          Modo de intercambio de externo a interno DESACTIVADO.[/COLOR]
[COLOR=#006600]; _FCMEN_OFF:         Monitor de CLK DESACTIVADO.[/COLOR]
[/COLOR][/COLOR]


Ya me ejecuta el PIC 16F88 con el MPLAB v4.43. Lo voy a probar en el simulador del MPLAB y en Proteus, pero tengo entendido que debo cambiar los puertos a digitales ya que son configurables. Deja ver si no me da fallos así o tengo la obligación de cambiarlo.

Código:
;¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬Senpir.asm¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬
;
;        PROGRAMA:         "Senpir". Luz por detector de movimiento y crepuscular.
;        AUTOR:         Ángel Acaymo M. G.
;        E-MAIL;        metaconta@gmail.com
;        PROCESADOR:        PIC16F88
;        FRECUENCIA:        4 MHz
;        VERSIÓN:        1.00
;        DESCRIPCIÓN:
;
;         Programa de un interruptor con sensor movimiento y de luz solar: Si es de noche,
;        mientras el sensor de movimiento (PIR) detecta la presencia de alguien
;        entorno a 6 metros, activa o se    pone a 1 la entrada RA3 y la lámpara
;        se enciende. En caso de que sea de día detectado por la LDR, nunca se enciende
;        la lámpara. En la otra opción, cuando la LDR detecta la noche o falta de Sol,
;        la lámpara se enciende, cuando sea de día, la lámpara se apaga.
;        En los microinterruptores puedes activar el tiempo que tarda en apagarse la
;        lámpara después de ser detectado por el sensor Pir y de noche de un máximo
;        una hora y treinta y cinco minutos.
;
;¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬


; _CP_OFF:            Protección de código DESACTIVADO.
; _DEBUG_OFF:         Debug en circuito DESACTIVADO.
; _WRT_PROTECT_OFF:   Protección a escritura en memoria de programa DESACTIVADO.
; _CPD_OFF:           Protección de código de datos DESACTIVADO.
; _LVP_OFF:           Programación en baja tensión DESACTIVADO.
; _BODEN_OFF:         Reset por Brown-out DESACTIVADO.
; _MCLRE_ON:          Reset por pin externo ACTIVADO.
; _PWRTE_ON:          Retraso al reset ACTIVADO.
; _WDT_OFF:           Watchdog DESACTIVADO.
; _XT_OSC:            Oscilador externo del tipo XT.
;---------------------------------------------------------------------------------------
; _IESO_OFF:          Modo de intercambio de externo a interno DESACTIVADO.
; _FCMEN_OFF:         Monitor de CLK DESACTIVADO.

; DATOS ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬
    LIST        P=16F88
    INCLUDE        <P16F88.INC>
    __CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
    __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
    __idlocs    0001                ; ID, versión del programa.

    CBLOCK  0x20
    ENDC

#DEFINE    Led_verde    PORTA,0        ; Led verde indica opción LDR seleccionada.
#DEFINE    Led_rojo    PORTA,1        ; Led rojo indica opción PIR seleccionada.
#DEFINE    Led_azul    PORTA,2        ; Led azul indica que el Relé está activado.
#DEFINE    lámpara    PORTA,3        ; lámpara.
#DEFINE    PIR        PORTB,1        ; Sensor PIR.
#DEFINE    LDR        PORTB,3        ; Sensor LDR.
#DEFINE    Int_RB4    PORTB,4        ; Interruptor RB4.
#DEFINE    Int_RB5    PORTB,5        ; Interruptor RB5.
#DEFINE    Int_RB6    PORTB,6        ; Interruptor RB6.
#DEFINE    Int_RB7    PORTB,7        ; Interruptor RB7.

; EEPROM ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬

    ORG        0x2100                ; Comienza en la dirección 0 de la memoria EERPOM.
                            ; Datos nombre del archivo, versión del programa
                            ; y dirección del correo electrónico.
    DE    "Senpir.asm. v1.0. 25-03-2009. metaconta@gmail.com", 0x00
                                
; CÓDIGOS ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬

    ORG     0
Inicio
    bsf    STATUS,RP0                ; Accede al Banco 1.
    clrf    PORTA                    ; Puerto A como salidas.
    movlw    b'11111111'                ; Las 8 líneas del puerto B se configura como entradas.
    movwf    PORTB
    bcf    STATUS,RP0                ; Accede al Banco 0.
    clrf    PORTA                    ; Supuestamente la lámpara y Led apagadas.    

Opcion_principal
    btfss    Int_RB4                ; ¿Bit 4 del PORTB es "1"? ¿Int_RB4 activado?
    goto    Opcion_LDR                ; No, activa modo LDR.
    goto    Opcion_PIR                ; Sí, activa modo PIR.

; INTERRUPTOR CREPUSCULAR LDR ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬

Opcion_LDR
    bcf    Led_rojo                ; Se apaga el Led rojo.                
    bsf    Led_verde                ; Enciende Led verde indicando modo LDR activado.
    btfss    LDR                    ; ¿La entrada LDR es igual a 1?, ¿LDR en oscuridad?
    goto    Apaga_la_lámpara            ; No, la LDR está iluminada por el Sol. La lámpara se apaga.
Enciende_la_lámpara
    call    Retardo_20_seg            ; Espera 20 segundos para confirmar la oscuridad.
    btfss    LDR                    ; ¿Entrada es igual a 1?, ¿LDR aún en oscuridad?
    goto    Opcion_principal            ; No, sale fuera.
    bsf    lámpara                ; Sí, enciende la lámpara.
    bsf    Led_azul                ; Led_azul activo.
    goto    Opcion_principal
Apaga_la_lámpara
    call    Retardo_20_seg            ; Espera 20 segundos para confirmar la oscuridad.
    btfsc    LDR                    ; ¿Entrada es = 0?, ¿LDR sigue iluminada por luz del sol?
    goto    Opcion_principal            ; No, sale fuera.
    bcf    lámpara                ; Sí, apaga lámpara.
    bcf    Led_azul                ; Led_azul indica que la lámpara está apagada.
    goto    Opcion_principal
; DETECTOR DE MOVIMIENTO ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬

Opcion_PIR    
    bcf    Led_verde                ; Apaga el Led verde de aviso.
    bsf    Led_rojo                ; Enciende Led rojo avisando que está activado el modo PIR.
    btfss    LDR                    ; ¿La entrada LDR es igual a 1?, ¿LDR en oscuridad?
    goto    lámpara_OFF                ; No.
    btfss    PIR                    ; ¿La entrada PIR es igual a 1?, ¿PIR ha detectado presencia?
    goto    lámpara_OFF                ; No, no ha detectado presencia o movimiento.
lámpara_ON
    bsf    lámpara                ; Sí, enciende la lámpara.
    bsf    Led_azul                ; Led_azul activo.
    btfss    Int_RB5                ; ¿Bit 5 del PORTB es igual a 1?, ¿Activado el interruptor RB5?
    goto    RB6                    ; No, salta a la línea siguiente.
    call    Retardo_5_min                ; Tiempo lámpara encendida 5 minutos.
RB6
    btfss    Int_RB6                ; ¿Bit 6 del PORTB es igual a 1?, ¿Activado el interruptor RB6?
    goto    RB7
    call    Retardo_30_min            ; Tiempo lámpara encendida 30 minutos.
RB7
    btfss    Int_RB7                ; ¿Bit 7 del PORTB es igual a 1?, ¿Activado el interruptor RB7?
    goto    Opcion_principal
    call    Retardo_1_hora            ; Tiempo lámpara encendida 1 hora.
    goto    Opcion_principal
lámpara_OFF
    bcf    lámpara                ; Apaga lámpara.
    bcf    Led_azul                ; Apaga Led_azul.
    goto    Opcion_principal


; SUBRUTINAS ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬

; Retardo de 20 segundos ................................................................
    cblock
    ret_00
    ret_01
    ret_02
    Nulo
    endc

Retardo_20_seg
            ;19999992 ciclos
    movlw    0xB5
    movwf    ret_00
    movlw    0x99
    movwf    ret_01
    movlw    0x2C
    movwf    ret_02
Retardo_20_seg_0
    decfsz    ret_00, f
    goto    $+2
    decfsz    ret_01, f
    goto    $+2
    decfsz    ret_02, f
    goto    Retardo_20_seg_0

            ;4 ciclos
    goto    $+1
    goto    $+1

            ;4 ciclos (incluyendo call)
    return

; Retardo de 5 minutos ..................................................................
    cblock
    ret_05
    ret_06
    ret_07
    ret_08
    endc

Retardo_5_min
            ;299999995 ciclos
    movlw    0x54
    movwf    ret_05
    movlw    0xA1
    movwf    ret_06
    movlw    0xFD
    movwf    ret_07
    movlw    0x02
    movwf    ret_08
Retardo_5_min_0
    decfsz    ret_05, f
    goto    $+2
    decfsz    ret_06, f
    goto    $+2
    decfsz    ret_07, f
    goto    $+2
    decfsz    ret_08, f
    goto    Retardo_5_min_0
        ;1 ciclo
    nop

            ;4 ciclos (incluyendo call)
    return

; Retardo de 30 minutos .................................................................
    cblock    
    ret_09
    ret_10
    ret_11
    ret_12
    endc

Retardo_30_min
            ;1799999989 ciclos
    movlw    0xFE
    movwf    ret_09
    movlw    0xC2
    movwf    ret_10
    movlw    0xEC
    movwf    ret_11
    movlw    0x0C
    movwf    ret_12
Retardo_30_min_0
    decfsz    ret_09, f
    goto    $+2
    decfsz    ret_10, f
    goto    $+2
    decfsz    ret_11, f
    goto    $+2
    decfsz    ret_12, f
    goto    Retardo_30_min_0

            ;7 ciclos
    goto    $+1
    goto    $+1
    goto    $+1
    nop

            ;4 ciclos (incluyendo call)
    return

; Retardo de 1 hora .....................................................................
    cblock
    ret_13
    ret_14
    ret_15
ret_16
    endc

Retardo_1_hora
            ;3599999989 ciclos
    movlw    0xFE
    movwf    ret_13
    movlw    0x84
    movwf    ret_14
    movlw    0xD8
    movwf    ret_15
    movlw    0x18
    movwf    ret_16
Retardo_1_hora_0
    decfsz    ret_13, f
    goto    $+2
    decfsz    ret_14, f
    goto    $+2
    decfsz    ret_15, f
    goto    $+2
    decfsz    ret_16, f
    goto    Retardo_1_hora_0

            ;7 ciclos
    goto    $+1
    goto    $+1
    goto    $+1
    nop

            ;4 ciclos (incluyendo call)
    return

    END
A ver si recibo una ayudita sobre el cambio de pasar los puertos a digitales.

dynamco
Puedes comprar el 16F88 con los ejemplos del 16F84, sólo es la configuración, lo demás es igual incluido las instrucciones que son 35 las de toda la vida. (Hay PIC16F con 49 instrucciones nuevas pero son PIC muy nuevos, ver noticia.)

Anímate para empezar con el 16F88, puedes practicar primero con el simulador de PIC con el programa Proteus. Creas tus primeros pinitos del 16F88 apagando y encendiendo Led en simulación, cuando ya te sientas que domina lo básico, ya puedes adquirir físicamente el 16F88 (por cierto, está muy potente). mientras buscas motivación viendo vídeos del 16F88 por aquí. Ánimo, :).

EDITO:

Urgando por el 16F88 he encontrado en la página 53 el cambio de entradas digitales del puerto B. Es ANSEL en 0 que significa digital.

io001.gif

Hay algo que quiero saber. ¿Cómo se cambia de Bancos de memoria que tiene 4? El 16F84 sólo dos y es fácil de cambiar, pero este no tengo idea.
 
Última edición:
Atrás
Arriba