Page11
This experiment adds sound to the LED Dice experiment from Page 10. You should have already carried out the Piezo experiments from Piezo Experiments Page1 and Piezo Experiments Page2.
Adding sound to a project needs a little bit of thought. The micro cannot do two things at the same time unless they are multiplexed. In other words they have to be interleaved together so that the micro can jump from one routine to the other very quickly.
Essentially, the micro’s time is completely taken up by scanning the display in all the programs we have presented, and the same applies to creating a tone. There is however, a short delay in the heart of each routine where the micro can go to another routine, carry out a task and return before the delay needs to be ended.
In this way the micro can jump from one sub-routine to another and effectively carry out both operations.
The one thing that has to be remembered is TIMING. In other words the time-interval when the micro is being sent away to another routine, must be accurately worked-out. If not, the sound will not be the correct tone and/or the display will not have the same brightness overall.
In this experiment we have used the existing Scan routine to turn the piezo on and off by setting or clearing the piezo bit. We are just fortunate that the scan-rate is very similar to the tone-rate from a piezo experiment.
The only extra sub-routine we added was Face6B. It turns on the piezo when the “piezo-bit” (Bit 7 of file 1F) is SET.
<!-- //TODO FIX ME: 'cannot find file at images'-->
Experiment-27 for “5x7 Display” Project
;PIC16F84 and only F84 chip
;LED Dice with Sound-1
Start ORG 0x00 BSF 03,5 ;Go to page1 for setting-up the ports MOVLW 04h ;Put 04 into W MOVWF 05h ; to make RA2 input for button A MOVLW 00h ;Put 00 into W MOVWF 06h ;and make port 6 (port B) all output BCF 03,5 ;Go to page0 for programming MOVWF 1Ch BCF 1F,7 ;Bit for tone GOTO Main Table1 ADDWF 02h,1 ;Add W to Program Counter RETLW 03h RETLW 07h RETLW 06h RETLW 04h RETLW 02h RETLW 06h RETLW 07h RETLW 03h RETLW 05h RETLW 02h RETLW 02h RETLW 03h RETLW 05h RETLW 04h RETLW 02h RETLW 07h RETLW 06h RETLW 07h RETLW 04h RETLW 03h RETLW 02h RETLW 05h RETLW 07h RETLW 06h RETLW 03h RETLW 02h RETLW 02h RETLW 03h RETLW 04h RETLW 05h RETLW 04h RETLW 03h RETLW 07h RETLW 04h RETLW 06h RETLW 07h RETLW 02h RETLW 03h RETLW 04h RETLW 05h RETLW 01h Face1 MOVLW 00h ;place the 5 values into the 5 MOVWF 11h ; files to produce the first face MOVLW 08h MOVWF 12h MOVLW 1Ch MOVWF 13h MOVLW 08h MOVWF 14h MOVLW 00h MOVWF 15h GOTO Scan Face2 MOVLW 03h ;place the 5 values into the 5 MOVWF 11h ; files to produce the second face MOVLW 03h MOVWF 12h MOVLW 00h MOVWF 13h MOVLW 60h MOVWF 14h MOVLW 60h MOVWF 15h GOTO Scan Face3 MOVLW 03h ;place the 5 values into the 5 MOVWF 11h ; files to produce the third face MOVLW 0Bh MOVWF 12h MOVLW 1Ch MOVWF 13h MOVLW 68h MOVWF 14h MOVLW 60h MOVWF 15h GOTO Scan Face4 MOVLW 63h ;place the 5 values into the 5 MOVWF 11h ; files to produce the fourth face MOVLW 63h MOVWF 12h MOVLW 00h MOVWF 13h MOVLW 63h MOVWF 14h MOVLW 63h MOVWF 15h GOTO Scan Face5 MOVLW 63h ;place the 5 values into the 5 MOVWF 11h ; files to produce the fifth face MOVLW 6Bh MOVWF 12h MOVLW 1Ch MOVWF 13h MOVLW 6Bh MOVWF 14h MOVLW 63h MOVWF 15h GOTO Scan Face6 BTFSS 1F,7 GOTO Face6B MOVLW 0EBh ;place the 5 values into the 5 MOVWF 11h ; files to produce the sixth face MOVLW 80h MOVWF 13h Face6A MOVLW 6Bh MOVWF 12h MOVLW 6Bh MOVWF 14h MOVLW 6Bh MOVWF 15h GOTO Scan Face6B MOVLW 6B ;This sub-routine only allows the MOVWF 11h ;tone to be produced MOVLW 00 ;when the final face6 appears on MOVWF 13h ;the screen. GOTO Face6A Scan BSF 05,1 ;Reset 4017 NOP BCF 05,1 MOVF 11h,0 ;Move file 11 into W MOVWF 06h CALL DelD MOVWF 06h CALL DelD MOVF 13h,0 ;Move file 13 into W MOVWF 06h CALL DelD MOVF 14h,0 ;Move file 14 into W MOVWF 06h CALL DelD MOVF 15h,0 ;Move file 15 into W MOVWF 06h CALL DelD RETURN DelD DECFSZ 1Bh,1 GOTO DelD MOVLW 00h ;Zero port B to prevent mirroring MOVWF 06 Clk BSF 05,0 ;Clock the 4017 NOP BCF 05,0 RETURN XX MOVF 1Ch,0 ;Move 1C to W CALL Table1 MOVWF 1Dh ;Move W to 1D for decrementing DECFSZ 1Dh,1 GOTO XX1 MOVLW 00 ;Detects end of table MOVWF 1Ch ;Zero 1C to start at top of table GOTO XX XX1 DECFSZ 1Dh,1 GOTO XX2 GOTO Face1 XX2 DECFSZ 1Dh,1 GOTO XX3 GOTO Face2 XX3 DECFSZ 1Dh,1 GOTO XX4 XX4 DECFSZ 1Dh,1 GOTO XX5 GOTO Face4 XX5 DECFSZ 1Dh,1 GOTO Face6 GOTO Face5 Main MOVLW 30h ;Each 10h represents 100mS MOVWF 0Ch Main1 CALL XX DECFSZ 0Ch GOTO Main1 INCF 1C MOVLW 40h ;Each 10h represents 100mS MOVWF 0Ch Main2 CALL XX ;Display Face for 400mS DECFSZ 0Ch GOTO Main2 INCF 1C MOVLW 50h ;Each 10h represents 100mS MOVWF 0Ch Main3 CALL XX ;Display Face for 500mS DECFSZ 0Ch GOTO Main3 INCF 1C MOVLW 60h ;Each 10h represents 100mS MOVWF 0Ch Main4 CALL XX ;Display Face for 600mS DECFSZ 0Ch GOTO Main4 INCF 1C MOVLW 70h ;Each 10h represents 100mS MOVWF 0Ch Main5 CALL XX ;Display Face for 700mS DECFSZ 0Ch GOTO Main5 INCF 1C Main6 BSF 1F,7 CALL XX ;Display until button A pressed BTFSS 05,2 ;Test for button A GOTO Main6 BCF 1F,7 GOTO Main END
The block of numbers below is the HEX file for Experiment-27. Copy and paste it into a text program such as TEXTPAD or NOTEPAD and call it: Expt-27.hex
:100000008316043085000030860083129C009F1305 :10001000AE2882070334073406340434023406342D :100020000734033405340234023403340534043411 :1000300002340734063407340434033402340534FC :1000400007340634033402340234033404340534F0 :1000500004340334073404340634073402340334DC :1000600004340534013400309100083092001C3013 :10007000930008309400003095007C2803309100F4 :10008000033092000030930060309400603095009F :100090007C28033091000B3092001C3093006830B4 :1000A0009400603095007C286330910063309200AA :1000B0000030930063309400633095007C286330F7 :1000C00091006B3092001C3093006B3094006330D1 :1000D00095007C289F1F7728EB309100803093009B :1000E0006B3092006B3094006B3095007C286B3045 :1000F00091000030930070288514000085101108CD :1001000086008F20120886008F20130886008F201B :10011000140886008F20150886008F2008009B0B8E :100120008F280030860005140000051008001C0808 :1001300009209D009D0B9F2800309C0097289D0B57 :10014000A22833289D0BA5283E289D0BA8284928C6 :100150009D0BAB2854289D0B6A285F2830308C00FB :1001600097208C0BB0289C0A40308C0097208C0B79 :10017000B6289C0A50308C0097208C0BBC289C0A17 :1001800060308C0097208C0BC2289C0A70308C0049 :1001900097208C0BC8289C0A9F179720051DCC28F8 :0401A0009F13AE28D3 :00000001FF
This is an extension of experiment 27. In this experiment we add sound as a separate sub-routine (called Tone) so you can see how to add it to your own programs. The display represents the face of a dice. The numbers flicker and change and come to rest on a random number. When the face shows “six,” the tone is produced. Press button “A” for the next “throw.”
The program is complete and runs satisfactorily but two areas need improvement.
Experiment-28 for “5x7 Display” Project
;PIC16F84 and only F84 chip
;LED Dice with Sound-2
Start ORG 0x00 BSF 03,5 ;Go to page1 for setting-up the ports MOVLW 04h ;Put 04 into W MOVWF 05h ; to make RA2 input for button A MOVLW 00h ;Put 00 into W MOVWF 06h ;and make port 6 (port B) all output BCF 03,5 ;Go to page0 for programming MOVWF 1Ch MOVWF 0Fh ;Zero the number of cycles for Tone BCF 1F,7 ;Bit for tone GOTO Main able1 ADDWF 02h,1 ;Add W to Program Counter RETLW 03h RETLW 07h RETLW 06h RETLW 04h RETLW 02h RETLW 06h RETLW 07h RETLW 03h RETLW 05h RETLW 02h RETLW 02h RETLW 03h RETLW 05h RETLW 04h RETLW 02h RETLW 07h RETLW 06h RETLW 07h RETLW 04h RETLW 03h RETLW 02h RETLW 05h RETLW 07h RETLW 06h RETLW 03h RETLW 02h RETLW 02h RETLW 03h RETLW 04h RETLW 05h RETLW 04h RETLW 03h RETLW 07h RETLW 04h RETLW 06h RETLW 07h RETLW 02h RETLW 03h RETLW 04h RETLW 05h RETLW 06h RETLW 01h Face1 MOVLW 00h ;place the 5 values into the 5 MOVWF 11h ; files to produce the first face MOVLW 08h MOVWF 12h MOVLW 1Ch MOVWF 13h MOVLW 08h MOVWF 14h MOVLW 00h MOVWF 15h GOTO Scan Face2 MOVLW 03h ;place the 5 values into the 5 MOVWF 11h ; files to produce the second face MOVLW 03h MOVWF 12h MOVLW 00h MOVWF 13h MOVLW 60h MOVWF 14h MOVLW 60h MOVWF 15h GOTO Scan Face3 MOVLW 03h ;place the 5 values into the 5 MOVWF 11h ; files to produce the third face MOVLW 0Bh MOVWF 12h MOVLW 1Ch MOVWF 13h MOVLW 68h MOVWF 14h MOVLW 60h MOVWF 15h GOTO Scan Face4 MOVLW 63h ;place the 5 values into the 5 MOVWF 11h ; files to produce the fourth face MOVLW 63h MOVWF 12h MOVLW 00h MOVWF 13h MOVLW 63h MOVWF 14h MOVLW 63h MOVWF 15h GOTO Scan Face5 MOVLW 63h ;place the 5 values into the 5 MOVWF 11h ; files to produce the fifth face MOVLW 6Bh MOVWF 12h MOVLW 1Ch MOVWF 13h MOVLW 6Bh MOVWF 14h MOVLW 63h MOVWF 15h GOTO Scan Face6 BTFSC 1F,7 GOTO Face6B Face6A MOVLW 6Bh ;place the 5 values into the 5 MOVWF 11h ; files to produce the sixth face MOVLW 6Bh MOVWF 12h MOVLW 00h MOVWF 13h MOVLW 6Bh MOVWF 14h MOVLW 6Bh MOVWF 15h GOTO Scan Face6B DECFSZ 0Fh,1 ;Decrement the tone cycles GOTO Face6C INCF 0Fh,1 GOTO Face6A Face6C BSF 05,1 ;Reset 4017 NOP BCF 05,1 MOVLW 6Bh ; MOVWF 06h CALL Tone MOVLW 6Bh ; MOVWF 06h CALL Tone MOVLW 00 ; MOVWF 06h CALL Tone MOVLW 6Bh ; MOVWF 06h CALL Tone MOVLW 6Bh ; MOVWF 06h CALL Tone RETURN Tone MOVLW 0Ah ;The number of cycles MOVWF 0Dh Tone1 MOVLW 60h ;the ON and OFF time for the tone MOVWF 0Eh MOVLW 80h ;Toggle the piezo line XORWF 06h,1 Tone2 DECFSZ 0Eh,1 GOTO Tone2 DECFSZ 0Dh,1 GOTO Tone1 GOTO Clk Scan BSF 05,1 ;Reset 4017 NOP BCF 05,1 MOVF 11h,0 ;Move file 11 into W MOVWF 06h CALL DelD MOVF 12h,0 ;Move file 12 into W MOVWF 06h CALL DelD MOVF 13h,0 ;Move file 13 into W MOVWF 06h CALL DelD MOVF 14h,0 ;Move file 14 into W MOVWF 06h CALL DelD MOVF 15h,0 ;Move file 15 into W MOVWF 06h CALL DelD RETURN DelD MOVLW 04h ;A 2-file delay routine MOVWF 0Dh ;to give sufficient time DelE DECFSZ 0Eh,1 ;for the tone routine GOTO DelE DECFSZ 0Dh,1 GOTO DelE MOVLW 00h ;Zero port B to prevent mirroring MOVWF 06 Clk BSF 05,0 ;Clock the 4017 NOP BCF 05,0 RETURN XX MOVF 1Ch,0 ;Move 1C to W CALL Table1 MOVWF 1Dh ;Move W to 1D for decrementing DECFSZ 1Dh,1 GOTO XX1 MOVLW 00 ;Detects end of table MOVWF 1Ch ;Zero 1C to start at top of table GOTO XX XX1 DECFSZ 1Dh,1 GOTO XX2 GOTO Face1 XX2 DECFSZ 1Dh,1 GOTO XX3 GOTO Face2 XX3 DECFSZ 1Dh,1 GOTO XX4 GOTO Face3 XX4 DECFSZ 1Dh,1 GOTO XX5 GOTO Face4 XX5 DECFSZ 1Dh,1 GOTO Face6 GOTO Face5 Main BSF 0Fh,5 ;Set 32 cycles for tone MOVLW 05 ;5 faces before final face MOVWF 1E Main1 MOVLW 10h MOVWF 0Ch Main2 CALL XX DECFSZ 0Ch GOTO Main2 INCF 1C,1 DECFSZ 1Eh,1 GOTO Main1 BSF 1F,7 ;tone will only sound during final display Main3 CALL XX ;Display until button A pressed BTFSS 05,2 ;Test for button A GOTO Main3 BCF 1Fh,7 GOTO Main END
The block of numbers below is the HEX file for Experiment-28. Copy and paste it into a text program such as TEXTPAD or NOTEPAD and call it: Expt-28.hex
:100000008316043085000030860083129C008F0028 :100010009F13D12882070334073406340434023492 :10002000063407340334053402340234033405340F :1000300004340234073406340734043403340234FD :1000400005340734063403340234023403340434F0 :1000500005340434033407340434063407340234DA :100060000334043405340634013400309100083080 :1000700092001C30930008309400003095009B28BB :100080000330910003309200003093006030940000 :10009000603095009B28033091000B3092001C309B :1000A000930068309400603095009B286330910085 :1000B0006330920000309300633094006330950009 :1000C0009B28633091006B3092001C3093006B30A2 :1000D0009400633095009B289F1B79286B3091001A :1000E0006B309200003093006B3094006B309500C1 :1000F0009B288F0B7D288F0A6E28851400008510A1 :100100006B30860090206B30860090200030860097 :1001100090206B30860090206B3086009020080085 :100120000A308D0060308E00803086068E0B962857 :100130008D0B9228B62885140000851011088600C2 :10014000AE2012088600AE2013088600AE201408E8 :100150008600AE2015088600AE20080004308D0011 :100160008E0BB0288D0BB0280030860005140000DF :10017000051008001C080A209D009D0BC2280030B5 :100180009C00BA289D0BC52835289D0BC8284028FF :100190009D0BCB284B289D0BCE2856289D0B6C28F9 :1001A00061288F1605309E0010308C00BA208C0B11 :1001B000D6289C0A9E0BD4289F17BA20051DDD283F :0401C0009F13D12890 :00000001FF
Go to the next page of experiments: 5x7 PIEZO EXPERIMENTS: Page-1
Quick Links
Legal Stuff
Social Media