5x7 Display Piezo Experiments Page1

EXPERIMENT-1P   Making a Tone 
This experiment demonstrates how to create a tone from a piezo. A Piezo is very similar to a 22n capacitor as far as the circuit is concerned and the micro sees the piezo as a capacitor. In other words it does not see it a resistive load. In fact it is not a load but a small amount of effort is required to send energy into the capacitor and then "drain it out." When this is done thousands of times a second, the end result is small amount of energy is required.  When a voltage is delivered to the piezo, a thin white crystal substance between two plates sees this voltage and expands. Since it is glued to one side of a thin sheet of metal, it make the side of the metal expand and this "dishes" the metal. When the crystal substrate sees no voltage or a reverse voltage, it shrinks and this flattens or reverses the metal disk. If this is repeated fast enough, the result is a horrible, tinny sound that we have come to know as a "piezo squeal." As the pulse-rate increases, the output frequency of the piezo increases and a point is reached when the output increases enormously. This is the "resonant frequency" of the piezo and that is why some piezos give an extremely loud output. They are not only "good quality" piezos but are operating at their optimum frequency. 
The program below produces a tone of approx 500Hz from the piezo.
The delay routine consists of 255 loops of decrementing file 1A. This file does not have to be loaded with a value if you want 255 decrements as the file is decremented first then tested and thus it starts at 255 at the beginning of decrementing. 
The circuit for "5x7 Display" is shown below:



               Experiment-1P for "Piezo on 5x7 Display" Project
                               ;PIC16F84 and only F84 chip 
                                          ;Creating a tone
 
 Start     ORG 0x00
              BSF 03,5              ;Go to page1 for setting-up the ports 
              MOVLW 00h        ;Put 00 into W 
              MOVWF 05h        ; to make all RA lines output 
              MOVWF 06h        ;to make all RB lines output
              BCF 03,5              ;Go to Page0 for programming

 Tone1   BSF 06,7              ;this  is the  piezo line.  Turn it ON
              CALL Delay          ;Call Delay
              BCF 06,7              ;Turn off the piezo
              CALL Delay          ;Call Delay
              GOTO Tone1        ;Repeat the routine

 Delay    DECFSZ 1Ah,1     ;Delay for tone
              GOTO Delay 
              RETURN

              END
 


The block of numbers below is the HEX file for Experiment-1P. Copy and paste it into a text program such as TEXTPAD or NOTEPAD and call it: Expt-1P.hex   
:100000008316003085008600831286170A20861327
:0A0010000A2005289A0B0A280800B0
:00000001FF  

 
EXPERIMENT-2P   Producing a beep
This experiment produces a beep. It is repeated every second.
One of the biggest problems with creating a tone or a beep is the computer-time taken up. As you can see from the program, a tone (or beep) is created by turning ON an output, calling a delay routine, then turning the piezo OFF. Even though it takes only one instruction to turn the piezo on or off, the delay between each operation is fairly short and quite often the program is required to concentrate on producing the beep. This is ok if the beep is very short as the routine can be hidden inside a longer delay that may be displaying a column of LEDs, for example, or during the time when the screen is blanked. 
If you want to scan the screen while producing a tone tone at the same time, you have to integrate two routines and execute them at the same time. This is very difficult to do as you must know exactly the length of the second routine so that the tone has the correct frequency. The second routine cannot have any variation in its length as this will alter the frequency.
The routine below produces a beep . . . beep . . .beep . . beep . . .  from the piezo. 
4 loops i.e: 4 delay routines are needed to produce the effect. The first delay routine is needed after the piezo has been turned on. The second delay routine is needed after the piezo has been turned off. This action has to be repeated to actually produce a tone as the operation of turning the piezo on and then off does not produce a tone. It's only when this is repeated many times in a short period of time that the sound is generated. 
The piezo is connected to the micro via a buffer transistor so that a choke can be added to the circuit to increase the sound output. The piezo-circuit must not be left ON after a tone is emitted as the circit takes a very high current in the ON condition.  
If you want the piezo to be louder, a choke can be added to the board as marked, in place of the 1k resistor. 

               Experiment-2P for Piezo on "5x7 Display" Project
                                      ;PIC16F84 and only F84 chip 
                                      ;Creating a beep - beep - beep

 Start   ORG 0x00
            BSF 03,5             ;Go to page1 for setting-up the ports 
            MOVLW 00h       ;Put 00 into W 
            MOVWF 05h       ; to make all RA lines output 
            MOVWF 06h       ;to make all RB lines output
            BCF 03,5             ;Go to Page0 for programming

 Beep     MOVLW 40h
               MOVWF 1Bh
 Beep1    BSF 06,7                    ;This is the piezo line. Turn it ON
               CALL Delay                ;Call Delay
               BCF 06,7                    ;Turn off the piezo
               CALL Delay
               DECFSZ 1Bh,1           ;Repeat for 40h cycles
               GOTO Beep1
               CALL LongDel           ;Call Long Delay
               GOTO Beep               ;Repeat the routine  Delay 
               MOVLW 40h
               MOVWF 1Ah
 Delay1   DECFSZ 1Ah,1       ;Delay for Beep
               GOTO Delay1 
               RETURN

 LongDel   MOVLW 04         ;Long delay between beeps
                 MOVWF 1Ch
 Del2         DECFSZ 1Ah,1
                 GOTO Del2
                 DECFSZ 1Bh,1
                 GOTO Del2
                 DECFSZ 1Ch,1
                 GOTO Del2
                 RETURN

                END
              


The block of numbers below is the HEX file for Experiment-2P. Copy and paste it into a text program such as TEXTPAD or NOTEPAD and call it: Expt-2P.hex   
:100000008316003085008600831240309B008617DF
:100010000F2086130F209B0B072814200528403043
:100020009A009A0B1128080004309C009A0B16289D
:0A0030009B0B16289C0B16280800F5
:00000001FF

 
EXPERIMENT-3P Beep after Button A, B and C
This experiment produces a beep after button A is pressed two beeps after button B is pressed, and three beeps for button C. (The program would be much simpler if only a single beep is required.)

 
               Experiment-3P for Piezo on "5x7 Display" Project
                                      ;PIC16F84 and only F84 chip 
                                     
 ;Beep after Button A, B and C 

Start   ORG 0x00
           BSF 03,5                ;Go to page1 for setting-up the ports 
           MOVLW 00h          ;Put 00 into W 
           MOVLW 1C            ;Put 0001 1100 into W
           MOVWF 05h          ;make RA2, RA3 and RA4 input 
           MOVLW 00h
           MOVWF 06h          ;make all RB lines output
           BCF 03,5                ;Go to Page0 for programming
           GOTO Main

 SwA    BTFSS 05,2                ;Is switch A pushed?
             GOTO SwA2              ;YES.
             MOVF 11h,0               ;NO. Copy 11h into W
             XORLW 00h               ;XOR W with 00
             BTFSS 03,2                ;Is file 11h=0?
             GOTO SwA1              ;NO.
             RETURN                      ;YES.
 SwA1 DECF 11h,1                 ;Decrement the debounce file 
             RETURN
 SwA2 MOVF 11h,0                ;11h is the debounce file
            XORLW 00h ;
            BTFSS 03,2                 ;Is file 11h=0?
            RETURN                       ;NO.
            CALL Beep1                ;YES. 
            MOVLW 80h                ;Load W with 80h loops
            MOVWF 11h                ;Put 80h into debounce file
            RETURN


 SwB   BTFSS 05,3             ;Is switch B pushed?
            GOTO SwB2           ;YES.
            MOVF 12h,0            ;NO. Copy 12h into W
            XORLW 00h            ;XOR W with 00
            BTFSS 03,2             ;Is file 12h=0?
            GOTO SwB1           ;NO.
            RETURN                   ;YES.
 SwB1 DECF 12h,1             ;Decrement the debounce file 
            RETURN
 SwB2 MOVF 12h,0            ;12h is the debounce file
            XORLW 00h ;
            BTFSS 03,2             ;Is file 12h=0?
            RETURN ;NO.
            CALL Beep2           ;YES. 
            MOVLW 80h           ;Load W with 80h loops
            MOVWF 12h           ;Put 80h into debounce file
            RETURN


 SwC   BTFSS 05,4            ;Is switch C pushed?
            GOTO SwC2          ;YES.
            MOVF 13h,0           ;NO. Copy 13h into W
            XORLW 00h           ;XOR W with 00
            BTFSS 03,2           ;Is file 13h=0?
            GOTO SwC1         ;NO.
            RETURN ;YES.
 SwC1 DECF 13h,1            ;Decrement the debounce file 
            RETURN
 SwC2 MOVF 13h,0           ;13h is the debounce file
            XORLW 00h ;
            BTFSS 03,2            ;Is file 1Dh=0?
            RETURN ;NO.
            CALL Beep3           ;YES. 
            MOVLW 80h           ;Load W with 80h loops
            MOVWF 13h           ;Put 80h into debounce file
            RETURN

 Beep1 MOVLW 40h
            MOVWF 1Bh
 Beepx BSF 06,7                ;This is the piezo line. Turn it ON
            CALL Delay            ;Call Delay
            BCF 06,7                ;Turn off the piezo
            CALL Delay
            DECFSZ 1Bh,1       ;Repeat for 40h cycles
            GOTO Beepx
            RETURN

 Beep2  CALL Beep1
             CALL LongDel
             CALL Beep1
             RETURN

 Beep3  CALL Beep1
             CALL LongDel
             CALL Beep1
             CALL LongDel
             CALL Beep1
             RETURN 

 Delay   MOVLW 30h
             MOVWF 1Ah
 Delay1 DECFSZ 1Ah,1     ;Delay for Beep
             GOTO Delay1 
             RETURN

LongDel   MOVLW 01
                MOVWF 1Ch
 Del2        DECFSZ 1Ah,1
                GOTO Del2
                DECFSZ 1Bh,1
                GOTO Del2
                DECFSZ 1Ch,1
                GOTO Del2
                RETURN

 Main    CALL SwA
            CALL SwB
            CALL SwC
            GOTO Main

            END

              


The block of numbers below is the HEX file for Experiment-3P. Copy and paste it into a text program such as TEXTPAD or NOTEPAD and call it: Expt-3P.hex   
:10000000831600301C3085000030860083125C2887
:10001000051D11281108003A031D0F28080091033F
:1000200008001108003A031D08003B2080309100B1
:100030000800851D22281208003A031D2028080008
:10004000920308001208003A031D08004420803083
:1000500092000800051E33281308003A031D3128BA
:100060000800930308001308003A031D0800482005
:1000700080309300080040309B0086174E20861386
:100080004E209B0B3D2808003B2053203B200800BE
:100090003B2053203B2053203B20080030309A0067
:1000A0009A0B5028080001309C009A0B55289B0B96
:1000B00055289C0B55280800082019202A205C2868
:00000001FF

 
EXPERIMENT-4P  
Hee Haw Siren
This experiment produces a Hee Haw siren suitable for an alarm. The first column of LEDs flash in sequence with the sound. 
This is the simplest routine you can get for a Hee Haw effect. So, why is it so complex?
Let's explain:    
The Hee routine is exactly the same as the Haw routine except the length of the ON and OFF time is longer so that the tone has a lower frequency. 
If we take the Hee routine, we first have to turn ON all the LEDs. Next we find a nested routine made up of two files (file 1C and 1B). We need two files because one file will not produce a tone for a long enough period and the final result is a very fast Hee Haw sound. With two files we can make a very slow Hee Haw. 
Next we come to two instructions that toggle the piezo line. It does not matter if the line is originally HIGH or LOW. The two instructions change the state of the line. 
This means we can loop around these two instructions and each time the micro passes, the piezo will turn ON or OFF. 
After this we load the delay file with a value and call the delay so that the piezo line is HIGH (or LOW) for quite a few thousand cycles. This will produce the actual tone and the files around these instructions produce the duration of the tone. 
Once the duration of the LOW frequency (the Hee tone) has ended, the LEDs are turned off and the Haw tone is executed. 
Once you understand these basics, routines like this will be taken from a Library of Routines and CALLed. But it's important to know how they work so that individual features can be altered as necessary. You may require to increase one of the tones, or produce the tone for 25 repetitions and STOP, or call the routine when certain conditions have occurred. 
Nothing is standard in programming. You are always required to meet certain criteria with each program and you must know the absolute basics with everything you write. And that's what we are doing in these experiments.

               Experiment-4P for Piezo on "5x7 Display" Project
                                      ;PIC16F84 
                                      ;Hee Haw Siren with flashing LEDs

 Start   ORG 0x00
            BSF 03,5             ;Go to page1 for setting-up the ports 
            MOVLW 00h       ;Put 00 into W 
            MOVWF 05h       ; to make all RA lines output 
            MOVWF 06h       ;to make all RB lines output
            BCF 03,5             ;Go to Page0 for programming

 
                      ;Hee - this is the LOW frequency 
 Hee       MOVLW 0FFh 
              MOVWF 06             ;Turn ON all LEDs
              MOVLW 04 
              MOVWF 1C
 Hee1     MOVLW 080h
              MOVWF 1B
 Hee2     MOVLW 80h         ;Toggle the piezo line. 
              XORWF 06h,1
              MOVLW 0B0h
              MOVWF 1Ah
              CALL Delay            ;Call Delay 
              DECFSZ 1B,1
              GOTO Hee2            ;Repeat the routine as per file 1B 
              DECFSZ 1C,1 
              GOTO Hee1

                         ;Haw - This is the HIGH frequency
 Haw     MOVLW 00
              MOVWF 06           ;Turn OFF all LEDs
              MOVLW 04 
              MOVWF 1C
 Haw1   MOVLW 0D0h        ;Create D0 loops
              MOVWF 1B
 Haw2    MOVLW 80h         ;Toggle the piezo line. 
              XORWF 06h,1 
              MOVLW 80h
              MOVWF 1Ah
              CALL Delay             ;Call Delay 
              DECFSZ 1B,1
              GOTO Haw2           ;Repeat the routine as per file 1B
              DECFSZ 1C,1 
              GOTO Haw1
              GOTO Hee


 Delay    DECFSZ 1Ah,1            ;Length of ON and OFF time for tone
              GOTO Delay 
              RETURN

              END
         


The block of numbers below is the HEX file for Experiment-4P. Copy and paste it into a text program such as TEXTPAD or NOTEPAD and call it: Expt-4P.hex   
:1000000083160030850086008312FF30860004309E
:100010009C0080309B0080308606B0309A002420FF
:100020009B0B0B289C0B09280030860004309C0099
:10003000D0309B008030860680309A0024209B0BB5
:0E0040001A289C0B182805289A0B2428080063
:00000001FF

On the next page we show how to CALL the Hee Haw routine.

Go to the next page of experiments:    5x7 PIEZO EXPERIMENTS: Page-2