|
|
View previous topic :: View next topic |
Author |
Message |
EimYeu
Joined: 21 Nov 2024 Posts: 1
|
DC motor control with PIC18F4431 and L293D |
Posted: Thu Nov 21, 2024 4:56 am |
|
|
I am trying to control a DC motor using the PIC18F4431 microcontroller and the L293D motor driver. The CCP1 and CCP2 pins don’t work at all. Can somebody tell me why the code doesn’t work? Thank you.
Code: | #include <18F4431.h>
#device ADC = 10
#fuses NOMCLR INTRC_IO
#use delay(clock = 8000000)
#use fast_io(B)
#use fast_io(C)
unsigned int16 i;
void main() {
setup_oscillator(OSC_8MHZ);
output_b(0);
set_tris_b(7);
output_c(0);
set_tris_c(0);
output_d(0);
set_tris_d(0);
setup_adc(ADC_CLOCK_DIV_8);
setup_adc_ports(sAN0);
set_adc_channel(0);
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256);
set_rtcc(0);
delay_ms(100);
while(TRUE) {
i = read_adc();
if(input(PIN_B3) == 1)
set_pwm1_duty(i);
if(input(PIN_B4) == 1)
set_pwm2_duty(i);
delay_ms(10);
if(input(PIN_B0) == 0) {
if(input(PIN_B3) == 0) {
output_b(0);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
output_c(0);
delay_ms(100);
setup_ccp1(CCP_PWM);
output_high(PIN_B3);
}
}
if(input(PIN_B1) == 0) {
if(input(PIN_B4) == 0) {
output_b(0);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
output_c(0);
delay_ms(100);
setup_ccp2(CCP_PWM);
output_high(PIN_B4);
}
}
if(input(PIN_B2) == 0) {
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
output_c(0);
output_b(0);
}
}
}
|
|
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9225 Location: Greensville,Ontario
|
|
Posted: Thu Nov 21, 2024 7:07 am |
|
|
general comments...
1st, post compiler version. There may be a 'bug' in it.....
2nd, put comments at end of each line of code. While YOU know what's supposed to happen, others don't. 3 months, heck 3 days from now YOU might forget why you wrote a line of code.BTDT
3rd, break the program down into smaller sections. Overall your program does 'something' based upon condition of switches and ADC input. CONFIRM that these actually work as expected, THEN build from there.
4th, CONFIRM the hardware IS connected as you've coded ! Maybe you've swapped pins. Easy to do,IE: 10 and 11 instead of 9 and 10. Motor doesn't turn as no connection ??
5th, well should be done 1st.... code/compile/run a simple '1Hz LED' program to CONFIRM the PIC actually is connected and runs properly !.
6th, When editting the program, copy the old source,save as prg002, edit,test, then repeat the steps so you'll have pgm1,pgm2,pgm3,.....pgm66....
While this does take up harddrive space, it does allow you to 'go back' to a previous version,in effect 'erase' whatever NEW code that didn't work as expected.
hopefully someone will look and see what may be wrong with the code( if anything....) |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19504
|
|
Posted: Fri Nov 22, 2024 3:05 am |
|
|
How are you pulling pins B3 and B4 down?. If you use a button or switch for
this, the chip will short out and reset. You detect a low on these pins, and then
setup the PWM, and turn the pin on. If it is connected to ground, this
will have the PIC trying to pull high a pin that is held low. Result the PIC
will almost certainly reset.
The big problem though is you are not setting up the timer for the PWM.
The PWM uses timer2. This is not running, so there will be no PWM output. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|