Have you demonstrated this? Your loop has each digit on for about ¼ the time. Frequency should be irrelevant because with higher frequceny, it will be lit less but will be lit more often. Would not you need to turn the digit off before the pause (or between pauses) to affect the dimness? I will have to think about it more.
I thought you wantedPORTA = ~DCD Digit will set 1 bit to a state and all others to the other state; this is an unwanted effect in my case.
MAIN:
PORTA = XXXX1110
PORTA = XXXX1101
PORTA = XXXX1011
PORTA = XXXX0111
GOTO MAIN
where the upper nibble were inputs? If they are inputs, they will not be affected by your PORTA=~DCD command because, well, they are inputs.
Earlier you mentioned speed is an issue, now you mention code space – the unrolled version will not be very code efficient but it should by slightly faster than the looped depending on How PBP converts them to ASM. If one were to write it in ASM, I know the unrolled method would be faster (at least I know I could write an ASM version faster than a looped. Also the PORTA add commands could be done in two instructions versus more as with the >>, & and | approach). However, I still do not know if your upper nibble of PORTA will always be inputs?I didn't think about your solution; it's always amazing to see how many different ways there are to solve a problem. I will try it anyway since I want to know witch is more memory space effective.
Paul Borgmeier
Salt Lake City, UT
USA
__________________
flotulopex,The statement: "If I want to make the display brighter, I slow down the loop with the "Scan" pause making the digit to be powered longer." makes no sense if the drive circuitry is designed correctly and the software is truly multiplexing the digit drivers at 100%/number of displays. The only thing that lowering the display frequency will do is at the lower end of about 50 to 40 hz the viewer will start to see the telltale multiplexing action. If at 60 hz. or more the display brightness should not change as far as your eye is concerned. If your display gets brighter as you increase the frequency then your circuitry is not shutting off the digits fast enough. If it gets dimmer as you increase the frequency then your circuitry is not turning on fast enough. This is assuming you have the dutycycle set at 100%/number of displays with no delays. I have designed an automotive gage set using a 16f88 that runs a 4 digit + decimal point multiplexed display that has a 16 step dimming function thru an A/D channel tied to the dashboard dimmer. I chose 63 hz as the lowest frequency to eliminate the STROBING effect during driving.
Dave Purola,
N8NTA
Paul,
The four higher bits of PORTA are Inputs and when I checked out the levels on my PIC with my logic probe (set to TTL), using ~DCD would make the ports change status. BUT I have to try with another my PIC since one of my digits doesn't light-up normally making me think about a "little" problem... Should get a new one tomorrow.
About dimming, modifying the scan (refresh) rate of the digits is effectively not a good solution. It's working but, as said in another post, the strobe effect is also accentuated. I have modified my circuit and added transistors in each Common Anode connection. Those four transistors are then levelled by one additional transistor witch is LDR driven. At least, it works fine.
Dave,
My approach is maybe not a good one and any example/critic/suggestion is welcome. It's my first project involving a LED display, I didn't even know what multiplexing was before, so got still to learn more... My english is poor, what is a "gage set"?
Roger
flotulopex, It is a set of digital gages used for automobiles. About 3 years ago I gutted a trio of small SUN aftermarket gages in chrome cans and built digital inerds for each. 1 displays water temperature, 1 oil pressure, and 1 battery voltage/current. I beleive the MELABS web site has an intorduction to display multiplexing that you should see and i beleive also some code that you can use as a basis for your program if this helps.
Dave Purola,
N8NTA
When using digital inputs, you need to make sure the external connection are either high or low. It sounds like what you are testing are floating (unconnected) inputs, which is a big no-no (not the testing of, but leaving inputs unconnected). Tie your inputs either high or low and repeat - you will see that they are not affected by your DCD command.
Paul Borgmeier
Salt Lake City, UT
USA
__________________
This could be the trick.
Let me check over and I'll come back.
Roger
Yes Paul, you're absolutely right.
The DCD command doesn't affect the input ports. Personally, I would appreciate to see this kind of information in the PBP manual. Maybe it will be there in the next edition?
As you mentionned, it is not a good idea to measure ports whithout pull-ups or pull-downs; what I did now.
So, DCD works fine and faster than indexing the ports.
Thank you very much.
Roger
Bookmarks