HomeArticlesProjectsBlogContact
Articles
5x7 Display - Piezo Experiments - Page 1
Colin Mitchell
Colin Mitchell
Make sure to subscribe to our newsletter and be the first to know the news.

Table Of Contents

01
Piezo Experiments - Page 1
02
EXPERIMENT-1P
03
EXPERIMENT-2P Producing a beep
04
EXPERIMENT-3P Beep after Button A, B and C
05
EXPERIMENT-4P Hee Haw Siren

Piezo Experiments - Page 1


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



Colin Mitchell

Colin Mitchell

Expertise

electronics
writing
PIC-Chips

Social Media

instagramtwitterwebsite

Related Posts

TODO
Transistor Test
© 2021, All Rights Reserved.

Quick Links

Advertise with usAbout UsContact Us

Social Media