TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: STICK_MASTER en 04 de Julio de 2008, 21:56:57

Título: entradas por pines
Publicado por: STICK_MASTER en 04 de Julio de 2008, 21:56:57
buenas noches

resulta q en esta ocasion necesito hacer un control de pulsos altos "high" y bajos "low" en un dos pines de un micro 16f877a

conozco la instruccion if(input_pinb0) ; esta me sirve para entradas de pulsos altos pero como hago si necesito decirle al micro que haga algo con una entrada baja y otra cosacon una entrada alta

mil gracias de antemano :-/
Título: Re: entradas por pines
Publicado por: firepic en 04 de Julio de 2008, 22:49:09
Buenas noches.
Podrías usar un sencillo if... else...
No sé qué compilador usas, pero en el CCS sería algo así:
Código: C
  1. while(TRUE) //ciclo infinito
  2. {
  3.      if(input(PIN_B0))
  4.      {
  5.        //Código a ejecutar si la entrada está en alto
  6.       }
  7.       else
  8.       {
  9.        //Código a ejecutar si la entrada está en bajo
  10.        }
  11. }

Espero te sirva. Saludos, nos leemos!  :mrgreen:
Título: Re: entradas por pines
Publicado por: Gonzalo_BlackHawk en 04 de Julio de 2008, 23:01:22
Hola stick, estaba escribiendo la respuesta cuando firepic me la saco de las manos  :D. Sin resentimientos fire.

Para no ponerme triste dejo otra opción, esta define la entrada baja en forma explícita por si necesitas analizar los estados bajos y altos en dos partes distintas del código.

Código: C
  1. if(input(PIN_B0)) {
  2.        // Lo que hay que hacer cuando la entrada es uno.
  3. }
  4.  
  5. // Aca coloca el código que quieras.
  6.  
  7. if(! input(PIN_B0)){
  8.        // Lo que hay que hacer cuando la entrada es cero.
  9. }

Saludos.
Título: Re: entradas por pines
Publicado por: firepic en 04 de Julio de 2008, 23:03:31
 :D Hombre, que parece que siempre estamos escribiendo al mismo tiempo!  :D
Esa está muy buena Gonzalo!  :)
Un cordial saludo!  :mrgreen:
Título: Re: entradas por pines
Publicado por: STICK_MASTER en 05 de Julio de 2008, 14:38:55
Gonzalo, Firepic muchas gracias resolvieron mi duda

Un saludo desde Colombia :-/
Título: Re: entradas por pines
Publicado por: alex_angeluz01 en 06 de Julio de 2008, 20:36:38
ola se como configurar pero tengo que llamar una rutina para revisar en el puerto b si esta activo ono el pulsador antes de colocar el porgrama
Título: Re: entradas por pines
Publicado por: firepic en 07 de Julio de 2008, 11:55:47
Saludos Alex.
No entiendo muy bien tu pregunta, tal vez si tratas de explicarte mejor se te puede dar una respuesta.
Ok nos leemos!
Título: Re: entradas por pines
Publicado por: alex_angeluz01 en 09 de Julio de 2008, 00:25:27
ola sip mira tengo esto
if( input(PIN_B0==0))
   DATO 1;
Aca vamos a poder seleccionar con 4 pulsadores en el puerto B , 4 secuencias distintas de los leds colocados en el puerto D.
los pulsadores se me activan con 0 sip  pero tengo que ir a revisar en el pulsador si esta en 0 para hacer eso :D por que tenemos pull up :D en la praqeuta del entrenador :D

       
Título: Re: entradas por pines
Publicado por: scientist en 09 de Julio de 2008, 00:36:15
pues  mira, esta mal como escribiste if( input(PIN_B0==0)), ya que cuando ponemos if( input(PIN_B0)) le decimos SI el puerto b0 detecta nivel alto, entonces haz ........., el 'else' sirve para decirle, sino es cero, entonces haz otra cosa, si quieres poner para diferentes puertos, solamente por if (input(pin_bX)) 4 veces, para el puerto que quieras, espero haberme explicado, ejemplo


Código: [Seleccionar]

if (input(pin_b0)){
/////hago una cosa
}

if (input(pin_b1)){
////////hago lo otro
}



y asi sucesivamente, saludos
Título: Re: entradas por pines
Publicado por: firepic en 09 de Julio de 2008, 10:18:36
Pues Alex, tal como te ha dicho scientist, tienes mal hecha la sintaxis del input. La instrucción input en CCS te devuelve un valor TRUE cuando el pin está en alto, y un valor FALSE cuando está en bajo.
La sintaxis correcta sería la que te dejo Gonzalo, poniendo un negador que anteceda a la instrucción:

Código: C
  1. if(!input(PIN_B0))
  2. {
  3.         // código a ejecutarse cuando el pin está en nivel bajo.
  4. }

Entonces lo que primero se ejecuta es el input, que si está en valor bajo el RB0, devolverá un FALSE, pero con el negador, cambia a TRUE, por lo cual se cumple la condición del if y se ejecuta el código respectivo. Entonces quedaría tal como te lo ha colocado scientist, pero con los negadores antes del input, ya que como has dicho los pulsadores cuando se activan colocan nivel bajo.
Otra cosa es que no deberías tener problemas con las pull-up. De todos modos un pulsador que se active en 0 siempre lleva una resistencia de Pull-up.

Mientras vayas desarrollando tu proyecto puedes ir subiendo tus avances.
Saludos, nos leemos!  :mrgreen:
Título: Re: entradas por pines
Publicado por: alex_angeluz01 en 09 de Julio de 2008, 23:08:33
ok grax si ya se como empesar pero tengo uqe activar los pulsadores y tengo resistencuias pull up y estan se activan con cero como hago para qeu se activen cuando sea cero sin qeu el me mire si esta en cero o no :D
Título: Re: entradas por pines
Publicado por: firepic en 09 de Julio de 2008, 23:11:26
Monta un esquema de cómo tienes conectado el pulsador, para saber si lo estás haciendo correctamente.
Saludos, nos leemos!  :mrgreen:
Título: Re: entradas por pines
Publicado por: MLO__ en 09 de Julio de 2008, 23:45:43
.. estan se activan con cero como hago para qeu se activen cuando sea cero sin qeu el me mire si esta en cero o no :D

 :shock: :shock:

Si a "el" te refieres al PIC  :D, la mejor manera es hacerlo por interrupciones, pero de igual manera "el" debe "mirar" si hay un cambio de estado en los pines para asignar por codigo que es lo que se quiere hacer con la accion de cada pulsador.

Saludos.
Título: Re: entradas por pines
Publicado por: firepic en 10 de Julio de 2008, 00:08:48
Hombre, con razón yo no entendí Miguel... ustedes entre colombianos como que se entienden mejor  :D
A ver qué dice Alex sobre lo que le mencionas.
Saludos, nos leemos!  :mrgreen:
Título: Re: entradas por pines
Publicado por: alex_angeluz01 en 11 de Julio de 2008, 01:34:38
a OK ya entendi grax :D :-/
Título: Re: entradas por pines
Publicado por: alex_angeluz01 en 12 de Julio de 2008, 21:37:08
ola ya hice esa programacion y me quedo BIen ahora mira tengo que hacer + - y multiplicacion pero con el teclado y mostrar los nuemros que introduzco en el display de 7 segmentos
Título: Re: entradas por pines
Publicado por: MLO__ en 13 de Julio de 2008, 22:23:26
Hola.

Puedes usar la libreria del CCS para manejar el teclado kbd.c y modificarlo para que quede de 4x4 (mira AQUI (http://picmania.garcia-cuervo.com/PICC.php#KBDLIB)). Modifica en el array los valores necesarios para que salgan las operaciones y listo amigo. Para el manejo de los display mira 7 Segmentos con Int Timer0 (http://www.todopic.com.ar/foros/index.php?topic=21738.0), te dara una gran ayuda.

Saludos
Título: Re: entradas por pines
Publicado por: alex_angeluz01 en 16 de Julio de 2008, 00:18:51
sip ese ya lo habia descargado pero no se como subirlo como libreria por que la descargarlo me sale como si fuese un archivo de block y no se como hacer que se convierta en libreria si me puedoieras explicar me seri amuy util
ya que el sabado lo descarge y un amigo lo monto en otro programa pero en mi tarjeta no me corrio :D no se cual sera elproblema ya que con el pic que programamos es el 18f4550
Título: Re: entradas por pines
Publicado por: firepic en 16 de Julio de 2008, 00:28:17
Cuando abras el archivo en notepad, le das "Guardar como...", en Tipo de Archivo eliges "Todos los Archivos" y le das un nombre con extensión .c
El archivo lo puedes guardar en la dirección \Archivos de Programa\PICC\Drivers... o la ubicación correspondiente en tu PC.
Para incluirlo en el .c fuente, colocas:
Código: C
  1. #include <nombre.c>
De esa forma buscará el archivo en la carpeta de drivers...
A ver si eso te ayuda, no olvides mencionar tus avances.
Ok saludos, nos leemos!  :mrgreen:
Título: Re: entradas por pines
Publicado por: MLO__ en 16 de Julio de 2008, 16:17:39
Hola.

Despues de hacer lo que te dijo fire para guardar el archivo, puedes escribir lo siguiente en el codigo principal:
Código: [Seleccionar]
#include "kbd.c"
y el archivo lo guardas en el mismo directorio donde tienes el programa principal.

Saludos
Título: Re: entradas por pines
Publicado por: firepic en 16 de Julio de 2008, 16:27:10
Cierto. Si lo guardas en la misma carpeta del código fuente principal, lo haces como dice MLO.
A mí me gusta más guardar este tipo de códigos en la subcarpeta "Drivers" del CCS junto con las demás librerías. Ahí sí lo harías como te mencioné, con los <archivo.c> en vez de "archivo.c"...
Pero pues como siempre, es cuestión de gustos.  :lol:
Saludos, nos leemos!  :mrgreen: