TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: yukardo 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
-
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.
-
¿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.
(http://www.electan.com/catalog/product_thumb.php?img=images/P1010007.JPG&w=150&h=112)
-
Gracias ya lo solucioné.
Le coloque un tiempo para que se quedaran encendido fijo.