/***********************************************************************
sabe diferenciar mas o menos las marcas de direccion pero hay situaciones como la T que no sabe ni lo que tiene que hacer PIN_B6 eten 2 a 0 en ON a 1 en OFF PIN_B7 eten 1 a 0 en ON a 1 en OFF PIN_A5 Enable MD martxa/paro PIN_C0 Enable MI martxa/paro PIN_C1 PWM2 para el motor IZDA PIN_C2 PWM1 para el motor DCHA PIN_C7 MI zentzua kontrolatzeko 0 aurrera, 1 atzera PIN_C6 MD zentzua kontrolatzeko 0 aurrera, 1 atzera *********************************************************************/
#include <16f876A.h>
#use delay(clock=20000000)
#fuses NOPROTECT,NOWDT,HS,NOPUT,NOPROTECT,BROWNOUT
#fuses NOCPD,NOWRT,NODEBUG
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#define vau1 40
#define vau2 50
#define vau3 60
#define vau4 70
#define vau5 80
#define vau6 90
#define vau7 100
#define vau8 110
#define vau9 120
#define vat1 85
#define vat2 75
#define vat3 65
#define vat4 55
#define vat5 45
#define vat6 35
#define vat7 25
#define vat8 15
#define vat9 05
#define S1 input(PIN_B0)
#define S2 input(PIN_B1)
#define S3 input(PIN_B2)
#define S4 input(PIN_B3)
#define S5 input(PIN_B4)
#define S6 input(PIN_B5)
#define S7 input(PIN_B6)
#define S8 input(PIN_B7)
#define MD_ON output_high(PIN_C0) //Motorra I martxan
#define MD_OFF output_low(PIN_C0) //Motorra I geldirik
#define MI_ON output_high(PIN_A5) //Motorra D martxan
#define MI_OFF output_low(PIN_A5) //Motorra D geldirik
#define MI_AUR output_low(PIN_C7) //Motorra ezkerra aurrera
#define MI_ATZ output_high(PIN_C7) //Motorra ezkerra atzera
#define MD_AUR output_low(PIN_C6) //Motorra eskubia aurrera
#define MD_ATZ output_high(PIN_C6) //Motorra eskubia atzera
#define N 1
#define B 0
int8 duty;
/*******************************************************************
Aurrera
*********************************************************************/
void aurrera(void)
{
MI_AUR; set_pwm2_duty(duty);
MD_AUR; set_pwm1_duty(duty);
}
/*******************************************************************
giro Ezkerrera (suave)
********************************************************************/
void gir_ezk(void)
{
MD_AUR; set_pwm1_duty(vau7);
MI_AUR; set_pwm2_duty(0); // MI paro rapido (0,0)
}
/*******************************************************************
giro Eskubira (suave)
*********************************************************************/
void gir_esk(void)
{
MI_AUR; set_pwm2_duty(vau7);
MD_AUR; set_pwm1_duty(0); // MD paro rapido (0,0)
}
/*******************************************************************
Errotazio Ezkerrera (brusco)
********************************************************************/
void rot_ezk(void)
{
MD_AUR; MI_ATZ;
set_pwm1_duty(vau9);
set_pwm2_duty(vat7);
}
/*******************************************************************
Errotazioa Eskubira (brusco)
*********************************************************************/
void rot_esk(void)
{
MD_ATZ; MI_AUR;
set_pwm1_duty(vat7);
set_pwm2_duty(vau9);
}
/*******************************************************************
Paroa
*********************************************************************/
void paro(void)
{
MD_AUR; set_pwm1_duty(0); // MD paro rapido (0,0)
MI_AUR; set_pwm2_duty(0); // MI paro rapido (0,0)
}
/*******************************************************************
Eskubira
*********************************************************************/
void main()
{
int1 ezes=0; //hasi eskubitik
// int1 s0,s1,s2,s3,s4,s5,s6,s7,s8,s9;
setup_adc_ports(NO_ANALOGS);
setup_timer_2(T2_DIV_BY_16,124,1);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
set_tris_a(0b00011111); //A5 irteera
set_tris_b(0XFF);
set_tris_c(0);
MD_ON;
MI_ON;
paro();
switch(input_a()&0b00000011)
{
case 0x00 : duty= 40;
break;
case 0x01 : duty= 65;
break;
case 0x02 : duty= 80;
break;
case 0x03 : duty= 120;
break;
}
while(ezes==0) //dena eskubitik
{
if((S1==N)&&(S2==N)&&(S4==B))
{
aurrera();
}
else if((S1==N)&&(S2==B)&&(S4==B)) //rectifica a la izq
{
gir_ezk();
}
else if((S1==B)&&(S2==N)&&(S4==B)) //rectifica a a dcha
{
gir_esk();
}
}
}//main bukaera
Oso ondo geratu da Maider. Zorionak
ResponderEliminarMila esker zure laguntzagatik Ion! ^.^
ResponderEliminar