HomeArticlesProjectsBlogContact
Articles
It's a Small World
Colin Mitchell
Colin Mitchell
May 16, 2010
Make sure to subscribe to our newsletter and be the first to know the news.
  • PIC Programmer MkV
  • Instruction Set for PIC12F629
  • PIC12F629
  • PIC16F628 PDF Data Sheet
  • BlankF629.asm
  • PIC12F629.inc
  • See more projects using micros:
  • Pic A PIC Project
  • Notepad++ or VS Code
  • Library of Sub-routines “Cut and Paste”
  • Library of routines: A-E E-P P-Z

Why spend $10.00 on a musical card when you can produce the tune yourself.
This project uses just 4 components and a small prototype PC board to produce a project that will teach you a lot about programming.
The circuit uses a piezo diaphragm connected to pins 3 and 5.
That’s the only component.
All the work is done by the program.
The project is so easy, we don’t need to provide any construction details.
You can also get the Happy Birthday tune and use the same circuit.

SmallWorldIso
The PIC chip on a prototype PC board

The PIC chip on a prototype PC board

Here are the files:

Here is the program.
You must use the .hex file to “burn” the chip or the .asm file as these are laid out so that the compiler and programmer can understand the data.
The following program is just for viewing.

;*******************************
;IT'S A SMALL WORLD TUNE        *
;  14-5-2010                    *
;                               *
;********************************
 list   p=12F629
    radix   dec
    include "p12f629.inc"

    errorlevel  -302    ; Don't complain about BANK 1

    __CONFIG    _MCLRE_OFF & _CP_OFF
                    & _WDT_OFF & _INTRC_OSC_NOCLKOUT  ;Internal osc.


;==================================
;
;       Configuration Bits
;
;==================================

note      equ   21h   ;value of HIGH and LOW for note
gap     equ 22h     ;gap between notes - uses delay "gap_1"
loops     equ   23h     ;loops of HIGH/LOW for 250mS or other duration
temp1     equ   24h     ;temp file for note
jump      equ   25h
D1      equ 26h   ;used in 250mS delay
D2      equ 27h   ;used in 250mS delay
D3      equ 28h   ;used in 250mS delay
gapDela equ 29h   ;used in gap delay
tempA     equ   2Ah   ;used in gap delay
extend  equ 2Bh   ;used to increase number of loops


;************************
;Beginning of program
;************************
      org   0x00
      nop
      nop
      nop
      nop
      nop
SetUp   bsf         status, rp0     ;Bank 1
      call        0x3FF         ;retrieve factory calibration value
      movwf       OSCCAL        ;update register with factory     cal value
      movlw       b'00001011'     ;Set TRIS
      movwf       TRISIO          ;GP2,4 outputs
      bcf         status, rp0     ;bank 0
      movlw       07h           ;turn off Comparator
      movwf       CMCON         ;must be placed in bank 0
      clrf        jump          ;jump value for table
      goto  M1


;********************************
;* Delays
;********************************

    ;gap_1 produces the gap between notes - 3rd byte in the table

gap_1     movlw   .2
          movwf   gapDela
gap_1a  decfsz  tempA
        goto      gap_1a
        decfsz  gapDela,1 ;produces loops
        goto      gap_1a
        decfsz  gap,1       ;
        goto      gap_1
        retlw     00


    ;250mS second delay

_250mS  nop
        goto      $+1
        decfsz  D1,1
        goto      _250mS
        decfsz  D2,1
        goto      _250mS
        retlw   00


;****************************************************************
;* Table            *
;****************************************************************
    ;table values are as follows:
    ;1st value = value of HIGH and LOW for note
    ;2nd value = value to create 48mS note
    ;3rd value = gap between notes

table1  addwf   pcl,f   ;02h,1  add W to program counter
        nop
        retlw   .14     ;loops - cycles of HIGH/LOW  "E"  It's
        retlw   .84     ;note - value of HIGH/LOW
        retlw   .50     ;gap between notes - uses "gap_1" delay
        retlw   .14     ; "F" - A
        retlw   .80
        retlw   .50
        retlw   .30       ;"G"  world
        retlw   .142
        retlw   .50
        retlw   .30       ;"E"  of
        retlw   .84
        retlw   .50
        retlw   .30       ;"C"   laugh
        retlw   .105
        retlw   .50
        retlw   .14       ;"D"- ter
        retlw   .94
        retlw   .50
        retlw   .14       ;"C"   a
        retlw   .105
        retlw   .50
        retlw   .30       ;"C"   world
        retlw   .105
        retlw   .50
        retlw   .30       ;"B"  of
        retlw   .113
        retlw   .50
        retlw   .40       ;"B"  tears
        retlw   .113
        retlw   .50
        retlw   .14       ;"D"- It's
        retlw   .94
        retlw   .50
        retlw   .15       ;"E"  a
        retlw   .84
        retlw   .50
        retlw   .30     ; "F" - world
        retlw   .80
        retlw   .50
        retlw   .30       ;"D"- of
        retlw   .94
        retlw   .50
        retlw   .40       ;"B"  hopes
        retlw   .113
        retlw   .50
        retlw   .14       ;"C"   and
        retlw   .105
        retlw   .50
        retlw   .14       ;"B"  a
        retlw   .113
        retlw   .50
        retlw   .30       ;"A"  world
        retlw   .126
        retlw   .20
        retlw   .30       ;"G"  of
        retlw   .142
        retlw   .50
        retlw   .30       ;"G"  fears
        retlw   .142
        retlw   .50
        retlw   .15       ;"E"  There's
        retlw   .84
        retlw   .50
        retlw   .15     ; "F" - so
        retlw   .80
        retlw   .50
        retlw   .30       ;"G"  much
        retlw   .142
        retlw   .50
        retlw   .14       ;"C"   that
        retlw   .105
        retlw   .50
        retlw   .14       ;"D"- we
        retlw   .94
        retlw   .50
        retlw   .30         ;"E"  share
        retlw   .84
        retlw   .50
        retlw   .14       ;"D"- that
        retlw   .94
        retlw   .50
        retlw   .14       ;"C"   it's
        retlw   .105
        retlw   .50
        retlw   .15       ;"A"  time
        retlw   .126
        retlw   .20
        retlw   .14       ;"D"- we're
        retlw   .94
        retlw   .50
        retlw   .15         ;"E"  a
        retlw   .84
        retlw   .50
        retlw   .30     ; "F" - ware
        retlw   .80
        retlw   .50
        retlw   .14       ;"E"   It's
        retlw   .84
        retlw   .50
        retlw   .14       ;"D"   A
        retlw   .94
        retlw   .50
        retlw   .30       ;"G"  small
        retlw   .142
        retlw   .50
        retlw   .14     ; "F" - world
        retlw   .80
        retlw   .50
        retlw   .30     ; "E" - af
        retlw   .84
        retlw   .50
        retlw   .14       ;"D"   ter
        retlw   .94
        retlw   .50
        retlw   .60       ;"C"  all
        retlw   .105
        retlw   .240
        retlw   .45       ;"C"  It's
        retlw   .105
        retlw   .50
        retlw   .14       ;"C"   a
        retlw   .105
        retlw   .50
        retlw   .30     ; "E" - small
        retlw   .84
        retlw   .50
        retlw   .30       ;"C"   world
        retlw   .105
        retlw   .50
        retlw   .45       ;"D"   af
        retlw   .94
        retlw   .50
        retlw   .15       ;"D"   ter
        retlw   .94
        retlw   .50
        retlw   .60       ;"D"   all
        retlw   .94
        retlw   .240
        retlw   .48     ; "D" -It's
        retlw   .94
        retlw   .50
        retlw   .14       ;"D"- A
        retlw   .94
        retlw   .50
        retlw   .30       ;"F"  small
        retlw   .80
        retlw   .50
        retlw   .24       ;"D"   word
        retlw   .94
        retlw   .50
        retlw   .48       ;"E"   af
        retlw   .84
        retlw   .50
        retlw   .14       ;"E"   ter
        retlw   .84
        retlw   .20
        retlw   .48     ; "E" - all
        retlw   .84
        retlw   .240
        retlw   .48       ;"E"- It's
        retlw   .84
        retlw   .20
        retlw   .14       ;"E"  A
        retlw   .84
        retlw   .20
        retlw   .50       ;"G+"   small
        retlw   .71
        retlw   .20
        retlw   .24       ;"E"  world
        retlw   .84
        retlw   .20
        retlw   .48       ;"F"  af
        retlw   .80
        retlw   .20
        retlw   .14     ; "F" -ter
        retlw   .80
        retlw   .20
        retlw   .14     ; "F" - all
        retlw   .80
        retlw   .240
        retlw   .30       ;"E"  it's
        retlw   .84
        retlw   .20
        retlw   .14       ;"D"- A
        retlw   .94
        retlw   .50
        retlw   .40       ;"G"  small
        retlw   .142
        retlw   .50
        retlw   .40       ;"B"  small
        retlw   .113
        retlw   .50
        retlw   .55       ;"C"   word
        retlw   .105
        retlw   .50

        retlw   0FFh


M1      call    _250mS
        call    _250mS

Main     incf       jump,1      ;increment pointer
         movf       jump,w
         call         table1
         movwf      loops          ;first value from table
         movlw      0ffh
         xorwf      loops,w      ;see if value is "0ffh"
         btfsc      status,z
         goto         SetUp
         incf         jump,1
         movf       jump,w
         call       table1
         movwf      temp1          ;temp for note for HIGH/LOW


eee       movlw   10
          movwf   extend
ttt       movf    temp1,w
          movwf   note
          bsf         gpio,2
          bcf         gpio,4
          goto    $+1
          goto    $+1
          goto    $+1
          decfsz    note,1
          goto    $-4
          movf    temp1,w
          movwf   note
          bcf         gpio,2
          bsf         gpio,4
          goto    $+1
          goto    $+1
          goto    $+1
          decfsz    note,1
          goto    $-4
          decfsz    extend,1
          goto    ttt
          decfsz    loops,f
          goto    eee
          incf    jump,1       ;look for gap value
          movf    jump,w
          call    table1
          movwf   gap
          bcf         gpio,2         ;to produce silence
          bcf         gpio,4         ;to produce silence
          call    gap_1        ;mS gap
          goto    Main


      END

GOING FURTHER

This project provides you with the tools to create your own tune or download one of the “old favourites” and annoy everyone in the household with its incessant playing.


Tags

#elektor
Colin Mitchell

Colin Mitchell

Expertise

electronics
writing
PIC-Chips

Social Media

instagramtwitterwebsite

Related Posts

TODO
PIC Elmer 160
March 06, 2012
© 2021, All Rights Reserved.

Quick Links

Advertise with usAbout UsContact Us

Social Media