Archive for the ‘8051 Projects’ category

Another propeller using 89c2051

July 6th, 2010

This project is made by APOORV CHINCHOLKAR, third year engineering student from

Vidyaprathishthan’s College of Engineering,Baramati.We are thankful for providing us your contribution’s.

This project is a special kind of circular LED display. With the help some mechanical assembly, LED count, hardware requirement, and hence overall cost is cut to very affordable price. Also, maintenance and repairing of the display is so easy, that anyone having a little electronics knowledge, can take care of this. All the synchronizing can be implemented through software.

First of its kind, made using the 20-pin 8051 series microcontroller, this project use the principle of Space Multiplexing. This propeller display is mechanically scanned and displays the characters in digital format. Made from scrap it can be used anywhere and everywhere and the most amazing fact about this display is it’s crystal clear display. This display consists of just 8 bright LEDs which are rotated to show the display.

For building this project, requirement is just a small 20 pin microcontroller, a position encoder, and LEDs. This display can show the messages, which will require a whopping 525 LEDs. So hardware and cost minimization is achieved.

Circuit Diagram

cricuit

propeller

This project was started with a simple principle which is frequently encountered in our everyday life, which is Persistence of Vision. This phenomenon makes one feel fast moving/changing objects to appear continuous. A television is a common example, in which image is re-scanned every 25 times, thereby appear continuous.

Further, a glowing object if rotated in a circle at fast speed, it shows a continuous circle. By modifying this basic idea, 8 LEDs can be rotated in a circle, showing 8 concentric circles. But if these LEDs are switched at precise intervals, a steady display pattern can be shown.

Existing Systems:

Existing systems do employ POV principle, but for displaying each pixel, individual LED is used. This results in a huge number of LEDs even for small sized displays. By using a propeller type display, LED count can be kept to a bare minimum. Even 8 LEDs can perform a task of over 525 LEDs.

Applications:

Applications can find their way into cost effective solutions for large public displays, information systems. It can directly replace Railway station information displays, bus stands and many more places.

  1. 1. Interrupter Module

Interrupter module is our sensor module, consisting of the IR interrupt sensor MOC7811, from Motorola Inc. This sensor was selected from a variety of other alternatives, because of its small size, precise interrupt sensing, and sturdy casing.

One great advantage of using this module is, interfacing it with the microcontroller is just a matter of two resistors and a general purpose transistor. Following is the complete circuit diagram of our interrupter module.

interrupter

2.Microcontroller AT89C2051

This project is based around the microcontroller AT89C2051, which is a derivative of 8051 family, from Atmel Inc. This is a 20 pin IC packaged in DIP package. This small sized IC is used, mainly because of its reduced weight. This improves the performance of the display, because reduced weight gives advantage of increased RPM.

3.LED MODULE

LED module consisting of 8 bright LED is fixed in another side of the arm of our project. These LEDs are connected with each of the port pin of microcontroller, with a series current limiting resistor of 470 ohm.

4.DC Motor

Repeated scanning of the display is must for continuous vision. This task is achieved using circular rotation of the whole circuit assembly. So, we used a DC motor as the prime mover.

5.DC Power Supply

For microcontroller, as well as the DC motor, a regulated DC power supply is required. We have to provide +5V to the microcontroller, while +12V to the motor.

Photo graphs

Propeller Clock using 8051 microcontroller

August 13th, 2009

First of its kind, made using the at89s52 microcontroller.

This propeller clock is mechanically scanned and displays the time

in digital format. Made from scrap it can be used anywhere and
everywhere and the most amazing fact about this clock is it’s
crystal clear display.
It just took  three days to complete this clock. This clock consists
of just 8 bright red LEDS which are rotated to show the display.

Have a look at the screenshots ,these were taken during the

development stage of the clock.

Now , take a look at how we proceeded and ended up making this clock
 a success.propeller clock

First this was just an idea we saw one day on the internet ,it was

Bob Blick who made it first using the PIC 16C84, but I was not
having the same microcontroller so I decided making the same from
the 8051 microcontrollers.
Firstly select a high speed motor, you can select the one from your
old tape recorders, that would be sufficient enough to drive this
clock.


Schematic

Schematic

Then coming to the circuitry part our clock just consist of the
at89S52 microcontroller ,8 bright red led, a perforated PCB,
8 resistances (220 Ω), a photo diode, an infrared transmitter,
 a motor,a pull up ladder,a 10µf cap, 12 volt battery .

The clock is on a spinning piece of pcb, but it must get power so to
 give the required power a 9 volt battery is applied which works
very fine as u can see the results are super fine.

The circuit can be made either by designing the pcb or it can be
made on a zero pcb as we have done , because doing it on a zero pcb
was very much easy.Firstly a 20 pin socket for the AT89C2051 was
attatched,then connecting the power supplies leds and resistances.

The circuit is very easy as it took me only 2 hours and by evening
the clock was running.

For the leds I used the 220 ohms resisors for proper brightness.

A crystal of 11.0592 Mhz was selected to provide the clock to the
microcontroller.

Connect the motor properly between the pcb so as to maintain the
centre of gravity so that the clock does not wobble and the display
is crystal clear.

So much done, now only thing left is programming the microcontroller.

I used the at89s52 microcontroller which belongs to the 8051
family of microcontrollers.so I used the kiel compiler to write the
program code.

The code is written in c language and the code finally burned to the
controller and the clock is running.

Software

For programming the microcontroller you will require a programmer.

You can use a parallel port programmer or make a serial port
programmer as per your requirements and availability.

Use keil compiler to compile the code.
Code have no logic to set the clock variable it will be updated soon.
we are also looking for scrolling message display.

Now as we see what runs this clock….yes the code.

Firstly we generated the look up table for the digits we want to
display on our clock .

These values will be stored in a double dimensional array and timely
called to generate the display.

The clock works using interrupts and timers.

The external interrupt used tells the microcontroleer that a single
revolution is completed and tells the timer to generate the display
and then stop after displaying. One timer i.e. the timer 1 is used
to generate the clock internally

And the external interrupt call the values of this timer everytime
to display the time.

We also use priority , that is priorities are assigned to the
interrupts and timers.
 Timer1 keeps the count of the time and timer0 performs the task of
displaying maintaining appropriate frames that would be displayed
and create a persistence of vision.

Here is the CODE

#include<at89x52.h>

const unsigned char code flook [][5] =

{

{ 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0

{ 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1

{ 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2

{ 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3	  k*

{ 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4

{ 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5

{ 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6

{ 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7

{ 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8

{ 0x06, 0x49, 0x49, 0x29, 0x1E } // 9

};

const unsigned char code colon[]={0x00,0x18,0x00};

unsigned char a,b,c,d,e,f;

bit tog;

void Int0(void) interrupt 0 using 2

{

EX0=0;   // Avoid another INT1* until we are completely finished...

TH0=0xA4;

TR0=1;    // Start timer 0

}

void timer0(void) interrupt 1  using 3

{

static unsigned char i,k;

k++;

if(k==12)

{

k=0;

if(i<5)	  //hours ten digit

{

P0=~(flook[f][i]);

i++;

}

else if(i==5)//space

{

P0=0xFF;

i++;

}

else if(i<11)//space

{

P0=~(flook[(e%10)][i-6]);

i++;

}

else if(i<14)//colon

{

if(tog==1)

{

P0=~(colon[i-11]);

}

else

{

P0=0xFF;

}
i++;
}

else if(i<19)//min tens

{

P0=~(flook[d][i-14]);

i++;

}

else if(i==19)//space

{

P0=0xFF;

i++;

}

else if(i<25)//min one

{

P0=~(flook[c][i-20]);

i++;

}

else if(i<28)//colon

{

if(tog==1)

{

P0=~(colon[i-25]);

}

else

{

P0=0xFF;

}
i++;
}

else if(i<33)//sec tens

{

P0=~(flook[b][i-28]);

i++;

}

else if(i==33)//space

{

P0=0xFF;

i++;

}

else if(i<39)//sec ones

{

P0=~(flook[a][i-34]);

i++;

}

else

{TR0=0;

P0=0xFF;

EX0=1;

i=0;

}

}

}

void delay()

{

int fi,fj;

for(fi=0;fi<160;fi++)

{

for(fj=0;fj<1250;fj++)	;

}

}

void main()

{

TMOD=0x02;

TH0=0xA4;

EX0   = 1;                      /* External interrupt 0 enable              */

IT0   = 1;                      /* External interrupt 0 Edge sesitive       */

ET0   = 1;                      /* Enable Timer 0 interrupts                */

PT0   = 1;                      /* Timer 0 high priority                    */

PX0   = 1;                      /* External interrupt 0 high priority       */

/*-----------------------------------------------

Configure INT0 (external interrupt 0) to generate

an interrupt on the falling-edge of /INT0 (P3.2).

Enable the EX0 interrupt and then enable the

global interrupt flag.

-----------------------------------------------*/

EX0 = 1;   // Enable EX0 Interrupt

EA = 1;    // Enable Global Interrupt Flag

P0=0xFF;

P3=0xFF;

a=0;	  //sec one's

b=0;	  //sec ten's

c=0;	  //min one's

d=0;	  //min ten's

e=0;	  //hr one's

f=0;	  //hr ten's

tog=0;

while(1)

{

delay();

tog=~tog;

a++;

if(a>9)

{

a=0;

b++;

}

if(b>5)

{

b=0;

c++;

}

if(c>9)

{

c=0;

d++;

}

if(d>5)

{

d=0;

e++;

}

if(e>12)

{

e=0;

}

if(e>9)

{

f=1;

}

else

{

f=0;

}

}

}