- Tema Autor
- #1
Hola esoty realizando un proyecto de fin de cuatrimestre, el cual consiste en una banda trasnportadora con sensor de pesoy altura, para de esta forma saber que parte pintar, el sistema tiene tres sensores de presencia, que para efectos practicos ahorita estoy manejando como pulsadores, el primer sensor seria el area de pesado, el segundo el area de altura, y el tercero el area de salida, estoy usando pcwhd 4.120, no logro hacer que funcione, es mi segundo proyecto grande, y la verdad no encuentro el error. De antemano agradesco su ayuda.
Código:
#include <16F887.h>
#device ADC=10
#fuses HS,NOWDT,NOPUT,MCLR,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NOPROTECT,NOFCMEN,NOIESO
#use delay (clock=20000000)
#include <math.h>
#use fast_io(A)
#use fast_io(B)
#define LED pin_c5
void main()
{
int16 q, total;
float peso, altura; // Variables altura y peso
setup_comparator(NC_NC_NC_NC);
setup_vref(0);
set_tris_a(0b11111111); // A0-7 entradas
set_tris_b(0b00000000); // B0-7 salidas
setup_adc_ports(sAN0 | sAN1 | VSS_VDD); // setup A/D inputs
setup_adc( ADC_CLOCK_INTERNAL ); // setup A/D clock
set_adc_channel(0); // init A/D channel
delay_us (20); //Retraso TAD
set_adc_channel(1);
delay_us (20); //Retraso TAD
output_high(pin_c4); // Led de encendido del pic
output_low(PIN_B0); // motor side B low
output_low(PIN_B1); // motor side B low
output_low(PIN_B2); // motor side B low
output_low(PIN_B3); // motor side B low
output_low(PIN_B4); // motor side B low
output_low(PIN_B5); // motor side B low
output_low(PIN_B6); // motor side B low
output_low(PIN_B7); // motor side B low
delay_ms(50);
while(true)
{
if(input(pin_a5)==0)
{
set_adc_channel(0); //Lectura peso y altura
delay_us(20);
q = read_adc();
peso = q / 256;
set_adc_channel(1);
delay_us(20);
q = read_adc();
altura = q / 256;
total = peso + altura;
if(total<=0.01) // no hay nada
{
output_low(PIN_B0); // motor side B low
output_low(PIN_B1); // motor side B low
output_low(PIN_B2); // motor side B low
output_low(PIN_B3); // motor side B low
}
if(total>=0.02 && total<=1.25)
{
output_high(PIN_B0); // motor side B high
delay_ms(1000);
output_low(PIN_B1); // motor side B low
delay_ms(1000);
output_low(PIN_B2); // motor side B low
delay_ms(1000);
output_low(PIN_B3); // motor side B low
delay_ms(1000);
}
if(total>=1.26 && total<=2.5)
{
output_low(PIN_B0); // motor side B low
delay_ms(1000);
output_high(PIN_B1); // motor side B high
delay_ms(1000);
output_low(PIN_B2); // motor side B low
delay_ms(1000);
output_low(PIN_B3); // motor side B low
delay_ms(1000);
}
if(total>=2.5 && total<=3.75)
{
output_low(PIN_B0); // motor side B low
delay_ms(1000);
output_low(PIN_B1); // motor side B low
delay_ms(1000);
output_high(PIN_B2); // motor side B high
delay_ms(1000);
output_low(PIN_B3); // motor side B low
delay_ms(1000);
}
if(total>=3.75 && total<=5)
{
output_low(PIN_B0); // motor side B low
delay_ms(1000);
output_low(PIN_B1); // motor side B low
delay_ms(1000);
output_low(PIN_B2); // motor side B low
delay_ms(1000);
output_high(PIN_B3); // motor side B high
delay_ms(1000);
}
}
break;
{
while (input(pin_a6)==0) //si RA6 es 0 inicia la secuencia
{
set_adc_channel(0); //Lectura peso y altura
delay_us(20);
q = read_adc();
peso = q / 256;
set_adc_channel(1);
delay_us(20);
q = read_adc();
altura = q / 256;
total = peso + altura;
if(total<=0.01) // no hay nada
{
output_low(PIN_B4); // motor side B low
output_low(PIN_B5); // motor side B low
output_low(PIN_B6); // motor side B low
output_low(PIN_B7); // motor side B low
}
if(total>=0.02 && total<=1.25)
{
output_high(PIN_B4); // motor side B high
delay_ms(1000);
output_low(PIN_B5); // motor side B low
delay_ms(1000);
output_low(PIN_B6); // motor side B low
delay_ms(1000);
output_low(PIN_B7); // motor side B low
delay_ms(1000);
}
if(total>=1.26 && total<=2.5)
{
output_low(PIN_B4); // motor side B low
delay_ms(1000);
output_high(PIN_B5); // motor side B high
delay_ms(1000);
output_low(PIN_B6); // motor side B low
delay_ms(1000);
output_low(PIN_B7); // motor side B low
delay_ms(1000);
}
if(total>=2.5 && total<=3.75)
{
output_low(PIN_B4); // motor side B low
delay_ms(1000);
output_low(PIN_B5); // motor side B low
delay_ms(1000);
output_high(PIN_B6); // motor side B high
delay_ms(1000);
output_low(PIN_B7); // motor side B low
delay_ms(1000);
}
if(total>=3.75 && total<=5)
{
output_low(PIN_B4); // motor side B low
delay_ms(1000);
output_low(PIN_B5); // motor side B low
delay_ms(1000);
output_low(PIN_B6); // motor side B low
delay_ms(1000);
output_high(PIN_B7); // motor side B high
delay_ms(1000);
}
else
if(input(pin_a7)==0)
output_high(LED);
}
}
}
}