Beginners: please read this post and this post before posting to the forum.
0 Members and 1 Guest are viewing this topic.
while(1) { // Servo Test Code i=250; //Drive Fwd while(i>0) { PORT_ON(PORTD, 0); //Left Servo Forward delay_cycles(25); PORT_OFF(PORTD, 0); delay_cycles(200); PORT_ON(PORTD, 1); //Right Servo Forward delay_cycles(44); PORT_OFF(PORTD, 1); delay_cycles(200); i--; } delay_cycles(500); i=250; //Drive Right while(i>0) { PORT_ON(PORTD, 0); //Left Servo Forward delay_cycles(25); PORT_OFF(PORTD, 0); delay_cycles(200); PORT_ON(PORTD, 1); //Right Servo Back delay_cycles(25); PORT_OFF(PORTD, 1); delay_cycles(200); i--; } delay_cycles(500); } return 0; }
void servo_left(signed long int speed) { PORT_ON(PORTD, 2); delay_cycles(speed); PORT_OFF(PORTD, 2);//keep off delay_cycles(1600); // 200 * 8 }void servo_right(signed long int speed) { PORT_ON(PORTD, 3); delay_cycles(speed); PORT_OFF(PORTD, 3);//keep off delay_cycles(1600); // 200 * 8 }void robot_turn_left(void) { servo_left(200); // 25 * 8 servo_right(200); // 25 * 8 }void robot_turn_right(void) { servo_left(352); // 44 * 8 servo_right(352); // 44 * 8 }void robot_go_straight(void) { servo_left(200); // 25 * 8 servo_right(352); // 44 * 8 }void hold_position(void)//37 { servo_left(312);//39 * 8 servo_right(280);//35 * 8 }
void robot_go_straight(void) { servo_left(200); // 25 * 8 servo_right(352); // 44 * 8 }
void servo_left(signed long int speed) { PORT_ON(PORTD, 2); delay_cycles(speed); PORT_OFF(PORTD, 2);//keep off delay_cycles(200); }void servo_right(signed long int speed) { PORT_ON(PORTD, 3); delay_cycles(speed); PORT_OFF(PORTD, 3);//keep off delay_cycles(200); }void robot_turn_left(void) { servo_left(25); servo_right(25); }void robot_turn_right(void) { servo_left(44); servo_right(44); }void robot_go_straight(void) { servo_left(25); servo_right(44); }void hold_position(void) { servo_left(39); servo_right(35); }while(1) {robot_go_straight();return 0;} // end while loop
//AVR includes#include <avr/io.h> // include I/O definitions (port names, pin names, etc)#include <avr/interrupt.h> // include interrupt support//AVRlib includes#include "global.h" // include global settings#include "buffer.h" // include buffer function library#include "rprintf.h" // include printf function library//#include "timer.h" // include timer function library (timing, PWM, etc)#include "a2d.h" // include A/D converter function library//define port functions; example: PORT_ON( PORTD, 6);#define PORT_ON( port_letter, number ) port_letter |= (1<<number)#define PORT_OFF( port_letter, number ) port_letter &= ~(1<<number)#define PORT_ALL_ON( port_letter, number ) port_letter |= (number)#define PORT_ALL_OFF( port_letter, number ) port_letter &= ~(number)#define FLIP_PORT( port_letter, number ) port_letter ^= (1<<number)#define PORT_IS_ON( port_letter, number ) ( port_letter & (1<<number) )#define PORT_IS_OFF( port_letter, number ) !( port_letter & (1<<number) )//************CONFIGURE PORTS************//configure ports for input or output - specific to ATmega8void configure_ports(void) { DDRC = 0x00; //configure all C ports for input PORTC = 0x00; //make sure pull-up resistors are turned off DDRD = 0xFF; //configure all D ports for output }//***************************************//************DELAY FUNCTIONS************//wait for X amount of cycles (23 cycles is about .992 milliseconds)//to calculate: 23/.992*(time in milliseconds) = number of cycles//or (number of cycles)*.992/23 = time in millisecondsvoid delay_cycles(unsigned long int cycles) { while(cycles > 0) cycles--; }//***************************************//*********SIMPLIFIED FUNCTIONS**********//functions to make coding easier for a beginner//but could cause port mixup confusion for intermediate usersvoid servo_left(signed long int speed) { PORT_ON(PORTD, 2); delay_cycles(speed); PORT_OFF(PORTD, 2);//keep off delay_cycles(200); }void servo_right(signed long int speed) { PORT_ON(PORTD, 3); delay_cycles(speed); PORT_OFF(PORTD, 3);//keep off delay_cycles(200); }void robot_turn_left(void) { servo_left(25); servo_right(25); }void robot_turn_right(void) { servo_left(44); servo_right(44); }void robot_go_straight(void) { servo_left(25); servo_right(44); }void hold_position(void) { servo_left(39); servo_right(35); }//***************************************//*************INITIALIZATIONS***********void initialize(void) { configure_ports(); // configure which ports are analog, digital, etc. a2dInit(); // initialize analog to digital converter (ADC) a2dSetPrescaler(ADC_PRESCALE_DIV32); // configure ADC scaling a2dSetReference(ADC_REFERENCE_AVCC); // configure ADC reference voltage }int main(void) { initialize(); delay_cycles(42000);//two second wait delay while(1) { robot_go_straight(); delay_cycles(400); //a small delay to prevent crazy oscillations } // end while loop return 0; } // end main