Autor Tema: Problema con Displays usando Shift register  (Leído 2288 veces)

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

Desconectado yukardo

  • PIC16
  • ***
  • Mensajes: 106
Problema con Displays usando Shift register
« en: 02 de Abril de 2009, 22:41:03 »
Aqui les dejo el codigo con comentarios para que lo entiendan mejor y sea mas facil encontrar la falla.

@ DEVICE PIC12F675, MCLR_OFF

CMCON=7

TRISIO=%00001001 ' Configuro las entradas/salidas
ADCON0=%10000011 ' Configuro el conversor ADC
ANSEL=%01010001  ' Configuro la entrada analogica y salidas digitales

' Variable

temp var word
result var byte
result2 var byte
digt var byte
digt2 var byte
aux var word
vmv var word
tempk var word
tempc var word

i VAR Byte 
col VAR Byte
aux2 VAR Byte

'----- Symbol -----------------
Symbol clock = GPIO.2
Symbol data1 = GPIO.1




 'Definir los parametros del ADCIN
DEFINE  ADC_BITS 10       ' Setear el numero de bits del resultado
DEFINE ADC_CLOCK 3        'Se define la velocidad del reloj
Define   ADC_SAMPLEUS 50  'se define el tiempo de la conversion


main:
HIGH GPIO.4   ' se activa los shift registers
ADCIN 0,temp  ' se inicia la conversion AD y se guarda en la variable temp

If temp>763 or temp<477 then ' se verifica que el valor este en el rango del sensor
aux2=2                       ' se le asigna un valor a la variable aux2 para activar g del display
LOW GPIO.4                   ' reseteo los shift registers
high GPIO.4                  ' Activo los shift registers
gosub desplazamiento         ' se llama la subrutina desplazamiento
pause 1000                   ' se espera 1 seg
aux2=2
gosub desplazamiento
pause 1000
goto main                    ' Se devuelve al inicio
else
if temp>612 then             ' Si la medida es mayor de 2,98 V
temp=temp-612                '
temp=temp/2                  ' se divide entre 2 para ajustar la resolucion
tempK=temp+298               ' se pasa a grados kelvin
tempc=tempk-273              ' se pasa a grados centigrados
else                         
temp=612-temp
temp=temp/2
tempK=298-temp               ' se pasa a grados kelvin
tempc=273-tempk              ' se pasa a grados centigrados
endif
endif

if tempk>273 then            ' si la temperatura es mayor a cero °C enciende un led
high GPIO.5
else
LOW GPIO.5
endif

digt2=tempc/10              ' divido entre 10 para obtener el numero de la decena

lookup digt2,[%00111111,%00000110,%01011011,%01001111,%01100110,%01101101,%01111100,%00000111,%01111111,%01100111],result2
                            ' asigno el valor del digito correspondiente a la decena a la variable result2
AUX2=RESULT2

LOW GPIO.4                  ' reseteo los shift registers
high GPIO.4                 ' activo los shift registers
GOSUB DESPLAZAMIENTO

digt=tempc-(digt2*10)       'Obtengo el valor de la unidad


lookup digt,[%00111111,%00000110,%01011011,%01001111,%01100110,%01101101,%01111100,%00000111,%01111111,%01100111],result


AUX2=RESULT

GOSUB DESPLAZAMIENTO

goto main


DESPLAZAMIENTO:

For col = 1 To 8
      'Si el bit es "0", escribo un "0".
      If aux2.0 = 0 Then
         data1 = 0
         clock = 0
         clock = 1
      Else
      'Si el bit es "1", escribo un "1".
         data1 = 1
         clock = 0
         clock = 1
      Endif
      'Paso al bit siguiente
      aux2 = AUX2>>1
Next col
RETURN

Desconectado yukardo

  • PIC16
  • ***
  • Mensajes: 106
Re: Problema con Displays usando Shift register
« Respuesta #1 en: 07 de Abril de 2009, 14:23:02 »
Bueno al parecer ya solucione ese problemas.

El detalle es que me aparecio otro.

Ahora se encienden los segmentos del numero que muestra, pero tambien se encienden pero con poca intensidad los otros segmentos que no deberian encender, lo cual no me deja distinguir bien el numero.

nose como solucionar este problema.

Gracias por su ayuda.

Desconectado AlexNadal

  • PIC10
  • *
  • Mensajes: 10
Re: Problema con Displays usando Shift register
« Respuesta #2 en: 24 de Mayo de 2009, 03:30:54 »
¿Has prabado con meterle resistencias de PullUp o de Pulldown a tu circuito? Tiene pinta de ser eso, si enciendes los LEDs con un "0" lógico conecta todas las patitas mediante un array de resistencias (la patita con el puntito) a "+5V".

Si es alrevés, se encienden con un "1", conecta las resistencias a masa mediante el ateriormente mencionado array.

Si te sientes solo hazte esquizofrénio.

Desconectado yukardo

  • PIC16
  • ***
  • Mensajes: 106
Re: Problema con Displays usando Shift register
« Respuesta #3 en: 02 de Junio de 2009, 18:11:12 »
Gracias ya lo solucioné.

Le coloque un tiempo para que se quedaran encendido fijo.