Autor Tema: contador ascendente descendente  (Leído 9689 veces)

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

Desconectado cibernetica

  • PIC10
  • *
  • Mensajes: 7
contador ascendente descendente
« en: 18 de Enero de 2004, 17:25:00 »
hola, necesito saber como programar un pic  para que funcione como un contador ascendente y descendente.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: contador ascendente descendente
« Respuesta #1 en: 19 de Enero de 2004, 03:14:00 »
Para poder ayudarte es necesario conocer cómo quieres qué funcione. ¿Una entrada para que ascienda y otra para que descienda?.

¿Qué vas a hacer con el número "contado?, ¿mostrarlo en un display, en un LCD?

Indícanos para qué es y podremos ayudarte.

Desconectado cibernetica

  • PIC10
  • *
  • Mensajes: 7
RE: contador ascendente descendente
« Respuesta #2 en: 23 de Enero de 2004, 07:52:00 »
hola, primero gracias por ayudarme. Te cuento es para utilizarlo en un control de maniobras de un ascensor, cada numero que sume( cuando sube) y reste (cuando baje) es un piso. osea que si yo le marco el piso 11, y esta en el piso 1, debe contar hasta el piso 11, y cuando llego al piso 11 darse cuenta. A su vez el numero figura en un display.
Cualquier otra cosa que necesites avisame.

Muchas Gracias.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: contador ascendente descendente
« Respuesta #3 en: 23 de Enero de 2004, 11:31:00 »
Necesitas tener un sensor en cada planta de forma que cada vez que el ascensor pase por una determinada planta se incremente o decremente una variable interna.

Mejor aún en lugar de un sensor en cada planta, un único sensor en la cabina del ascensor.

Cuidado con los rebotes. Si asignas la variable S (sensor) a un pin que no sea RB0 debes introducir por software antirebotes.

También puedes asignar la variable S a RB0 y programar este pin por flanco.

Con estas ideas ya puedes empezar a programar, ... , no es dificil. ¡Animo !

Cualquier cosa avisa.

Un saludo

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: contador ascendente descendente
« Respuesta #4 en: 23 de Enero de 2004, 11:47:00 »
¿El PIC también va a gobernar los motores y pulsadores del ascensor?, ¿o se trata de adaptarle un display a un ascensor ya existente?

Si se trata del primer caso, el problema no es tan fácil como programar un contador ascendente/descendente, ya que habrá múltiples entradas (botonera del ascensor, botonera de las plantas, sensor fotoeléctrico de la puerta...) y una lógica compleja (imagina que el ascensor es llamado desde una planta inferior pero antes ha recibido la orden de subir).

Sin embargo, si se trata de un ascensor que ya existe y al que quieres ponerle un display, creo que deberías adaptarte al sistema de sensores que ya esté instalado en el mismo, puesto que el ascensor en la actualidad ya detecta la presencia de una planta y se para (¿o no?).

Si hay un sólo sensor en el ascensor vas a tener que tener en cuenta la dirección de giro del motor para saber si el contador tiene que aumentar o disminuir. Por el contrario, la situación ideal sería que hubiese dos sensores en el ascensor: uno que se active si el ascensor sube y otro que se active si baja.

Cuéntanos algo más y seguimos avanzando.

Un saludo

Desconectado cibernetica

  • PIC10
  • *
  • Mensajes: 7
RE: contador ascendente descendente
« Respuesta #5 en: 27 de Enero de 2004, 08:58:00 »
Mira te cuento, el pic tambien va a gobernar el motor y los pulsadores, es para colocar en ascensores nuevos, no en ascensores ya existentes.
Los ascensores ya traen un sensor en cada piso, el final de carrera, que cuenta cada piso.
El pic en el ascensor es muy inportante, ya que excepto lo mecanico maneja todo, el diplay, los pulsadores, el motor, etc.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: contador ascendente descendente
« Respuesta #6 en: 27 de Enero de 2004, 09:37:00 »
En ese caso no es tan simple como programar un contador. Yo te recomendaría hacerte de una solución comercial en lugar de partir de cero, más aún cuando dices que no controlas bastante en el tema de los PIC.

Fíjate que es un proyecto en el que vas a mover personas y un fallo puede costar bastante caro...

Yo no me arriesgaría

Desconectado Walpic

  • PIC10
  • *
  • Mensajes: 1
RE: contador ascendente descendente
« Respuesta #7 en: 04 de Febrero de 2004, 18:53:00 »
Hola: Soy totalmente nuevo en esto de los pic, (esta es mi primera intervención) pero tengo algún conocimento en ascesores.
Sin querer desanimarte te comento que es muy complicado ya que no solo manejas motor y botones hay muchas variantes y tiempos para que el ascensor cumpla con las funciones básicas y tenga un  funcionamiento seguro y eficiente.
Como desafio sería muy bueno, pero para efectos comerciales te es más facil conseguir tarjetas en plaza que cubren casi todas las necesidades. En Buenos Aires hay varias casas que se dedican al eso.
Para comenzar sería bueno que intentes hacer el contador que solo comande el display para ascensores usados.
Luego una manibra pequeña máxima tres pisos (universal) para ir perfeccinandola. No te entregues pero creo que dependiendo del tiempo que dispongas para este proyecto te llevara unas cuantas horas.
Lo más importante te lo dijo nocturno66 vas transportar personas.

Saludos

Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: contador ascendente descendente
« Respuesta #8 en: 05 de Febrero de 2004, 03:20:00 »
Ufff..... totalmente de acuerdo con Walpic... controlar un ascensor correctamente y, sobretodo con seguridad y fiabilidad, es muy muy complejo... Si el ascensor va a transportar personas, imagino que tu control tendrá que pasar por un montón de pruebas de calidad y prevención de riesgos... es cosa muy seria... Pero igual se trata de un ascensor de esos que tienen los restaurantes para transportar alimentos, no? podría ser... ya nos dirás.

Pero en todo caso, dinos ¿tienes alguna parte del proyecto ya implementada? por ejemplo el control del motor? y qué pic estás utilizando? imagino que será uno de gama alta, no?
Ve poquito a poco... que el tema niene miga, desde luego...

saludos!
Elena

Desconectado fopy

  • PIC10
  • *
  • Mensajes: 35
RE: contador ascendente descendente
« Respuesta #9 en: 05 de Febrero de 2004, 17:39:00 »
aqui te envio, el codigo de de un cuenta revoluciones que estoy haciendo con un 16f84, los datos son los siguientes:

PORT B
B0    BCD - A
B1    BCD - B
B2    BCD - C
B3    BCD - D

B4   Base del transistor npn bc548 de masa del 1° Display
B5   Base del transistor npn bc548 de masa del 2° Display
B6   Base del transistor npn bc548 de masa del 3° Display
B7   Base del transistor npn bc548 de masa del 4° Display

PORT A

A0   Entrada 1
A1   Entrada 2

Cuando la secuencia de activacion es A0 A1 (los dos en nivel alto)
el contador suma

Cuando la secuencia es al reves el contador resta.

El codigo BCD va a un 4511 que es un decodificador bcd a 7 segmentos y las salidas a,b,c,d,e,f,g,e van a los 4 display a traves de resistencias de 450 ohms,  las masas de los display van a 4 bc548, para realizar la multiplexacion.

el codigo en c para pwc es:



//contador.c
include "C:Archivos de programaPiccproyectomio.h"
//ESTADO CONTADOR       7 de diciembre de 2003
//Listo para comenzar rutina BCD
#USE delay (clock=4000000)

//variables de control de giro

int cond_der,cond_izq,izquierda,derecha;

signed int leer_puerto (void);

void main() {

int dato;
signed int unidad ,decena,centena, miles;
int time;
cond_izq=0;
cond_der=0;
izquierda=0;derecha=0;
time=10;
unidad=0;
decena=0;
centena=0;
miles=0;
dato=0;
//seteo de PUERTO_B todo salidas
SET_TRIS_B(0x00);
OUTPUT_B(0);
//seteo de PUERTO_A 3 in 2 out
//ra0 = barrera 1
//ra1 = barrera 2
//ra2 = reset

SET_TRIS_A(0x07);
dato==0;
while(1)
  {
  //going up
   if(unidad==10){decena++;unidad=0;}
   if(decena==10){centena++;decena=0;unidad=0;}
   if(centena==10){miles++;decena=0;unidad=0;centena=0;}
   if(miles==10){miles=0;centena=0;unidad=0;decena=0;}
  //going down
   if(unidad==11)
     {
      if(decena==0)
        {decena=11;unidad=9;}
      else
       {decena--;unidad=9;}
      }
   if(decena==11)
     {
      if(centena==0)
        {centena=11;decena=9;unidad=9;}
      else
       {
        centena--;decena=9;unidad=9;
        }
      }
    if(centena==11)
      {
       if(miles==0)
         {miles=11;centena=9;decena=9;unidad=9;}
       else
        {
         miles--;centena=9;decena=9;unidad=9;
         }
       }
     if(miles==11)
       {
        miles=9;centena=9;decena=9;unidad=9;
        }
/////////////////UNIDAD
   if(unidad==0){OUTPUT_B(16);delay_ms(time);}
   if(unidad==1){OUTPUT_B(17);delay_ms(time);}
   if(unidad==2){OUTPUT_B(18);delay_ms(time);}
   if(unidad==3){OUTPUT_B(19);delay_ms(time);}
   if(unidad==4){OUTPUT_B(20);delay_ms(time);}
   if(unidad==5){OUTPUT_B(21);delay_ms(time);}
   if(unidad==6){OUTPUT_B(22);delay_ms(time);}
   if(unidad==7){OUTPUT_B(23);delay_ms(time);}
   if(unidad==8){OUTPUT_B(24);delay_ms(time);}
   if(unidad==9){OUTPUT_B(25);delay_ms(time);}
/////////////////DECENA
   if(decena==0){OUTPUT_B(32);delay_ms(time);}
   if(decena==1){OUTPUT_B(33);delay_ms(time);}
   if(decena==2){OUTPUT_B(34);delay_ms(time);}
   if(decena==3){OUTPUT_B(35);delay_ms(time);}
   if(decena==4){OUTPUT_B(36);delay_ms(time);}
   if(decena==5){OUTPUT_B(37);delay_ms(time);}
   if(decena==6){OUTPUT_B(38);delay_ms(time);}
   if(decena==7){OUTPUT_B(39);delay_ms(time);}
   if(decena==8){OUTPUT_B(40);delay_ms(time);}
   if(decena==9){OUTPUT_B(41);delay_ms(time);}
//////////////////CENTENA
   if(centena==0){OUTPUT_B(64);delay_ms(time);}
   if(centena==1){OUTPUT_B(65);delay_ms(time);}
   if(centena==2){OUTPUT_B(66);delay_ms(time);}
   if(centena==3){OUTPUT_B(67);delay_ms(time);}
   if(centena==4){OUTPUT_B(68);delay_ms(time);}
   if(centena==5){OUTPUT_B(69);delay_ms(time);}
   if(centena==6){OUTPUT_B(70);delay_ms(time);}
   if(centena==7){OUTPUT_B(71);delay_ms(time);}
   if(centena==8){OUTPUT_B(72);delay_ms(time);}
   if(centena==9){OUTPUT_B(73);delay_ms(time);}
//////////////////MILES
   if(miles==0){OUTPUT_B(128);delay_ms(time);}
   if(miles==1){OUTPUT_B(129);delay_ms(time);}
   if(miles==2){OUTPUT_B(130);delay_ms(time);}
   if(miles==3){OUTPUT_B(131);delay_ms(time);}
   if(miles==4){OUTPUT_B(132);delay_ms(time);}
   if(miles==5){OUTPUT_B(133);delay_ms(time);}
   if(miles==6){OUTPUT_B(134);delay_ms(time);}
   if(miles==7){OUTPUT_B(135);delay_ms(time);}
   if(miles==8){OUTPUT_B(136);delay_ms(time);}
   if(miles==9){OUTPUT_B(137);delay_ms(time);}
   dato=leer_puerto();
   if(dato==1)
     unidad+=dato;
   if(dato==2)
     unidad=decena=miles=centena=0;
   if(dato==3)
     {
      if(unidad==0)
       unidad=11;
      else
       unidad--;
       }
 delay_ms(10);
   //dato++;
   //if(dato==5){unidad++;dato=0;}
/*//BUCLE DE PRUEBA
   OUTPUT_B(16);//0
   delay_ms(500);
   OUTPUT_B(17);//8
   delay_ms(500);
   OUTPUT_B(18);//4
   delay_ms(500);*/
   }
}
int leer_puerto(void)
{
int full,izq,der,reset;


 full=input_a();
 izq=full&1;
 der=(full&2)>>1;
 reset=(full&4)>>2;
 /*if(reset)
  return(2);
/* if(izq&&!der)
   cond_izq=1;
 if(der&&!izq)
   cond_der=1;

Espero haberte sido de ayuda

Hasta pronto!!

 if(cond_der && der && izq)
  {
   cond_der=0;
   return(1);
   }
 full=input_a();
 izq=full&1;
 der=(full&2)>>1;

 if(cond_izq && der && izq)
  {
   return(3);
   cond_izq=0;
   }

 else
   return(0);*/
 if(izq&!der)
  izquierda=1;
 if(der&!izq)
  derecha=1;
 if(izq&der&izquierda)
  {izquierda=0;return(3);}
 if(izq&der&derecha)
  {derecha=0;return(1);}
 }


y la cabecera que menciona al pcicio es
//mio.h

#include <16F84A.h>
#use delay(clock=4000000)
#fuses RC,NOWDT,NOPROTECT,PUT

Desconectado cibernetica

  • PIC10
  • *
  • Mensajes: 7
RE: contador ascendente descendente
« Respuesta #10 en: 19 de Febrero de 2004, 08:52:00 »
Les cuento : Yo tengo una empresa de ascensores, ascensores cibernetica(www.ascensorcibernetica.com.ar).
Estoy acostumbrado a hacer ascensores nuevos de todo tipo, el problema es que comprar los tableros en empresas que lo fabrican es demasiado caro, entonces opte por hacer mi propio desarrollo, pero como en esto de los pics soy nuevo necesito de su ayuda.
Asi que le agradeceria si me siguen ayudando, com hasta ahora.

Gracias.

Desconectado JJSTARS

  • PIC10
  • *
  • Mensajes: 1
RE: contador ascendente descendente
« Respuesta #11 en: 24 de Octubre de 2004, 19:13:00 »
HOLA SOY NUEVO NECESITO SABER COMO HACER UN PROGRAMA DE UN CONTADOR ASCENDENTE Y DESCENDENTE ESTOY UTILIZANDO EL PIC 16F84A CON DOS PULSOS DE ENTRADA EN PINES DIFERENTES UNO PARA ASCENDER Y OTRO PARA DESCENDER QUE CUENTE DESDE CERO HASTA CINCO LO IMPORTANTE ES QUE ASCIENDA Y DESCIENDA.GRACIAS ESPERO PRONTA RESPUESTA

Desconectado Carlete71

  • PIC18
  • ****
  • Mensajes: 433
RE: contador ascendente descendente
« Respuesta #12 en: 24 de Octubre de 2004, 19:19:00 »
Una pregunta, te pueden llegar al mismo tiempo los pulsos ascendente y descendente o tu circuito tiene algún dispositivo que te impida que eso ocurra?

Saludos,

Desconectado Carlete71

  • PIC18
  • ****
  • Mensajes: 433
RE: contador ascendente descendente
« Respuesta #13 en: 24 de Octubre de 2004, 19:35:00 »
Mira, algo sencillo podría ser que hagas una rutina principal donde monitorees las dos entradas. Supón que usas RA0 como Ascendente y RA1 como descendente.

Entonces si RA0=1 esperas a que sea cero otra vez para evitar que te cuente muchas veces Sonrisa Gigante Una vez que es cero entonces sumas uno al registro que debes definir desde el inicio como contador y que debes haber inicializado a cero al comienzo del programa.

Si RA1=1 haces lo mismo, pero en lugar de sumar, restas.

Otra cosa que tienes que ver es que si tu registro contador está en cero y le llega RA1=1, entonces que lo ignore.

Espero que esto te ayude.

Saludos,