Autor Tema: Número de 7 segmentos que se queda "a medio apagar" (o encender).  (Leído 6437 veces)

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

Desconectado Javimetal

  • PIC10
  • *
  • Mensajes: 12
Hola, empezando con los pic...

Estoy con un 16f88 y un panel de 7 segmentos que se atasca. Ya hice lo de encender y apagar el LED, el coche fantástico y demás... Así que, como sólo costaban 1 Yuan (0.16 USD) cada uno ahí en la calle de atrás a la mía compré un par de paneles numéricos de 7 segmentos por curiosidad en su manejo.

Lo que me propuse era muy sencillo, encender los 7 segmentos y que se apagaran mientras se pulsaba un interruptor (que es un cable pelado que conecto a la proto en ese pin)

Resultado: Todo perfecto

Ahora lo he invertido, es decir, quiero que esté apagado y se encienda mientras "pulso" el "interruptor"

Aquí está el problema. El panel LED se queda encendido nada más alimentar la proto. Pero se queda a medias (esto me desorientó varias horas ya que al principio pensaba que se encendía simplemente). Midiendo con el multímetro me da 1.3V más o menos.

Si pulso el interruptor (o sea, conecto el cable al pin elegido como entrada) se enciende totalmente (y los pines dan unos 5v), pero al soltarlo se queda a medias otra vez.

Como curiosidad, si en el código decido NO encender uno de los 7 LED, ese se queda perfectamente apagado, osea, es como si el programa pasara por el if y leyera cuales voy a encender antes de decirle que lo haga y los dejara a medias.


Aquí el código que funciona perfectamente en el ISIS por otro lado.


Código: [Seleccionar]
#include <16F88.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES RESERVED                 //Used to set the reserved FUSE bits

#use delay(clock=8000000)
#define LA   PIN_A0
#define LB   PIN_A1
#define LC   PIN_A2
#define LD   PIN_A3
#define LE   PIN_A4
#define LF   PIN_A6
#define LG   PIN_A7


Código: [Seleccionar]
#include "C:\Users\Javi\Documents\Microchip\Proyectos propios\Contador 7 segmentos\main.h"

#USE standard_io(A)            // Configuramos el PORTA
#USE standard_io(B)            // Configuramos el PORTB

void main()
{

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_oscillator(OSC_8MHZ|OSC_TIMER1);

   while (TRUE) {

   if (input(PIN_B1) == 1) {

  
   output_high(LA);     // ENCIENDE EL SEGMENTO A
   output_high(LB);     // ENCIENDE EL SEGMENTO B
   output_high(LC);     // ENCIENDE EL SEGMENTO C
   output_high(LD);     // ENCIENDE EL SEGMENTO D
   output_high(LE);     // ENCIENDE EL SEGMENTO E
   output_high(LF);     // ENCIENDE EL SEGMENTO F
   output_high(LG);     // ENCIENDE EL SEGMENTO G

   } else {
  
   output_low(LA);     // APAGA EL SEGMENTO A
   output_low(LB);     // APAGA EL SEGMENTO B
   output_low(LC);     // APAGA EL SEGMENTO C
   output_low(LD);     // APAGA EL SEGMENTO D
   output_low(LE);     // APAGA EL SEGMENTO E
   output_low(LF);     // APAGA EL SEGMENTO F
   output_low(LG);     // APAGA EL SEGMENTO G
  
   }
   }

}


El PIN_B1 no lo he renombrado, lo llamo directamente en el input

para probar las dos versiones sólo hay que cambiar:

Código: [Seleccionar]
  if (input(PIN_B1) == 1) { para que se encienda al pulsar (opción que no funciona bien)

Código: [Seleccionar]
  if (input(PIN_B1) == 0) { para que empiece encendido y se apague con el pulsador (opción que sí funciona)


Un saludo y muchas gracias



PD: Seguro que hay formas más sencillas de hacer esto, pero lo que pretendo es saber más en este campo concreto por ahora.


EDITADO**
« Última modificación: 13 de Junio de 2013, 16:58:48 por Javimetal »

Desconectado Darkman_A

  • PIC18
  • ****
  • Mensajes: 288
Re: Número de 7 segmentos que se queda "a medio apagar" (o encender).
« Respuesta #1 en: 13 de Junio de 2013, 17:06:39 »
Hola Javimetal.
Esto ya paso. Me parece que es por las resistencias de pull up. Fijate en el foro que a alguien le paso exactamente lo mismo.
Es tema es que esta drenando corriente por uno de los pines a masa, o sea hace de masa. El led que esta apagado es el que esta conectado al pin que en ese momento esta haciendo de tierra (o masa).
Creo que a quien le habia sucedido estaba multiplexando o contando, entonces a el le cambiaba el que quedaba apagado.
Proba poner el display en puerto B y el pulsador en A. Es probable que te ande de una.
Saludos.
« Última modificación: 13 de Junio de 2013, 17:18:34 por Darkman_A »

Desconectado AleSergi

  • PIC16
  • ***
  • Mensajes: 209
Re: Número de 7 segmentos que se queda "a medio apagar" (o encender).
« Respuesta #2 en: 13 de Junio de 2013, 17:11:01 »
Asunto hardware, cuando usas pulsadores como entrada en los pines del pic, tenés que poner resistencias, para limitar la corriente al pin, tambien otra resistencia, esto asegura que el pin se encuentra a un potencial de "GND".

El algoritmo, esta bien, pero sería buena idea incorporar tiempos de espera, las rutinas reales de pulsadores y led display, las incorporan.


Desconectado Javimetal

  • PIC10
  • *
  • Mensajes: 12
Re: Número de 7 segmentos que se queda "a medio apagar" (o encender).
« Respuesta #3 en: 13 de Junio de 2013, 17:43:29 »

R E S U E L T O

Puse una resistencia 10K entre uno de los pins (A1) y GND. Ahora va bien.

Leí que lo correcto es ponerle una resistencia a todos los pines, incluso los que no se utilizan. Tengo que estudiar más el tema del las pull-up y pull-down pero mientras llego ahí...

Aunque con una sólo resistencia funciona, ¿sería conveniente poner al menos una en cada pin que va al LED?

Asunto hardware, cuando usas pulsadores como entrada en los pines del pic, tenés que poner resistencias, para limitar la corriente al pin, tambien otra resistencia, esto asegura que el pin se encuentra a un potencial de "GND".

El algoritmo, esta bien, pero sería buena idea incorporar tiempos de espera, las rutinas reales de pulsadores y led display, las incorporan.



Sabía que era necesaria una resistencia al pin de entrada, ¿hay algún valor predeterminado? Si trabajamos a 5v imagino que habrá un mínimo para protejer el puerto y un máximo para que sea reconocido por el PIC.


Saludos y gracias

Desconectado Javimetal

  • PIC10
  • *
  • Mensajes: 12
Re: Número de 7 segmentos que se queda "a medio apagar" (o encender).
« Respuesta #4 en: 13 de Junio de 2013, 19:30:19 »
Mira, ahora sucede algo muy gracioso, si acerco el dedo al PIC (SIN TOCARLO) se enciende el panel LED. Estaré cargado hasta las trancas de estática...

Hablo de al menos 1cm de distancia.. Incluso puedo variar la intensidad desde ahí hasta que lo toco.


« Última modificación: 13 de Junio de 2013, 20:45:44 por Javimetal »

Desconectado Javimetal

  • PIC10
  • *
  • Mensajes: 12
Re: Número de 7 segmentos que se queda "a medio apagar" (o encender).
« Respuesta #5 en: 13 de Junio de 2013, 20:03:46 »
Ahora me doy cuenta... si puse la resistencia del puerto de salida a GND, ¿esto es un pull-down no?

El caso es que ahora, despues de funcionar bien, incluso sin resistencia funciona. Probé a ponerla del puerto salida a VCC y sigue funcionando igual.

Ahora no estoy seguro cual es la solución indicada realmente, si salida > GND o salida > VCC

Suppongo que es la primera y para entradas la segunda...

Desconectado Javimetal

  • PIC10
  • *
  • Mensajes: 12
Re: Número de 7 segmentos que se queda "a medio apagar" (o encender).
« Respuesta #6 en: 13 de Junio de 2013, 21:03:46 »
Pues no, creo que ambas deben ser un 0 lógico, por tanto ambas, salidas y entradas, deben ir con una pull-down

O eso me parece a mi

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Número de 7 segmentos que se queda "a medio apagar" (o encender).
« Respuesta #7 en: 13 de Junio de 2013, 23:31:52 »
Podés mostrar el conexionado eléctrico que estás usando, tanto del PIC como del 7seg?

"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Javimetal

  • PIC10
  • *
  • Mensajes: 12
Re: Número de 7 segmentos que se queda "a medio apagar" (o encender).
« Respuesta #8 en: 13 de Junio de 2013, 23:42:27 »


La resistencia pull-down (supongo) junto al interruptor es la que más ayuda a estabilizar el LED.

Del bloque de resistencias pull-down (supongo tambien) en el recuadro sólo puse una.

Por ahora parece que va estable, pero tengo algunas dudas con las pull-down & pull-up, sobre todo el porqué de sus valores, por qué 10K en este circuito mientras que el Pickit3 necesita una pull-up de 1K...

Estube leyendo pero de momento no encontré suficiente info al respecto.

Un saludo
« Última modificación: 13 de Junio de 2013, 23:44:39 por Javimetal »

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Número de 7 segmentos que se queda "a medio apagar" (o encender).
« Respuesta #9 en: 14 de Junio de 2013, 00:14:23 »
Revisa los cables y tensión de alimentación.

Asegurate que el 7segmento sea comun cátodo.

El código no lo veo mal, todo parece indicar un problema de hardware.

R8 a R14 no hacen falta.

El valor de la pullup está relacionado a muchos factores, pero en casos tan sencillos el valor puede oscilar notablemente sin verse afectado el funcionamiento.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Javimetal

  • PIC10
  • *
  • Mensajes: 12
Re: Número de 7 segmentos que se queda "a medio apagar" (o encender).
« Respuesta #10 en: 14 de Junio de 2013, 04:19:49 »
Bueno, parece que con la pull-down al pin de entrada (o pull-up?) se volvio estable el tema... le dí unas vueltas y como me aburrí me puse a jugar con el LCD que había comprado. Le soldé una tira de pines para conectarlo a la proto. Hacía mucho que no soldaba nada, pero bueno, la verdad que no costó mucho (unos USD2.50) y podía correr el riesgo si es que había perdido práctica  :D :D :D





El zócalo para colocar pics es la mejor inversión, lo cableé de forma que si lo coloco a la izquierda del todo me queda en posición de grabar con el Pickit3, si lo pongo ajustado a la derecha ¡a funcionar!

De momento lo alimento con el propio pickit3, pero me daré una vuelta por los mercados de electrónica a ver si encuentro un conector mini USB que me sirva para conectar a la protoboard y usar un adaptador 220/5V 2A y así de paso puedo estudiar algo sobre alimentación.


Por cierto, en esta configuración para la LCD no he puesto ni una pull-up/down y la verdad que no tengo ni idea si hacen falta, el cacharro funciona y no veo ningún esquema que las incluya.  :D


Seguiremos aprendiendo  ((:-))

Desconectado Javimetal

  • PIC10
  • *
  • Mensajes: 12
Re: Número de 7 segmentos que se queda "a medio apagar" (o encender).
« Respuesta #11 en: 14 de Junio de 2013, 11:26:01 »
Bueno, seguimos avanzando... aunque tendré que volver atrás para comprender las librerías bien, por fin llegué a la mitad del objetivo.

Usando un DS18B20 para obtener la temperatura, se lanza el valor por la pantalla LCD. Tendré que reconfigurar el programa más porque estaba preparado para una pantalla de cuatro lineas y como se ve en la de abajo hay un conflicto.

El DS18B20 si que necesita una pull-UP del 1wire a Vcc  :D

Algunos prefiern conectar el control de contraste a masa para ajustarlo a tope, a mi me parece horroroso así que usé la resistencia regulable (del 5K) y busqué el contraste perfecto para que se vea el texto y no el fondo. Queda bastante bien.




Tras entender un poco más el tema que tengo entre manos intentaré ir al objetivo que tenía desde que me puse son los PIC... ahora quiero enviar la señal de temperatura  por UART a un módulo bluetooth (aquí los hay por unos 35-40 Yuanes) y sincronizarlo con Android. Hacer una APK y controlar la temperatura a distancia. Además con la tecnología 1wire se pueden identificar los DS18B20 por separado, lo cual es perfecto. Lo único que me preocupa es el consumo, lo ideal sería tener lo más básico y alimentarlo con una pila de 3V. Pero eso ya vendrá más tarde.

Saludos

Desconectado Javimetal

  • PIC10
  • *
  • Mensajes: 12
Re: Número de 7 segmentos que se queda "a medio apagar" (o encender).
« Respuesta #12 en: 14 de Junio de 2013, 11:45:33 »
Por otro lado estaría el tema de pasarlo todo a SMD. Por suerte aquí creo que hay bastantes sitios donde hacer samples y quizá pequeñas producciones.

Estube viendo unos adaptadores SMD que creo que pueden ser la mejor solución para trastear con estos componentes. No son muy baratos y hay que buscar los piner apropiados, pero la verdad que tener un micro SMD "pasado" a pins conectables a la proto es un lujo.









Ya se que esto se va del tema principal... estoy por llamarlo "mis cosas"  :D :D


 

anything