Beginners: please read this post and this post before posting to the forum.
0 Members and 1 Guest are viewing this topic.
for (i=0;i<100;i++){ PORTC.0=1; delay_us(1500); PORTC.0=0; delay_us(18000);}
for (i=0;i<100;i++){ PORTC.0=1; delay_us(1500); PORTC.0=0; delay_us(500); PORTC.1=1; delay_us(1500); PORTC.1=0; delay_us(500); PORTC.2=1; delay_us(1500); PORTC.2=0; delay_us(500); PORTC.3=1; delay_us(1500); PORTC.3=0; delay_us(500); delay_us(12000);}
I submit this suggestion:Code: [Select]for (i=0;i<100;i++){ PORTC.0=1; delay_us(1500); PORTC.0=0; delay_us(500); PORTC.1=1; delay_us(1500); PORTC.1=0; delay_us(500); PORTC.2=1; delay_us(1500); PORTC.2=0; delay_us(500); PORTC.3=1; delay_us(1500); PORTC.3=0; delay_us(500); delay_us(12000);}Will that work? Or do you have reason sequential commands will not work?
For admin, How much your axon?? and what method of payment? then, can you send it to indonesia?
/*****************************************************This program was produced by theCodeWizardAVR V2.03.4 StandardAutomatic Program Generator© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.http://www.hpinfotech.comProject : Version : Date : 7/16/2009Author : Company : Comments: Chip type : ATmega8535LProgram type : ApplicationClock frequency : 11.059200 MHzMemory model : SmallExternal RAM size : 0Data Stack size : 128*****************************************************/#include <mega8535.h>#include <delay.h>unsigned int i;void maju(){ //Maju PORTD=0b01101100; //delay_ms(3000); }void mundur(){ //Mundur PORTD=0b01110010; //delay_ms(3000);}void bkiri(){ //belok kiri //PORTD=0b01101010; <=asli PORTD=0b01101000; //delay_ms(3000);}void bkanan(){ //belok kanan //PORTD=0b01110100; <== asli PORTD=0b01100100; //delay_ms(3000); }void xkiri(){ //belok kiri PORTD=0b01101010; //PORTD=0b01101000; //delay_ms(3000);}void xkanan(){ //belok kanan PORTD=0b01110100; //PORTD=0b01100100; //delay_ms(3000); }void gerak(){ if (PINB==0b00011000 || PINB==0b00001000 || PINB==0b00010000 || PINB==0b00011100 || PINB==0b00111000) {maju();} if (PINB==0b00001100 || PINB==0b00000100 || PINB==0b00000110 || PINB==0b00000010 || PINB==0b00000111) {bkiri();} if (PINB==0b00110000 || PINB==0b00100000 || PINB==0b01100000 || PINB==0b01000000 || PINB==0b11100000) {bkanan();} if (PINB==0b00000011 || PINB==0b00000001 || PINB==0b00000101 || PINB==0b00001111 || PINB==0b00011111) {xkiri();} if (PINB==0b11000000 || PINB==0b10000000 || PINB==0b10100000 || PINB==0b11110000 || PINB==0b11111000) {xkanan();} if (PINB==0b00000000) {mundur();}}//servo1void s1_atas() { for(i=0;i<40;i++) { //0 derajat PORTC.0=1; gerak(); delay_us(600); PORTC.0=0; gerak(); delay_us(18900); gerak(); } //delay_ms(1000); }void s1_bawah() { for (i=0;i<40;i++) { //180 derajat PORTC.0=1; gerak(); delay_us(2400); PORTC.0=0; gerak(); delay_us(18100); gerak(); } //delay_ms(1000); } //servo2void s2_depan() { for(i=0;i<700;i++) { //0 derajat PORTC.1=1; gerak(); delay_us(650); PORTC.1=0; gerak(); delay_us(18900); gerak(); } //delay_ms(1000); }void s2_belakang() { for (i=0;i<700;i++) { //180 derajat PORTC.1=1; gerak(); delay_us(2350); PORTC.1=0; gerak(); delay_us(18100); gerak(); } //delay_ms(1000); }void s2_atas() { for (i=0;i<30;i++) { //180 derajat PORTC.1=1; gerak(); delay_us(1500); PORTC.1=0; gerak(); delay_us(18100); gerak(); } //delay_ms(1000); } //servo3void balik_ki3() { for(i=0;i<40;i++) { //0 derajat PORTC.2=1; gerak(); delay_us(600); PORTC.2=0; gerak(); delay_us(18900); gerak(); } //delay_ms(1000); }void balik_ka3() { for (i=0;i<30;i++) { //180 derajat PORTC.2=1; gerak(); delay_us(2400); PORTC.2=0; gerak(); delay_us(18100); gerak(); } //delay_ms(1000); }void balik_dpn3() { for (i=0;i<30;i++) { //90 derajat PORTC.2=1; gerak(); delay_us(1500); PORTC.2=0; gerak(); delay_us(18500); gerak(); } //delay_ms(1000); }// Declare your global variables here // Place your code here //belakang(); //depan();void servox(){ balik_dpn3(); s1_atas(); s2_atas(); s2_depan(); s2_atas(); s1_bawah(); s2_belakang(); s2_atas(); balik_ka3(); s2_belakang(); s2_atas(); balik_ki3(); s2_belakang(); s2_atas();} void main(void){// Declare your local variables here// Input/Output Ports initialization// Port A initialization// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00;DDRA=0x00;// Port B initialization// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00;DDRB=0x00;// Port C initialization// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00;DDRC=0x00;// Port D initialization// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTD=0x00;DDRD=0xFF;// Timer/Counter 0 initialization// Clock source: System Clock// Clock value: Timer 0 Stopped// Mode: Normal top=FFh// OC0 output: DisconnectedTCCR0=0x00;TCNT0=0x00;OCR0=0x00;// Timer/Counter 1 initialization// Clock source: System Clock// Clock value: Timer 1 Stopped// Mode: Normal top=FFFFh// OC1A output: Discon.// OC1B output: Discon.// Noise Canceler: Off// Input Capture on Falling Edge// Timer 1 Overflow Interrupt: Off// Input Capture Interrupt: Off// Compare A Match Interrupt: Off// Compare B Match Interrupt: OffTCCR1A=0x00;TCCR1B=0x00;TCNT1H=0x00;TCNT1L=0x00;ICR1H=0x00;ICR1L=0x00;OCR1AH=0x00;OCR1AL=0x00;OCR1BH=0x00;OCR1BL=0x00;// Timer/Counter 2 initialization// Clock source: System Clock// Clock value: Timer 2 Stopped// Mode: Normal top=FFh// OC2 output: DisconnectedASSR=0x00;TCCR2=0x00;TCNT2=0x00;OCR2=0x00;// External Interrupt(s) initialization// INT0: Off// INT1: Off// INT2: OffMCUCR=0x00;MCUCSR=0x00;// Timer(s)/Counter(s) Interrupt(s) initializationTIMSK=0x00;// Analog Comparator initialization// Analog Comparator: Off// Analog Comparator Input Capture by Timer/Counter 1: OffACSR=0x80;SFIOR=0x00;while (1) { // Place your code here //gerak(); servox(); }}
void drive_motors(x1,x2,x3,x4,x5,i){for (x=0;x<i ;x++) i is num of minimum required pulses to reach final destination for each new move){ reset TIMER0;fire TIMER0;While (TIMER0 =< 20000) { IF (TIMER0 = X1){PORT1.1=0;} IF (TIMER0 = X2){PORT1.2=0;} IF (TIMER0 = X3){PORT1.3=0;} IF (TIMER0 = X4){PORT1.4=0;} IF (TIMER0 = X5){PORT1.5=0;} } }} << function ends
firstival the code posted by Gearmotion might work but its totally inefficient, it obliges too many delay number calclulations and it will be totally annoying if you want to move your servos stack smoothly (meaning: little delays between changing high pulse times)
I'm not denigrating your approach.