| This project uses an 8-pin 
	microcontroller to produce a tumbling dice via red LEDs.
 
 There are lots of DICE projects on the web and many of them are 
	copies of our original LED Dice with slowdown.
 The circuit and layout has been copied by many websites and it is pleasing 
	to know that thousands of hobbyists have built our circuit and enjoyed its 
	features.
 We now show how the same effect can be produced with a microcontroller and a 
	few resistors. The circuit is simpler, the board is smaller and the project 
	costs less than the original design.
 That's the advantage of the microcontroller.
 This project is parts of a course where we show how to design around a 
	microcontroller because this is the way of the future.
 Once you collect the equipment necessary to burn the microcontroller, and 
	set-up your computer with NotePad2, to write the programs you will have 2 
	separate areas in your work-room.
 One area will consists of a soldering iron, components and experimenter 
	boards, where you design and develop the project. The other area will 
	consist of a computer with
				
	NotePad2, where you write the program using mnemonics (short sentences) and 
	compile it with MPASM to produce a .asm file as well as a .hex file.
 The .hex file will then be used by WinPIC to burn the micro (program the 
	micro).
 Take the micro from the programming socket on PIC Programmer MkIV, insert it 
	into the project and view the results.
 This is just like designing and producing your own chip.
 
 Here are some of the Dice projects and kits on the web:
 
	 The Spikenzielabs project does not
 have a "rolling effect."
 The piezo under the board
 is tapped to change the LEDs.
 It is a $20.00 soldering project.
 The .asm program is very messy
 
 
  This $13.00 LED Dice from 
	lightinthebox.com
 is already built and
 does not teach any electronics.
 
	 Another LED Dice project but no
 program provided
 
 
  
  This project uses the same chip as our 
	project but
 the PICAXE 08M chip is already programmed with
 routines and costs more than $5.00
 You select the routines from a list to create a program
 but you are not "PIC programming."
 
	 A Velleman kit. They are trying to
 sell old technology!! Note the
 "windowed" PIC chip!!!!!
 
	 This kits costs about $18.00 but the
 microcontroller is unknown.
 
	 A LED Dice project constructed on 
	Matrix Board.
 Only the .hex file is provided.
 
	 This project uses ATTiny-13 micro.
 The PC board should have current-limiting resistors.
 The display does not have a "rolling Dice" effect.
 
 
  Another ATTiny-13 micro LED Dice project
 A nice layout showing how to add surface-mount components.
 
	 This is the front page from a Silicon 
	Chip project
 but the remainder of the article cannot be located.
 None of the Dice projects 
	on the web teach how to create a program and they are simply soldering 
	exercises. Ours is an EDUCATIONAL PROJECT.
 We explain every instruction in the program so you can use them in the next 
	project you are developing.
 
 Here's an interesting comment from 
	Doug Jackson, 
	writing for Silicon Chip:
 Let’s settle an argument before it starts. Die or Dice? 
	Sure, the Oxford Dictionary would have us say one die, two dice. But every 
	man and his dog uses the word "dice" for both singular and plural. So we’ll 
	stick with dice.
 Using a PIC allows us to significantly simplify our dice circuit. Previous 
	designs have typically used at least two ICs, four or more transistors and 
	many resistors and capacitors.
 
 This project an ideal way for a beginner in micros to get a grasp of the 
	fundamentals.
 
 The 8-pin PIC micro we are using has 6 input-output lines and one line that 
	is INPUT-ONLY.
 We will use the input line for the switch and 4 of the other lines as 
	OUTPUTS.
 Each output line can deliver 25mA. This limitation is due to the FET 
	transistors inside the the chip. Obviously they are microscopic and 25mA is 
	a great achievement. Many of the other microcontrollers can only deliver 
	20mA per drive-line.
 
 DRIVE CURRENT
 Drive Current is the current delivered to each LED to make it 
	illuminate.
 There is a very wide range of LEDs on the market, from surface-mount, to 3mm 
	to 5mm and they range from very poor quality to bright, high-bright and 
	super bright.
 Some LEDs require 20mA to produce good illumination while others produce a 
	very good output with as little as 2 to 5mA.
 On top of this, different colour LEDs have a different characteristic 
	voltage-drop across them when illuminated and all these factors have to be 
	taken into account when determining the value of the current-limiting 
	resistor for each output.
 One output has a single LED while the other outputs have two LEDs in series.
 The value of dropper resistor for the single LED can range from   
	R for a red LED requiring 5mA, to R for an orange LED requiring 20mA.
 We have selected 68R for the 2 LEDs in series to provide about 10mA and 82R 
	for the single LED to provide about 20mA.
 Look at the illumination; decide which value is most suitable and adjust the 
	current accordingly.
 Red LEDs drop about 1.7v when illuminated, orange LEDs about 2v, and green 
	LEDs about 2.3v.
 This value does not change if the LED is surface-mount or 5mm, but it does 
	change slightly when the current is increased.
 
 THE PIC DICE PROJECT
 This project is very simple because all the features are 
	contained in the microcontroller in the form of a program.
 Instead of a two chips and a lot of surrounding timing components, as in 
	previous LED Dice projects, we have a 
	single chip driving the 7 LEDs and 
	a few current limiting 
	resistors.
 You can approach this project in several different ways at different levels.
 You can simply buy a kit and put it together.
 Or you can buy the components from your local electronics store and burn the 
	program into the micro using
	PIC Programmer MkIV 
	project and the .hex file provided.
 Or you can go further and change some of the instructions in the program to 
	produce different "rolling effects." For this you will need the .asm 
	file
 All these levels are available because we have provided the 
	full program listing plus hardware and software to get you into 
	PIC Programming at the lowest cost.
 The circuit is very simple. It just consists of a micro, 7 LEDs, 
	resistors and a "roll" switch.
 
	 PIC 
	DICE circuit using a PIC12F629 Microcontroller
 The only components that 
	may have to be adjusted are the current-limiting resistors, to get the 
	desired brightness. We have suggested values for super-bright red LEDs, but 
	if you want to use other colours you may have to decease the values 
	slightly. For white LEDs, the supply voltage will have to be increase to at 
	least 4.5v. This modification is covered in the article on the web. You can build this project as a soldering exercise or go further and 
	investigate the program and change some of the instructions to produce 
	different “rolling” effects.
 
	 The 
	PIC Dice project constructed on Matrix Board.
 
	 The underside of the board showing the 
	"point-to-point" wiring.
 
	 The topside of the Matrix Board and 
	the underside wiring
 When the circuit is 
	switched on, the tactile switch is pressed and the LEDs flash to represent 
	the rolling of the dice.The “rolling” gradually slows and a result appears on the LEDs. After 6 
	seconds the LEDs go out and the switch can be pressed again for another 
	“roll.”
 Here is the PIC DICE on Printed Circuit Board: 
	 
	The negative of the cell holder goes to 
	the bottom rail 
 
	 
	 PIC LED Dice now comes with 10mm
 Jumbo RED LEDs for $2.50 extra.
 Ask for them when ordering.
 The PC board is also larger.
 
		
			| 
				
					| PIC Dice PARTS LIST
 Kit: $8.50
 plus $4.00 postage
 |  |  
			| 
				
					| 3  -  100R 
					surface mount1  -  220R SM
 1  -  47k SM
 7  -  3mm high-bright red LEDs
 1  -  8 pin IC socket
 1  -  PIC12F629 microcontroller with DICE
 1  -  tactile switch
 1  -  mini on-off slide switch
 1  -  coin cell holder
 1  -  3v lithium coin cell  CR2025
 Fine tinned copper wire  - 6cm
 Fine solder – 20cm
 1  -  PIC DICE PC Board
 |  |    Here are the files you 
	will need to burn the program into the PIC12F629 micro:
	Dice.asmDice.txt
 Dice.hex
 Dice_hex.txt
 Dice.zip
 
		
			| 	
;*************************************************************
;;PIC Dice.asm         *
;7 LEDs  - slow down and stops on a random face of a dice -
	
	list	p=12F629
	radix	dec
	include	"p12f629.inc"
	
	errorlevel -302	; Dont complain about BANK 1 Registers 
	__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT
	
	; globals
	;20h		;this is the first available file
fileA	equ		26h
fileB	equ		27h	
fileC	equ		28h
fileD	equ		29h	
temp1	equ		2Ah
temp2	equ		2Bh
temp3	equ		2Ch
random	equ		30h
	;5Fh		;this is the last available file
status		equ	03h
option_reg	equ 	81h
	; bits on GPIO
				
pin7		equ	0	;GP0  
pin6	 	equ	1	;GP1
pin5		equ	2	;GP2 
pin4		equ	3	;GP3 input only
pin3		equ	4	;GP4 
pin2		equ	5	;GP5 
	;bits
				
rp0	equ	5	;bit 5 of the status register
		
Start	org	0x00	;program starts at location 000
	nop
	nop
	nop
	nop		;NOPs to get past reset vector address
	nop
	nop
SetUp	bsf	status, rp0 	;Bank 1	
	movlw   b'11001000' 	;GP3 input
 	movwf   TRISIO 
        bcf	status, rp0	;bank 0   
	movlw   07h     	;Set up W to turn off Comparator ports
        movwf   CMCON       	;must be placed in bank 0
        clrf 	GPIO       	;Clear GPIO of junk	
	clrf	random
	goto 	Main	
		
		
	
	;Delay  - slow-down
        ;This is where the random number is generated. The micro very
        ;quickly comes to Del_1 while the switch is still pressed and
        ;increases Random very quickly until the switch is released.  
Del_1	movlw 	01h
	movwf 	fileC
	movf	temp1,0
	movwf	fileB	
DelY	decfsz 	fileA,1		
	goto 	DelY
	btfsc	GPIO,3
	goto	_AA
	incf	random,1
	movlw	07
	subwf	random,0
	btfss	03,0	    ;test the Carry.  
	goto	_AA         ;Carry is SET if W is less than or equal
	clrf	random
	incf	random,1			
_AA	decfsz 	fileB,1		
	goto 	DelY
	decfsz 	fileC,1
	goto 	DelY
	retlw 	00
		
	;This is the final display-delay before going blank
		
Del_10	movlw 	12h
	movwf 	fileC		
DelZ	decfsz 	fileA,1		
	goto 	DelZ	
	decfsz 	fileB,1		
	goto 	DelZ
	decfsz 	fileC,1
	goto 	DelZ
		
		
	;This is where the program blanks the display and makes the
        ;inputs/outputs into inputs to reduce the 
        ;current during SLEEP	
blank	bsf	status, rp0 	;Bank 1			
       	movlw	b'11111111'	;Set GP 1,2 4 5 input
	movwf	TRISIO	   	;	
	movf	GPIO,0
	movlw	b'00001000' 	;must clear the GPIF flag!!
	movwf	INTCON
	bsf	IOC,3
	sleep
	nop
	bcf	status, rp0	;bank 0  
	goto	SetUp
		
			
				
cycle	movlw 	0Ch
	movwf	temp3
	movlw	20h
	movwf	temp2
cycle1	call 	face1
	incf	temp2,1
	incf	temp2,1
	incf	temp2,1
	movf	temp2,0
	movwf	temp1
	call 	Del_1
		
	call 	face2
	incf	temp2,1
	incf	temp2,1
	incf	temp2,1
	movf	temp2,0
	movwf	temp1
	call 	Del_1
		
	call 	face3
	incf	temp2,1
	incf	temp2,1
	incf	temp2,1
	movf	temp2,0
	movwf	temp1
	call 	Del_1
		
	call 	face4
	incf	temp2,1
	incf	temp2,1
	incf	temp2,1
	movf	temp2,0
	movwf	temp1		
	call 	Del_1
		
	call 	face5
	incf	temp2,1
	incf	temp2,1
	incf	temp2,1
	movf	temp2,0
	movwf	temp1
	call 	Del_1
		
	call 	face6
	incf	temp2,1
	incf	temp2,1
	incf	temp2,1
	movf	temp2,0
	movwf	temp1
	call 	Del_1
	decfsz	temp3,1		
	goto 	cycle1		
	retlw	00 
	
		
end1	call 	face1
	movf	temp2,0
	movwf	temp1
	call 	Del_1	
	retlw	00
		
end2	call 	face2
	movf	temp2,0
	movwf	temp1
	call 	Del_1	
	retlw	00		
		
		
end3	call 	face3
	movf	temp2,0
	movwf	temp1
	call 	Del_1	
	retlw	00	
				
end4	call 	face4
	movf	temp2,0
	movwf	temp1
	call 	Del_1	
	retlw	00	
		
		
end5	call 	face5
	movf	temp2,0
	movwf	temp1
	call 	Del_1	
	retlw	00			
		
			
		
face1	movlw	b'00010000'		; 
	movwf	GPIO
	retlw 	00				
		
		
face2	movlw	b'00000100'		;
	movwf	GPIO
	retlw 	00	
		
		
face3	movlw	b'00010100'		; 
	movwf	GPIO
	retlw 	00			
		
		
face4	movlw	b'00000110'		;  
	movwf	GPIO
	retlw 	00	
		
		
face5	movlw	b'00010110'		;
	movwf	GPIO
	retlw 	00	
		
face6	movlw	b'00100110'		; 
	movwf	GPIO
	retlw 	00	
				
				
						
finish1	call	end1
	goto	Del_10		
		
finish2	call	end1
	call	end2
	goto	Del_10			
			
finish3	call	end1
	call	end2
	call	end3
	goto	Del_10	
		
finish4	call	end1
	call	end2
	call	end3
	call	end4
	goto	Del_10			
			
finish5	call	end1
	call	end2
	call	end3
	call	end4
	call	end5
	goto	Del_10					
		
			
       ;This is where the Random number is decremented to produce the
       ;final value on the display 
			
Main	btfsc	GPIO,3
	goto	Main
	call	cycle
Main1	decfsz	random,1
	goto	Main2
	goto	finish1
Main2	decfsz	random,1	
	goto	Main3
	goto	finish2
Main3	decfsz	random,1	
	goto	Main4
	goto	finish3
Main4	decfsz	random,1	
	goto	Main5
	goto	finish4
Main5	decfsz	random,1			
	goto	Del_10
	goto	finish5			
		
	end |  
				
	
              
 
 
              ooo00000ooooooxx
  
              12-9-2014 
 |