Distance measurement by ARM1176JZF-S(DS- 5 TOOLS) using ultrasonic sensor

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 ATMega16
Connections:
VCC - +5VDC
Trig – PA.6 on ATmega16
Echo – PA.7 on ATMega16
GND – GND
ATMega16 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}}
)




Parents
  • Hi albert,

    I see that you asked a similar question before on a different part of the community. I'd suggest that if you're definitely going to use ARM11, it might be best to simplify what you are trying to do initially. Try to blink a LED first (so that you know you can control the GPIO from a program running on your board), as ultrasound can be pretty temperamental at the best of times.

    The alternative, which might be the fastest way to get this working - would be to get a Raspberry Pi, which is an ARM11 development board providing an easy way to get Linux running, control the GPIO etc. They have a huge community with plenty of people carrying out projects just like yours.

    Hope this helps,

    Joe

Reply
  • Hi albert,

    I see that you asked a similar question before on a different part of the community. I'd suggest that if you're definitely going to use ARM11, it might be best to simplify what you are trying to do initially. Try to blink a LED first (so that you know you can control the GPIO from a program running on your board), as ultrasound can be pretty temperamental at the best of times.

    The alternative, which might be the fastest way to get this working - would be to get a Raspberry Pi, which is an ARM11 development board providing an easy way to get Linux running, control the GPIO etc. They have a huge community with plenty of people carrying out projects just like yours.

    Hope this helps,

    Joe

Children
More questions in this forum