Showing posts with label Microcontroller. Show all posts
Showing posts with label Microcontroller. Show all posts

ROBOTICS PROJECT IDEAS FOR ENGINEERS USING MICROCONTROLLER

 Mechatronics Engineering Students Degree Projects Robotics and Microcontrollers

Robotics Introductions

The modern world will be functioning on robots. All the activities being performed by human will be switched to perform by robots. Everywhere will be automation. It is evident by the increase of automation everywhere around us. There are good number of people who support the use of robotics in automation. With the robotics, the complex tasks can be done easier with higher precision as whereas the same done by human are subject to the human errors. Robotics is a field which is emerging more and more. The robotics as profession is taken with passion to learn and to solve different problems in the environments where are human cannot perform jobs. There are various fields involve in the robotics to complete the task done by robots like programming, electronics, mechanics, automation, and computer science etc. Therefore we can say that the filed Robotics, itself is a multidisciplinary field based on suitable combination of fields and engineers belonging to mechanical, electrical and computer science. To do final year degree projects of electrical engineering, mechanical engineering or computer engineering or electronics engineering in the field of robotics the project ideas are presented below to help the student of engineering universities.

1.     The Automatic Cleaning Robot

The robot used for the cleaning of any special area are designed in such a way that the robot shall perform the cleaning task efficiently. It is normally done by use of some marking or boundaries where we are going to deploy a robot for say cleaning task. The automatic cleaning of an area or a room will be done using microcontroller based a robot which will identify the area using borders with IR technology. The robot will be allowed to follow any path to cover the entire room, it may be straight or zigzag, but the condition is that it shall remain with that area. The sensors in this robot could be optionally the ultrasonic or IR. The robot system will carry a vacuum cleaner attached to it. The dust will be collected in a bin attached to the vacuum cleaner. Besides the main task of cleaning there would be some decoration task of the system like to display the time of utilization and area that it cover to interpret the efficiency of the robot application. The microcontroller used in this project will be programmed to follow the set rules and display the parameters on a LCD attached at the front panel to give specific information to user.

2.     Robotic Vehicle to Pick and Place Things

In industry the automation is key to have maximum production. The robot are helping industry in variety of applications. One of the important development in the robotic field is the development of a robot which is used to pick and place things in a specific order. This type of robot are usually designed custom based, focusing the need of industry where these are required to deploy. The specially designed robot will provide the services for the movement of object in any of desire direction and arises like horizontal or vertical, and rotational. Similarly robot can be made to provide rotational as well as linear movement. The number of arms of robot are also flexible choice. The student can take this project to develop a 2D or 3D movement robot with two or three arms. The development of robot of such types will be a challenging task for engineering student focusing the available resources. 

 

3.     Robot for the carrying object and climbing at stairs in harsh environment

The Use of Robots to transport objects or goods in harsh environment is a challenging task, especially when the transportation is to be performed in off road like on stairs. There will be some complex mechanical design required for application like this. The student of mechatronics engineer can more focus on this project. The route of transportation will have to be feed in the memory of robot and it will be edited every time the root has to be changed for alternatively a compunction protocol shall be adopted. The GPS system will also be an integral part of this application. The robot will be capable enough for climbing over obstacles and can climbing the stairs. This application will be suitable in a harsh environment where the human are not easy to perform this task due to multiple reason like because of high temperature or incomputable chemical environment. 

4.     Control of Robotic vehicle with help of Touch Screen

The robotic vehicle are often used for various tasks. The wheels, motors, microcontrollers or Arduino are used to make a robotic vehicle. There are some input devices are attached to provide command and control to the robotic vehicles. In this project, it is proposed to attach a touch screen with other electronics components like microcontroller, microprocessors, ARM or Arduino to get input from touch screen and execute the commands accordingly. There would be many ways to establish communication channel with the main CPU of robot and the touch screen which will includes the use of RF technology if we have to control the robot from a small distance or RS-232 serial communication, or Bluetooth communication, or even WIFI can be used for this purpose. Thus there are many variation which can be worked to design a robotics project innovatively. 

5.     Robot to Follow Line of Trajectory

The robot which flow a path through the scanning of a line trajectory is called a line follower robot. The thick line is drawn on the floor or other suitable surface. The robot detect the line by using sensor based on infrared (IR) or other optical devices. The line tracing is done real time during the execution of motion command to robot. There are two motors with wheels attached to the rear and a castor wheels of robot to support it for necessary movements. The development of a robot which is capable to flow a line trajectory path is a nice robotic projects for the final year engineering students. The microcontroller used in such a robot is 8051 sufficient because there are no complex calculation involve n these robots. They are design just to flow the track. The straight line is not necessarily required, you can give any complex path to robot depends upon the resolution of detection. 

6.     Solar panel Cleaner Robot

The use and deployment of solar plates for the generation of electric energy is increasing day by day. There is always need to keep the solar panel plates clear to required level as much as possible in order to have maximum efficiency of solar plates for maximum generation of electricity from the solar system. For small and medium scale solar system, the cleaning of solar system can be done manually, however for the large scale solar systems, the cleaning of these plates required some automatic robotic development. To clean such a solar system plates, a robot can be very helpful. A robot to help in the cleaning large area spaces can be developed using appropriate microcontroller and battery backups. The engineering students can make this kind of robot for their degree project by using the RF technology in the robot to send movement commands for controlling the direction of motion with specific tools.

7.     Robot to Play Chess

Play chess is a fantastic indoor game all over the world. Now what a nice idea it would be if the robots are playing the chess instead of human. The development of this intelligent robot will be consisting of best approaches in the field of robotics and computer vision for the chess by robot. The code will be written in Python for Raspberry Pi in which the implementation of camera is incorporated. The robot will takes images using the installed camera in order to visual recognize the placement of objects on the floor of chess. The movement of object will be detected by the comparing the images. The robot will use Stockfish which is a chess engine. The use of this chess engine will be essential to recognize the moves of second player and to decide the move of the robot to make.  

8.     Robotic for Vehicle having Metal Detector 

The fabrication of Robotic for Vehicle having Metal Detector involves the use of two types of main systems, one for the control of motion of a vehicle and to the detection of metal. This project can be developed as whole or in parts or in two phases. Some students can have one ready to use system and deploy it on the second system. The metal detection system can be constructed by using 8051 family microcontroller to achieve the control of vehicle. The motion of vehicle can be control by applying the necessary command through the use of any suitable media like remote control, like Wi-Fi or Bluetooth devices. The motor will be used to assist the robot for any specific motion. The use of pushbuttons to send commands for forward, backward, left, and right motion will be required. When a command will be received at the robot by media like RF technology, the command will be interpreted by microcontroller 8051 which will further issue the commands to motors for required motion in the asked direction. The metal detection system will be optionally developed or purchased a ready to use and will be attached to the vehicle to detect the metal around the robot. There will be buzzer or other notification arrangements attached to the robot to give signal on successful detection of metal by the robot. 

9.     Mobile Robot

The robot which is capable to detect the things or obstacles of different nature and change the path accordingly will be a good choice for engineering student to develop as a degree project. The objects found in the path of robot will be detected with help of optical sensor and intelligently robot will change its path real time. The robotic system will be made by using some powerful microcontroller like Raspberry Pi. There is another optional task which can be associated with this robot is to capture the images and store these images on suitable storing media for analyses on later stage. Therefore it is proposed that this system may incorporate a USB camera with the robot which should be capable to interface with a Raspberry Pi. 

Bread Board Circuit Connection of Robotic Project


10.   Robot to Print 3D Objects

The 3D printing of objects with help of use of robots is an idea to make degree project. It may involve the use of mechanical parts, electronics analog and digital components, Computer or mobile interface, and Microcontroller or Arduino board.  The design at computer or mobile or laptop will be read by microcontroller or Arduino and will be processed and then appropriate commands to run or move the stepper motors and attached arms will be executed using coordinates system. Then the printing will be started with the effective control of ink or laser printing head. The project can be utilized in the industry of textile, or can be used in the industry where the labels of various projects are designed and printed on actual media. The scope of utilization of this three D robotic printing is very vast. Student can do this for the completion of thesis and can do further research to make innovating design. 

Microcontroller based velocity-sensing system of a moving object

 Abstract of Microcontroller based velocity Meter Project

The notion behind the implementation of Velocity Measurement System is to learn by doing, the application and functionality of microcontroller. Velocity Measurement has a wide variety of applications in industry and microcontroller is the most suitable device that can be dedicated for the task. This document discusses the circuitry and the programming involve in the implementation of Velocity Measurement System. The Microcontroller will be programmed using C- language and will familiarize us with hardware and programming of an 8051 Microcontroller. We will learn how to design and implement both hardware and software components.

Project Overview

Our project is to implement the velocity measurement system of a moving object using 8051 microcontrollers. We have used a ball rolling inside a channel which passes through two sensors (micro limit switches in this case) and the time is calculated between the two using microcontroller and by usage of a simple formula, the velocity is calculated.

Measurement of Linear Velocity

As the ball i.e. the moving object passes over the first sensor an interrupt signal is generated and the software starts counting the time interval until the second interrupt is received when the ball passes over the second sensor. The length between the sensors is fixed i.e. 30cm, which is known to us by dividing that length by the time interval between two interrupts the velocity is obtained, the measured velocity is displayed on the LCD and also on the monitor of PC. We insure to have small displacement by keeping sensors not too far from each other so that time interval is very small and average velocity measured approaches to instantaneous velocity.  

Average speed is

                            Vavg = (y2 - y1) / (t2 - t1)                 

Where,

             y2 - y1= The length between two sensors.

             t2 - t1=  the time interval between two interrupts.

Basic Block Diagram of Velocity Meter

First figure is about the flowchart of the project. It describes the flow of data through out the system.

 

Block diagram for the velocity measurement using microcontroller
Basic Block Diagram of a Project

            

Input from Velocity Sensor side

This module is responsible for the data input. It includes object detect sensors. These sensors could be contact less like optical or proximity sensors or contact sensors like limit switches. We used micro limit switches for that purpose. The reason behind this is they are inexpensive, simple and reliable. Moreover, they are available at our lab.

sensor board diagram for the velocity measurement using microcontroller
sensor board diagram for the velocity measurement using microcontroller


Data processing and Manipulation

For the data processing some processor is required. The main processing is carried out within the controller. Device used for the processing is 89C51 microcontroller.

Output on LCD and also on PC through RS-232

These modules are responsible for the data output. They include interfacing with computers Interfacing with other Devices.  Following is the flow of data within the output module.

 Modules describing Interfacing

The Serial Port

 Introduction to Serial Port

Advantages of using Serial data transfer rather than Parallel port are summarized as. Serial Cables are usually more longer than the Parallel port communication cables. The serial port transmits a '1' as -3 to -25 volts and a '0' as +3 to +25 volts where as a parallel port transmits a '0' as 0v and a '1' as 5v. The number of wires are at lesser side than parallel transmission cable which have many wires. Micro controller’s have also proven to be quite popular recently. The microcontrollers have in built Serial Communications Interfaces in the chips. The built in hardware is used to talk to the outside world. Serial port Communication uses the less number of the ios pins of the MPU's or microcontrollers. The number of IOs used in null modem configuration only two pins named Transmit Data (TXD) and Receive Data (RXD).

Interfacing the Serial / RS232 Port

Frequently, a voltage standard (and often times a handshaking standard) such as RS-232 is used to allow the 8051-based system to communicate with a wide range of common systems such as PCs.

Serial Port's Registers (PC's)

The port terminology and addresses are shown below in table below:

Table  Standard Port Addresses

Name

Address

COM 1

3F8

COM 2

2F8

COM 3

3E8

COM 4

2E8

 

The address at which the Communications (COM) ports are Addressed in the BIOS Data Area are as under. Each port address is consisting of 2 bytes.

Table-2 COM Port Addresses in the BIOS Data Area

Start Address

Function

0000:0400

COM1's Base Address

0000:0402

COM2's Base Address

0000:0404

COM3's Base Address

0000:0406

COM4's Base Address

 Pins and Wires

Table3: Serial Pinouts (D9 Connectors)

D-Type-9 Pin No.

Abbreviation

Full Name

Pin 3

TD

Transmit Data

Pin 2

RD

Receive Data

Pin 7

RTS

Request To Send

Pin 8

CTS

Clear To Send

Pin 6

DSR

Data Set Ready

Pin 5

SG

Signal Ground

Pin 1

CD

Carrier Detect

Pin 4

DTR

Data Terminal Ready

Pin 9

RI

Ring Indicator

The various Functions of the above mentioned pins are enlisted in the table-4:

Table4: D-Type-9 Pin Connector Functions

Abbreviation

Full Name

Function

TD

Transmit Data

Serial Data Output (TXD)

RD

Receive Data

Serial Data Input (RXD)

CTS

Clear to Send

This signal is an indication for the link that the Modem is ready to exchange

Data through the serial communication.

DCD

Data Carrier

Detect

On detection of a "Carrier" signal  on the other end of the phone line, this Line becomes active.

DSR

Data Set Ready

ready to establish a link.

DTR

Data Terminal

Ready

UART is ready to link

RTS

Request To Send

UART is ready to exchange data

RI

Ring Indicator

It detects a ringing signal

RS−232 or EIA−232

The serial port is usually a RS−232−C, EIA−232−D, or EIA−232−E.

RS-232 Waveforms

RS-232 communication is asynchronous. It means that the clock is not communicated with the data during the serial communication. Each word is synchronized with it's start bit, the send and receive are responsible to accurately sense the transmission. The serial communication starts with a start bit, normally it is the Logic 0. After that each bit is transmitted through the line, one bit at a time. Usually the LSB (Least Significant Bit) is sent first in serial communication. At the end of transmission, a Stop Bit which is normally Logic 1 is sent.

If the next bit after the Stop Bit be Logic 0. This must mean another word is following, and this is it's Start Bit. Therefore, if the line has not been sent back into an idle state, then the receiving end will interpret this as a break signal. The data sent this way is framed in the form that the data is transmitted in-between a Start and Stop Bit.

Serial Port on 8051

The 8051 family microcontrollers have an on chip hardware based serial port. The built in serial communication hardware of 8051 microcontroller can be used or  operated in many different modes over a wide range of set of frequencies usually called baud rate. The serial port in the full duplex mode of operation means that the simultaneous transmission and reception. It may be noted that the data being received is buffered in special buffer registers in order to avoid any loss of the communication.

Serial Port SFR’s

Before using Serial port, SCON must be initialized for the correct mode and, also specify the baud rate using SMOD which is a bit specified in PCON. The SMOD bit can be used to double the baud rates of the serial port whether generated by the timer 1 overflow rate or the oscillator frequency. The Setting SMOD bit to logic high will double the baud rate of the UART during its operation in mode 1, 2, or 3. When the Timer 2 of microcontroller is used for the generation of baud rates, the value of SMOD don’t effect on the baud rate of UART.

Table5: Serial Control Register (SCON) - Bit Addressable

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

 LCD Interfacing

What is LCD: The LCD stands for “Liquid Crystal Display”.

LCD Initialization

Before we can send commands or data to the LCD module, the module must be initialized. The initialization procedure for both the modes is given below:

For Eight bit mode

For eight-bit mode, LCD is initialized using the following series of steps, The microcontroller will send necessary commands to LCD through the use of data port in a specific order. The commands and LCD response will make it ready to accept the data to be shown on it. The series of command as under:

  1. First of all, the microcontroller should wait about 15 to 20 milli-seconds after the power ON of the system.
  2. Microcontroller will write first command on the data bus which will be consisting of a byte having value 0x030 to LCD and then wait 05 milli-seconds for the instruction to complete.
  3. Microcontroller will write second command on the data bus consisting of an-other byte with value 0x030 to LCD and then again microcontroller shall wait 160 micro-seconds for instruction to complete.
  4. Third time microcontroller will write the same command on the data bus of similar value 0x030 to LCD and then again microcontroller will wait 160 micro-seconds or poll the Busy Flag.
  5. Now at this stage the microcontroller will set the Operating Characteristics of the LCD.
  6. Microcontroller will write the "Set Interface Length".
  7. Microcontroller will send 0x010 to LCD for the execution of turn off the Display.
  8. Microcontroller will send the next command consisting of 0x001 to LCD for the execution of Clear the Display.
  9. Microcontroller will send the command for "Set Cursor Move Direction" Setting Cursor behavior Bits.
  10. At the last microcontroller will send the command to "Enable Display/Cursor" & enable Display and also for Optional Cursor.

 For Four bit mode

In some application we wish to have a smaller number of data bus to be used with the microcontroller to save the microcontroller IO lines. The standard controllers of the alpha-numeric LCD allow the use of half of the data bus for communication purpose. Therefore, there are some difference and similarities the process of initialization of LCD for the four bit mode as compared to the eight bit mode as discussed earlier. Now we will se the sequence of command for the initialization of LCD for the utilization of the LCD in this specific mode of operation in which some of the Microcontroller pins will be saved.

  1. First step is very similar to above that the microcontroller should wait for some delay of about 15 milli-seconds after power is ON.
  2. Microcontroller will send the same command as discus above consisting of one byte and having value 0X30 and after each send Microcontroller shall wait for about a few milli seconds in the sequence as discussed earlier.
  3. Here is the important command which will tell the LCD to select the mode of operation: as the microcontroller will now send 0x02 to the LCD to Enable Four Bit Mode. After this all commands and instruction or data etc will be necessary send in two steps in the form of two nibbles.  All other sequence and rest of commands will be in same sequence and value, except with the care that data shall be transferred in the form of nibbles.

 

IMPLEMENTATION OF THE VELOCITY METER USING MICROCONTROLLER 8051

Component List.

  1. Atmel 89C51 Microcontroller
  2. Max 232 Transceivers
  3. 25 MHz Crystal oscillator 
  4. DB-9 Female connector
  5. Hitachi 44780 character LCD
  6. Two Micro limit switches
  7. One Green LED
  8. Five 10uF – 25V Capacitors
  9. Four Resistors 10K Ohm ¼ watts
Software of the Velocity Meter is written in Kei C51 language. The code listing is presented below:

/* Velocity Measurement  */
 
/* Dated : March  2010 */
 
/* Hardware Description */
/* Microcontroller 89C51 */
/* Operating Frequency : 12 MHz */
/* Inputs : Object sensors displace at 30 cm apart */
/* Outputs: 	a.) 20x2 Character LCD
		b.) Serial Console
		c.) Heartbeat LED */
 
 
#include <AT89X51.H>	
#include <intrins.h>			
#include <stdio.h>		
 
/* function declaration */
void init_serial_port(void);
void init_lcd(void);
void init_timer0(void);
void init_interrupts(void);
void lcd_start_messeges(void);
void serial_start_messeges(void);
void waitms(unsigned int );
void clearlcd(void);
void waitUS (unsigned char );
void putcharlcd(unsigned char);
void putstringlcd(unsigned char *);
void print_vel_lcd(unsigned char *); 
void positioncursor(unsigned char);
void write_lcd(unsigned char ) ;
 
/* bit declaration */
sbit rs_lcd	 =	P3^6;		
// Register Select LCD, H= Data, L = Instruction code
sbit en_lcd	=	P3^7;		// Enable LCD H->L enable
sbit heart_beat = P0^0;
//*************** THE END ****************************************** 
 
/* text messeges */
unsigned char code msg1[]= "   Velocity      \0";
unsigned char code msg2[]= "   Measurement   \0";
unsigned char code msg3[]= "   8051          \0";
unsigned char code msg4[]= " Microcontroller \0";
unsigned char code msg5[]= "     C-language  \0";
unsigned char code msg6[]= "  KEil c51        \0";
unsigned char code msg7[]= "       By        \0";
unsigned char code msg8[]= "  Dr.Rana        \0";
unsigned char code msg9[]= "   as            \0";
unsigned char code msg10[]=" an External     \0";
unsigned char code msg11[]="    Supervisor   \0";
unsigned char code msg12[]="  in this        \0";
unsigned char code msg13[]="     Project     \0";
unsigned char code msg14[]=" Thank You       \0";
 
unsigned char code msg15[]="  v e l o c i t y  \0";
unsigned char code msg16[]=" m / sec\0";
 
/* end of text messeges block */
 
/* global variables declarations */
 
unsigned int x;			//counter for heart beat	
unsigned long count;		//48usec increment counter
bit complete_flag=0 ;		//complete status flag
bit count_flag=0;		
unsigned char buff [10];	//define 10 byte buffer
unsigned char n;		//sprintf return variable
 
 
/*++++++++++++++++++++++++++++*/
/* Main Function */
/* This function initialize the pheripherals, send Initial messeges
to the LCD & Serial Port and wait for the inputs. */
 
void main (void) {			//enable global interrupt
	float velocity;		
	init_interrupts();
	init_serial_port();
	init_lcd();
	serial_start_messeges();
	lcd_start_messeges(); 
	init_timer0();
 
while (1) {
	if(complete_flag) {
		//velocity calculation : s = vt or v = s/t
		// length = 30 cm (0.3/48e-6 = 6250)
		velocity = 6250.0/count ;	
		count = 0;
		printf("Velocity is %f m/sec", velocity);
		puts(msg14);		//THANKYOU MESSEGE
		/*printing of velocity at lcd */		
		n =  sprintf (buff, "%f",velocity);	//convertion to buff
		clearlcd();
		positioncursor(0x00);	//first line (v e l o c i t y)
		putstringlcd(msg15);
 
		print_vel_lcd(buff);	//print velocity at second line
		positioncursor(0x49);	//2nd line	(m / min )
		putstringlcd(msg16);
		complete_flag = 0;
		}
		if(x++==25000) 	heart_beat = ~heart_beat;
	}	
}
 
void timer0(void) interrupt 1 {		//every 48u sec
	if(count_flag) {
		count++;
					}
	}
 
 
void exter_intr_0(void) interrupt 0 {
		count_flag = 1;		// set count flag
}
 
void exter_intr_1(void) interrupt 2 {
		if(count_flag) {
		count_flag = 0;
		complete_flag  = 1; }
}
 
void print_vel_lcd(unsigned char *d) {
		positioncursor(0x42);	//position 42
		while (n>0) {
		write_lcd(*d);
		d++;
		n--; }}
 
void clearlcd(void){
		rs_lcd =0;
		write_lcd(0x01);
		rs_lcd =1;
		}
 
void positioncursor(unsigned char c ){
		rs_lcd = 0;
		write_lcd(0x80 | c);	//  set address of cursor
		rs_lcd =1;	 
	}
 
void putstringlcd(unsigned char *d){
		  while(!(*d == '\0')){		/* detect '\0' */
		  write_lcd(*d);
		  d++; }}
 
void write_lcd(unsigned char a) {
		P1 = a;
		waitUS(250);
		waitUS(250);
		waitUS(250);
		waitUS(250);
		en_lcd = 0;
		en_lcd = 1;
}		
 
void lcd_start_messeges(void) {
 
    positioncursor(0x00);	//first line
	putstringlcd(msg1);
	positioncursor(0x40);	//2nd line
	putstringlcd(msg2);
	waitms(800);
	clearlcd();
 
	positioncursor(0x00);	//first line
	putstringlcd(msg3);
	positioncursor(0x40);	//2nd line
	putstringlcd(msg4);
	waitms(800);
	clearlcd();
 
    positioncursor(0x00);	//first line
	putstringlcd(msg5);
	positioncursor(0x40);	//2nd line
	putstringlcd(msg6);
	waitms(800);
	clearlcd();
 
    positioncursor(0x00);	//first line
	putstringlcd(msg7);
    waitms(800);	
	clearlcd();
 
    positioncursor(0x00);	//first line
	putstringlcd(msg8);
	positioncursor(0x40);	//2nd line
	putstringlcd(msg9);
	waitms(800);
	clearlcd();
 
    positioncursor(0x00);	//first line
	putstringlcd(msg10);
	positioncursor(0x40);	//2nd line
	putstringlcd(msg11);
	waitms(800);
	clearlcd();
 
    positioncursor(0x00);	//first line
	putstringlcd(msg12);
	positioncursor(0x40);	//2nd line
	putstringlcd(msg13);
	waitms(800);
 
}
 
void init_serial_port(void) {
	SCON  = 0x50;	/* SCON: mode 1, 8-bit UART, enable rcvr  */
	PCON |= 0x80;	/* set SMOD = 1 for double buad rate */
	TMOD |= 0x20;	/* timer 1 auto reload mode */
	TH1  = -7;      /* TH1: 19200 Buad @ 12MHz 
	TR1  = 1;       /* TR1:  timer 1 run                          */
   	TI   = 1;       /* TI:   set TI to send first char of UART    */
 
}
void init_timer0(void) {
    	TMOD |= 0x02;       /* TMOD: timer 1,2, mode 2, 8-bit reload   */
    	TH0  = TL0 = -100;  // 48 usec @12M	auto reload value		
	TR0  = 1 ; 		}
 
void init_interrupts(void) {
	IE = 0x87; //enable global , external 0 and external 1 interrupt 
	IP |= 0x05; //high priority for external 0 and external 1 interrupt
	TCON |= 0x05; //low edge triggered for external-0 & external-1 int
}
 
void init_lcd(void){
	//LCD module 
	//generic lcd driver
	//	D0-D7 -> P1
	//  RS	  -> P3.6
	//  RS	  -> P3.7
 
		rs_lcd = 0;	//for cmd
		waitms(500);
        	write_lcd(0x38);//Function Set   0011   1000
		waitms(100);
		write_lcd(0x38);//Function Set   0011   1000
		waitms(100);
		write_lcd(0x38);//Function Set   0011   1000
		waitms(100);
		write_lcd(0x0C);   
   //display off/ON No Cursor No Blinking at cursor        
		waitms(100);
		write_lcd(0x01);	//clear Display
		waitms(100);
		write_lcd(0x06);	//Entry Mode Set 
		rs_lcd = 1;		// for data
	}
 
void serial_start_messeges(void) {
	puts ("WELLCOME");
	puts (msg2);
	puts (msg3);
	puts (msg4);
	puts (msg5);
	puts (msg6);
	puts (msg7);
	puts (msg8);
	puts (msg9);
	puts (msg10);
	puts (msg11);
	puts (msg12);
	puts (msg13);
 
}
 
/* These are uncalibrated approximate delays */
 
void waitUS(unsigned char a){	
	while(--a != 0);	
/* wait = a * 2 + 5 usec @ 12 MHz*/	
	}					
 
void waitms(unsigned int a) { // ~1msec delay @ 25MHz
		while (--a !=0) {
		waitUS(247);	
		waitUS(247);
		waitUS(247);
		waitUS(247);
			}
	  }
 
 
 

Popular Post (All Time)