How to display more than 65536 with MAX7219


+ Reply to Thread
Results 1 to 27 of 27
  1. #1
    Join Date
    May 2004
    Location
    brighton
    Posts
    149

    Default How to display more than 65536 with MAX7219

    Hi All
    would someone be kind enough to explain to me how i can display more than
    65536 which is the limit of a word variable on a 7 seg display using the Max7219 and 6 digits.
    i want to be able to display say 123456 but this a more than a word
    what can i do
    Any pointers would be well appreciated

    Regards
    Isaac

  2. #2
    skimask's Avatar
    skimask Guest

    Default

    An upgrade to PBP 2.50B will give you LONG variables. From there, you can split up your 'huge' number into smaller numbers and display the chunks individually.

  3. #3
    Join Date
    May 2004
    Location
    brighton
    Posts
    149

    Default

    Quote Originally Posted by skimask View Post
    An upgrade to PBP 2.50B will give you LONG variables. From there, you can split up your 'huge' number into smaller numbers and display the chunks individually.

    Thanks Skimask
    i didn't even know that there was 2.50b out just done the upgrade
    looking for examples of this pn the forum any links?

    Isaac

  4. #4
    Join Date
    May 2004
    Location
    brighton
    Posts
    149

    Default

    found it in the manual but any ideas how to use this .
    my present variable is a word so do i just need to change this to a long
    then i should be able to send say 123456 in one go




    Isaac
    Last edited by isaac; - 23rd October 2008 at 16:00.

  5. #5
    skimask's Avatar
    skimask Guest

    Default

    Quote Originally Posted by isaac View Post
    Cant find examples of this in the online user manual?

    Isaac
    www.melabs.com
    And you won't find examples in the online user manual. That manual is old...very old...

  6. #6
    Join Date
    May 2004
    Location
    brighton
    Posts
    149

    Default

    my complier flags it up as error

  7. #7
    Join Date
    May 2004
    Location
    brighton
    Posts
    149

    Default

    Is there another way i can use to display the number without having to use
    Long?

    Isaac

  8. #8
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924

    Default

    Quote Originally Posted by isaac View Post
    my complier flags it up as error
    Do you have the use PBPL compiler option checked?
    Dave
    Always wear safety glasses while programming.

  9. #9
    Join Date
    May 2004
    Location
    brighton
    Posts
    149

    Default

    Quote Originally Posted by mackrackit View Post
    Do you have the use PBPL compiler option checked?
    where can i find this to tick it
    Isaac

  10. #10
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924

    Default

    I will assume you are using MCS?
    View on the tool bar
    Compile and program options
    then on the Compiler tab there is a check box on the right.
    Dave
    Always wear safety glasses while programming.

  11. #11
    Join Date
    May 2004
    Location
    brighton
    Posts
    149

    Exclamation

    There is not one on mine
    i am using pbp2.50b with Microcode studio
    Attached Images Attached Images  

  12. #12
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924

    Default

    Thats odd. Maybe the new PBP is installed else where. Did you do an upgrade or is this your first time .

    Goto the PBP directory and open the read me file. The version is listed there.
    Dave
    Always wear safety glasses while programming.

  13. #13
    Join Date
    May 2004
    Location
    brighton
    Posts
    149

    Default

    its installed ok
    the upgrade was from crowhill
    here is the readme file

    Isaac
    Attached Images Attached Images  

  14. #14
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924

    Default

    Are you using an old version of MCS?
    Do not know if that would make a difference or not. When I upgraded PBP I also upgraded MCS and MPLAB.
    Dave
    Always wear safety glasses while programming.

  15. #15
    skimask's Avatar
    skimask Guest

    Default

    I thought MCS 3.0.0.5 was the first version to recognize PBPL?

  16. #16
    Join Date
    Aug 2006
    Location
    Omaha, Nebraska USA
    Posts
    263

    Default

    An upgrade to PBP 2.50B will give you LONG variables. From there, you can split up your 'huge' number into smaller numbers and display the chunks individually.
    Is there another way i can use to display the number without having to use
    Long?
    isaac, depending on what you need, you may also be able to manipulate your data in software and massage it into individual digits for serial output. What is the nature of the information you want to read? And from what is that information derived?
    Russ
    N0EVC, xWB6ONT, xWN6ONT

    "Easy to use" is easy to say.

  17. #17
    Join Date
    May 2004
    Location
    brighton
    Posts
    149

    Default

    Hi Russ

    i am trying to implement a 6 digit display
    the problem is my variable Max_Disp which holds the data that is displayed
    can only hold up to 5 digits so 12345 displays ok but when its 123456
    this is grater than a word variable can hold so i need so help in how to do this i am following all the advice given but still lost

    Regards
    ISAAC
    Quote Originally Posted by RussMartin View Post
    isaac, depending on what you need, you may also be able to manipulate your data in software and massage it into individual digits for serial output. What is the nature of the information you want to read? And from what is that information derived?
    Code:
    	
    Again:		
    	Max_Disp=12345
    	Gosub Display			' Display the Value of Counter
    	Pause 150			' Delay, so we can see whats happening
      goto again
    
    
    Display:
    	Digit=0						' Start at Digit 0 of Max_Disp Variable
    	For Position=6 to 1 step -1			' Start at Farthest Right of Display 		
    	Register=Position				' Place Position into Register
    	R_Val=Max_Disp Dig Digit			' Extract the individual numbers from Max_Disp			
    	If Max_Disp<10 and Position=3 then R_Val=15	' Zero Suppression for the second digit
    	If Max_Disp<100 and Position=2 then R_Val=15	' Zero Suppression for the Third digit
    	If Max_Disp<1000 and Position=1 then R_Val=15	' Zero Suppression for the Forth digit
    	If Max_Disp<10000 and Position=0 then R_Val=15	' Zero Suppression for the Fifth digit
    	If Digit=Max_Dp then R_Val.7=1			' Place the decimal point, held in Max_DP
    	Gosub Transfer					' Transfer the 16-bit Word to the MAX7219
    	If Digit>=5 then Digit=0			' We only need the first 6 digits
    	Digit=Digit+1					' Point to next Digit within Max_Disp
    	Next Position					' Close the Loop
    	Return						' Exit from subroutine
    
    ' Send a 16-bit word to the MAX7219 
    Transfer:
      	Shiftout Dta,Clk,msbfirst,[Register,R_Val] ' Shift Out the Register first, then the data
    	High Load				' The data is now acted upon
    @	Nop
    @	Nop					' A small delay to ensure correct clocking times
    	Low Load				' Disable the MAX7219 
    	Return					' Exit from Subroutine

  18. #18
    skimask's Avatar
    skimask Guest

    Default

    Quote Originally Posted by isaac View Post
    can only hold up to 5 digits so 12345 displays ok but when its 123456
    this is grater than a word variable can hold so i need so help in how to do this i am following all the advice given but still lost
    Regards
    ISAAC
    As I said in the other post on the basically the same subject, think fingers and hands. A WORD (hand) can only 'hold' 5 digits (fingers), you can count up to 10,000 but you can't count up to 100,000...
    So, two words (hands) to hold your data, one word (hand) holds 0-9999 the other word (hand) holds the places above 9999.
    Code:
    max_displow = 0 : max_disphigh = 0
    Again: max_displow=maxdisplow+1
    if max_displow>999 then maxdisplow=maxdisplow-1000 : maxdisphigh=maxdisphigh+1
    Gosub Display : Pause 150 : goto again
    Display: For Position=1 to 6 step -1 : Register=Position
    R_Val=Max_Disphigh Dig Digit : if position>3 then r_val=max_displow dig digit
    Gosub Transfer : Digit=Digit+1 : Next Position : Return
    Transfer: Shiftout Dta,Clk,msbfirst,[Register,R_Val] : load=1 : load=1
    load=0 : return
    But again, get PBPL and LONGs working and it'll be a bit easier...

  19. #19
    Join Date
    Aug 2006
    Location
    Omaha, Nebraska USA
    Posts
    263

    Default

    I've looked at the MAX7219 data sheet:

    http://datasheets.maxim-ic.com/en/ds...19-MAX7221.pdf

    . . . but only briefly.

    It looks to me (on page 6) as if you send each digit separately, along with the address of the digit's position (Table 2 on page 7). It also appears that the MAX7219 would be happy with a 4-bit BCD input for each digit. This means you can break your large number down into individual digits, each of which is only 4 bits and can be accomodated by a byte variable. Then you send each digit, and its position address, in a 16-bit word to the display.

    But there's no way to tell you how to break down the number without knowing where you are getting the number from in the first place. Are you counting something? Or measuring something? What is your input? Why do you need 6 digits of output? What is the display telling--this many somethings or this much something?
    Russ
    N0EVC, xWB6ONT, xWN6ONT

    "Easy to use" is easy to say.

  20. #20
    Join Date
    May 2004
    Location
    brighton
    Posts
    149

    Default

    Quote Originally Posted by RussMartin View Post
    I've looked at the MAX7219 data sheet:

    http://datasheets.maxim-ic.com/en/ds...19-MAX7221.pdf


    But there's no way to tell you how to break down the number without knowing where you are getting the number from in the first place. Are you counting something? Or measuring something? What is your input? Why do you need 6 digits of output? What is the display telling--this many somethings or this much something?
    The 6 digits numbers are a set of values like 123456 of which 123 represents 12.3ft and 4.56 metres.
    there would be 10 sets of number like that which would be stores in the
    pics eeprom so those 10 sets of number would take up 40 bytes of the eeprom.
    My thinking was that instead of using 2 Max7219 both connected for 3 digits each and display 12.3 on one and 4.56 on the 2nd .
    i could save on hardware cost if i just display say the first 4 locations containing 123 & 456 with the Max7219 configured for 6 digits.
    i can happily display them individaully but as i said its a waste on hardware.
    i am sorry if i didn't explain myself better from the start.

    Reagrds
    Isaac
    Last edited by isaac; - 27th October 2008 at 19:26.

  21. #21
    Join Date
    May 2004
    Location
    brighton
    Posts
    149

    Lightbulb

    Hi Guys
    i have just sorted out the problem i had with Microcode Studio and
    PBPL and LONGs .
    the problem was that there were CodeStudioPlus.exe and also CodeStudio.exe so i delated the later and i now have PBPL option.
    who is going to be the first to show me how Long works with my problem

    Regards
    Isaac

  22. #22
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898

    Default

    SKIMASK

    MyVar VAR LONG
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  23. #23
    skimask's Avatar
    skimask Guest

    Default

    Quote Originally Posted by mister_e View Post
    SKIMASK
    MyVar VAR LONG
    I know that, but he didn't have PBPL working...
    (you said LONG)

  24. #24
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898

    Default

    Quote Originally Posted by skimask View Post
    I know that, but he didn't have PBPL working...
    (you said LONG)
    ROFL... open your eyes...
    post #21
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  25. #25
    skimask's Avatar
    skimask Guest

    Default

    Well, I would but only after I knew if the O/P had read/learned about LONGs first and tried himself...

  26. #26
    Join Date
    Aug 2006
    Location
    Omaha, Nebraska USA
    Posts
    263

    Default

    Quote Originally Posted by isaac View Post
    The 6 digits numbers are a set of values like 123456 of which 123 represents 12.3ft and 4.56 metres.
    there would be 10 sets of number like that which would be stores in the
    pics eeprom so those 10 sets of number would take up 40 bytes of the eeprom.
    My thinking was that instead of using 2 Max7219 both connected for 3 digits each and display 12.3 on one and 4.56 on the 2nd .
    Then it looks to me like you don't need to use LONGs at all! In fact, I can't see how LONGs will help you.

    In fact, it looks as if you are "multiplexing" two different numbers onto one display.

    Since you are using only three digits per item, the largest of one of them (feet), even if multiplied by 10 for easy handling, is going to be 999, which is a lot less than 65,535, and the largest of the other (meters), even if multiplied by 100 for easy handling, is going to be 9999, which also is a lot less than 65,535. Each can be a WORD.

    In fact, if you allow only three decimal positions for meters, it, too, can never be larger than 999.

    Extract base 10 digits from each word as a binary-coded decimal (BCD) byte, then send each of them out along with a position address in a WORD for the display. Even the order you send them in doesn't matter much, since the word tells the display where that digit needs to appear.

    What is the relationship between the two values being displayed? From where does the data come?
    Last edited by RussMartin; - 28th October 2008 at 08:11.
    Russ
    N0EVC, xWB6ONT, xWN6ONT

    "Easy to use" is easy to say.

  27. #27
    Join Date
    Feb 2013
    Posts
    414

    Default Re: How to display more than 65536 with MAX7219

    It might be a decade delayed answer, but here is what op needs:

    To display any digit at any position on MAX7219, which can drive up to 8 digit 7 segment displays. Without sending actual number to that IC.

    The problem is, that all existing "code samples" for PBP are meant to decode value of some variable into corresponding reading of MAX7219 display. And without "LONG", we are limited to 65535.

    Due to that, I've almost completed a code, which will like this: There are two variables, MPOS, MVAL. First one stands for position on 8 digit display (0-7), and 2nd one is actual number you want to display there. So to display say 00876540, the code will look like this

    Code:
    MPOS=7
    MVAL=0
    GOSUB DSP
    MPOS=6
    MVAL=0
    GOSUB DSP
    MPOS=5
    MVAL=8
    GOSUB DSP
    and so on.

Similar Threads

  1. MAX7219 Helping Hand Please
    By isaac in forum mel PIC BASIC Pro
    Replies: 22
    Last Post: - 14th February 2014, 16:07
  2. Hdsp 21xx display
    By Original in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 7th June 2012, 20:07
  3. 7 Segment Displays and MAX7219
    By Bill Legge in forum mel PIC BASIC Pro
    Replies: 13
    Last Post: - 31st October 2010, 19:30
  4. Replies: 2
    Last Post: - 14th July 2008, 22:11
  5. Replies: 14
    Last Post: - 26th September 2007, 05:41

Members who have read this thread : 13

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts