bueno lo que pretendo es usar 2 motores por lo que uso un l293
utilice el pic wizard y me genero este archivo:
#include <16F886.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES EC_IO //External clock
#FUSES NOPUT //No Power Up Timer
#FUSES MCLR //Master Clear pin enabled
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES NOBROWNOUT //No brownout reset
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOWRT //Program memory not write protected
#FUSES BORV40 //Brownout reset at 4.0V
#FUSES HS
#use delay(clock=20000000)
#define C0 PIN_C0
#define ENMA PIN_C1
#define ENMB PIN_C2
#define MB3 PIN_C4
#define MA2 PIN_C5
#define MA1 PIN_C6
#define MB4 PIN_C7
y el programa que yo hice es este
void adelante(unsigned long i);
void atras(unsigned long i);
void derecha(unsigned long i);
void izquierda(unsigned long i);
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
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);// This device COMP currently not supported by the PICWizard
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
// TODO: USER CODE!!
while(1)
{
output_low(ENMA);
output_low(ENMB);
if(input(C0) == 1)
{
adelante(2000);
atras(2000);
derecha(2000);
izquierda(2000);
}
}
}
void adelante(unsigned long i)
{
output_low(MA2); //adelante
output_high(MA1);
output_high(MB3);
output_low(MB4);
output_high(ENMA);
output_high(ENMB);
delay_ms(i);
output_low(ENMA);
output_low(ENMB);
delay_ms(350);
return;
}
void atras(unsigned long i)
{
output_high(MA2); //atras
output_low(MA1);
output_low(MB3);
output_high(MB4);
output_high(ENMA);
output_high(ENMB);
delay_ms(i);
output_low(ENMA);
output_low(ENMB);
delay_ms(350);
return;
}
void derecha(unsigned long i)
{
output_high(MA2); //derecha
output_low(MA1);
output_high(MB3);
output_low(MB4);
output_high(ENMA);
output_high(ENMB);
delay_ms(i);
output_low(ENMA);
output_low(ENMB);
delay_ms(350);
return;
}
void izquierda(unsigned long i)
{
output_low(MA2); //izquierda
output_high(MA1);
output_low(MB3);
output_high(MB4);
output_high(ENMA);
output_high(ENMB);
delay_ms(i);
output_low(ENMA);
output_low(ENMB);
delay_ms(350);
return;
}
el problema que hace es que un motor en una direccion nunca se mueve y al rastrear el problema, encontre
que el pin Rc5 siempre esta en bajo(esto solo al alimentar el PIC, por lo que creo que es mas que suficiente para descartar
el integrado como tal)