Sie sind auf Seite 1von 8

ESCUELA MILITAR DE INGENIERA MCAL.

ANTONIO JOSE DE SUCRE BOLIVIA

EXAMEN 2do PARCIAL

INGENIERIA DE SISTEMAS ELECTRONICOS SISTEMAS DE MICROPROCESADORES


ALUMNOS: A9607-5 A9533-8 PARALELO: APAZA BUTRON DIEGO PALERMO INCA NINA MARCO VLADIMIR

7mo Semestre

FECHA:

23 / 05 / 2012

LA PAZ - BOLIVIA

ROBOT SENSOR PING


OBJETIVO Graficar nuestro entorno atravez del sensor ultrasonido PING , que se visualiza en el LCD grafico OBJETIVO DE LA PRUBA 1. Programamos un algoritmo para visualizar si el sensor mide distancia tomando en cuenta la hoja de datos del PING)). El algoritmo lo hicimos de dos maneras una , con un contador de 16bits, y otra utilizando el Timer. 2. Utilizamos PWM para el movimiento del servomotor. 3. Visualizamos pixel por pixel el entorno. PROGRAMAS Inicio Configurando PD5 como salida Poner el pin en estado alto =1

Un pulso de duracin de 5us (segn al hoja de datos)

Poner en estado bajo PD5 PD5 como entrada

PD5==0 Se mantiene hasta que el sensor responda

Comienza el Timer , o contador de 16 bits

Espera mientras esta en Uno PIND==1

Ts=Obtener el dato del Timer o del contador *velocidad del contadpr Deshabilita el timer usado anteriormente

Obtener el dato de la distancia en funcin del tiempo obtenido Dist=ts*100*340/2 [cm]

Modulacion porancho de pulso PWM Para el funcionamiento del motor

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

x,t Grafica del entorno

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() {

uint8_t i; for(i=0;i<50;i++) { _delay_loop_2(0); } }*/

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 .

Das könnte Ihnen auch gefallen