Autor Tema: Duda resistencias pull up y botones  (Leído 5495 veces)

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

Desconectado tito melli

  • PIC12
  • **
  • Mensajes: 84
Duda resistencias pull up y botones
« en: 13 de Diciembre de 2017, 14:16:02 »
Hola,

Tengo una duda (quizás un poco básica): si quiero conectar un botón en un pin con pull up activada, ¿Es necesario poner otra pull up externa?

Entiendo que no, pues la interna ya hace su función. Sin embargo, siempre que veo esquemas veo la resistencia externa también (incluso cuando hay pull up interna), y no se si es porque es aconsejable por algo, o qué.

Gracias!

Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Duda resistencias pull up y botones
« Respuesta #1 en: 13 de Diciembre de 2017, 15:12:47 »
Si tenes pull-up simplemente pones el boton del pin a GND.

Hay veces que el pull-up interno no provee demasiada corriente, entonces es necesario utilizar uno externo.

Desconectado tito melli

  • PIC12
  • **
  • Mensajes: 84
Re:Duda resistencias pull up y botones
« Respuesta #2 en: 13 de Diciembre de 2017, 18:09:04 »
Entendido. Gracias! :)

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Duda resistencias pull up y botones
« Respuesta #3 en: 13 de Diciembre de 2017, 18:53:33 »
En Arduino, a 5V, el pull-up entrega 0.15mA

La corriente depende del micro y de la tensión de alimentación. Cuanta más tensión, más corriente.
En micros modernos (sobre todo de 16 y 32 bit), se puede controlar la cantidad de corriente de Pull-up en cada salida.

Saludos.

Desconectado tito melli

  • PIC12
  • **
  • Mensajes: 84
Re:Duda resistencias pull up y botones
« Respuesta #4 en: 19 de Diciembre de 2017, 17:04:28 »
Hola de nuevo,

Gracias por vuestras resupestas. Lo he probado en Proteus, y va perfecto. Pronto lo probaré físicamente en una PCB.

Aprovecho este hilo para preguntaros también algo: he leído que cuando escribes información en la EEPROM, el PIC tarda como 4ms en hacerlo. ¿Es posible que, si se produce alguna interrupción (por CCP1 por ejemplo), falle este proceso? o ¿cuando escribe no hay forma de interrumpirlo?

Gracias!

Saludos

Desconectado luismh

  • PIC16
  • ***
  • Mensajes: 149
Re:Duda resistencias pull up y botones
« Respuesta #5 en: 20 de Diciembre de 2017, 10:23:40 »
Hola,

Para escribir(principalmente) o leer la EEPROM es altamente recomendable deshabilitar las interrupciones durante el proceso. En realidad, mas que recomendable, creo que es obligatorio. Todos los datasheet de Microchip que leí lo implementan de esa manera.

Saludos.

Desconectado tito melli

  • PIC12
  • **
  • Mensajes: 84
Re:Duda resistencias pull up y botones
« Respuesta #6 en: 20 de Diciembre de 2017, 14:16:43 »
Justo lo que necesitaba saber. Gracias! :)

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Duda resistencias pull up y botones
« Respuesta #7 en: 20 de Diciembre de 2017, 14:37:14 »
Lo que yo no se es si es necesario unicamente para dar la habilitacion a la escritura o si es necesario para todo el proceso de escritura.

Algunos dicen que es unicamente para la habilitacion, ya que debe ingresarse sobre los registros de la EEPROM ciertos valores seguidos para quitar la proteccion. Y que si ocurre en esos momentos se interrumpe y por lo tanto no se estaria escribiendo sobre la misma. Por eso es mejor una escritura y verificacion de la misma.

Mirando el codigo de microchip hay 2 casos, en algunos deciden meter la espera hasta que termine de escribir la EEPROM dentro de la proteccion de las interrupciones. Y en otros casos esa espera se encuentra afuera.

Asi que pienso que lo que vale es eso.. Es escribir esos 2 valores + el bit de escritura (para que inicie) seguidos y sin interrupcion, luego de alli en adelante podes activar las interrupciones.

Lo cual es tener desactivadas las interrupciones por un maximo de 7 instrucciones simples de 1 ciclo de maquina cada uno. ( 2 de activado/desactivado de interrupcion / 4 de cargar los registros / 1 de escritura del bit )

Desconectado tito melli

  • PIC12
  • **
  • Mensajes: 84
Re:Duda resistencias pull up y botones
« Respuesta #8 en: 21 de Diciembre de 2017, 19:11:32 »
OK. Pero en cualquier caso, CCS no lo hace automáticamente con el comando write_eeprom, no? Lo tendría yo que asegurar.

Según el diagrama de interrupciones, con desactivar la interrupción global (GIE), basta para no tenerlas. Sabeis si esto es totalmente cierto? O vosotros habéis visto alguna vez en que esto no sea suficiente?

Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Duda resistencias pull up y botones
« Respuesta #9 en: 21 de Diciembre de 2017, 22:17:38 »
la verdad es que no se como funciona, deberias tener el .hex como para ver si lo genera o no.

Ya que existe la opcion: #DEVICE WRITE_EEPROM = NOINT

------------

Hice un pequeño programa y el codigo del write_eeprom es este:

ASM de write_eeprom(0,1) sin NOINT
Citar
       Line      Address       Opcode      Label            DisAssy         
      24     0017          1303                    BCF STATUS, RP1
      25     0018          080B                    MOVF INTCON, W             
      26     0019          00F7                    MOVWF 0x77               
      27     001A          138B                    BCF INTCON, GIE      ; Desactiva las interrupciones
      28     001B          1703                    BSF STATUS, RP1
      29     001C          018D                    CLRF EEADR         ; Carga direccion
      30     001D          3001                    MOVLW 0x1               
      31     001E          008C                    MOVWF EEDAT         ; Carga datos
      32     001F          1683                    BSF STATUS, RP0
      33     0020          138C                    BCF EECON1, EEPGD
      34     0021          150C                    BSF EECON1, WR
      35     0022          3055                    MOVLW 0x55           ; Escribe la secuencia de proteccion             
      36     0023          008D                    MOVWF EECON2
      37     0024          30AA                    MOVLW 0xAA               
      38     0025          008D                    MOVWF EECON2
      39     0026          148C                    BSF EECON1, WR      ; Activa el grabado
      40     0027          188C                    BTFSC EECON1, WR      ; Espera hasta que se termine
      41     0028          2827                    GOTO 0x27               
      42     0029          110C                    BCF EECON1, WR
      43     002A          0877                    MOVF 0x77, W                   
      44     002B          1283                    BCF STATUS, RP0
      45     002C          1303                    BCF STATUS, RP1
      46     002D          048B                    IORWF INTCON, F      ; Vuelve a dejar como estaba las interrupciones

Creo que esta explicado con los comentarios, pero basicamente, lo desactiva por si solo CCS. Al menos lo probe en un PIC16F887 como ejemplo
« Última modificación: 22 de Diciembre de 2017, 10:25:49 por KILLERJC »

Desconectado tito melli

  • PIC12
  • **
  • Mensajes: 84
Re:Duda resistencias pull up y botones
« Respuesta #10 en: 22 de Diciembre de 2017, 03:57:00 »
Gracias! :)

Con la sentencia: #DEVICE WRITE_EEPROM = NOINT, entiendo que el microcontrolador no habilitará las interrupciones cuando esté escribiendo, no?

Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Duda resistencias pull up y botones
« Respuesta #11 en: 22 de Diciembre de 2017, 10:24:57 »
Contesto varias preguntas

Según el diagrama de interrupciones, con desactivar la interrupción global (GIE), basta para no tenerlas. Sabeis si esto es totalmente cierto? O vosotros habéis visto alguna vez en que esto no sea suficiente?

Si con el GIE en un PIC16 es suficiente, en un PIC18 si se utilizan prioridades entonces es necesario desactivar GIEH y GIEL ( ocupan el mismo lugar que GIE y PEIE )

Citar
Con la sentencia: #DEVICE WRITE_EEPROM = NOINT, entiendo que el microcontrolador no habilitará las interrupciones cuando esté escribiendo, no?

Acabo de hacer la prueba...

Con el WRITE_EEPROM = NOINT, CCS genera el codigo que esta en este post, el codigo ese me dice que al estar esto, las interrupciones se desactivan por si solas unicamente para cargar las direcciones/datos y quitar la proteccion de la EEPROM, una ves iniciado el proceso de escritura, se activan nuevamente.

La direferencia de usarlo SIN esto es lo que vimos en mi anterior respuesta, SIN el WRITE_EEPROM = NOINT, las interrupciones son desactivadas hasta que finaliza la escritura por completo de la EEPROM.


ASM de write_eeprom(0,1) con el NOINT
Citar
       Line      Address       Opcode      Label            DisAssy         
      24     0017          1303                    BCF STATUS, RP1
      25     0018          080B                    MOVF INTCON, W             
      26     0019          00F7                    MOVWF 0x77               
      27     001A          138B                    BCF INTCON, GIE         ; Desactivo las interrupciones
      28     001B          1703                    BSF STATUS, RP1
      29     001C          018D                    CLRF EEADR            ; Escribo direccion y dato
      30     001D          3001                    MOVLW 0x1               
      31     001E          008C                    MOVWF EEDAT
      32     001F          1683                    BSF STATUS, RP0
      33     0020          138C                    BCF EECON1, EEPGD
      34     0021          150C                    BSF EECON1, WREN         ; COmienzo a quitar la proteccion
      35     0022          3055                    MOVLW 0x55               
      36     0023          008D                    MOVWF EECON2
      37     0024          30AA                    MOVLW 0xAA               
      38     0025          008D                    MOVWF EECON2
      39     0026          148C                    BSF EECON1, WR         ; Que comienze la escritura
      40     0027          0877                    MOVF 0x77, W             
      41     0028          1283                    BCF STATUS, RP0
      42     0029          1303                    BCF STATUS, RP1
      43     002A          048B                    IORWF INTCON, F                   ; Activo la interrupciones
      44     002B          1683                    BSF STATUS, RP0
      45     002C          1703                    BSF STATUS, RP1
      46     002D          188C                    BTFSC EECON1, WR         ; Aca espero que termine de grabarse
      47     002E          282D                    GOTO 0x2D               
      48     002F          110C                    BCF EECON1, WREN

En ambos codigos, resalte con negrita los 3 puntos principales, el desactivado, el activado de las interrupciones y por ultimo donde espera hasta que se complete. Asi ves la diferencia.

Desconectado tito melli

  • PIC12
  • **
  • Mensajes: 84
Re:Duda resistencias pull up y botones
« Respuesta #12 en: 23 de Diciembre de 2017, 08:18:21 »
Muchas gracias KILLERJC ((:-))

Por curiosidad, ¿por que se activan antes de terminar la escritura? ¿No habría riesgo de dañar el byte de la EEPROM si hay una interrupción? O fallo en la escritura, etc.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Duda resistencias pull up y botones
« Respuesta #13 en: 23 de Diciembre de 2017, 14:03:24 »
O sea... Voy a divagar un poco porque no lo se a ciencia cierta. Tampoco hay mucho donde tomar informacion o al menos mientras busque no encontre, y por ultimo ver que Microchip ofrece las mismas 2 versiones como validas para una escritura correcta hace que piense que no hay problema.

El inicio de la escritura ya se hizo y con las interrupciones desactivadas, de alli en adelante el modulo se encarga de generar la tension alta para el borrado, escritura, etc, el nucleo queda en otro plano ya que el que trabaja es el modulo.. por ser una EEPROM debe actuar charge-pump para generar la tension para el borrado, lo que si pienso es que ese charge-pump es uno solo para la flash y el EEPROM, asi que, para mi, el unico caso en que afectaria la escritura a mi parecer es que quieras grabar la Flash luego de haber iniciado la EEPROM, pero segun el PIC que trabajes, esto se realiza con el mismo modulo de la EEPROM. Asi que solo tener ese recaudo y uno mas que nombro mas adelante.

Lo demas no deberia afectar en nada (interrupcion,etc) lo que si vas a tener que tener cuidado es que si iniciaste una escritura, no vas a poder leer la EEPROM hasta que termine la escritura. Es decir deberias tener esa otra precaucion. Como la EEPROM se usa para mantener valores dentro de todos fijos, la idea de leerlos cuando inicia el micro para llevarlo a variables en la RAM, actualizarlo si es necesario durante el programa tanto la RAM como la EEPROM. Ese manejo haria que no sea necesario tantos recaudos, ya que trabajarias siempre con los datos de la RAM (no tenes que leer constantemente la EEPROM).

Desconectado tito melli

  • PIC12
  • **
  • Mensajes: 84
Re:Duda resistencias pull up y botones
« Respuesta #14 en: 24 de Diciembre de 2017, 14:32:27 »
Ah vale! Entonces no se va a interrumpir porque la charge-pump está ocupada escribiendo en la EEPROM, y no puede usarse para escribir la flash mientras. Es así?

Gracias por las explicaciones KillerJC :)


 

anything