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.
Hi, I am interfacing MCB2140 with HC-SR04 ultrasonic sensor. My code builds without errors. However, i do not get any value in the capture register. How do i test my code without using a LCD? If i need to use a LCD, can anyone provide the code for it?
#include<LPC214x.h> #include<stdio.h> #define PRESCALE 60 void initTimer(void); void delay(int); void initTimer() { T0CTCR = 0x0; //select Timer mode T1CTCR = 0x0; T0PR = PRESCALE -1; // since counter starts from 0 T0TCR = 0x02; //Reset Timer0 T1TCR =0x02; //reset Timer1 T1CCR = 0x0001; //enable CAP0RE for Timer1 } void delay(int us) { T0TCR = 0x02; // reset timer0 T0TCR = 0x01; //Enable timer0 while(T0TC < us) ; //loop for us delay T0TCR = 0x00; //disable Timer0 T0TCR = 0x02; T0TC = 0x00; } void main() { PINSEL0 &= 0xFFCFFFFF; PINSEL0 |= 0x00200000; IO0DIR = 0x00000800; //set P0.11(trigger) as o/p and 10(echo) as i/p IO1DIR = 0x00FF0000;// set P1.16-23 as outputs initTimer(); //// /* initialize the serial interface */ // PINSEL0 = 0x00050000; // Enable RxD1 and TxD1 // U1LCR = 0x83; // 8 bits, no Parity, 1 Stop bit // U1DLL = 97; // 9600 Baud Rate @ 15MHz VPB Clock // U1LCR = 0x03; // DLAB = 0 while(1) { long time,dist, temp; IO1CLR = 0x00FF0000; repeat: IO0SET = 0x00000800; //send high on trigger pin delay(10); //delay for 10us IO0CLR = 0x00000800; // send low after 10us T1TCR = 0x01; //Enable Timer1 if(T1CR0 == 0) { delay(100); } //wait for rising edge to occur on echo pin delay(3); //wait for debounce if(T1CR0 >0) { time = T1CR0; //read value of CR0 reg dist = (time*340)/2; //dist in meters IO1SET = 1<<16; delay(10000); IO1CLR = 1<<16; printf("%d m\n",dist); } else goto repeat; T1TCR = 0x00; //disable Timer1 delay(1000000); } }
What is UART?
Is the do/while construct broken in your Keil installation?
do { ... } while (T1CR0 == 0);
Sir, i have not used a do-while loop..i am doing this for the first time..so i need some guidance..
The following looping constructs are quite good to know. No reason to use a goto when your needs perfectly matches C language loop constructs...
for (;;) { ... } do { ... } while(xx); while (xx) { ... }
Use the Debugger:
http://www.keil.com/support/man/docs/uv4/uv4_debugging.htm
making the classic mistake of jumping straight in to building some huge monolithic system, instead of starting with the basics & laying some solid foundations.
www.avrfreaks.net/.../how-generate-frequency-using-avr
So lay this project aside for a while, and spend some time with the basics:
www.avrfreaks.net/.../1138166 - it makes no difference what processor you use (AVR, ARM, whatever); those are the basic steps & skills you should have under your belt before moving on.
Note that the uVision manual has some specific worked examples:
http://www.keil.com/support/man/docs/uv4/uv4_examples.htm
http://www.keil.com/support/man/docs/gsac/
Thank you sir..i shall go through the links..however, is the logic of my code right?...and can i read the values i get from the ultrasonic sensor when i connect my board and debug without using LCD?
"...and can i read the values i get from the ultrasonic sensor when i connect my board and debug without using LCD?"
Correct me if I'm wrong, but isn't it part of your debugging to find out if it works or not? And in case it doesn't work, to find out why it doesn't work? Or does debugging mean "run it once just to confirm"?