TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: cifuen en 15 de Marzo de 2006, 11:02:00

Título: maquina de envasado
Publicado por: cifuen en 15 de Marzo de 2006, 11:02:00
Saludos, tengo que hacer una practica y tengo el siguiente código, pero me gustaria ver mas programas o diferentes formas de hacerlo ya que me gusta comparar, la practca es la siguiente:
Se pretende diseñar una máquina de envasado con las siguientes caracteristicas:
existen dos reles "M1" (RB0) y "M2" (RB1) que gobiernan dos motores, estos motores arrastran dos cintas trasportadoras:
      M1 transporta piezas
      M2 transporta embalajes
el sensor "DP" (RA1) detecta el paso de piezas
el sensor "DE" (RA2) detecta el correcto posicionamiento del envase.
al detectarse 10 piezas, el envase se considera lleno y se activa una señal acustica "A" (RB2) y, cuando sucede esto
     La cinta que transporta embalajes se desplaza hasta situar un nuevo envase vacio.
     Cuando esta colocado el nuevo envase vacío se desactiva la señal acustica "A" (RB2) y nuevamente avanza la cinta de piezas repitiendose el ciclo.
     Un interruptor "I" (RA0) activa y desactiva todo el sistema.

El codigo que tengo echo es el siguiente:

#include<pic.h>
#include"decod.h"
#include"Delay.c"
#define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit))

static bit I @ PORTBIT(PORTA, 0);
static bit DP @ PORTBIT(PORTA, 1);
static bit DE @ PORTBIT(PORTA, 2);
void main()
{
unsigned char conta=10;
TRISB =0; //puerto b al completo configurado como salida

PORTB = 0X00;
       
//ponemos en marcha la cinta

while (I){
      PORTB = 0X01;
     
// ponemos el envase en su sitio    
   
     while (DP && I){
            conta=10;
      PORTB = 0X06;
             
//llenamos envase

            do{    
           
                     while (!DE && I){}
                     DelayMs(200);
                     
                     while (DE && I){}
                     DelayMs(200);
                     conta--;
                     PORTB = Decod(conta);
                     

            }while (conta>0 && I && DP);
           
            PORTB= 0X02;
           
            //colocamos un envase nuevo
            while (!DP && I){}
            DelayMs(200);
            while (DP && I){}
            DelayMs(200);

     }
}
}//fin main

es para 16f84

Saludos y gracias.

Título: RE: maquina de envasado
Publicado por: cifuen en 16 de Marzo de 2006, 08:30:00
weno, y alguien me puede sacar el pseudocodigo?

un saludo.
Título: RE: maquina de envasado
Publicado por: vszener en 16 de Marzo de 2006, 09:34:00
ein?loco


Suerte!!!Giño
Título: RE: maquina de envasado
Publicado por: nordestenica en 17 de Marzo de 2006, 03:27:00
hehe amigo esse codigo es uno de los exemplos de www.microcontroladores.com e que lo puedes bajar gratis e dentro del mismo tienes  varios exemplos como esse

pero dime que es el pseudocodigo ??? te refieres a otras formas de acer el mismo
Título: RE: maquina de envasado
Publicado por: cifuen en 17 de Marzo de 2006, 09:31:00
Escrito originalmente por nordestenica
hehe amigo esse codigo es uno de los exemplos de www.microcontroladores.com e que lo puedes bajar gratis e dentro del mismo tienes  varios exemplos como esse

pero dime que es el pseudocodigo ??? te refieres a otras formas de acer el mismo


pues no veo de donde descargarme los ejemplos de los que me hablas...
Título: RE: maquina de envasado
Publicado por: vszener en 17 de Marzo de 2006, 10:47:00
Supongo que desde este enlace: http://www.msebilbao.com/tienda/software.php


Suerte!!!Giño
Título: RE: maquina de envasado
Publicado por: pelusac en 20 de Marzo de 2006, 06:43:00
Como bien te ha comentado el maestro vszener el problema de que hablas viene resuelto en la pagina que te han reseñado en el otro post.
Vienen dos ejemplos uno con el desarrollo normal y el otro con eliminación de rebotes con temporización.Por si te vale de algo ahí va el codigo:

Máquina de envasado. eliminación de rebotes mediante una temporización.
//
//Dos relés "M1" (RB0) y "M2" (RB1) gobiernan dos motores que arrastran dos cintas
//transportadoras. "M1" (RB0) transporta piezas y "M2" (RB1) embalajes. Un sensor "DP" (RA1)
//detecta el paso de piezas y, otro "DE" (RA2), detecta el correcto posicionamiento de un
//envase. Al detectarse el paso de 10 piezas, el envase se considera lleno, se activa una
//señal acústica "A" (RB2) y, la cinta que transporta embalajes, se desplaza hasta situar un
//nuevo envase vacío. En este momento se desactiva la señal acústica "A"(RB2) y nuevamente
//avanza la cinta de piezas repitiéndose así el ciclo. Un interruptor "I" (RA0) activa o
//no a todo el sistema.

#include <16f876A.h>

//Ajusta los valores de la palabra de configuración durante el ensamblaje:
//Protección de código y datos=OFF, LVP=OFF, WDT=OFF y OSC=XT

#fuses NOPROTECT,NOCPD,NOLVP,NOWDT,XT

// Con estas directivas las funciones "input" y "output_bit" no reprograman
// el pin de la puerta cada vez que son utilizadas. Si no se indica el
// modo fast_io se asume por defecto standard_io el cual reprograma el pin
// siempre antes de ser utilizadas estas funciones.

#use delay(clock=4000000) //Activa las temporizaciones en base al clock de trabajo
#use fast_io (A)
#use fast_io (B)

int   x;            //Variable para el contador de piezas

main()
{
     output_b(0x0);               //Borra las salidas
   setup_adc_ports(NO_ANALOGS);   //Puerta A digital
     set_tris_a(0x3F);            //Puerta A entrada
     set_tris_b(0x00);            //Puerta B salida

     while(1)
    {   while(!input(PIN_A0));   //Esperar a que se active I
         output_low(PIN_B2);      //Desactiva acústico A
      output_high(PIN_B1);    // Activar cinta de envases M2
      
      while(!input(PIN_A2));   // Espera se posicione el nuevo envase
      delay_ms(10);         //Temporiza 10 ms para eliminar rebotes
      output_low(PIN_B1);      // Desactiva cinta de envases M2
      output_high(PIN_B0);   // Activa cinta de piezas M1
   
      for (x=1; x<=10; ++x)   //Bucle para contar 10 piezas
            {
            while(input(PIN_A1));
            delay_ms(10);         //Temporiza 10 ms para eliminar rebotes
            while(!input(PIN_A1)); //Esperar que pase pieza por DP (1-0-1
            delay_ms(10);         //Temporiza 10 ms para eliminar rebotes
            }
      
      output_low(PIN_B0);      //Desactiva cinta de piezas M1
      output_high(PIN_B2);   //Activa señal acústica A
      output_high(PIN_B1);   //Activa cinta de envases M2
      
      while(input(PIN_A2));   //Espera salida de envase lleno
      delay_ms(10);         //Temporiza 10 ms para eliminar rebotes
   }   
}