TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: umalrovi en 11 de Junio de 2008, 06:07:23

Título: Pullups LOCAS arggg
Publicado por: umalrovi en 11 de Junio de 2008, 06:07:23
Buenas compañeros,

estoy programando con un pic18f4550 en CCS. Activo las resistencias de pull-up del puerto B con la función:

 port_b_pullups(TRUE);

El caso es que solamente necesito activar la resistencia de pull-up de la RB1 las demás las dejo sin activar. La función que empleo es la siguiente:

port_b_pullups(0b00000010);

Lo que ocurre es que me activa todas las resistencias de pull-up de aquellas entradas que previamente he definido. Os copio el código.

Código: C++
  1. void main()
  2. {
  3.  
  4. //   port_b_pullups(0b00000010);  
  5. //   port_b_pullups(pin_b1);
  6.    port_b_pullups(FAlSE);
  7. //   port_d_pullups(0b00000001);
  8.    
  9.    set_tris_B(0b10000011);   // RB0:1--> Entrada ; RB2:7-->Salidas
  10.  
  11.    setup_adc_ports( AN0_TO_AN2 || VSS_VDD ); // configuración del CAD
  12.    setup_adc( ADC_CLOCK_DIV_64 );

Gracias!
Título: Re: Pullups LOCAS arggg
Publicado por: umalrovi en 11 de Junio de 2008, 06:40:36
Acabo de ver que la función port_b_pullups(0b00000010) activa las resistencias de pullups del puerto b no como yo necesitaba (solamente la RB1):

Código: C++
  1. ....................    port_b_pullups(FAlSE);
  2. 2088:  BSF    FF1.7
  3. ....................    port_b_pullups(0b00000010);
  4. 208A:  BCF    FF1.7

Alguién se le ocurre como solucionarlo??

Saludos
Título: Re: Pullups LOCAS arggg
Publicado por: LABmouse en 11 de Junio de 2008, 09:38:27
Colocasela mejor externa, te eliminas el problema de raíz y no es que sea muy caro..Yo nunca confío en las internas, una vez las intente usar y también me fallaron.
Título: Re: Pullups LOCAS arggg
Publicado por: umalrovi en 11 de Junio de 2008, 09:56:15
Muchas gracias picmouse por responder, lo más seguro hága eso.

Pero me resulta raro que nadie se halla enfrentado a este problema o es que a lo mejor tiene su cosa.

Saludos
Título: Re: Pullups LOCAS arggg
Publicado por: RedPic en 11 de Junio de 2008, 10:18:59
Ahora mismo esto yo también liado con este mismo tema en Las Pull-Ups locas atacan de nuevo. (http://www.todopic.com.ar/foros/index.php?topic=22083.msg173740#msg173740)(1)

La conclusión a la que he llegado es la siguiente:

* Las pull-ups internas se activa TODAS con port_b_pullups(true);
* Las pull-ups internas se desactivan UNA a UNA cuando les da la gana: Por ejemplo al poner un tris del pin correspondiente como salida.

Por eso tu port_b_pullups(0b00000010); es siempre igual a port_b_pullups(true); de igual forma que port_b_pullups(0b00000000); sería igual a port_b_pullups(false);

Cualquier cosa que pongas distinto de 0 en el port_b_pullups(); te lo va a tomar como port_b_pullups(true);

Ten en cuenta que las pull-ups se activan con un solo bit. RBPU: PORTB Pull-up Enable bit Pero se desactivan dependiendo de qué función tenga después cada Pin.

Ahora hay que bucear en el Datasheet para ver cuando se desactivan las distintas pull-ups internas y ver de usar tris(es) ó ad(eses) ó ccp(eses) para dejar activas solo las que necesitemos.

Por ahí van los tiros de este tema.  :mrgreen:

(1) Casi hemos usado el mismo título.  :D
Título: Re: Pullups LOCAS arggg
Publicado por: umalrovi en 11 de Junio de 2008, 10:39:13
Muchas gracias por tu contestación Diego!!!

Yo voy a ver si puedo activarlas una a una como dices, buff me estoy armando un CACAO!!!

saludos

P.D. Si sacas algo en claro nuevo avísanos!
Título: Re: Pullups LOCAS arggg
Publicado por: umalrovi en 11 de Junio de 2008, 13:02:43
Hasta los webs!!!

Dejo las resistencias de pull-up internas del pic18f4550 no he podido activar unicamente la resistencia de pullup de la RB1. ASí que voy hacer lo que ha comentado picmouse, poner una resistencia de 10k externa y conectada a Vcc.

Si sacáis algún adelanto ya sabéis,

saludos
Título: Re: Pullups LOCAS arggg
Publicado por: Juancar en 16 de Marzo de 2009, 13:36:56
Podemos asumir que, como norma general, es preferible deshabilitar las pull up internas y usar resistencias externas?
Supongo que habrá aplicaciones en las que no se pueda o no se deba, pero si generalmente son fuente de problemas sería preferible prescindir de ellas no?

Un saludo.
Título: Re: Pullups LOCAS arggg
Publicado por: pibe en 16 de Marzo de 2009, 14:40:53
Mira, yo cada vez que escucho pullup lo asocio con una palabra rumana "pula" , que significa "poll*" . Así que saca conclusiones  :mrgreen:
Título: Re: Pullups LOCAS arggg
Publicado por: miltonmc en 16 de Marzo de 2009, 15:37:31
saludos a todos
yo también tengo un lio con pullups locas.
estoy usando un 16f886 y el el puerto b tengo unos  switch y cuando uso la instrucción  port_b_pullups(true);
solo se activa el rb0 y los demas quedan en nivel bajo
es asi que lo simulo en proteus y también en el circuito pcb y se comportan igual
y perdi mucho  tiempo buscando el error o un fallo del ccs  mejor las pongo externa de 10k
gracias


Título: Re: Pullups LOCAS arggg
Publicado por: sander en 16 de Marzo de 2009, 16:40:24
pues yo no he tenido problemas con la Pullups, por lo menos no cuando coloco un pulsador o un teclado, pero ojo yo programo mas en asm, asi que de posibles errores en compiladores C  poco se,  pero quiero decir un par de cosas a favor de las Pullups.

En el PIC18F4550 y en muchos otros PICs las resistencias de Pullups se activan todas , no puedes escoger cual esta activa y cual no, ese es el problema que tiene umalrovi

Hay otros PICs como el PIC16F886, que tienen un registro (WPUB) que permite seleccionar cual Pullup habilitamos  y cual no, miltonmc talvez el CCS no configura adecuadamente ese registro.

Saludos
Título: Re: Pullups LOCAS arggg
Publicado por: RedPic en 16 de Marzo de 2009, 18:48:10
La mayor experiencia que tengo es con los 18F4550, llevo montados 600 de ellos, y puedo deciros que se me han dado todos los casos posibles, pero lo mas usual es que en un 10 ó 15% de ellos no se activen las pull-ups de RB3 ó RB4 ... o que según va funcionando se desactive una o otra pull-up quedando el resto activado.

Y no es cosa del CCS ya que la transcripción que éste hace de:

port_b_pullups(true);

es absolutamente directa:

BSF    FF1.7

o sea pone a 1 el bit 7 del registro INTCON2 que se encuentra en FF1h.

En fin, os cuento mi experiencia, y mi decisión de olvidarme de las pull-ups internas y ponerlas todas externas.


Título: Re: Pullups LOCAS arggg
Publicado por: miltonmc en 16 de Marzo de 2009, 23:11:24
saludos a todos
hoy encontré como ponerlas a funcional cambie esta linea port_b_pullups(true);
por esta otra    port_B_pullups(0b11111111);   y con esta puedo definir en el pic 16f686
los pines que pongo en pullups  solo cambiando un 0 por un 1
ahi esta la incógnita de porque con  port_b_pullups(true); solo el pin rb0 se ponía en up y los otros no
gracias

Título: Re: Pullups LOCAS arggg
Publicado por: sander en 17 de Marzo de 2009, 00:43:22

Y no es cosa del CCS ya que la transcripción que éste hace de:

port_b_pullups(true);

es absolutamente directa:

BSF    FF1.7

o sea pone a 1 el bit 7 del registro INTCON2 que se encuentra en FF1h.


Eso hace? , segun la hoja de datos las pullpus se habilitan poniendo en 0 el bit 7 del registro INTCON2

(http://img13.imageshack.us/img13/4833/pullups.jpg)

Saludos
Título: Re: Pullups LOCAS arggg
Publicado por: RedPic en 17 de Marzo de 2009, 03:51:54
No Sander, ha sido un error mio de transcripción.

Ahí te pego el trozo del programa tal como lo deja el CCS:

....................    // Activo pull-ups internas
....................    port_b_pullups(true);
13A2: BCF    FF1.7
....................    // Siempre habilitamos o rehabilitamos INT_EXT INT_EXT2 (¡NO! INT_RB)
....................    enable_interrupts(int_ext);
13A4:  BSF    FF2.4
....................    enable_interrupts(int_ext2);
13A6:  BSF    FF0.4
Título: Re: Pullups LOCAS arggg
Publicado por: AKENAFAB en 17 de Marzo de 2009, 05:06:28
Como les mencionan arriba no en todos los pics se peuden seleccionar individualmente las Pullups , en unos se habilitan todas y solo se desactiva si es salida.


EN otro Se sellecionan individualmente.

Por citar un ejemplo.

EN el clasico pic16F628 se habilitan todas las pullups , y solo se deshabilita en aquel pin configurado como salida.EN este caso el bit RBPU del Registro Option.

En el enanin pic12F629/675/683 se habilitan individualmente las Pullups. en el REgistro WPu.AQui controlamos los bits wpu0-wpu5 en el registro WPU.


Con el pic18f4550 se habilitan todas al poner a 0 el bit7 RBPU del registro INTCONT2.

Each of the PORTB pins has a weak internal pull-up. A
single control bit can turn on all the pull-ups. This is
performed by clearing bit, RBPU (INTCON2<7>). The
weak pull-up is automatically turned off when the port
pin is configured as an output. The pull-ups are
disabled on a Power-on Reset.

Con el pic 16f886 que mencionan se habilitan individualmente.

He notado que se trabajan individualmente cuando en el puerto se tienen entradas analogicas no es que sea de ley pero -+ se nota eso.


He usado pull ups en varias aplicaciones multiplexando los mimos pines y no he tenido problemas.

Tanto en asm como con el CCS C programando.

Saludos.




Título: Re: Pullups LOCAS arggg
Publicado por: dogflu66 en 17 de Marzo de 2009, 06:05:41
Yo por minimizar el consumo las coloco siempre externas, solo por tema de espacio las he utilizado en el 12F675 y me funcionan bien. Seria interesante recopilar los PIC en las que se probaron que funcionan y en los que no para poder tener una guía para futuros usos. Podría ser interesante hacer una referencia a la cantidad de PIC probados, en un lado el numero que funcionaron y en otro lado el mismo PIC que no funciono. De esta forma se pueden ir actualizando según van posteando los usuarios.

Edito:

También pueden incluirse otro tipo de fallos