sv_shady
Joined: 07 Mar 2008 Posts: 28
|
PIC18F2520 and PWM problem |
Posted: Sat May 17, 2008 3:16 pm |
|
|
This is my source code:
Code: | #include <18F2520.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES H4 //High speed osc with HW enabled 4X PLL
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES BORV27 //Brownout reset at 2.7V
#FUSES PUT //Power Up Timer
#FUSES NOCPD //No EE protection
#FUSES STVREN //Stack full/underflow will cause reset
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT //Program memory not write protected
#FUSES NOWRTD //Data EEPROM not write protected
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES NOPBADEN //PORTB pins are configured as digital I/O on RESET
#FUSES NOWRTC //configuration not registers write protected
#FUSES NOWRTB //Boot block not write protected
#FUSES NOEBTR //Memory not protected from table reads
#FUSES NOEBTRB //Boot block not protected from table reads
#FUSES NOCPB //No Boot Block code protection
#FUSES NOLPT1OSC //Timer1 configured for higher power operation
#FUSES MCLR //Master Clear pin enabled
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#use delay(clock=40000000)
#define I2C_SCL PIN_C3
#define I2C_SDA PIN_C4
#use i2c(Slave,Fast,sda=PIN_C4,scl=PIN_C3,force_hw,address=0x10)
#define HR1 PIN_A0
#define HL1 PIN_A1
#define LR1 PIN_A2
#define LL1 PIN_A3
#define HR2 PIN_B2
#define HL2 PIN_B3
#define LR2 PIN_B4
#define LL2 PIN_B5
#define BCKWRD 0
#define STOP 1
#define FRWRD 2
#define LEFT 3
#define RIGHT 4
struct Motor
{
signed int16 line;
signed int16 turn;
signed int16 error;
signed int16 pwm;
int status;
unsigned int32 pos;
};
void Init_Motors(void);
void Motor_Control(int direct, int16 speed, int m);
int value_X = 140, value_Y = 140;
struct Motor M1;
struct Motor M2;
#int_EXT1
void EXT1_isr(void)
{
M1.pos++;;
}
#int_EXT2
void EXT2_isr(void)
{
M2.pos++;
}
#int_SSP
void SSP_isr(void)
{
;;
}
void Init_Motors(void)
{
output_bit(HR1, 0);
output_bit(HL1, 0);
output_bit(LL1, 1);
output_bit(LR1, 1);
M1.line = 0;
M1.turn = 0;
M1.error = 0;
M1.pwm = 0;
M1.status = STOP;
M1.pos = 0;
output_bit(HR2, 0);
output_bit(HL2, 0);
output_bit(LL2, 1);
output_bit(LR2, 1);
M2.line = 0;
M2.turn = 0;
M2.error = 0;
M2.pwm = 0;
M2.status = STOP;
M2.pos = 0;
}
void Motor_Control(int direct, int16 speed, int m)
{
switch(m)
{
case 1:
M1.line = speed;
M1.pwm = M1.line + M1.turn + M1.error;
if(M1.pwm == 0) direct = STOP;
set_pwm2_duty(M1.pwm);
switch(direct)
{
case BCKWRD:
output_bit(HR1, 0);
output_bit(LL1, 0);
output_bit(HL1, 1);
output_bit(LR1, 1);
M1.status = BCKWRD;
break;
case FRWRD:
output_bit(HL1, 0);
output_bit(LR1, 0);
output_bit(HR1, 1);
output_bit(LL1, 1);
M1.status = FRWRD;
break;
case STOP:
output_bit(HR1, 0);
output_bit(HL1, 0);
output_bit(LL1, 1);
output_bit(LR1, 1);
M1.status = STOP;
break;
}
break;
case 2:
M2.line = speed;
M2.pwm = M2.line + M2.turn + M2.error;
if(M2.pwm == 0) direct = STOP;
set_pwm1_duty(M2.pwm);
switch(direct)
{
case BCKWRD:
output_bit(HR2, 0);
output_bit(LL2, 0);
output_bit(HL2, 1);
output_bit(LR2, 1);
M2.status = BCKWRD;
break;
case FRWRD:
output_bit(HL2, 0);
output_bit(LR2, 0);
output_bit(HR2, 1);
output_bit(LL2, 1);
M2.status = FRWRD;
break;
case STOP:
output_bit(HR2, 0);
output_bit(HL2, 0);
output_bit(LL2, 1);
output_bit(LR2, 1);
M2.status = STOP;
break;
}
break;
}
}
void Init()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF|ADC_TAD_MUL_0);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_16,124,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
set_pwm1_duty(512);
set_pwm2_duty(512);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
// enable_interrupts(INT_EXT1);
// enable_interrupts(INT_EXT2);
// enable_interrupts(INT_SSP);
enable_interrupts(GLOBAL);
}
void main()
{
Init();
Init_Motors();
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
set_pwm1_duty(200);
set_pwm2_duty(200);
for(;;)
delay_ms(100);
} |
I don't see any error anywhere but it just won't generate any freaquency on PIN_C1 and PIN_C2.... any ideas ?
Thanks in advance |
|