2N7000 does this work? (in a common anode display)

Status
Not open for further replies.
I was under the impression that the Gate on a 2N7000 had to be a higher voltage than the Drain for the device to turn on.

I've attached the schematic and the full article can be found here.

http://massmind.org/techref/io/led/8x7s8pin.htm

I've used 2N7000s before but not with the drain tied to +5.

Hey Mike, it's your schematic!!! It was this schematic that inspired me to design using charlieplexing
(I don't want to pay $10 for the maxim chip even though it's a great chip)
 

Attachments

  • qn38607.gif
    14.1 KB · Views: 2,496
William At MyBlueRoom said:
I was under the impression that the Gate on a 2N7000 had to be a higher voltage than the Drain for the device to turn on.

No, the gate has to be at a higher voltage than the source.

The configuration uses the 2N7000s in the source follower mode. Equivalent to the emitter follower mode with BJTs.

It is a very good idea.
 

I wouldn't have thought so?, presumably you lose considerable voltage across the FET's?, and you don't have much to lose from a 5V supply. What about using P gate ones instead?.
 
Nigel Goodwin said:
What about using P gate ones instead?.

Can't do. With common anode 7-segment display, Charlieplexing relies on port pin goes into logic HIGH or high impedance to turn OFF a segment, and LOW to turn them ON. For those digits other than the current digit, the P type MOSFET gate would float to some voltage in between HIGH and LOW. If one output a LOW to any other port pin to turn ON a segment, the P-MOSFET whose gate on that port pin will turns ON too.

Charlieplexing is very difficult to adopt for use if LED current exceeds the driving capability of uC.

I have tried to design such an interface but failed. Perhaps others can do it better than I.
 
Could I put a 1N4001 diode between the +5 rail and the drain of the 2N7000s This should in theroy drop the drain vcc to 4.3V still more than enough to drive the LEDs even 2" ones.

Also I thought the voltage drop across the 2N7000 was very small, almost zero unlike a 2N3906.
 

Nigel is talking about the gate to source voltage which is typically 2.1 V for a drain current of 1 mA. A diode in series will make it worse, not better.

It will only work for a low current display. You would need to use displays that are bright enough to read with a steady current of <3 mA since to mux 8 displays, you will need a current pulse 8 times that of the steady current. eg. if 2.5 mA is adequate for a constant current, then the pulse will have to be 20 mA.

The PIC can only sink 25 mA.

I would use NPN transistors rather than the FETs since the Vbe is about 0.7V thus providing more voltage for the LEDs and sundry voltage drops.
 

No, that schematic doesn't work... I haven't had any luck getting Mr. Newton to remove it... Here's a more up-to-date Charlieplexing Driver drawing for common anode or common cathode displays...

As mentioned, unless using low current displays from Agilent or others (2-3 ma / segment), Charlieplexed display brightness is limited by the I/O pin current spec... BTW, Charlieplexed common anode displays are brighter than common cathode displays because an I/O pin can sink more current than it can source...

Regards, Mike
 

Attachments

  • charlieplexed_display_wiring_notes.jpg
    169.4 KB · Views: 1,278
I use Charlieplexing as a reduced-pin-count display solution for low current displays or for small discrete LED matrices...

For a reduced-pin-count solution using 'standard' 20-ma / segment displays I use an additional driver chip and standard multiplexing to produce a full brightness display (with PWM fade control) and a 9-pin interface... I use 16-pin Micrel MIC5821 or Allegro A6821 drivers or 18-pin Micrel MIC5841 or Allegro A6841 drivers... The PNP anode column driver transistors are 2N4403/MMBT4403 (600-ma) or PN2907A/MMBT2907A (800-ma)...

Here's one way to drive the display depicted in the drawing below;

Code:
;
;  A minimum PWM 'on' time of 2% guarantees a minimum window
;  of 20-usecs (100 instruction cycles) at the beginning of
;  each interrupt cycle where PWM drives the <OE> input high
;  (display off)...  This allows us to reuse the RB1 and RB2
;  column driver lines temporarily as '5841 <DAT> and <CLK>
;  lines to load the '5841 (without messing up the display) 
;  before RB1 and RB2 resume their column driver duties when
;  PWM drives <OE> low (display on)...     
;                            
;  The 2% minimum PWM 'on' time limits maximum brightness to
;  98% but the 2% loss of brightness is inperceivable
;
ISR_LED	
        movf    BUFPTR,W        ; get LED seg data buffer ptr     |B0
        movwf   FSR             ; setup for indirect address      |B0
        movf    INDF,W          ; get seg data for this column    |B0
        movwf   WORK            ; put it in the WORK variable	  |B0
        movlw   d'8'            ;                                 |B0
        movwf   TEMP            ; serial bit count                |B0
ISR_Load	
        bcf     SERCLK          ; preset '5841 CLK line lo (RB1)  |B0
        bcf     SERDAT          ; preset '5841 DAT line lo (RB2)  |B0
        rlf     WORK,f          ; shift data bit into Carry	    |B0
        skpnc                   ; a '1' bit?                      |B0
        bsf     SERDAT          ; yes, set SERDAT line to 1       |B0
        bsf     SERCLK          ; clock data bit into the '5841   |B0
        decfsz  TEMP,f          ; all 8 bits sent/loaded?         |B0
        goto    ISR_Load        ; no, branch and do another       |B0
;
;  now setup Port B column drivers before PWM drives the '5841
;  <OE> pin low to turn on the segment driver outputs & display
;
;  COLPOS variable cycles through the following fixed values
;  one interrupt at a time to 'scan' the display and switches;
;
;  00000001, column 0, inverted 11111110
;  00000010, column 1, inverted 11111101
;  00000100, column 2, inverted 11111011
;  00001000, column 3, inverted 11110111
;  00010000, column 4, inverted 11101111
;  00100000, column 5, inverted 11011111
;  01000000, column 6, inverted 10111111
;  10000000, column 7, inverted 01111111
;
ISR_Column
        comf    COLPOS,W        ; invert bits (only 1 bit low)    |B0
        movwf   PORTB           ; setup the column drivers        |B0
;
;  prep the ISR 'scan' and buffer pointer variables for the next
;  column 'scan' interrupt
;
ISR_NextColumn
        incf    BUFPTR,f        ; increment LEDBUF pointer        |B0
        bcf     STATUS,C        ; clear Carry                     |B0
        rlf     COLPOS,f        ; shift column position           |B0
        skpc                    ; all 8 columns scanned?          |B0
        goto    ISR_PWM         ; no, branch, else                |B0
;
;  reset ISR scan and buffer pointer variables for column 0
;
        movlw   LEDBUF          ; reset scan sequence             |B0
        movwf   BUFPTR          ; reset LEDBUF pointer            |B0
        rlf     COLPOS,f        ; reset COLPOS to 00000001        |B0
;

Regards, Mike
 

Attachments

  • 8-digit_std_multiplexed_pwm_k8lh_design.jpg
    83.3 KB · Views: 1,661
Mike, I must be really dense.
How do you turn on a segment that lies on the diagonal line, e.g., segment A on the rightmost display?
 
Ron H said:
Mike, I must be really dense.
How do you turn on a segment that lies on the diagonal line, e.g., segment A on the rightmost display?

Hi Ron,

I call that diagonal line the "float bit" or "float pin"... RB0 normally carries out segment A driver duties, that is, it's normally driven as output=1 to light segment A for a particular column (common cathode) or it's set to a hi-z input (neither sourcing or sinking current) to leave segment A unlit... When RB0 is called upon to perform its column driver function (driven low to enable a column) it can't perform its normal segment A driver duties and so we "float" the segment A driver duties onto that RA0 "float pin"...

So we use this "float" mechanism to allow each I/O pin to perform double duty as both a segment driver and as a column driver... Pretty slick, yes, no, maybe, huh?

Regards, Mike
 
I'm even denser than I thought I was. For some reason, I wasn't looking at the diagonal line as an actual connection. I was thinking that segment A in the rightmost column was driven by RB0. Duhhhh.... Brain fart.
Thanks, Mike.
 
Ron,

I apologize... That's definately a shortcoming in that drawing... I'd like to come up with a better and more intuitive drawing but "no joy" so far...

Regards, Mike
 
Mike said:
Ron,

I apologize... That's definately a shortcoming in that drawing... I'd like to come up with a better and more intuitive drawing but "no joy" so far...

Regards, Mike
It wasn't your fault, Mike. It should have been clear to me.

Ron
 
Here is a display driver that uses minimal PIC i/o lines; drawn with a finger nail dipped in tar.

It is drawn for a common anode display, but a common cathode version is also possible.

It is only suitable for low current displays due to the current sinking limit of the 74LS47.

It would be possible to eliminate transistors Q1 ~ 8 if the 74HC42 was replaced by an Active High 1/10 decoder with sufficient source current.

A 3 i/o line using shift registers is possible if SRs with sufficient output sourcing/sinking are available.
 

Attachments

  • muxing_113.gif
    49.9 KB · Views: 845
Hi Len,

Your two chip solution only uses 7 pins and would be brighter than a Charlieplexed display but, as you say, the 'LS47 40-ma output current limit is probably a bit shy of the current required to drive standard current displays to full brightness in a multiplexed 12.5% duty cycle 8 digit display...

If you're going to throw chips at the problem, so to speak, in order to reduce the interface pin requirement, you might as well do it in a way to provide full brightness and more capability... I would suggest replacing the 'LS42 with an 'HC595 serial-to-parallel SR to drive the column transistors and replacing the 'LS47 with a serial '5821 or '5841 sinking driver (350-ma) for the cathode segments... The two chip 'HC595 and '5821/'5841 solution would use a 3 pin or 4 pin interface (Data, Clock, Strobe, and optional PWM), would be capable of driving 'standard current' displays to full brightness with optional PWM brightness control, and would support additional 8 digit displays (or 8x8 matrices) easily using the same 3 or 4 pin interface...

Food for thought... Kind regards, Mike
 
They're nice chips that I normally use for relay drivers... Similar to the 8-bit ULN2803 sinking driver but with a 3-pin serial interface and built-in serial-to-parallel shift register...

Now if I could only find a serial-to-parallel 8-bit driver for high-side switching...

Take care... Have fun... Kind regards, Mike
 
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…