We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I have to measure distance between an object by ARM1176JZF-S(DS- 5 TOOLS) using ultrasonic sensor. I am not being able to write the codes. I have connected the ultrasonic sensor in the GPIO pins PL061 peripheral bock (j39). Please help me write the codes.
Header file and sample program of ultrasonic distance measuring sensor for mbed is given in HCSR04 - a mercurial repository | mbed and another of ATMega 16 http://www.robokits.co.in/documentation/Ultrasonic%20distance%20sensor.pdf
( #include "hcsr04.h" HCSR04::HCSR04(PinName TrigPin,PinName EchoPin): trigger(TrigPin), echo(EchoPin) { pulsetime.stop(); pulsetime.reset(); echo.rise(this,&HCSR04::isr_rise); echo.fall(this,&HCSR04::isr_fall); trigger=0; } HCSR04::~HCSR04() { } void HCSR04::isr_rise(void) { pulsetime.start(); } void HCSR04::start(void) { trigger=1; wait_us(10); trigger=0; } void HCSR04::isr_fall(void) { pulsetime.stop(); pulsedur = pulsetime.read_us(); distance= (pulsedur*343)/20000; pulsetime.reset(); } void HCSR04::rise (void (*fptr)(void)) { echo.rise(fptr); } void HCSR04::fall (void (*fptr)(void)) { echo.fall(fptr); } unsigned int HCSR04::get_dist_cm() { return distance; } unsigned int HCSR04::get_pulse_us() { return pulsedur; } Here is a sample code usage ********************************************************* #include "hcsr04.h" HCSR04 usensor(p25,p6); int main() { unsigned char count=0; while(1) { usensor.start(); wait_ms(500); dist=usensor.get_dist_cm(); lcd.cls(); lcd.locate(0,0); lcd.printf("cm:%ld",dist ); count++; lcd.locate(0,1); lcd.printf("Distance =%d",count); } } )
http://www.robokits.co.in/documentation/Ultrasonic%20distance%20sensor.pdf
(
Sample Program for ATMega16Connections:VCC - +5VDCTrig – PA.6 on ATmega16Echo – PA.7 on ATMega16GND – GNDATMega16 running at 16Mhz
char timer0counter; void main() { char buffer[10]; float range; sei(); //Enable global interrupt sbi(DDRA,6); //Set pin as output cbi(DDRA,7); //Set pin as input while(1) { sbi(PORTA,6); //Send Trigger DELAYUS(10); cbi(PORTA,6); //Send trigger http://www.robokits.co.in http://www.robokitsworld.com Page 4 Ultrasonic Distance Measurement Sensor 4M [RKI-1540] timer0counter=0; TCNT0=0; //Clear timer while(bit_is_clear(PINA,7)); //Wait for rising edge sbi(TCCR0,CS02); //Select prescalar 256 sbi(TIMSK,TOIE0); //Enable timer0 overflow interrupt LCD_CLRSCR(); while(bit_is_set(PINA,7) && timer0counter<9) //wait for falling edge of echo { DELAYUS(5); } cbi(TCCR0,CS02); //Stop timer cbi(TIMSK,TOIE0); if(bit_is_set(PINA,7)) { LCD_PRINT("No OBSTACLE"); } else { range=(256*timer0counter+TCNT0)*16*0.017; //range conversion itoa(range,buffer,10); LCD_PRINT(buffer); UART_PRINT(buffer); UART_PRINT("\n\r"); } DELAYMS(100); } } SIGNAL(SIG_OVERFLOW0) { cbi(TIMSK,TOIE0); TCNT0=0; timer0counter++; UART_PUTCHAR(timer0counter); sbi(TIMSK,TOIE0); if(timer0counter>8) { cbi(TCCR0,CS02); cbi(TIMSK,TOIE0}} )
Hi albert,
Try to pick some example projects from the provided code and start with changing few lines of codes and get familiar to it.
The main problem is that I do not have any example project. I tried some experiments, I am not being able to change/modify the GPIO pins.