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.
#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
#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:
if (input(PIN_B1) == 1) {
para que se encienda al pulsar (opción que no funciona bien)
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**