After a minor slip up with a probe killed my primary R2 bot (shorted VBATT to 5VCC, bye bye processor and drive chips) I've tonight soldered up another of my spare R2 boards to take over the mantle.
And the motor drive code i was debugging at the time works!
[youtube=http://www.youtube.com/watch?v=tNQfu4DB9lU]
Tomorrow, i add a battery monitor circuit and the sensors, so i'll finally have al the major electronic systems tested and good to go ready for the motor mounts.
#define F_CPU 1000000UL
#include avr/io.h>#include util/delay.h>#include avr/interrupt.h>#include "r2.h"
int main(void) {
// Activate all the LEDs, set their pins to output
bit_set(LED_WHITE_L_DDR, LED_WHITE_L_BIT);
bit_set(LED_WHITE_R_DDR, LED_WHITE_R_BIT);
bit_set(LED_RED_L_DDR, LED_RED_L_BIT);
bit_set(LED_RED_R_DDR, LED_RED_R_BIT);
bit_set(LED_YELLOW_FL_DDR, LED_YELLOW_FL_BIT);
bit_set(LED_YELLOW_FR_DDR, LED_YELLOW_FR_BIT);
bit_set(LED_YELLOW_RL_DDR, LED_YELLOW_RL_BIT);
bit_set(LED_YELLOW_RR_DDR, LED_YELLOW_RR_BIT);
// Activate the motor's control lines
bit_set(MOTOR_R_ENABLE_DDR, MOTOR_R_ENABLE_BIT);
bit_set(MOTOR_R_PHASE_DDR, MOTOR_R_PHASE_BIT);
bit_set(MOTOR_L_ENABLE_DDR, MOTOR_L_ENABLE_BIT);
bit_set(MOTOR_L_PHASE_DDR, MOTOR_L_PHASE_BIT);
// turn on the motors
bit_set(MOTOR_R_ENABLE_PORT, MOTOR_R_ENABLE_BIT);
bit_set(MOTOR_R_PHASE_PORT, MOTOR_R_PHASE_BIT);
bit_set(MOTOR_L_ENABLE_PORT, MOTOR_L_ENABLE_BIT);
bit_set(MOTOR_L_PHASE_PORT, MOTOR_L_PHASE_BIT);
// turn on the white and red LEDs
bit_set(LED_WHITE_L_PORT, LED_WHITE_L_BIT);
bit_set(LED_WHITE_R_PORT, LED_WHITE_R_BIT);
bit_set(LED_RED_L_PORT, LED_RED_L_BIT);
bit_set(LED_RED_R_PORT, LED_RED_R_BIT);
// enable internal pullup on PD0
bit_set(PORTD, BIT(0));
// enable external interrupts
EIMSK = BIT(INT0) | BIT(INT1);
// enable global interrupts
sei();
// loop forever
while (1)
{
delayms(500);
}
return 0;
}
// delay for up to 65k milliseconds
void delayms(uint16_t millis)
{
// loop, delaying 1ms each iteration
while ( millis )
{
_delay_ms(1);
millis--;
}
}
// this catches the Interrupt sent from pin INT0
ISR(INT0_vect)
{
//Turn everything off
bit_clear(LED_WHITE_L_PORT, LED_WHITE_L_BIT);
bit_clear(LED_WHITE_R_PORT, LED_WHITE_R_BIT);
bit_clear(LED_RED_L_PORT, LED_RED_L_BIT);
bit_clear(LED_RED_R_PORT, LED_RED_R_BIT);
bit_clear(MOTOR_R_ENABLE_PORT, MOTOR_R_ENABLE_BIT);
bit_clear(MOTOR_R_PHASE_PORT, MOTOR_R_PHASE_BIT);
bit_clear(MOTOR_L_ENABLE_PORT, MOTOR_L_ENABLE_BIT);
bit_clear(MOTOR_L_PHASE_PORT, MOTOR_L_PHASE_BIT);
// loop forever, flashing our indicators.
while(1)
{
bit_flip(LED_YELLOW_FL_PORT, LED_YELLOW_FL_BIT);
bit_flip(LED_YELLOW_FR_PORT, LED_YELLOW_FR_BIT);
bit_flip(LED_YELLOW_RL_PORT, LED_YELLOW_RL_BIT);
bit_flip(LED_YELLOW_RR_PORT, LED_YELLOW_RR_BIT);
delayms(500);
}
}

0 Responses to R2 Project Log - Motors
Leave a Reply