Autor Tema: Problema -Semaforo controlado por tres pulsadores PIC16f88 y CCS  (Leído 4154 veces)

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

Desconectado Shiroisekai

  • PIC10
  • *
  • Mensajes: 3
Problema -Semaforo controlado por tres pulsadores PIC16f88 y CCS
« en: 15 de Diciembre de 2010, 17:42:00 »
Buenas a toda la comunidad veran estoy con este proyecto y la verdad es que le e dado tantas vueltas al asunto que ya no se me ocurre nada dejemen explicarles lo que deberia de hacer el PIC.
Semaforo

Se poseen tres semaforos de dos lucez cada uno quienes son controlados por tres interruptores P0, P1, P2 son los pulsadores que actuan como "sensores"; P0= RA0, P1=RA1, P2=RA2 asigne al semaforo S0 (RB1, RB2), al semaforo S1 (Rb3, rb4) y al semaforo S2 (RB5, RB6) donde
RB1, RB3, RB5 =leds rojos
RB2, RB4, RB6 =leds verdes


1) Al empezar todos los leds verdes estan encendidos (esto lo hace bien)
2) En este caso poseemos 3 casos donde al presionar por separado cada pulsador ocurre algo
-- Si se presiona P0 (entra un 1) el semaforo S2 pasa a rojo apagando el led verde de este se mantiene 5 seg asi y vuelve a verde
-- Si se presiona P1 (entra un 1) el semaforo S0 pasa a rojo apagando el led verde se mantiene por 5 segundos y vuelve a verde
-- si se presiona P2 (entra un 1) el semaforo S1 pasa a rojo apagando el led verde se mantiene por 5 seg y vuelve a verde

Hasta aqui el programa me esta sirviendo pero ahora entro en otro estado, que es cuando se presionan dos de los interruptores al mismo tiempo no se como asignar el codigo necesario para que tome que cuando por ejemplo se presionen P0 y P1 se pongan en rojo S2 y S1 (apagando sus leds verdesy manteniendo el led verde de S0) por 5 segundo para luego poner en rojo S0 yS2 (apagando sus leds verdes y encendiendo el led verde de S1) se mantiene por 5 seg y luego todos los semaforos se ponen en verde, si ven la ultima parte del codigo veran lo que puse aunque no se si eso servira, me gustaria saber si alguien me puede ayudar con el codigo para que interprete dos valores al mismo tiempo ya que al usar lo que estoy usando por alguna razon me hace todo pero un semaforo se mantiene apagado sus dos luces cuando no deberia ser asi.
No estoy seguro si me entendieron pero les dejo la tabla de estados por si no me entendieron bien.


Tambien les dejo el codigo que e hecho hasta ahora

Código: [Seleccionar]
#include <16F88.h>
#use delay (clock=1000000)
#fuses INTRC_IO,NOWDT,NOPUT,NOPROTECT
#byte port_b=0x06
#use fast_io(a)

 void main() {
 setup_oscillator(OSC_1MHZ|OSC_INTRC);
  setup_comparator(NC_NC_NC_NC);
  SETUP_ADC_PORTS(NO_ANALOGS);
  set_tris_a(0xff);
    set_tris_b(0x00);
   
    disable_interrupts(GLOBAL);
   
  ///estado 3 semaforos en verde
   do{     
                         
        output_high(PIN_B2);
       
        output_high(PIN_B4);
       
        output_high(PIN_B6);
     
  ///fin del estado verde todos
 
  ///inicio control de los sensores
  ///S0, S1, S2
       
     
   if (input(pin_a0))
   {
      output_low(pin_b6);
      output_high(pin_b5);
      delay_ms(4500);
     }
   
      if (input (pin_a1))
     
      {
     output_low(pin_b2);
     output_high(pin_b1);
     delay_ms(4500);
   }
   if (input (pin_a2))
   
   {
     output_low(pin_b4);
     output_high(pin_b3);
     delay_ms(4500);
   }
 
 ////caso dos activando dos pulsadores al mismo tiempo
 ///caso S0 S1
   if (input (pin_a0))
   if (input (pin_a1)){

   output_low (pin_b6);
   output_high (pin_b5);
   output_low (pin_b4);
   output_high (pin_b3);
   delay_ms(4500);
   output_low(pin_b5);
   output_high(pin_b6);
  output_low(pin_b2);
  output_high(pin_b1);
  delay_ms(4500);
 }
 }while(true);
 }

Bien lo que no me funciona es la ultima parte del codigo al presionar ambos botones o sigue la instruccion de cuando solo se preciona uno de ellos o asi que segun lo entiendo es como si no viera que ambos se presionaran, la verdad es que no se me ocurre nada ya en intentedo con varias formas use el
Código: [Seleccionar]
if(input_state(PIN_A0) & input_state(PIN_A1)){

}

Pero no me funciono en fin espero que alguien me pueda dar una luz con esto, saludos a todos
« Última modificación: 15 de Diciembre de 2010, 17:50:38 por Shiroisekai »

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Problema -Semaforo controlado por tres pulsadores PIC16f88 y CCS
« Respuesta #1 en: 15 de Diciembre de 2010, 18:58:38 »
por que no guardas en un int el estado del puerto a y compruebas bit a bit todos los pines del puerto?
tipo esto....

int variable;
variable=porta;
switch(variable){
    case...
    case...
    case...
    y asi todas las convinaciones
}
o mejor aun... por que no utilizas las interrupciones INT_RB?
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado Shiroisekai

  • PIC10
  • *
  • Mensajes: 3
Re: Problema -Semaforo controlado por tres pulsadores PIC16f88 y CCS
« Respuesta #2 en: 15 de Diciembre de 2010, 19:09:50 »
Bueno soy bastante nuevo con esto asi que estoy usando lo poco que se para realizar el programa podrias decirme en donde puedo encontrar algo de información sobre el uso del swich o de la INT_RB en verdad que me da verguenza esto pero la verdad termine programando el PIC de sorpresa sin ninguna explicación de como hacerlo, asi que practicamente estoy en 0.
Edito
Ok ya logre arreglar el problema solo tuve que controlar todo el puerto y listo ya hace lo que quiero, dentro de poco termino el codigo y se los enseño
« Última modificación: 15 de Diciembre de 2010, 19:28:59 por Shiroisekai »

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Problema -Semaforo controlado por tres pulsadores PIC16f88 y CCS
« Respuesta #3 en: 15 de Diciembre de 2010, 19:37:17 »
Bueno soy bastante nuevo con esto asi que estoy usando lo poco que se para realizar el programa podrias decirme en donde puedo encontrar algo de información sobre el uso del swich o de la INT_RB en verdad que me da verguenza esto pero la verdad termine programando el PIC de sorpresa sin ninguna explicación de como hacerlo, asi que practicamente estoy en 0.
Edito
Ok ya logre arreglar el problema solo tuve que controlar todo el puerto y listo ya hace lo que quiero, dentro de poco termino el codigo y se los enseño

en este link encontraras muchos ejemplos pero con un pic 16f648 pero que lo puedes trasladar a tu pic sin problemas... tambien te dara muchas ideas
te recomendaria que no abusaras de los retardos, ya que durante un retardo muy largo... si accionaras un pulsador deberia esperarse a que acabara el retardo para poder de nuevo comprobar el estado de los pulsadores y volver a actuar

aqui lo tienes el link....Ejemplitos en C para 16F648A

Suerte y ante cualquier duda ya sabes
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado Shiroisekai

  • PIC10
  • *
  • Mensajes: 3
Re: Problema -Semaforo controlado por tres pulsadores PIC16f88 y CCS
« Respuesta #4 en: 15 de Diciembre de 2010, 19:57:53 »
Bueno soy bastante nuevo con esto asi que estoy usando lo poco que se para realizar el programa podrias decirme en donde puedo encontrar algo de información sobre el uso del swich o de la INT_RB en verdad que me da verguenza esto pero la verdad termine programando el PIC de sorpresa sin ninguna explicación de como hacerlo, asi que practicamente estoy en 0.
Edito
Ok ya logre arreglar el problema solo tuve que controlar todo el puerto y listo ya hace lo que quiero, dentro de poco termino el codigo y se los enseño

en este link encontraras muchos ejemplos pero con un pic 16f648 pero que lo puedes trasladar a tu pic sin problemas... tambien te dara muchas ideas
te recomendaria que no abusaras de los retardos, ya que durante un retardo muy largo... si accionaras un pulsador deberia esperarse a que acabara el retardo para poder de nuevo comprobar el estado de los pulsadores y volver a actuar

aqui lo tienes el link....Ejemplitos en C para 16F648A

Suerte y ante cualquier duda ya sabes

gracias por la información la tendre en cuenta, en cuanto a los retardos asi los tengo que poner asi que no puedo hacer nada asi es como debe ser pero no hay problema ya que en la practica al pulsar se espera a que termine la determinada instrucción asi que me imagino que no tendre problema con ello pero lo tendre en cuenta para futuros diseños gracias por tu ayuda.

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Problema -Semaforo controlado por tres pulsadores PIC16f88 y CCS
« Respuesta #5 en: 15 de Diciembre de 2010, 20:08:14 »
de nada
para lo de los retardos, hay muchas opciones... creeme... por ejemplo con el timer1 puedes hacer que se desborde cada segundo y un restador que reste el valor a cada desborde del timer1.... no se como ya te he dicho hay muchas formas
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...


 

anything