MAX7219 Helping Hand Please


Closed Thread
Results 1 to 23 of 23

Hybrid View

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

    Default MAX7219 Helping Hand Please

    Hi All

    i am experimenting with MAX7219, seven segment decoder driver
    using Les example program MAX_CNT.BAS in his book "EXPERIMENTING WITH THE PICBASIC PRO COMPILER"
    the program does work a it suppose to counting to 9999 and decrements a 16-bit number
    Question is i want to light up just the g on the four displays to indicate no data
    does anyone know how i can do this

    Regards
    Isaac

    Code:
    ' Program: MAX_CNT.BAS
    ' *************************************************************
    ' * For use with EXPERIMENTING WITH THE PICBASIC PRO COMPILER *
    ' *							      *
    ' *  This source code may be freely used within your own      *
    ' *  programs. However, if it is used for profitable reasons, *
    ' *        please give credit where credit is due.	      *
    ' *  And make a reference to myself or Rosetta Technologies   *
    ' *							      *
    ' *			Les. Johnson			      *
    ' *************************************************************
    '
    ' This Program demonstrates the use of the MAX7219, seven segment decoder driver
    ' It also incorporates placing of Decimal point.
    ' ***********************************************************************
    
    	Include "Modedefs.bas"
        Define	LOADER_USED	1
    ' ** Set Xtal Value in mHz **
    
    	Define	OSC	20		' Set Xtal Frequency
    
    ' ** Declare Pins Used **
    	Clk     Var	PortB.0		' Data is clocked on rising edge of this pin
    	Dta  	Var	PortB.1		' Bits are shifted out of this pin
    	Load    Var	PortB.2		' Transfers data to LEDs when Pulsed
    
    ' ** Declare Constants **
    	Decode_Reg 	Con	9	' Decode register, a 1 turns on BCD decoding for each digit. 
    	Lum_Reg		Con	10	' Intensity register.
    	Scan_Reg	Con	11	' Scan-limit register.
    	Switch_Reg	Con	12	' On/Off Register.
    	Test_Reg	Con	15	' Test mode register (all digits on, 100% bright)
    
    '	Max_Digit	Con	5	' Amount of LED Displays being used.
    
    ' ** Declare Variables **
      	Counter		Var	Word	' Variable used for the Demo Counting routine
    	Max_Disp	Var	Word	' 16-bit value to be displayed by the MAX7219
    	Max_Dp		Var	Byte	' Digit number to place Decimal point (0-4)
    	Register	Var	Byte	' Pointer to the Internal Registers of the MAX7219
    	R_Val		Var	Byte	' Data placed in Each Register
    	Digit		Var	Byte	' Position of individual numbers within MAX_Disp (0-3)
    	Position	Var	Byte	' Position of each LED display (1-4)
    
    ' ** INITIALIZE THE MAX7219 ** 
    ' Each register address is sent along with its setting data. 
    ' Because the MAX7219 expects to see a packet of 16 bits, then the LOAD pin is pulsed
    ' Set the scan limit to 3 (4 digits, numbered 0-3)
    ' Set the Brightness to 5
    ' BCD decoding to the lower 4 digits 
    ' Switch the display on. 
    ' Turn Off test mode
    
    	Register=Scan_Reg		' Point to the Scan Register
    	R_Val=3				    ' send 3, (Four LED Displays 0-3)
    	Gosub Transfer			' Transfer this 16-bit Word to the MAX7219
    
    	Register=Lum_Reg		' Point to the Luminance Register
    	R_Val=0				    ' Send 5, (Value for Brightness)
    	Gosub Transfer			' Transfer this 16-bit Word to the MAX7219
    
    	Register=Decode_Reg		' Point to BCD Decode Register
    	R_Val=%00011111			' Decode the first 5 digits
    	Gosub Transfer			' Transfer this 16-bit Word to the MAX7219
    
    	Register=Switch_Reg		' Point to the Switch Register 
    	R_Val=1				    ' Set to One, (switches the display ON)
    	Gosub Transfer			' Transfer this 16-bit Word to the MAX7219
    
    	Register=Test_Reg		' Point to the Test Register
    	R_Val=0				    ' Reset to Zero, (turns off Test mode)
    	Gosub Transfer			' Transfer this 16-bit Word to the MAX7219
    
    
    ' 		***** MAIN PROGRAM *****
    ' This loop increments and then decrements a 16-bit number 
    ' And displays it on Four LED Displays
    ' The value to be displayed is held in the variable "Max_Disp"
    ' The Position of the decimal point is held in Max_DP (0-4)
    
    	Max_Dp=5			' Display number for Decimal Point
    	
    Again:	For Counter=1 to 9999	' Increment Counter
            Max_Disp=Counter		' Load Max_Disp with Value of Counter
        	Gosub Display			' Display the Value of Counter
        	Pause 150			    ' Delay, so we can see whats happening
        	Next				    ' Close the Loop
    
    	For Counter=9999 to 1 step -1	' Decrement Counter
    	Max_Disp=Counter		' Load Max_Disp with Value of Counter
    	Gosub Display			' Display the Value of Counter
    	Pause 150			' Delay, so we can see whats happening
    	Next				' Close the Loop		
    	Goto Again			' Do it Indefinately
    
    
    ' ** Subroutines **
    ' Display the Value held in the Variable "MAX_DISP" on the four LED's
    ' The value held in "MAX_DP" places the decimal point on that LED (0-3)
    ' Sending the value 15 blanks the display, this allows Zero suppression
    ' By setting bit-7 of the value sent to the individual LED displays, the decimal point
    ' Is illuminated
    
    Display:
    	Digit=0						' Start at Digit 0 of Max_Disp Variable
    	For Position=4 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>=3 then Digit=0			' We only need the first four 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

  2. #2
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,653


    Did you find this post helpful? Yes | No

    Wink

    Hi,

    From the datasheet ... Table 5.

    did you try sending HEX Characters ??? CBDE i.e ???

    Alain
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

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


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Acetronics View Post
    Hi,

    From the datasheet ... Table 5.

    did you try sending HEX Characters ??? CBDE i.e ???

    Alain
    i have tried that but still wont work

    Isaac

  4. #4


    Did you find this post helpful? Yes | No

    Default

    Hi Isaac,

    You have two control ways for this device: decode B and no decode.
    If you stay in decode mode (and I see you using the device in this mode) you can send character 10 and only segment g will be ON (see table 5 in the data sheet).
    If you go in no decode mode you can individually control each segment.

    Regards,

    Nick

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


    Did you find this post helpful? Yes | No

    Thumbs up

    Quote Originally Posted by Nicmus View Post
    Hi Isaac,

    You have two control ways for this device: decode B and no decode.
    If you stay in decode mode (and I see you using the device in this mode) you can send character 10 and only segment g will be ON (see table 5 in the data sheet).
    If you go in no decode mode you can individually control each segment.

    Regards,

    Nick
    Big Thanks to you Nick
    you were correct sending the character 10 and only segment g is ON it works
    i used this loop below

    Code:
      Displayg:
       	Max_Dp=6			             ' Display number for Decimal Point
    	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			
        R_Val=10		            	 ' Display ------ only g is on
    	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
    My next problem now is how to display 6 digits like 123456 i have being going round in circles all night as there is greater then a word variable can handle
    any ideas would be well appreciated

    Regards
    Isaac

  6. #6
    Join Date
    Nov 2005
    Location
    Bombay, India
    Posts
    967


    Did you find this post helpful? Yes | No

    Default

    Isaac

    If you can split the number and have it in RAM as an array, all you need to do is write this out to the 7219 to be displayed. So, I would hazard a guess that your question is more about how to split a number to be displayed. Could you be more specific about your question?

    Jerson

  7. #7
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by isaac View Post
    My next problem now is how to display 6 digits like 123456 i have being going round in circles all night as there is greater then a word variable can handle
    any ideas would be well appreciated
    You learned how to do this when you were 5 (give or take), you just don't know it...

    You count to ten on your fingers, but you want to keep counting, so what do you do?
    You get your brother to HOLD the PLACE of the overflow from your fingers, so every time you go over 10, you reset to ZERO, and he adds another finger, and you keep counting.
    Well, now your brother is out of fingers, so what do you do?
    You get your sister to count the overflows from your brother.

    You overflow, reset, add one to your brother...keep counting...
    Your brother overflows, resets, and adds one to your sister...keep counting...
    And so on and so on and so on...
    So, you are counting ones...
    Your brother is counting tens...
    Your sister is counting hundreds...

    Now, replace the words YOU, BROTHER, and SISTER, with some other digit placeholder that's compatible with PBP... Now what in PBP could possibly hold the value of a digit (or digits) of some sort?

Similar Threads

  1. Max7219 cascading problem ?
    By iugmoh in forum General
    Replies: 2
    Last Post: - 13th December 2020, 10:53
  2. 7 Segment Displays and MAX7219
    By Bill Legge in forum mel PIC BASIC Pro
    Replies: 13
    Last Post: - 31st October 2010, 18:30
  3. Shorter Subroutines for MAX7219
    By exelanoz in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 16th March 2007, 11:35
  4. Using a MAX7219 (LED digit multiplexer) with a 16F88
    By flotulopex in forum mel PIC BASIC Pro
    Replies: 8
    Last Post: - 11th March 2007, 21:11
  5. max7219 blank leading zeroes
    By lutherblissett in forum General
    Replies: 0
    Last Post: - 13th November 2005, 16:46

Members who have read this thread : 1

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