Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

24/09/2014 #1


Medidor de temperatura diferentes zonas
Saludos desde venezuela.
Querio presentar este proyecto: medir tres sensores lm35 en un pic 16f877A y por cada puerto voy a enviar cada medicion: por ejemplo zona A, zona B, Zona C, mi duda es la siguiente, en el puerto b funciona todo bien mide el sensor y aparecen los numeros exactos, pero en los demas puertos mide el sensor pero me da otras medidas aca les dejo el codigo y el circuito para ver si alguien puede guiarme: no encontre como subir el circuito en proteus para que lo simulen pero leyendo el codigo se pueden guiar
gracias por su tiempo... saludos...
Código:
\'****************************************************************
\'*  Name    : temperatura zonas                               *
\'*  Author  : [gerardo salazar]                                 *
\'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
\'*          : All Rights Reserved                               *
\'*  Date    : 23/09/2014                                        *
\'*  Version : 1.0                                               *
\'*  Notes   : para cualquier proyecto                              *
\'*          :                                                   *
\'****************************************************************
;DEFINE VELOCIDAD DE OSCILADOR
DEFINE OSC 4
\'***************************************************************
; PARÁMETROS DEL ADC
DEFINE ADC_BITS 10          ; NÚMERO DE BITS
DEFINE ADC_CLOCK 3          ; USAR CLOCK RC DEL AD
DEFINE ADC_SAMPLEUS 50      ; TIEMPO DE MUESTREO EN 50US
ADCON0 = %11000000          ; Para habilitar red interna RC.
ADCON1 = %10000000          ; HABILITA TODAS LAS ENTRADAS ANALOGICAS
\'*********************************************************************
; VARIABLES
apaga   var word
UNI     VAR BYTE
DECE    VAR BYTE
CEN     VAR BYTE
MIL     VAR BYTE
UNIDAD1 VAR BYTE
DECENA1 VAR BYTE
CENTE1  VAR BYTE
MILES1  VAR BYTE
UNIDAD  VAR BYTE
DECENA  VAR BYTE
CENTE   VAR BYTE
MILES   VAR BYTE
RES     VAR WORD                         ; RESULTADO DE LA CONVERSIÓN
VAL     var word
VAL1    VAR WORD
medida  var word
MEDIDA3 VAR WORD
voltio  var WORD
PRESION VAR WORD
TEMP1   VAR byte                       ; TEMPERATURA C
\'***********************************************************************
; HABILITA LOS PUERTOS
TRISA = %11111111                   ; TODOS LOS PUERTOS A SON ENTRADAS
TRISB = %00000000                   ; TODOS LOS PUERTOS B C D SON SALIDAS
TRISC = %00000000		
TRISD = %00000000
;***************************************************************************
; INICIAR EL CANAL 0 TEMPERATURA 
INICIO:
  ADCIN 0, RES                       ; LEER EL CANAL A
  TEMP1 = 488*RES                    ; 1024*488=499712;
  VAL = div32 100  
; RUTINA DEL DISPLAY 
  PAUSE 200 
  UNI = VAL DIG 1
  PORTB= UNI + 224
  PAUSE 100
  DECE = VAL DIG 2
  PORTB= DECE + 208
  PAUSE 100
  CEN = VAL DIG 3
  PORTB = CEN + 176
  PAUSE 100
  MIL = VAL DIG 4
  PORTB = MIL + 112
  PAUSE 100
;lectura del CANAL 1 VOLTAJE
   adcin 1, medida 
   voltio = 488*MEDIDA
   
;RUTINA DEL DISPLAY
PAUSE 100
  UNIDAD = voltio DIG 0 
  PORTC= UNIDAD + 224
  PAUSE 100
  DECENA = voltio DIG 1
  PORTC= DECENA + 208
  PAUSE 100
  CENTE = VOLTIO DIG 2
  PORTC = CENTE + 176
  PAUSE 100
  MILES = VOLTIO DIG 3
  PORTC = MILES + 112
  PAUSE 100 
;LECTURA DEL CANAL 2 PRESION 
  adcin 2, MEDIDA3 
   PRESION = 488*MEDIDA3
;RUTINA DEL DISPLAY
 UNIDAD1 = PRESION DIG 0  
  PORTD= UNIDAD1 + 224
  PAUSE 100
  DECENA1 = PRESION DIG 1
  PORTD= DECENA1 + 208
  PAUSE 100
  CENTE1 = PRESION DIG 2
  PORTD = CENTE1 + 176
  PAUSE 100
  MILES1 = PRESION DIG 3
  PORTD = MILES1 + 112
  PAUSE 100 
GOTO INICIO 
END ...
25/09/2014 #2

Avatar de Daniel Meza

Hola, ¿a qué te refieres con "otras medidas"?, prueba conectando el mismo sensor a las 3 entradas para revisar su comportamiento
26/09/2014 #3


Hola. Gracias por responder.
Ya resolví que me mostrara la medida de cada sensor. Conseguí un código por internet pero no lo entiendo. Funciona bien pero no entiendo como funciona, si me lo puedes explicar te lo agradecería acá está el código, de hecho cambie el proyecto y ahora quiero medir tres parámetros, temperatura, voltaje y presión de aceite.
Código:
'****************************************************************
'*  Name    : temperaturas.BAS                                *
'*  Author  : [gerardo salazar]                                 *
'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 23/09/2014                                        *
'*  Version : 1.0                                               *
'*  Notes   : para cualquier proyecto                              *
'*          :                                                   *
'****************************************************************
;DEFINE VELOCIDAD DE OSCILADOR
DEFINE OSC 4
'***************************************************************
; PARÁMETROS DEL ADC
DEFINE ADC_BITS 10          ; NÚMERO DE BITS
DEFINE ADC_CLOCK 3          ; USAR CLOCK RC DEL AD
DEFINE ADC_SAMPLEUS 50      ; TIEMPO DE MUESTREO EN 50US
ADCON0 = %11000000          ; Para habilitar red interna RC.
ADCON1 = %10000000          ; HABILITA TODAS LAS ENTRADAS ANALOGICAS
'*********************************************************************
; VARIABLES
apaga   var word
UNI     VAR BYTE
DECE    VAR BYTE
CEN     VAR BYTE
MIL     VAR BYTE
RES     VAR WORD                         ; RESULTADO DE LA CONVERSIÓN
VAL     var word
valor   var byte
medida  var byte
MEDIDA3 VAR WORD
voltio  var WORD
PRESION VAR byte
TEMP1   VAR byte                       ; TEMPERATURA C
'***********************************************************************
; HABILITA LOS PUERTOS
TRISA = %11111111                   ; TODOS LOS PUERTOS A SON ENTRADAS
TRISB = %00000000                   ; TODOS LOS PUERTOS B C D SON SALIDAS
TRISC = %00000000        
TRISD = %00000000
;***************************************************************************
; INICIAR EL CANAL 0 TEMPERATURA 
INICIO:
  ADCIN 0, RES                       ; LEER EL CANAL A
  TEMP1 = 488*Res                   ; 1024*488=499712;
  VAL = div32 100  
; RUTINA DEL DISPLAY 
  PAUSE 200 
  UNI = VAL DIG 1
  PORTB= UNI + 224
  PAUSE 100
  DECE = VAL DIG 2
  PORTB= DECE + 208
  PAUSE 100
  CEN = VAL DIG 3
  PORTB = CEN + 176
  PAUSE 100
  MIL = VAL DIG 4
  PORTB = MIL + 112
  PAUSE 100
'*****************************************************************
;lectura del CANAL 1 VOLTAJE
   adcin 1, medida
   valor = (medida)*(2) 
if valor/1624<10 then portc=valor/1624
if valor/1624>9 and valor/1624<20 then portc=valor/1624 + 6
if valor/1624>19 and valor/1624<30 then portc=valor/1624 + 12
if valor/1624>29 and valor/1624<40 then portc=valor/1624 +18
if valor/1624>39 then portc= valor/1624 + 24
'*******************************************************************
;LECTURA DEL CANAL 2 PRESION 
  adcin 2, MEDIDA3 
   PRESION = medida3/2 -1
;RUTINA DEL DISPLAY
 UNI = PRESION DIG 0  
  PORTD= UNI + 224
  PAUSE 100
  DECe = PRESION DIG 1
  PORTD= DECE + 208
  PAUSE 100
  CEN = PRESION DIG 2
  PORTD = CEN + 176
  PAUSE 100
  MIL = PRESION DIG 3
  PORTD = MIL + 112
  PAUSE 100 
GOTO INICIO 
END
Y voy adjuntar el proteus para la simulación.
Archivos Adjuntos
Tipo de Archivo: rar zonastemp.rar (113,7 KB (Kilobytes), 7 visitas)
26/09/2014 #4

Avatar de JoaquinFerrero

Esto no me gusta nada:
Código PHP:
valor = (medida)*(2)
if 
valor/1624<10 then portc=valor/1624
if valor/1624>and valor/1624<20 then portc=valor/1624 6
if valor/1624>19 and valor/1624<30 then portc=valor/1624 12
if valor/1624>29 and valor/1624<40 then portc=valor/1624 +18
if valor/1624>39 then portcvalor/1624 24 
Repites muchas veces lo de valor/1624. Si el compilador no es listo, estás creando un montón de operaciones.

Mejor así:
Código PHP:
valor medida 1624
if valor <  10                then portc valor
if valor >= 10 and valor 20 then portc valor +  6
if valor >= 20 and valor 30 then portc valor 12
if valor >= 30 and valor 40 then portc valor 18
if valor >= 40                then portc valor 24 
26/09/2014 #5


reloj para medir temp voltio presio
gracias ese código funciono, de verdad muchas gracias, pero de verdad no entiendo como funciona...hay detalle quisiera que en el parte de los display de temperatura se apagara el primer display de izquierda a derecha, es decir cuando marque hasta 99 el display de las centenas se apague, y al marcar 100 este se prenda es un detalle pero es funcional, en un rato lo voy a colgar en el foro para que lo corrigan, gracias saludos desde venezuela...
26/10/2014 #6


display 7 segmentos desplazando a la izquierda
buenos días amigos,
saludos desde venezuela
quisiera que aportaran ideas al siguiente proyecto
es un medidor de dos sensores de temperaturas y un voltimetro
ya funciona y lo pueden aprovechar para cualquier proyecto, mis dudas son las siguientes

1.- Quisiera que los display funcionaran a medida que hace la conversion, les explico, cuando mida por ejemplo 2 grados los otros dos display a la izquierda estén apagados, pero cuando mida 10 grados hasta 99 se mantenga el ultimo display a la izquierda apagado y al medir 100 grados lógicamente ya estarían activos todos, el objetivo es consumir la menor corriente posible.

gracias de antemano....
Archivos Adjuntos
Tipo de Archivo: rar zonastemp.rar (410,5 KB (Kilobytes), 10 visitas)
26/10/2014 #7


Hola gerardo35

Para lograr lo que pretendes son las entradas RBI(5) y BI/RB0(4).
Solo requieres detectar cuando las entradas A, B, C y D, del 7447, sean 0 Y(AND) el común del Display sea 1 la salida de un nuevo circuito sea 0. Éste 0 lo aplicas a la entrada RBI(5) del 7447.
Los datos serían 0000 AND 1 = 0.

Analiza las hojas de datos que te adjunto.

saludos
a sus ordenes

Nota: También lo puedes hacer modificando tu código. Si hay 0 en un determinado Dígito Generar un 0 y aplicarlo a RBI(5)
Archivos Adjuntos
Tipo de Archivo: pdf DM74LS47 FAIRCHILD.pdf (70,4 KB (Kilobytes), 2 visitas)
Tipo de Archivo: pdf DM74LS47 NS.pdf (121,4 KB (Kilobytes), 1 visitas)
26/10/2014 #8


Y la manera más fácil es hacerlo por software, porque seguramente ya tenés el montaje armado...

Lo que te proponen lo vi hacer en
http://martybugs.net/electronics/speedo.cgi
para el primer dígito de la izquierda, es la red D15 al D19, IC4f, en este caso el decoder es un CD4511.

Por software para no trastocar mucho la rutina que se ocupa de los Led Display, lo que se puede hacer es enviar un número mayor que 9 y se supone que se apagará, según la hoja de datos, cosa que no es mi caso, el chip nunca apaga sus segmentos, no se porque. Para el 7447 ese número es al 15 según la hoja de datos.

Claro que siempre se puede actuar sobre el pin común del dígito y listo el pollo.
27/10/2014 #9


buenas tardes
gracias por sus respuestas este fin de semana ne pongo a trabajar en eso y luego les cuento
gracias
saludos desde venezuela
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.