-- file: music.jal
-- author: Surducan Vasile
-- playing "one litle violin" on pin_c2
-- compiler: up to jal04.24
include f877_04
include jpic
include jdelay
-- fr: real frequency
-- fc: calculated frequency
-- df: error
-- pr2: f877_pr2 register
-- prs: tmr2 prescaler
-- --------------------------------------------------------------------------
-- OCTAVE1 OCTAVE2
-- --------------------------------------------------------------------------
fr[Hz] fc[Hz] df[Hz] pr2/prs fr[Hz] fc[Hz] df[Hz] pr2/prs
-- --------------------------------------------------------------------------
-- Do 261.63 261.5 -0.13 238/16 523.25 525.21 +1.94 118/16
-- Reb 277.18 277.5 +0.32 224/16 554.37 553.09 -1.27 112/16
-- Re 293.66 293.4 -0.26 212/16 587.33 589.62 +2.29 105/16
-- Mib 311.13 310.9 -0.23 200/16 622.25 625 +2.75 99 /16
-- Mi 329.63 328.9 -0.73 189/16 659.26 657.89 -1.36 94 /16
-- Fa 349.23 349.1 -0.13 178/16 698.46 702.24 +3.78 88 /16
-- Fad 369.99 369.8 -0.19 168/16 739.99 744.04 +4.05 83 /16
-- Sol 392 393 +1 158/16 783.99 781.25 -2.74 79 /16
-- Lab 415.3 416.6 +1.3 149/16 830.61 833.33 +2.72 74 /16
-- La 440 440.14 +0.24 141/16 880.0 880.2 +0.2 70 /16
-- Sib 466.16 466.4 +0.24 133/16 932.33 932.8 +0.47 66 /16
-- Si 493.88 492.1 -1.78 126/16 987.77 988 +0.23 254/ 4
-- --------------------------------------------------------------------------
-- OCTAVE3 OCTAVE4
-- --------------------------------------------------------------------------
-- fr[Hz] fc[Hz] df[Hz] pr2/prs fr[Hz] fc[Hz] df[Hz] pr2/prs
-- --------------------------------------------------------------------------
-- Do 1046.5 1046.02 -0.47 238/4
-- --------------------------------------------------------------------------
procedure frequency ( byte in period, byte in prescale ) is
asm movf period, w
bank_1
asm movwf f877_pr2
bank_0
f877_ccpr1l = period / 2 -- set duty cycle at approx 0.5
pin_c2_direction = output
if prescale == 16 then
f877_t2con = 0b_0000_0110 -- tmr2 on, prescale=16
elsif prescale == 4 then
f877_t2con = 0b_0000_0101 -- tmr2 on, prescale=4
elsif prescale == 1 then
f877_t2con = 0b_0000_0100 -- tmr2 on, prescale=1
end if
f877_ccp1con = 0b_0000_1100 -- pwm mode on
end procedure
var byte tempo = 10
var byte measure
procedure l ( byte in time ) is -- lenght
measure = tempo / time
delay_100mS ( measure )
f877_ccp1con = 0 -- PWM off
end procedure
procedure p ( byte in time ) is -- pause
measure = tempo / time
delay_100mS ( measure )
end procedure
procedure DO1 is frequency ( 238, 16 ) end procedure
procedure REb1 is frequency ( 224, 16 ) end procedure
procedure RE1 is frequency ( 212, 16 ) end procedure
procedure MIb1 is frequency ( 200, 16 ) end procedure
procedure MI1 is frequency ( 189, 16 ) end procedure
procedure FA1 is frequency ( 178, 16 ) end procedure
procedure FAd1 is frequency ( 168, 16 ) end procedure
procedure SOL1 is frequency ( 158, 16 ) end procedure
procedure LAb1 is frequency ( 149, 16 ) end procedure
procedure LA1 is frequency ( 141, 16 ) end procedure
procedure SIb1 is frequency ( 133, 16 ) end procedure
procedure SI1 is frequency ( 126, 16 ) end procedure
procedure DO2 is frequency ( 118, 16 ) end procedure
procedure REb2 is frequency ( 112, 16 ) end procedure
procedure RE2 is frequency ( 105, 16 ) end procedure
procedure MIb2 is frequency ( 99, 16 ) end procedure
procedure MI2 is frequency ( 94, 16 ) end procedure
procedure FA2 is frequency ( 88, 16 ) end procedure
procedure FAd2 is frequency ( 83, 16 ) end procedure
procedure SOL2 is frequency ( 79, 16 ) end procedure
procedure LAb2 is frequency ( 74, 16 ) end procedure
procedure LA2 is frequency ( 70, 16 ) end procedure
procedure SIb2 is frequency ( 66, 16 ) end procedure
procedure SI2 is frequency ( 252, 4 ) end procedure
procedure DO3 is frequency ( 238, 4 ) end procedure
procedure one_little_violin is
for 2 loop
do1 l(8) p(4) re1 l(8) p(4) mi1 l(8) p(4) fa1 l(8) p(4)
sol1 l(4) p(4) sol1 l(4) p(4) la1 l(4) p(4) la1 l(4) p(4)
sol1 l(2) p(4)
end loop
fa1 l(4) p(4) fa1 l(4) p(4) mi1 l(4) p(4) mi1 l(4) p(4) re1 l(4) p(4)
re1 l(4) p(4) sol1 l(2) p(4)
fa1 l(4) p(4) fa1 l(4) p(4) mi1 l(4) p(4) mi1 l(4) p(4) re1 l(4) p(4)
re1 l(4) p(4) do1 l(2) p(4)
for 2 loop
do2 l(8) p(4) do2 l(8) p(4) si1 l(4) p(4) si1 l(4) p(4) la1 l(4) p(4)
la1 l(4) p(4) sol1 l(2) p(4)
end loop
fa1 l(4) p(4) fa1 l(4) p(4) mi1 l(4) p(4) mi1 l(4) p(4) re1 l(4) p(4)
re1 l(4) p(4) sol1 l(2) p(4)
fa1 l(4) p(4) fa1 l(4) p(4) mi1 l(4) p(4) mi1 l(4) p(4) re1 l(4) p(4)
re1 l(4) p(4) do1 l(2) p(4)
end procedure
-- main program
forever loop
one_little_violin
delay_1s ( 3 )
end loop
               (
geocities.com/vsurducan/electro/PIC)                   (
geocities.com/vsurducan/electro)                   (
geocities.com/vsurducan)