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

Temas similares

03/06/2011 #1


Trabajo Final de Electronica - AYUDA
bueno pues tengo que hacer un trabajo final para electronica con el PIC 16F877A..

la idea que tengo es hacer un tipo de juego en el que te dan toques electricos, mas sin embargo creo que voy por mal camino, porque en el simulador (proteus) no ocurrio lo que esperaba... esto es lo que llevo, aun sigo viendo como resolver..
Código:
#include "C:\Users\Admin\Desktop\proyect\main.h"

int a0,p1,p2,p3;
void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   // TODO: USER CODE!!
   while (1)
  {
    p1=input(pin_d0);
     p2=input(pin_d2);
      p3=input(pin_d4);
     a0=input(pin_a0);
     salto:
      if (a0==0) // Esto enciende el led
  {    
  delay_ms(5000);
  output_bit(pin_b0,1);  // Esperas 5 segundos y se activa el led
      delay_ms(10000);   // por 10 segundos
  }
  
  else
   output_bit(pin_b0,0);
  // JUGADOR 1  
 if ((((output_bit(pin_b0,1)))&&(p1==0))) //no creo que esto se pueda porque me aparecia:
 {                                                   // "A numeric expression must appear here"
 output_bit(pin_b0,0);   // al presionar el boton de el player1, el led se apaga y
 output_bit(pin_b3,1);  // da toques electricos a los otros 2 jugadores         
 output_bit(pin_b2,1);  //por 3 segundos
 delay_ms(3000); 
  output_bit(pin_b3,0);
 output_bit(pin_b2,0);
 }
}
}
Deberia funcionar de esta manera, al presionar un boton despues de ciertos segundos un led se enciende, el primero de los 3 jugadores que presione el boton que hay en uno de los tubos de cobre sera al unico que no le den toques electricos, mientras que a los demas si les daran toques electricos por 3 segundos.

espero me puedan instruir, gracias.
03/06/2011 #2
Moderador

Avatar de Chico3001

Y cual es el problema??
04/06/2011 #3


El problema era que el led se quedaba parpadeando, y no se detenia aun presionando algun boton de jugadores..

Experimentando me funciono a medias de esta forma pues ahora si se apaga el led cuando algun jugador presiona su boton..
Código:
#include "C:\Users\Ekno0\Desktop\LED\main.h"
int button,p1,p2,p3;

void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   // TODO: USER CODE!!
      while(1)
{
    p1=input(pin_d0);
     p2=input(pin_d2);
      p3=input(pin_d4);
   SALTO:
   button=input_A();
      if (button==0)
      {
      tonto:
      DELAY_MS(6300);
      OUTPUT_B(0x01);                   
          while((output_b(1))==1) // cuando el led esta encendido
          {
           if(input(pin_d0)==0)
      {
      output_b(0x0c);
      DELAY_MS(3000);
      goto salto;
      }
           if(input(pin_d2)==0)
      {
      output_b(0x0a);
      DELAY_MS(3000);
      goto salto;
      }
           if(input(pin_d4)==0)
      {
      output_b(0x06);
      DELAY_MS(3000);
      goto salto;
      }
          }
}
      output_b(0x00);
      delay_ms(50);
}
}
Pero aun no encuentro la forma de hacer que, mientras el led no este encendido (output_b(0)==1) y algun jugador presione el boton, le de una descarga a ese jugador (output_b(XxXX)), sin perder el conteo claro
me explico? ;S!

espero me puedan ayudar ;S Graciass
04/06/2011 #4
Moderador

Avatar de Chico3001

Primero vamos estandarizando tu forma de programar.... en C estan ESTRICTAMENTE PROHIBIDOS los saltos a menos que estes usando la sentencia SWITCH y solo usando la sentencia BREAK

Segundo.... los comentarios son para usarse.... si quieres que otra persona entienda tu programa necesitas comentarlo para que ambos puedan pensar de la misma forma...

Aqui te dejo mi solucion muy seguramente tengo errores ya que no puedo simularlo de ninguna manera y lo hice con conocimientos de C general (no para PIC ya que no lo manejo), pero revisala y comentame que te parece

Código PHP:
#include "C:\Users\Ekno0\Desktop\LED\main.h"
int button,p1,p2,p3;

void main() {
    
// Inicializacion de puertos
    
setup_adc_ports(NO_ANALOGS);
    
setup_adc(ADC_CLOCK_DIV_2);
    
setup_psp(PSP_DISABLED);
    
setup_spi(SPI_SS_DISABLED);
    
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
    
setup_timer_1(T1_DISABLED);
    
setup_timer_2(T2_DISABLED,0,1);
    
setup_comparator(NC_NC_NC_NC);
    
setup_vref(FALSE);

    
// Loop Infinito del programa principal
    
while(1) {
        
// Asignacion de variables
        
p1=input(pin_d0);
        
p2=input(pin_d2);
        
p3=input(pin_d4);

        while (
button==0) {                //Espera hasta que se presione el boton de inicio(?)
            
button=input_A();
        }

        
DELAY_MS(6300);                    // Retardo de encendido
        
OUTPUT_B(0x01);                    // Enciende led

        
while(output_b(1)==1) {            // Se mantiene en el ciclo mientras el led se encuentre encendido

            
if(input(pin_d0)==0) {        //Boton 1 activo?
                
output_b(0x0c);            // electrocuta jugador
                
output_b(1)=0;            // apaga led
            
}

            if(
input(pin_d2)==0) {
                
output_b(0x0a);            // electrocuta jugador
                
output_b(1)=0;            // apaga led
            
}
            if(
input(pin_d4)==0) {
                
output_b(0x06);            // electrocuta jugador
                
output_b(1)=0;            // apaga led
            
}
        }

        
DELAY_MS(3000);                    // Espera 3 segundos mientras electrocuta al jugador
        
output_b(0x00);                    // Perdona a los jugadores
        
delay_ms(50);                    // Retardo final
    
}

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.