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.
Right now I am tinkering around with embedded programming; desktop programming is getting a little boring. I am trying to make a clock. The part I am having trouble with is displaying the time. I need to know how a numeric display would hook up to my processor. Would it plug into a I/O port? A Pin? I need to know because as of right now, I am assuming that the display hooks up to a port. I am planning on using a Atmel 8052 family processor with 4 I/0 Ports. Port 0 will be used for switches that will set the time Port 1 will be used for the Hours display Port 2 will be used for the Minutes display Port 3 will be used for the Seconds display (i want a seconds display just for kicks) Therefore, to I would send the time value to the whole port: P1 = 12; for example. I am using the Kiel compiler and I can post my code if it will help.
Different display devices use different methods of communication. They range anywhere from 1 output port pin connected to an LCD/LED segment to scrolling RS-232 input. You really need to choose your display device hardware first. Then you'll know how to code for it. What is the display for your clock that you are trying to drive? It sounds as though you don't have one yet, but are looking for suggestions? What hardware do you get on the eval board for your Atmel processor?
There are many ways to accomplish what you want. One problem with the way you suggest is that it uses up all of your ports. If you use 7-segment displays (so named because they have 7 segments which can be used to make up all 10 digits 0-9) you can multiplex them using a single port (for the segments) and a few other bits for the digit selection. You can use 7 bits of P1 for the segments and 3 bits of P3 to select the digit you are writing to. This is how many digital clocks actually work. This idea is that your eye reacts relatively slowly. So, if you multiplex the digits faster than 30-40 times a second your eye is fooled into thinking that they are all lit at the same time - you don't see the blink because of the persistence of the LEDs. You would typically do this in software in an interrupt.
digit = (digit + 1) % 6; P3 = (P3 & ~0x07) | (digit & 0x07); P1 = value[digit];
value[0] = Hour/10 value[1] = Hour%10; value[2] = Minute/10; value[3] = Minute%10; value[4] = Second/10; value[5] = Second%10;
Thanks for your help guys. This is my first embedded project so I have absolutly no idea which 7-segment display I need; actually, I have no idea what I need! (resonators, resistors) I have only a basic knowledge of electronics. Frankly, I am getting a little bored of desktop programming and I am looking for a little challenge. I am ordering the parts I need: breadboard, programmer. I am trying to get the program written by the time I gather all the parts. So, I think I understand using 1 port for all 6 displays. (2 for hours, 2 for minutes, and 2 for seconds) How would I connect all 6 displays to 1 port? Do you have any suggestions on the hardware I will need to build this beast? Once I get the parts and the software, could I ask for help building the circuit here, or is this forum stricktly for software/keil. Thanks again, Matt Pociask
There's nothing wrong about asking questions, howewer, do some homework first. Try to find different application notes about 8051 family - there's a lot of them. Use Google for search. Also, try to obtain some book on 8051 design. Amazon is a good start for that. Then, when all resources are exhausted, ask for help here - people are willing to assist, but the question must be specific, not a general one like "How can I build this or that". regards Dejan