Autor Tema: Ayuda con un contador (del 0 al 9)  (Leído 1674 veces)

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

Desconectado Hansot

  • PIC10
  • *
  • Mensajes: 10
Ayuda con un contador (del 0 al 9)
« en: 19 de Septiembre de 2014, 22:16:20 »
Quiero hacer una banda transportadora utilizando el micro controlador 16F84A y motores a pasos y al final de la banda me gustaría poner un sensor infrarrojo, de tal modo que cuando un objeto llegue al final obstruya la linea de visión del sensor, entonces un display de 7 segmentos va haciendo la cuenta de los objetos que pasan.
Pero no tengo idea de como hacer la programación de dicha precúspide.



En ese diagrama el motor de corriente directa abre una especie de puerta que deja caer los objetos, el motor paso a paso es el encargado de mover la banda y el display lleva la cuenta de los objetos que pasan por la banda (solo necesito ayuda con la programación del contador).

Perdonen mi ignorancia  :( solo soy una simple estudiante de 15 años... Gracias por la ayuda!!  :g)

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Ayuda con un contador (del 0 al 9)
« Respuesta #1 en: 20 de Septiembre de 2014, 08:52:05 »
  Perdón pero no parece que estés buscando ayuda, más bien parece que buscas que te hagan el programa.

  Hay varios ejemplos de contadores en el foro.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado allennet

  • PIC16
  • ***
  • Mensajes: 108
Re: Ayuda con un contador (del 0 al 9)
« Respuesta #2 en: 20 de Septiembre de 2014, 13:48:35 »
si muestras el avance que has logrado te podemos ayudar
"La curiosidad mato al gato, pero murio sabiendo"

Desconectado Hansot

  • PIC10
  • *
  • Mensajes: 10
Re: Ayuda con un contador (del 0 al 9)
« Respuesta #3 en: 20 de Septiembre de 2014, 17:13:38 »
Este es el contador del 0 al 9, ya lo simule y parece que esta bien

Código: [Seleccionar]
#include <16F84A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading

#use delay(clock=4000000)

#byte PORTA=5
#byte PORTB=6

void main()
{

set_tris_A(0xff);      // Puerto A como entradas
set_tris_B(0b00);      // Puerto B como salidas
portb=0b00;            // Puerto B puesto en cero
                      
      
          int i;
          i=0;
        
          do{
          do{
          }
          while (bit_test(PORTA,0));
          
          (bit_clear(PORTB,3));
          (bit_set(PORTB,0));          
          delay_ms(2000);
          
          i=i+1;
          
          do{
          }
          while (bit_test(PORTA,0));
          
          (bit_clear(PORTB,0));
          (bit_set(PORTB,1));
          delay_ms(2000);
          
          i=i+1;
          
          do{
          }
          while (bit_test(PORTA,0));
          
          
          (bit_set(PORTB,0));
          delay_ms(2000);
          
          i=i+1;
          

          do{
          }
          while (bit_test(PORTA,0));
          
          (bit_clear(PORTB,0));
          (bit_clear(PORTB,1));
          (bit_set(PORTB,2));
          delay_ms(2000);
          
          i=i+1;
          
          do{
          }
          while (bit_test(PORTA,0));
          

          (bit_set(PORTB,0));
          delay_ms(2000);
          
          i=i+1;
          
          do{
          }
          while (bit_test(PORTA,0));
          
          (bit_clear(PORTB,0));
          (bit_set(PORTB,1));
          delay_ms(2000);
          
          i=i+1;
          
          do{
          }
          while (bit_test(PORTA,0));
          

          (bit_set(PORTB,0));
          delay_ms(2000);
          
          i=i+1;
          
          do{
          }
          while (bit_test(PORTA,0));
          
          (bit_clear(PORTB,0));
          (bit_clear(PORTB,1));
          (bit_clear(PORTB,2));
          (bit_set(PORTB,3));
          delay_ms(2000);
          
          i=i+1;
          
          do{
          }
          while (bit_test(PORTA,0));
          
          (bit_set(PORTB,0));
          delay_ms(2000);
          
          i=i+1;
          }
          while (i<=9);
          
          }

Hay alguna manera mas simple de hacerlo?

Por cierto cuando simulo el movimiento de la banda transportadora en proteus hay un punto donde se queda "congelado" y después de unos 15 segundos sigue con el funcionamiento ¿Alguien sabe por que?
« Última modificación: 20 de Septiembre de 2014, 17:16:27 por Hansot »

Desconectado donvalles

  • PIC10
  • *
  • Mensajes: 35
Re: Ayuda con un contador (del 0 al 9)
« Respuesta #4 en: 23 de Septiembre de 2014, 00:25:58 »
Código: C++
  1. #include <16F84A.h>
  2.  
  3. #FUSES NOWDT                    //No Watch Dog Timer
  4. #FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
  5. #FUSES NOPUT                    //No Power Up Timer
  6. #FUSES NOPROTECT                //Code not protected from reading
  7.  
  8. #use delay(clock=4000000)
  9.  
  10. #USE FAST_IO (all)
  11.  
  12. void main()
  13. {
  14.    int8 i=0;
  15.    
  16.    set_tris_A(0xFF);      // Puerto A como entradas
  17.    set_tris_B(0x00);      // Puerto B como salidas
  18.                        
  19.    output_b(0x00);        //imprimo cero en display
  20.    
  21.    while(true)
  22.    {
  23.       while(!input(PIN_A0)); // mientras pin es cero queda en el bucle
  24.       if(i==9)
  25.          {
  26.             i=0;
  27.             output_b(i);        //imprimo cero en display  
  28.          }else  output_b(i++);        //imprimo en display contador de 1 a 9
  29.        
  30.    }
  31. }


 

anything