Autor Tema: Duda con pic 16F88  (Leído 3459 veces)

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

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Duda con pic 16F88
« en: 16 de Febrero de 2011, 18:19:28 »
Hola de nuevo, mirando el pic 16F88 me surge una duda:
Código: ASM
  1. ;******************************************************************************
  2. ;   This file is a basic code template for code generation                    *
  3. ;   on the  PIC16F88. This file contains the basic code building              *
  4. ;   blocks to build upon.                                                     *
  5. ;                                                                             *
  6. ;   Refer to the MPASM User's Guide for additional information on             *
  7. ;   features of the assembler.                                                *
  8. ;                                                                             *
  9. ;   Refer to the respective data sheet for additional                         *
  10. ;   information on the instruction set.                                       *
  11. ;                                                                             *
  12. ;******************************************************************************
  13. ;                                                                             *
  14. ;    Filename:         xxx.asm                                                *
  15. ;    Date:                                                                    *
  16. ;    File Version:                                                            *
  17. ;                                                                             *
  18. ;    Author:                                                                  *
  19. ;    Company:                                                                 *
  20. ;                                                                             *
  21. ;                                                                             *
  22. ;******************************************************************************
  23. ;                                                                             *
  24. ;    Files required: P16F88.INC                                               *
  25. ;                                                                             *
  26. ;******************************************************************************
  27. ;                                                                             *
  28. ;    Features of the 16F88:                                                   *
  29. ;                                                                             *
  30. ;    1 10-bit PWM                                                             *
  31. ;    8 MHz Internal Oscillator                                                *
  32. ;    ICD support                                                              *
  33. ;    256 bytes of EEPROM data memory                                          *
  34. ;    Capture/Compare Module                                                   *
  35. ;                                                                             *
  36. ;******************************************************************************
  37. ;                                                                             *
  38. ;    Notes:                                                                   *
  39. ;                                                                             *
  40. ;******************************************************************************
  41. ;                                                                             *
  42. ;    Revision History:                                                        *
  43. ;                                                                             *
  44. ;******************************************************************************
  45.  
  46. ;------------------------------------------------------------------------------
  47. ; PROCESSOR DECLARATION
  48. ;------------------------------------------------------------------------------
  49.  
  50.      LIST      p=16F88              ; list directive to define processor
  51.      #INCLUDE <p16f88.inc>          ; processor specific variable definitions
  52.  
  53. ;------------------------------------------------------------------------------
  54. ;
  55. ; CONFIGURATION WORD SETUP
  56. ;
  57. ; The 'CONFIG' directive is used to embed the configuration word within the
  58. ; .asm file. The lables following the directive are located in the respective
  59. ; .inc file.  See the data sheet for additional information on configuration
  60. ; word settings.
  61. ;
  62. ;------------------------------------------------------------------------------
  63.  
  64.      __CONFIG    _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO
  65.      __CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF
  66.  
  67. ;------------------------------------------------------------------------------
  68. ;
  69. ; VARIABLE DEFINITIONS
  70. ;
  71. ; Available Data Memory divided into Bank 0 through Bank 3.  Each Bank contains
  72. ; Special Function Registers and General Purpose Registers at the locations
  73. ; below:  
  74. ;
  75. ;           SFR           GPR               SHARED GPR's
  76. ; Bank 0    0x00-0x1F     0x20-0x6F         0x70-0x7F    
  77. ; Bank 1    0x80-0x9F     0xA0-0xEF         0xF0-0xFF  
  78. ; Bank 2    0x100-0x10F   0x110-0x16F       0x170-0x17F
  79. ; Bank 3    0x180-0x18F   0x190-0x1EF       0x1F0-0x1FF
  80. ;
  81. ;------------------------------------------------------------------------------
  82.  
  83. ; Example of using Shared Uninitialized Data Section
  84. INT_VAR        UDATA_SHR      
  85. W_TEMP         RES        1    ; w register for context saving (ACCESS)
  86. STATUS_TEMP    RES        1    ; status used for context saving (ACCESS)
  87. PCLATH_TEMP    RES        1    ; variable used for context saving
  88.  
  89. ; Example of using GPR Uninitialized Data
  90. GPR_VAR        UDATA          
  91. MYVAR1         RES        1    ; User variable placed by linker
  92. MYVAR2         RES        1    ; User variable placed by linker
  93. MYVAR3         RES        1    ; User variable placed by linker
  94.  
  95. ; Definition Records
  96. Led                        equ            0        ; Definimos Led como el bit 0 de un registro, en este caso PORTB
  97. Pulsador           equ        0    ; Definimos Pulsador como el bit 0 de un registro, en este caso PORTA               
  98.  
  99. ;------------------------------------------------------------------------------
  100. ; EEPROM INITIALIZATION
  101. ;
  102. ; The 16F88 has 256 bytes of non-volatile EEPROM, starting at address 0x2100
  103. ;
  104. ;------------------------------------------------------------------------------
  105.  
  106. DATAEE    CODE  0x2100
  107.     DE    "MIQUEL_S"          ; Place 'M' 'I' 'Q' 'U' 'E' 'L' '_' 'S' at address 0,1,2,3,4,5,6,7
  108.  
  109. ;------------------------------------------------------------------------------
  110. ; RESET VECTOR
  111. ;------------------------------------------------------------------------------
  112.  
  113. RESET     CODE    0x0000            ; processor reset vector
  114.           pagesel START
  115.           GOTO    START             ; go to beginning of program
  116.  
  117. ;------------------------------------------------------------------------------
  118. ; INTERRUPT SERVICE ROUTINE
  119. ;------------------------------------------------------------------------------
  120.  
  121. INT_VECT  CODE    0x0004            ; interrupt vector location
  122.  
  123. ;         Context saving for ISR
  124.           MOVWF   W_TEMP            ; save off current W register contents
  125.           MOVF    STATUS,W          ; move status register into W register
  126.           MOVWF   STATUS_TEMP       ; save off contents of STATUS register
  127.           MOVF    PCLATH,W          ; move pclath register into W register
  128.           MOVWF   PCLATH_TEMP       ; save off contents of PCLATH register
  129.  
  130. ;------------------------------------------------------------------------------
  131. ; USER INTERRUPT SERVICE ROUTINE GOES HERE
  132. ;------------------------------------------------------------------------------
  133.  
  134. ;         Restore context before returning from interrupt
  135.           MOVF    PCLATH_TEMP,W     ; retrieve copy of PCLATH register
  136.           MOVWF   PCLATH            ; restore pre-isr PCLATH register contents
  137.           MOVF    STATUS_TEMP,W     ; retrieve copy of STATUS register
  138.           MOVWF   STATUS            ; restore pre-isr STATUS register contents
  139.           SWAPF   W_TEMP,F
  140.           SWAPF   W_TEMP,W          ; restore pre-isr W register contents
  141.           RETFIE                    ; return from interrupt
  142.  
  143. ;------------------------------------------------------------------------------
  144. ; MAIN PROGRAM
  145. ;------------------------------------------------------------------------------
  146.  
  147. PROGRAM   CODE   
  148.  
  149. START     ;**** Configuracion de Puertos ****
  150.                   bsf     STATUS,RP0            ; Pasamos de Banco 0 a Banco 1.-
  151.                   movlw   b'1111111'            ; Muevo a W.-
  152.                   movwf   TRISA                         ; Cargo en TRISA.-
  153.                   movlw   b'11111110'
  154.                   movwf   TRISB
  155.                   bcf     STATUS,RP0            ; Pasamos de Banco 1 a Banco 0.-
  156.                   bcf     PORTB,Led                     ; Comienza apagado.-
  157.  
  158. BUCLE     ;**** Control del Led ****
  159.                   btfsc   PORTA,Pulsador        ; Preguntamos si esta a 0 logico.-                                     
  160.                   goto    APAGAR                        ; Esta a 1 logico, Apagamos led.-
  161.                   bsf     PORTB,Led                     ; Esta a 0 logico, Encendemos Led.-
  162.                   goto    BUCLE                         ; Testeamos nuevamente la condicion del Pulsador.-
  163.  
  164. APAGAR    bcf     PORTB,Led                     ; Apagamos Led.-
  165.                   goto    BUCLE                         ; Testeamos nuevamente la condicion del Pulsador.-                             
  166. ;------------------------------------------------------------------------------
  167. ; PLACE USER PROGRAM HERE
  168. ;------------------------------------------------------------------------------
  169.  
  170.           GOTO $
  171.  
  172.           END
En este codigo no veo la configuracion de la frecuencia interna del pic, eso me da a entender que por defecto son 8MHz es asi o me equivoco, y otra cosilla de querer configurar la frecuencia seria tan facil como:
Código: ASM
  1. bsf          STATUS,RP0
  2.                   movlw     b'111'
  3.                   movwf     OSCCON
  4.                   bcf          STATUS,RP0

Gracias
Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda con pic 16F88
« Respuesta #1 en: 16 de Febrero de 2011, 18:47:21 »
Según datasheet el valor inicial de OSCCON después de un reset es 0x00, así que inicia en 31kHz. Y para configurarlo lo único es fijar el valor en osccon (IRCF<2:0>,SCS<1:0>) y el fuse correspondiente.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Duda con pic 16F88
« Respuesta #2 en: 17 de Febrero de 2011, 05:27:36 »
Gracias Suky por la respuesta, mira que lo estuve mirando y no lo encontre, pero a la tercera va la vencida.

8Fh OSCCON — IRCF2 IRCF1 IRCF0 OSTS IOFS SCS1 SCS0 -000 0000 40
90h OSCTUNE — — TUN5 TUN4 TUN3 TUN2 TUN1 TUN0 --00 0000 38

Gracias de nuevo.
Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Duda con pic 16F88
« Respuesta #3 en: 21 de Febrero de 2011, 11:56:24 »
Hola, alguien puede sacarme de dudas, tengo el programa que expongo mas abajo y me encuentro sin errores de compilacion, me funciona en la simulacion de proteus y sin embargo en la realidad no funca.
¿Tiene algun secreto el dichoso 16F88?
¿Que estoy haciendo mal?

Gracias.
Saludos.
Código: ASM
  1. ;******************************************************************************
  2. ;   This file is a basic code template for code generation                    *
  3. ;   on the  PIC16F88. This file contains the basic code building              *
  4. ;   blocks to build upon.                                                     *
  5. ;                                                                             *
  6. ;   Refer to the MPASM User's Guide for additional information on             *
  7. ;   features of the assembler.                                                *
  8. ;                                                                             *
  9. ;   Refer to the respective data sheet for additional                         *
  10. ;   information on the instruction set.                                       *
  11. ;                                                                             *
  12. ;******************************************************************************
  13. ;                                                                             *
  14. ;    Filename: Timer Led.asm                                                  *
  15. ;    Date: 20-02-2011                                                         *
  16. ;    File Version: 01                                                         *
  17. ;                                                                             *
  18. ;    Author: Miquel Servera                                                   *
  19. ;    Company: Can Vetle                                                       *
  20. ;                                                                             *
  21. ;******************************************************************************
  22. ;                                                                             *
  23. ;    Files Required: P16F88.INC                                               *
  24. ;                                                                             *
  25. ;******************************************************************************
  26. ;                                                                             *
  27. ;    Features of the 16F88:                                                   *
  28. ;                                                                             *
  29. ;    1 10-bit PWM                                                             *
  30. ;    8 MHz Internal Oscillator                                                *
  31. ;    ICD support                                                              *
  32. ;    256 bytes of EEPROM data memory                                          *
  33. ;    Capture/Compare Module                                                   *
  34. ;                                                                             *
  35. ;******************************************************************************
  36. ;                                                                             *
  37. ;    Notes:                                                                   *
  38. ;                                                                             *
  39. ;                                                                             *
  40. ;******************************************************************************
  41. ;                                                                             *
  42. ;    Revision History:                                                        *
  43. ;                                                                             *
  44. ;******************************************************************************
  45.  
  46. ;------------------------------------------------------------------------------
  47. ; PROCESSOR DECLARATION
  48. ;------------------------------------------------------------------------------
  49.  
  50.      LIST      p=16F88              ; list directive to define processor
  51.      #INCLUDE <P16F88.INC>          ; processor specific variable definitions
  52.  
  53. ;------------------------------------------------------------------------------
  54. ;
  55. ; CONFIGURATION WORD SETUP
  56. ;
  57. ; The 'CONFIG' directive is used to embed the configuration word within the
  58. ; .asm file. The lables following the directive are located in the respective
  59. ; .inc file.  See the data sheet for additional information on configuration
  60. ; word settings.
  61. ;
  62. ;------------------------------------------------------------------------------
  63.  
  64.      __CONFIG    _CONFIG1, _CP_OFF  & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO
  65.      __CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF
  66.  
  67. ;------------------------------------------------------------------------------
  68. ;
  69. ; VARIABLE DEFINITIONS
  70. ;
  71. ; Available Data Memory divided into Bank 0 through Bank 3.  Each Bank contains
  72. ; Special Function Registers and General Purpose Registers at the locations
  73. ; below:  
  74. ;
  75. ;           SFR           GPR               SHARED GPR's
  76. ; Bank 0    0x00-0x1F     0x20-0x6F         0x70-0x7F    
  77. ; Bank 1    0x80-0x9F     0xA0-0xEF         0xF0-0xFF  
  78. ; Bank 2    0x100-0x10F   0x110-0x16F       0x170-0x17F
  79. ; Bank 3    0x180-0x18F   0x190-0x1EF       0x1F0-0x1FF
  80. ;
  81. ;------------------------------------------------------------------------------
  82.  
  83.     CBLOCK 0x20 ; Sample GPR variable registers allocated contiguously
  84.         MYVAR1  ; User variable
  85.         MYVAR2  ; User variable
  86.         MYVAR3  ; User variable
  87.     ENDC
  88.  
  89. W_TEMP         EQU        0x7D  ; w register for context saving (ACCESS)
  90. STATUS_TEMP    EQU        0x7E  ; status used for context saving (ACCESS)
  91. PCLATH_TEMP    EQU        0x7F  ; variable used for context saving
  92.  
  93. ;------------------------------------------------------------------------------
  94. ; EEPROM INITIALIZATION
  95. ;
  96. ; The 16F88 has 256 bytes of non-volatile EEPROM, starting at address 0x2100
  97. ;
  98. ;------------------------------------------------------------------------------
  99.  
  100. DATAEE    ORG  0x2100
  101.     DE    "MCHP"  ; Place 'M' 'C' 'H' 'P' at address 0,1,2,3
  102.  
  103. ;------------------------------------------------------------------------------
  104. ; RESET VECTOR
  105. ;------------------------------------------------------------------------------
  106.  
  107. RESET     ORG     0x0000            ; processor reset vector
  108.           PAGESEL START
  109.           GOTO    START             ; go to beginning of program
  110.  
  111. ;------------------------------------------------------------------------------
  112. ; INTERRUPT SERVICE ROUTINE
  113. ;------------------------------------------------------------------------------
  114.  
  115. ISR       ORG     0x0004            ; interrupt vector location
  116.  
  117. ;         Context saving for ISR
  118.           MOVWF   W_TEMP            ; save off current W register contents
  119.           MOVF    STATUS,W          ; move status register into W register
  120.           MOVWF   STATUS_TEMP       ; save off contents of STATUS register
  121.           MOVF    PCLATH,W          ; move pclath register into W register
  122.           MOVWF   PCLATH_TEMP       ; save off contents of PCLATH register
  123.  
  124. ;------------------------------------------------------------------------------
  125. ; USER INTERRUPT SERVICE ROUTINE GOES HERE
  126. ;------------------------------------------------------------------------------
  127.  
  128. ;         Restore context before returning from interrupt
  129.           MOVF    PCLATH_TEMP,W     ; retrieve copy of PCLATH register
  130.           MOVWF   PCLATH            ; restore pre-isr PCLATH register contents
  131.           MOVF    STATUS_TEMP,W     ; retrieve copy of STATUS register
  132.           MOVWF   STATUS            ; restore pre-isr STATUS register contents
  133.           SWAPF   W_TEMP,F
  134.           SWAPF   W_TEMP,W          ; restore pre-isr W register contents
  135.           RETFIE                    ; return from interrupt
  136.  
  137. ;------------------------------------------------------------------------------
  138. ; MAIN PROGRAM
  139. ;------------------------------------------------------------------------------
  140.  
  141. START
  142. ;                       **** Configuracion de Puertos ****
  143.                         bsf                     STATUS,RP0              ; Pasamos de Bank 0 a Bank 1.-
  144.                         movlw           b'11111110'
  145.                         movwf           TRISB
  146.                         movlw           0x00
  147.                         movwf           ANSEL
  148.                         movlw           b'00000011'
  149.                         movwf           TRISA
  150.                         bcf                     STATUS,RP0              ; Pasamos de Bank 1 a Bank 0.-
  151.                         clrf            PORTA                   ; Initialize PORTA by clearing inputs
  152.                                                                                 ; data latches.-
  153.                         clrf            PORTB                   ; Initialize PORTB by clearing outputs
  154.                                                                                 ; data latches.-
  155.  
  156. ;                       **** Control del Led ****
  157. BUCLE
  158.                         btfsc           PORTA,0                 ; Preguntamos si esta en 0 logico.-
  159.                         goto            APAGAR                  ; Esta a 1 logico, Apagamos Led.-
  160.                         bsf                     PORTB,0                 ; Esta a 0 logico, Encendemos Led.-
  161.                         goto            BUCLE                   ; Testeamos nuevamente la condicion del Pulsador.-
  162.  
  163. APAGAR          bcf                     PORTB,0                 ; Apagamos Led.-
  164.                         goto            BUCLE                   ; Testeamos nuevamente la condicion del Pulsador.-
  165.  
  166. ;------------------------------------------------------------------------------
  167. ; PLACE USER PROGRAM HERE
  168. ;------------------------------------------------------------------------------
  169.  
  170.           GOTO $
  171.  
  172.           END
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Duda con pic 16F88
« Respuesta #4 en: 21 de Febrero de 2011, 21:26:17 »
Miguel, estoy viendo el programa que subiste, pero no veo la validación del pulsador.

haz una prueba, sustituye el pulsador por un switche a ver si funciona la lógica del programa.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Duda con pic 16F88
« Respuesta #5 en: 22 de Febrero de 2011, 04:57:54 »
Hola Pali gracias por responder, no entiendo lo que quieres con lo de validacion del pulsador. No es suficiente con escribir:
Código: ASM
  1. BUCLE
  2.                 btfsc   PORTA,0              ; Exploramos bit 0 Puerta A.-
  3.                 goto    Apagar                ; Salta si esta a 1 logico.-
  4.                 bsf      PORTB,0              ; Encendemos led.-
  5.                 goto    BUCLE                 ; Repetimos Bucle.-
     
Saludos.
« Última modificación: 22 de Febrero de 2011, 05:00:24 por Miquel_S »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Duda con pic 16F88
« Respuesta #6 en: 22 de Febrero de 2011, 14:47:33 »
no es suficiente, porque cada línea de esa tarda 500nS, y tu al pulsar, te echas al menos 5mS; y debido a variables externas podrías estar generando un tren de pulsos en esos 5mS.

deberías implementar un retardo, de por ejemplo 15mS, y en esos 15mS checa al menos 2 veces el estado del botón, luego (de ser cierta la pulsación) mandas encender el led y lo mantienes encendido con otro retardo de al menos 500mS, antes de checar el pulsador nuevamente.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Duda con pic 16F88
« Respuesta #7 en: 22 de Febrero de 2011, 17:11:32 »
Por eso no es lo mismo un pulsador que un interruptor  :mrgreen:
Gracias PalitroqueZ.
Saludos.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Duda con pic 16F88
« Respuesta #8 en: 22 de Febrero de 2011, 18:05:48 »
se me había olvidado. también puedes ponerle el retardo por "hardware". Un simple condensador de 100-220nF en paralelo al pulsador/interruptor y te ahorras unos cuantos ciclos de ejecución del micro.


La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Duda con pic 16F88
« Respuesta #9 en: 23 de Febrero de 2011, 05:16:22 »
Hola de nuevo, ¿La funcion del condensador es como si fuera un circuito antirrebotes?

Gracias
Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Duda con pic 16F88
« Respuesta #10 en: 23 de Febrero de 2011, 13:00:51 »
Hola de nuevo, ¿La funcion del condensador es como si fuera un circuito antirrebotes?

Gracias
Miquel_S

si, exacto, por supuesto que en conjunto con la resistencia en serie que lleva el switche/pulsador.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Duda con pic 16F88
« Respuesta #11 en: 23 de Febrero de 2011, 13:20:02 »
Gracias Pali, otra cosa que no sabia, yo lo hacia con puertas NAND.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Duda con pic 16F88
« Respuesta #12 en: 23 de Febrero de 2011, 13:25:50 »
también se puede hacer con NAND, flip-flop, etc

con los micros se pueden hacer muchas cosas, tanto por hardware como por software, cada uno tiene sus pro y contras, en general quien lo define es la relación costos vs dificultad.
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek