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

Temas similares

27/01/2013 #461
Moderador

Avatar de D@rkbytes

jmpl dijo: Ver Mensaje
Hola. estoy desarrollando un proyecto para medir temperatura utilizando un lm35 y PIC 16f877a.
soy nuevo en esto y es i primer proyecto. quisiera saber como cambio el estado de un puerto. por ejemplo tengo un el portc.5 = 0 y quiero ponerte un switch que al apretarlo me coloque ese mismo puerto en 1 y así prender un led para decir que mi lm35 esta funcionando. o si hay otra forma de hacerlo

si alguien me pudiera ayudar estaría muy agradecido
Para saber como se cambia de estado un pin, deberías leer el tema desde el principio "Ahí está explicado"
Normas del Foro 16) Antes de preguntar algo en un post. ¡ Lee (Y mira) todo el contenido !

En cuanto a qué con encender un LED ya quiera significar que el LM35 esté funcionando, Nop.
Quizás eso te sirva para indicar que estás encendiendo el termómetro, más no que funcione.
Eso necesita cierta rutina. Podrías hasta incluir comparaciones de temperatura, etc.

Adjunto un sencillo ejemplo con el LM35 a 10 Bits y un LCD 16x2

Lo que le quieras agregar ya corre por tu cuenta.

Suerte.
27/01/2013 #462


oye gracias por tu ayuda. pero si no es mucho pedir me puedes explicar algo.
la parte de la formula que utilizas en tu ejemplo: 19712 es el valor leído por el ADC a 1.5V (Voltaje máximo a 150°C). me puedes decir que es ADC? según lo que entiendo es el valor que recibe el puerto cuando entran 1.5v? estoy en lo cierto?

gracias
27/01/2013 #463
Moderador

Avatar de D@rkbytes

jmpl dijo: Ver Mensaje
19712 es el valor leído por el ADC a 1.5V (Voltaje máximo a 150°C). me puedes decir que es ADC?
ADC = Analog Digital Converter.
Son las siglas en ingles de Conversor Analógico Digital.
jmpl dijo: Ver Mensaje
según lo que entiendo es el valor que recibe el puerto cuando entran 1.5v? estoy en lo cierto?
Sip. Al configurar la conversión a 10 Bits, ese es el valor leído por el ADC.
28/01/2013 #464


Oye gracias entendí.

Ahora tengo un pequeño problemita, el programa no hace lo que quiero, el programa que quiero hacer es sensar la temperatura con el lm35, si la temperatura es menor o igual a 18 que prenda el segundo led y apague los otros 2, y si esta entre 19 y 34 osea que si es mayor que 18 y menor que 35 encienda el tercer led, y si es mayor que 35 encienda el 4t0 y apague los demás, el led 1 lo utilizo para indicar que el lm35 esta funcionando,

Código:
Device = 16F877A
XTAL 4



'parámetros del conversor analógico
Declare ADIN_RES = 10       ; 10 bits de resolución
Declare ADIN_TAD = FRC      ; Seleccionar RC OSC
Declare ADIN_STIME = 50     ; 50uS para tiempo de muestreo

Dim ADC_Value As Word     
Dim Temperatura As Float 

TRISC = 0

INICIO:
               
  PORTC.5 = 1
  PORTC.0 = 0
  
  ADC_Value = ADIn 0 
  Temperatura = ADC_Value * 150 / 19712 
  
     If Temperatura <= 18 Then 
     PORTC.2 = 1
     PORTC.3 = 0
     PORTC.4 = 0
     End If
      
     If Temperatura > 18 And Temperatura < 35 Then
     
     PORTC.3 = 1
     PORTC.2 = 0
     PORTC.4 = 0
     
     End If
     
     If Temperatura >= 35 Then
     
     PORTC.4 = 1
     PORTC.2 = 0
     PORTC.3 = 0
     End If
     
  DelayMS 500  

    
  GoTo INICIO
Estoy utilizando proton ide y el simulador en proteus con un PIC16f877A


Ajunto lo que he hecho para me ver si tengo algo mal o alguna sugerencia de como lo puedo arreglar.

Gracias por su tiempo.
Archivos Adjuntos
Tipo de Archivo: rar TEMPERATURA.rar (17,0 KB (Kilobytes), 74 visitas)
28/01/2013 #465


jmpl dijo: Ver Mensaje

ahora tengo un pequeño problemita el programa no hace lo que quiero, el programa que quiero hacer es sensar la temperatura con el lm35, si la temperatura es menor o igual a 18 que prenda el segundo led y apague los otros 2, y si esta entre 19 y 34 osea que si es mayor que 18 y menor que 35 encienda el tercer led, y si es mayor que 35 encienda el 4t0 y apague los demas , el led 1 lo utilizo paa indicar que el lm35 esta funcionando,
Código:
Device = 16F877A
XTAL 4



'parámetros de conversor analógico
Declare ADIN_RES = 10       ; 10 bits de resolución
Declare ADIN_TAD = FRC      ; Seleccionar RC OSC
Declare ADIN_STIME = 50     ; 50uS para tiempo de muestreo

Dim ADC_Value As Word     
Dim Temperatura As Float 

TRISC = 0
'Puedes agrega TRISA = 1 o TRISA.0 = 1 ya que utilizaras el ADC0 

INICIO:
               
  PORTC.5 = 1' Puedes implementar el commando Toggle PortC.5 y el led parpadeara cada vez que pase por aquí el programa en vez de quedar permanentemente encendido
  PORTC.0 = 0 'Lo usas como entrada aun que mal ya que el ADC no esta en ese pin y NO DEBES poner a cero una entrada ya que solo toma el valor externo.

  ADC_Value = ADIn 0 
  Temperatura = ADC_Value * 150 / 19712 
  
     If Temperatura <= 18 Then 
     PORTC.2 = 1
     PORTC.3 = 0
     PORTC.4 = 0
     End If
      
     If Temperatura > 18 And Temperatura < 35 Then
     
     PORTC.3 = 1
     PORTC.2 = 0
     PORTC.4 = 0
     
     End If
     
     If Temperatura >= 35 Then
     
     PORTC.4 = 1
     PORTC.2 = 0
     PORTC.3 = 0
     End If
     
  DelayMS 500  

    
  GoTo INICIO
estoy utilizando proton ide y el simulador en preteus con un PIC16f877a


ajunto lo que he hecho para me ver si tengo algo mal o alguna sugerencia de como lo puedo arreglar

GRACIAS POR SU TIEMPO
Hola...Verifica el esquema que te adjunto ya que en el tuyo colocabas el LM35 donde NO esta el ADC del PIC...debes leer la hoja de datos del pic a utilizar ya que no todos los PIC tienen las mismas soluciones de hardware en el mismo lugar.
Envuelve si vas a pegar código aquí en la etiqueta que dice CODE que es mas fácil para transportar y respeta la estructura de lo escrito.
El pin MCLR debes mandarlo a estado estado alto si no no arranca el programa.
Revisa las aclaraciones que realice al código que esta mas arriba en este mensaje resaltado en colores.
La lógica esta bien pero se puede simplificar.

Saludos.

Ric.
Archivos Adjuntos
Tipo de Archivo: zip TEMPERATURA.ZIP (20,0 KB (Kilobytes), 79 visitas)
28/01/2013 #466


gracias por tu ayuda me a servido mucho.

pero tengo en problemas en abrir tu simulacion me sale este error: (archivo adjunto)
me gustaria verlo

utilizo el proteus 7 professional
Imágenes Adjuntas
Tipo de Archivo: png error.png (28,8 KB (Kilobytes), 10 visitas)
30/01/2013 #467


A ver si ahora lo podes ver...ese problema es por que yo uso la versión 7.10 ahora lo guarde con compatibilidad a la versión 7.

Ric.
Archivos Adjuntos
Tipo de Archivo: zip pin16f877a.zip (17,8 KB (Kilobytes), 64 visitas)
30/01/2013 #468


buenas tardes amigos de la comunidad, estoy probando un buzzer y no he podido cambiar el tono sigue igual a pesar de los camandos que le coloque, espero me puedan decir que estoy haciendo mal o que esta mal, este es el programa:
adjunto tambien el pic en proteus.
edito: ah otra cosa cuando le coloco que si el pulsador sea igual 1, suena como un ruido en blanco. =)

Código:
device 16f877
Config XT_OSC,CP_OFF,CPD_OFF,WDT_OFF,PWRTE_ON,BODEN_OFF,LVP_OFF
xtal=20 

TRISB = 1
TRISC = 0
Dim a As Byte
symbol buzzer=portC.0
SYMBOL BOTON=PORTB.0
all_digital=1

inicio:
FOR A=1 TO 120  STEP -1
SOUND BUZZER,[a,50]
next a
end
;IF BOTON=1 THEN
;DELAYMS 300
;Sound buzzer,[10,50]
;DELAYMS 1000
;Sound buzzer,[78,200]
;DELAYMS 1000
;Sound buzzer,[88, 100]
;DELAYMS 1000
;Sound buzzer,[119, 100]
;ELSE
;BUZZER=0
;END IF
END INICIO
Archivos Adjuntos
Tipo de Archivo: rar semaforo sydney.rar (15,7 KB (Kilobytes), 47 visitas)
30/01/2013 #469
Moderador

Avatar de D@rkbytes

sydjoe dijo: Ver Mensaje
estoy probando un buzzer y no he podido cambiar el tono sigue igual a pesar de los camandos que le coloque, espero me puedan decir que estoy haciendo mal o que esta mal
D@rkbytes dijo: Ver Mensaje
Al Buzzer solo le puedes cambiar la frecuencia del tono, Ya sabes en Edit Properties.
Utiliza el componente llamado SOUNDER

Saludos.
30/01/2013 #470


excelente!! GRACIAS!!, estaba probando con un speaker segun la ayuda de proton al usar el comando "freqout", pero sonaba super bajito. espero que con el sounder pueda hacer mi programa completo, por fin. jiji
30/01/2013 #471


oye ricbevi muchas gracias por todo y tu tiempo .. te lo agradezco
06/02/2013 #472


D@rkbytes dijo: Ver Mensaje
ADC = Analog Digital Converter.
Son las siglas en ingles de Conversor Analógico Digital.

Sip. Al configurar la conversión a 10 Bits, ese es el valor leído por el ADC.
pero me puedes decir cual es la conversión o formula que realizas para obtener que 1.5v equivale a 19712?
06/02/2013 #473
Moderador

Avatar de D@rkbytes

jmpl dijo: Ver Mensaje
pero me puedes decir cual es la conversión o formula que realizas para obtener que 1.5v equivale a 19712?
Míralo tu mismo ahora con este ejemplo.

Saludos.
Archivos Adjuntos
Tipo de Archivo: rar 16F877A Termómetro LM35 II.rar (39,0 KB (Kilobytes), 98 visitas)
08/02/2013 #474

Avatar de mendek

Que tal foro, buenas tardes, bueno pues los 2 comentarios anteriores a este me sirvieron mucho, ya que estoy en un proyecto, al ver el programa proporcionado por D@rkbytes "16F877A Termómetro LM35 II.rar " me surgió una duda de si puedo usar el ds18b20 en vez del lm35 para este programa, desde ya muchas gracias.
08/02/2013 #475
Moderador

Avatar de D@rkbytes

mendek dijo: Ver Mensaje
Que tal foro, buenas tardes, bueno pues los 2 comentarios anteriores a este me sirvieron mucho, ya que estoy en un proyecto, al ver el programa proporcionado por D@rkbytes "16F877A Termómetro LM35 II.rar " me surgió una duda de si puedo usar el ds18b20 en vez del lm35 para este programa, desde ya muchas gracias.
Nop.
No son iguales, el LM35 es un sensor análogo, y el DS18B20 es un sensor digital.
Así que el programa, es totalmente diferente al que se usa para el DS18B20

Aquí esta un proyecto para el DS18B20

Saludos.
09/02/2013 #476

Avatar de mendek

muchas gracias D@rkbytes, abusando un poco, hice los siguiente, busque acerca de como hacer la converción en caso de querer medir voltaje, y di con la siguiente formula:

ADC_Value = ADIn 5
voltaje=ADC_Value * 5 / 65535

para medir de 0 a 5 volts, pero en caso de que yo quiera medir un voltaje de 0 a 20 volts, no entiendo muy bien como se usa la fórmula para dicha converción, desde ya muchas gracias por la ayuda.
09/02/2013 #477
Moderador

Avatar de D@rkbytes

mendek dijo: Ver Mensaje
muchas gracias D@rkbytes
De nada.
mendek dijo: Ver Mensaje
busque acerca de como hacer la conversión en caso de querer medir voltaje, y di con la siguiente formula:

ADC_Value = ADIn 5
voltaje=ADC_Value * 5 / 65535

para medir de 0 a 5 volts, pero en caso de que yo quiera medir un voltaje de 0 a 20 volts,
no entiendo muy bien como se usa la fórmula para dicha conversión, desde ya muchas gracias por la ayuda.
Pues si, así sería, para medir de 0 a 5V, pero los valores como ese de 65535, cambian.
Para que entiendas como determinar el factor de división, adjunto un ejemplo con la explicación.

Saludos.
Archivos Adjuntos
Tipo de Archivo: rar 16F88 Voltímetro 20V.rar (12,2 KB (Kilobytes), 115 visitas)
09/02/2013 #478

Avatar de mendek

Osea que según entiendo, el procedimiento para determinar el 65535 o el 63168 (este último como en el ejemplo que me acabas de pasar) es ver el valor tope (por así decirlo) de ADIn que se tiene al medir los 20v efectivos, obviamente siempre que se pase a un voltaje adecuado para el PIC, es correcto esto?
09/02/2013 #479
Moderador

Avatar de D@rkbytes

mendek dijo: Ver Mensaje
Osea que según entiendo, el procedimiento para determinar el 65535 o el 63168 (este último como en el ejemplo que me acabas de pasar) es ver el valor tope (por así decirlo) de ADIn que se tiene al medir los 20v efectivos, obviamente siempre que se pase a un voltaje adecuado para el PIC, es correcto esto?
Pues si, sin embargo el valor que tome, es el valor a través de los componentes del divisor de tensión.
Y por eso dije que ese valor cambia, debido a las tolerancias de los mismos.
Si aplicamos +5V directamente, la lectura directa debe ser de 65472, así como está el código.
Y he aquí un error mio en la programación, ya que deberíamos obtener como lectura 1023
que son los 10 Bits b'1111111111' = 1023, para esto debí haber configurado el registro ADCON1
con el bit 7 a 1 y entonces si obtendremos como lectura 1023 al tope del ADC.
Esto haría tener una justificación a la derecha de la lectura,
y los 6 bits más significantes de ADRESH serían leidos como ceros.

Ahora entonces, tendrás que hacer la correspondiente modificación al programa.

Suerte.
11/02/2013 #480


D@rkbytes dijo: Ver Mensaje
Nop.
No son iguales, el LM35 es un sensor análogo, y el DS18B20 es un sensor digital.
Así que el programa, es totalmente diferente al que se usa para el DS18B20

Aquí esta un proyecto para el DS18B20

Saludos.
buenas noches foro, tengo una duda, ¿como hago para guardar el estado de un puerto para usarlo despues y mandar a hacer una instruccion dependiendo del estado de este?, y otra preguntita y disculpen el abuso, ¿mientras se este ejecutando una linea del programa, no puedo hacer otra cosa? por ejemplo ver si un boton fue presionado y hacer tal cosa. de ante mano gracias.
¿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.