Documentos de Académico
Documentos de Profesional
Documentos de Cultura
7mo Semestre
FECHA:
23 / 05 / 2012
LA PAZ - BOLIVIA
Ts=Obtener el dato del Timer o del contador *velocidad del contadpr Deshabilita el timer usado anteriormente
int t; //timerInit(); //Configure TIMER1 TCCR1A|=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11); //NON Inverted PWM TCCR1B|=(1<<WGM13)|(1<<WGM12)|(1<<CS11)|(1<<CS10); //PRESCALER=64 MODE 14(FAST PWM) ICR1=4999; //fPWM=50Hz (Period = 20ms Standard).
t=170;t<=389;t=t+5
Muestra el porcentaje de recporrieno del motor siento la var x El angulo de recorrido sea var t
El pixel estara en funcion de los siguientes parametros, t(angulo del servo ), distancia,
CODIGO /* includes */ #include <avr/io.h> #include <inttypes.h> #include <avr/pgmspace.h> #include "global.h" #include "uart.h" #include "rprintf.h" #include "a2d.h" #include "timer.h" PWM, etc) #include "t6963c.h" #include "menu_inicio.h" #include "menu1.h" #include "rostrobien.h" #include <avr/io.h> (nombres : port, pin , etc) #include <avr/signal.h> interrupcion) #include <avr/interrupt.h> #include "global.h" globales #include <avr/delay.h> u16 as=1; uint8_t x,xx, y, r;//,ccad; //void wait(void); void oscope(void); void rprintfFloatG(char numDigits, double x); void delay_us(unsigned short time_us) ; double p; u16 cont; float tiempous=0; float mostar,dist; u08 oldbuffer[128]; u08 newbuffer[128]; 4
// access to controller I/O // integer types // access to program memory // include uart function library // include printf function library // include A/D converter function library // include timer function library (timing, // definitions and prototypes
// include I/O definiciones // include nombres "signal" (nombres // include soporte para interrupciones // include configuraciones
int main (void) { /*****LCD**********/ lcd_initialise(); lcd_clear_graphics(); lcd_clear_text(); lcd_write_command(LCD_DISPLAY_MODES_GRAPHICS_ON | LCD_DISPLAY_MODES_TEXT_ON); rprintfInit(lcd_write_char);
lcd_gotoxy(2,6);rprintf("Robot PING"); cont=0; //SERVO ********** //int t; //timerInit(); /* //Configure TIMER1 TCCR1A|=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11); //NON Inverted PWM TCCR1B|=(1<<WGM13)|(1<<WGM12)|(1<<CS11)|(1<<CS10); //PRESCALER=64 MODE 14(FAST PWM) ICR1=4999; //fPWM=50Hz (Period = 20ms Standard). DDRD|=(1<<PD4)|(1<<PD5); //PWM Pins as Out sbi(PORTD,4); sbi(PORTD,5);*/ while(1) { sbi(DDRD,0); _delay_us(2); DDRC=0xFF; //PORTC: Salida // SALIDA PD0 cbi(PORTD,0); //PD0=0 // espera 2Us sbi(PORTD,0); //PD0=1 _delay_us(5); //ESPERA DE 5us
cbi(PORTD,0); // PD0=0 /******FIN DEL PULSO******/ cbi(DDRD,0); //ENTRADA PD0 sbi(PORTD,0); //PULL UPS ACTIVADOS //_delay_us(10); while((PIND & _BV(0))==0){} if(cont<65536) { cont++;
_delay_ms(1); } while((PIND & _BV(0))==1) {} mostar=cont; lcd_gotoxy(2,4); rprintfFloatG(4,mostar); //_delay_ms(1); dist=mostar*0.001*345/2; lcd_gotoxy(1,1);rprintfFloatG(1,dist); //DrawLine(60,32,dist,32,1); if(){} lcd_set_pixel(mostar, dist); //delay_us(500); if(dist>15){sbi(PORTC,0);} else{cbi(PORTC,0);} _delay_us(200); }
/* while (3) { {
for (t=170;t<=389;t=t+5)
x=100*(t-170)/219; lcd_gotoxy(2,4); rprintfFloatG(4,x); OCR1A=t; //180 degree wait(); } }*/ } //-----------------subrutinas---------------------void oscope(void) { u08 i=0; for(i=0; i<128; i++) { oldbuffer[i] = newbuffer[i]; // for(i=0; i<128; i++) newbuffer[i] = a2dConvert8bit(0); //for(i=0; i<128; i++) lcd_set_pixel(i,newbuffer[i]>>2); } 6
//{ lcd_clear_pixel(i,oldbuffer[i]>>2); }
void rprintfFloatG(char numDigits,double x) { unsigned char firstplace = FALSE; unsigned char negative; unsigned char i, digit; double place = 1.0; // save sign negative = (x<0); // convert to absolute value x = (x>0)?(x):(-x); // find starting digit place for(i=0; i<15; i++) { if((x/place) < 10.0) break; else place =place*10.0; } // print polarity character if(negative) rprintfChar('-'); else rprintfChar('+'); // print digits for(i=0; i<numDigits; i++) { digit =(int)(x/place); if(digit | firstplace | (place == 1.0)) { firstplace = TRUE; rprintfChar(digit+0x30); } else rprintfChar(' '); if(place == 1.0) { rprintfChar('.'); } x=x-digit*place; place =place/10.0; } } /* void wait() {
CONCLUSIONES Concluimos que para tener algo mas preciso del funcionamiento del sensor PING)) es necesario saber el funcionamiento del Timer , asi tambin es posible con el Flanco de subida y de bajada .