-
Mikrokrmilnik in zvok
V spomladanskem asu opaam na spletnih forumih veliko poveanje
takih in dru-ganih proenj, za pomo pri izvedbi razlinih seminarskih
in maturitetnih nalog spodroja elektronike, v katerih so pogosto
uporabljeni mikrokrmilniki.
Zanimalo me je koliko je izvedba takih nalog zahtevna. Namesto
zelo pogostihprojektov s svetlobnimi uinki, sem se raje odloil za
nekoliko zapostavljen zvok.
Za uvod naj povem e to, kljub temu, da se z elektroniko ukvarjam
e ve dese-tletij, sem prvi mikrokrmilnik sprogramiral ele pred
dvema mesecema, prvi pro-gramek zanj pa napisal ele pred slabim
mesecem in sem tako pravzaprav zaet-nik, kar se tie poznavanja te
tematike.
Malo prej to odloitvijo sem zgradil preprost PWM regulator, ki
bazira na mikrokr-milniku Microchip PIC12F675, za regulacijo moi
12V spajkalnika, po projektu,katerega avtor je Luhan Monat iz
Arizone, ZDA.
Celoten projekt, je opisan na avtorjevi spletni strani:
http://mondo-technology.com/heater.htm
PWM regulator
Ta naprava je s priklopom zvonika namestoi spajkalnika sluila za
zaetno ugo-tavljanje zahtevnosti te naloge.
Ker je moje znanje zbirnika pomankljivo, sem uporabil vije
nivojski programskijezik Basic v katerem sem e pisal programe za
Commodore C64 in MicrosoftDOS, za namen programiranja
mikrokrmilnika pa sem uporabil namenski brez-plani in odprtokodni
Great Cow Basic (v nadaljevanju GCBasic), verzije 0.9, do-segljiv
na:
http://gcbasic.sourceforge.net/
http://gcbasic.sourceforge.net/http://mondo-technology.com/heater.htm
-
GCBasic je samo prevajalnik in sem si namestil e brezplano
razvojno okolje (In-tegrated Development Environment, kraje IDE)
GCBIDE verzije 2.0,
Izgled GBCIDE
saj je z njim pisanje programa laje, kot z uporabo Beleke
(Notepad). GCBIDE,poenostavlja uporabo samega prevajalnika, omogoa
lahek dostop do datoteke spomojo za GCBasic in z barvno shemo
omogoa bolj pregleden izgled zapisanekode. Program je dosegljiv na
spletnem naslovu:
http://sites.google.com/site/gcbide/
Sedaj je bilo samo e potrebno spisati program, eprav se je s
samim programomza PWM krmilnik (ki je rahlo spremenjen glede na
izvirnik), e slial zvok frekven-ce malo pod 1kHz, kar je frekvenca
PWM krmilnika v tem programu, vendar takopoenostavljanje ni
ustrezna reitev.
GCBasic ima za ustvarjanje zvoka namre namenski ukaz
ToneToneTone, ki mu sleditadve tevilki, prva pomeni frekvenco zvoka
v Hz, druga pa as trajanja tega zvokav milisekundah.
Tako ukaz.
Tone 1000, 500Tone 1000, 500Tone 1000, 500
proizvede zvoni signal frekvence 1kHz v trajanju pol sekunde. na
e prej defini-ranemu pinu mikrokrmilnika, ki se doloi z ukazom
SoundOuSoundOuSoundOut
Zapisal sem preprost program, ki oponaa sireno za vzvratno
vonjo:
http://sites.google.com/site/gcbide/
-
'*******************************'*******************************'*******************************'****
Piska *****'**** Piska *****'**** Piska
*****'*******************************'*******************************'*******************************#chip#chip#chip
'Vnesti podatke o izbranem uC#define SoundOut IO.x#define SoundOut
IO.x#define SoundOut IO.x 'x = pin uC,,, kjer se bo pojavil signal
zvokaDoDoDoTone 1000, 500Tone 1000, 500Tone 1000, 500 'zvok 1kHz,
pol sekundeWait 500 msWait 500 msWait 500 ms 'pavza pol
sekundeLoopLoopLoop
Program sem s pomojo GCBIDE prevedel v hex datoteko in je s
pomojo progra-matorja zapisal v mikrokrmilnik. Po vklopu vezja so
se zasliali prodorni inglasni pol sekundni piski.s pol sekundnim
premorom, tono tako kot je bilo zami-ljeno.
Toda, bi bilo mogoe dosei e kaj ve, kot samo oponaati enostavno
sireno? Bibilo mogoe iz mikrokrmilnika izvabiti melodijo?
Stareji bralci se bodo spomnili, da je bila podobna sintaksa
ukazov v program-skem jeziku Basic uporabljena tudi v Spectrum
Basic za raunalnik ZX Spectrum,popularni Mavrici:
(ZX Spectrum)
Na spletu sem poiskal navodila za uporabo tega raunalnika:
http://www.worldofspectrum.org/ZXBasicManual/
in v poglavju 19, ki je posveeno uporabi zvoka, nael primer
melodije korani-ce Frere Gustav iz Mahlerjeve prve simfonije:
10 PRINT "Frere Gustav"20 BEEP 1,0: BEEP 1,2: BEEP .5,3:
BEEP.5,2: BEEP 1,030 BEEP 1,0: BEEP 1,2: BEEP .5,3: BEEP.5,2: BEEP
1,040 BEEP 1,3: BEEP 1,5: BEEP 2,750 BEEP 1,3: BEEP 1,5: BEEP 2,760
BEEP .75,7: BEEP .25,8: BEEP .5,7: BEEP .5,5:BEEP .5,3: BEEP.5,2:
BEEP 1,070 BEEP .75,7: BEEP .25,8: BEEP .5,7: BEEP .5,5: BEEP .5,3:
BEEP .5,2: BEEP 1,080 BEEP 1,0: BEEP 1,-5: BEEP 2,0 90 BEEP l,0:
BEEP 1,-5: BEEP 2,0
Vsekakor se sintaksa ukazov na prvi pogled mono razlikuje od te
v GCBasic, ven-dar videz vara. Najveja razlika je v zapisu
frekvence tona, saj Spectrum Basic za
http://www.worldofspectrum.org/ZXBasicManual/http://en.wikipedia.org/wiki/Sinclair_Spectrum
-
zapis zvoka uporablja tonsko lestvico, katere osnovni ton oznaen
z 0 (mone sovariacije od -62.5 do +62.5) predstavlja noto srednji C
(261.626 Hz) in ne fre-kvenco v Hz, kot GCBasic. Ostale razlike so
majhne. ukaz BEEPBEEPBEEP je enakovredenukazu ToneToneTone, vendar
prva tevilka pomeni as trajanja zvoka v sekundah in drugaton.
Z malo iskanja po Wikipediji
(http://en.wikipedia.org/wiki/Piano_key_frequencies) semsintakso
prilagodil za GCBasic, za proenje izkoristi potenciometer, program
pre-vedel v hex datoteko in prekopiral v mikrokrmilnik.
In zvok, podoben zvoku glasbenih estitk ali raunalnika ZX
Spectrum je bil tu:
(klik na ikono za predvajanje zvoka)
Vezje kot tako se e lahko uporabi za zvoni efekt, vendar ima ve
pomanjkljivo-sti, napajalna napetost za zanesljivo delovanje mora
biti vija od 7V in v mirova-nju ima preveliko porabo za dolgotajno
baterijsko napajanje (okoli 4 mA) in bi bi-lo potrebno v takem
primeru uporabiti usmernik, napajan iz elektrinega omreja,kar
napravo dodatno zaplete, poleg moteega poka ob vklopu, ki je
posledicasame zasnove monostnega dela.
Mikrokrmilnik PIC12F675 je grajen tako, da lahko deluje v
napetostnem razponuod 2.2 do 5.5 V in ima v mirovanju porabo le
nekaj 10 A in je tako zelo primernoza baterijsko napajanje.
e se vezje PWM regulatorja poenostavi in izkoristi funkcije
mikrokrmilnika, selahko izdela glasbeni gong (zvonec) z minimumom
materiala, kot prikazuje shema
(shema je bila izrisana s programom ExpressSCH 7.0.2)
http://www.expresspcb.com/ExpressPCBHtm/HowWorks.htmhttp://en.wikipedia.org/wiki/Piano_key_frequencies
-
Poraba v mirovanju pri tej izvedbi ne predstavlja ve ovire pri
uporabi baterijskega na-pajanja., saj je v mirovanju imel prototip
porabo manjo od 70A, v delovanju pa po-raba ni presegla 45mA, kar
pomeni, da bosta pri normalni uporabi dve alkalni bateriji
ve-likosti AA zdrali vsaj leto, e ne ve.
Namesto kot v prvi razliici, kjer melodijo sproi dovolj nizek
nivo na pinu AD pretvor-nika, sem tu uporabil reset funkcijo, na
pinu MCLR.
Tem zahtevam prilagojen program izgleda tako:
'********************************'********************************'********************************'*
Gong z melodijo Frere Gustav *'* Gong z melodijo Frere Gustav *'*
Gong z melodijo Frere Gustav
*'********************************'********************************'********************************
'****'****'**** Back Friderik ******Back Friderik ******Back
Friderik ******'**** 8.4.2010 *******'**** 8.4.2010 *******'****
8.4.2010
*******'********************************'********************************'********************************'Za
PIC12F675 z internim oscilatorjem, MCLR omogoen'Za PIC12F675 z
internim oscilatorjem, MCLR omogoen'Za PIC12F675 z internim
oscilatorjem, MCLR omogoen#chip 12F675, 4#chip 12F675, 4#chip
12F675, 4#config osc = int#config osc = int#config osc = int#config
MCLR = ON#config MCLR = ON#config MCLR = ON'Izhod za zvonik je pin
2 (GP5)'Izhod za zvonik je pin 2 (GP5)'Izhod za zvonik je pin 2
(GP5)#define SoundOut GPIO.5#define SoundOut GPIO.5#define SoundOut
GPIO.5'melodija Frere Gustav'melodija Frere Gustav'melodija Frere
GustavTone 261, 1000Tone 261, 1000Tone 261, 1000Tone 294, 1000Tone
294, 1000Tone 294, 1000Tone 311, 500Tone 311, 500Tone 311, 500Tone
294, 500Tone 294, 500Tone 294, 500Tone 261, 1000Tone 261, 1000Tone
261, 1000Tone 261, 1000Tone 261, 1000Tone 261, 1000Tone 294,
1000Tone 294, 1000Tone 294, 1000Tone 311, 500Tone 311, 500Tone 311,
500Tone 294, 500Tone 294, 500Tone 294, 500Tone 261, 1000Tone 261,
1000Tone 261, 1000Tone 311, 1000Tone 311, 1000Tone 311, 1000Tone
349, 1000Tone 349, 1000Tone 349, 1000Tone 391, 2000Tone 391,
2000Tone 391, 2000Tone 311, 1000Tone 311, 1000Tone 311, 1000Tone
349, 1000Tone 349, 1000Tone 349, 1000Tone 391, 2000Tone 391,
2000Tone 391, 2000Tone 391, 750Tone 391, 750Tone 391, 750Tone 415,
250Tone 415, 250Tone 415, 250Tone 391, 500Tone 391, 500Tone 391,
500Tone 349, 500Tone 349, 500Tone 349, 500Tone 311, 500Tone 311,
500Tone 311, 500Tone 261, 500Tone 261, 500Tone 261, 500Tone 261,
1000Tone 261, 1000Tone 261, 1000Tone 261, 1000Tone 261, 1000Tone
261, 1000Tone 261, 1000Tone 261, 1000Tone 261, 1000Tone 164,
1000Tone 164, 1000Tone 164, 1000Tone 261, 2000Tone 261, 2000Tone
261, 2000Tone 261, 1000Tone 261, 1000Tone 261, 1000Tone 164,
1000Tone 164, 1000Tone 164, 1000Tone 261, 2000Tone 261, 2000Tone
261, 2000endendend
-
Seveda to ni nujno dokonna verzija projekta, nekaj pinov
mikrokrmilnika je eprostih in tudi celoten pomnilnik e ni izkorien.
Tako bi se lahko dodalo stikaloza izbiranje razlinih melodij ali
drugih dopolnitev, kot na primer izboljanju resetvezja na pinu
MCLR, ki sedaj poskrbi, da se zvok prekine, ko se pritisne tipko
inse zane predvajati znova od zaetka, ko se tipko spusti.
Zakljuek
eprav na prvi pogled naloga izgleda zahtevna, sploh za nekoga,
ki esa takegae n poel, temu ni tako, e se le uporabi vsaj priblino
primerna orodja. Brezpravih izkuenj, samo z branjem priloene
datoteke s pomojo, sem delujo pro-gram spisal v slabi uri, izdelati
vse ostalo, skupaj z dokumentacijo, pa je brez hi-tenja mogoe prej
kot v enem tednu.
Seznam virov:
SlikeZX Spectrum:
http://commons.wikimedia.org/wiki/File:ZX_Spectrum.jpgOstale slike:
avtor.
Primer za zvoni efekt za ZX Spectrum:BASIC ProgrammingSinclair
Research Limited 1982by Chris Owen on behalf of Amstrad plc Amstrad
plc 1995 - all rights reserved
Podatki za lanek pridobljeni iz dokumentacije:Podatkovni list
PIC12675
http://ww1.microchip.com/downloads/en/devicedoc/41190c.pdfGCBasic
0.9GCBIDE 2.0
lanek je nastal tudi s pomojo naslednjih programov:Audacity
1.2.4 (zajem zvoka)ExpresSCH 7.0.2 (izris sheme)IrfanView 4.10 in
Slikar (obdelava slik)PDF-XChange Viewer 2.0 in FoxIt Reader 3.1.4
(izdelava pdf datoteke)TextMaker 2008 (urejevalnik besedila)Willem
Eprom Programmer 0.97 (programiranje mikrokrmilnika)
Copyright April 2010, Friderik Back
V primeru ohranitve tega obvestila so brez plaila licennine
dovoljeni dobesedno ko-piranje in distribucija celotnega besedila
na kateremkoli mediju, ter uporaba infor-macij iz tega lanka v
neprofitne namene.
http://ww1.microchip.com/downloads/en/devicedoc/41190c.pdfhttp://commons.wikimedia.org/wiki/File:ZX_Spectrum.jpg
Tone 1000, 50060 BEEP .75,7: BEEP .25,8: BEEP .5,7: BEEP
.5,5:BEEP .5,3: BEEP.5,2: BEEP 1,0
Z malo iskanja po Wikipediji
(http://en.wikipedia.org/wiki/Piano_key_frequencies) sem sintakso
prilagodil za GCBasic, za proenje izkoristi potenciometer, program
prevedel v hex datoteko in prekopiral v mikrokrmilnik.