Elektroninen noppa mikrokontrollerilla

TÀssÀ artikkelissa on julkaisematonta materiaalia, koska en löytÀnyt alkuperÀisiÀ tidostoja :cry: (lukuunottamatta ohjelmia :stuck_out_tongue: ).

Olen 12v. Eino-Pekka Kanto ja tÀmÀ on minun ensimmÀinen artikkeli ensimmÀisestÀ projektistani. En toivo negatiivista kommentointia, mutta kommentoikaa.

[size=150]Elektroninen noppa mikrokontrollerilla[/size]

Mikrokontrolleri on pic12f675 tai pic12f629. Valitsin tÀmÀn kontrollerin, koska se on halpa,vÀhÀvirtainen ja pieni. SiinÀ on sisÀinen 4Mhz kello, mutta voisi olla myös ulkoinen. Valitsin sisÀisen kellon, koska se on tarpeeksi tarkka tÀhÀn tehtÀvÀÀn.

Nopassa on nappula arvontaa varten ja 7 lediÀ numerojen nÀyttÀmiseen
[size=85]Koska seuraavassa kuvassa alempi noppa on prototyyppi, niin siinÀ ei ole nappulaa[/size]

nopan_piirilevyt.jpg

[size=150]Ohjelma[/size]

Ohjelma on kirjoitettu gcbasic-kielellÀ Notepadissa ja kÀÀnnetty avoimen lÀhdekoodin GCBasic kÀÀntÀjÀllÀ (SourceForge sivu).

Ohjelmasta on useita eri versioita, mutta tÀssÀ nÀytÀn niistÀ kaksi (testeri ja viimeisin versio).

testeri

#chip 12f675,4
#config osc=international, mclr= off
dir gpio.2 out
dir gpio.1 out
dir gpio.4 out
dir gpio.5 out
dir gpio.3 in
if gpio.3 on then
 set gpio.1 on
 set gpio.2 on
 set gpio.4 on
 set gpio.5 on
end if

viimeisin versio

#chip 12f675,4
#config osc=int
dir gpio.1 out
dir gpio.2 out
dir gpio.3 in
dir gpio.4 out
dir gpio.5 out
numero=0
arvo:
wait 1 ms
if numero=7 then numero=0
numero=numero+1
if gpio.3 on then goto valmis
goto arvo
valmis:
if numero=1 then
 set gpio.2 on
end if
if numero=2 then
 set gpio.4 on
end if
if numero=3 then
 set gpio.4 on
 set gpio.2 on
end if
if numero=4 then
 set gpio.4 on
 set gpio.5 on
end if
if numero=5 then
 set gpio.4 on
 set gpio.5 on
 set gpio.2 on
end if
if numero=6 then
 set gpio.4 on
 set gpio.5 on
 set gpio.1 on
end if
wait 1 sec
if gpio.3 on then gosub demo
wait 4 sec
set gpio.1 off
set gpio.2 off
set gpio.4 off
set gpio.5 off
goto arvo
demo:
set gpio.1 off
set gpio.2 off
set gpio.4 off
set gpio.5 off
'1
set gpio.2 on
wait 1 sec
set gpio.2 off
'2
set gpio.4 on
wait 1 sec
set gpio.4 off
'3
set gpio.4 on
set gpio.2 on
wait 1 sec
set gpio.4 off
set gpio.2 off
'4
set gpio.4 on
set gpio.5 on
wait 1 sec
set gpio.4 off
set gpio.5 off
'5
set gpio.2 on
set gpio.4 on
set gpio.5 on
wait 1 sec
set gpio.2 off
set gpio.4 off
set gpio.5 off
'6
set gpio.4 on
set gpio.5 on
set gpio.1 on
wait 1 sec
set gpio.4 off
set gpio.5 off
set gpio.1 off
return

[size=150]Piirilevy[/size]

Valotusmaski on tehty hp mustesuihkutulostimella piiroheitinkalvolle. TÀyttövÀrillÀ valotuskaavio tuli kuitenkin liian suttuiseksi eikÀ resoluutio riittÀnyt, joten seuraavat versiot jouduttiin tekemÀÀn lasertulostimella.

PiirilevystÀ on tehty kaksi eri versiota (toinen kuvassa). EnsimmÀisessÀ versiossa oli pieni virhe piirilevyllÀ joka korjattiin DremelillÀ ja hyppylangalla. Toisessa versiossa tÀmÀ virhe oli jo korjattu.

[size=150]Ledien hieno kytkentÀ[/size]

Mikrokontrollerissa on vain 5 ulostuloa ledeille (2 kÀyttöjÀnniteelle ja 1 napille) jotenka jouduin jÀrjestÀmÀÀn ledit niin, ettÀ:

led1 ja led7 ovat samassa ulostulossa.
led2 ja led6 ovat samassa ulostulossa.
led3 ja led5 ovat samassa ulostulossa.
led 4 on yksin.

piirilevy_numeroilla.png

[size=150]Toiminta[/size]

Kun laitteeseen kytketÀÀn virta se aloittaa silmukan joka kasvattaa luvun arvoa. Jos arvo on seitsemÀn, niin se asettaa arvoksi nolla. Kun nappulaa painetaan kasvatussilmukan aikana, niin se pysÀhtyy, nÀyttÀÀ arvon, odottaa yhden sekunnin ja palaa alkuun. Jos kuitenkin vÀlittömÀsti nÀyttÀmisen jÀlkeen painetaan nappulaa, niin se testaa ledit nÀyttÀmÀllÀ jokaisen numeron sekunnin vÀlein ja lopettaa.

Tulen vielÀ joskus lisÀÀmÀÀn manuaalin ja kytkentÀkaavion, mutta en varmaan vielÀ lÀhiaikoina.

Mietin miten totetit sen arpomisen, mutta tuohan on hieno idea. Tulee varmasti aika satunnaisia arvoja, jos vaan silmukka pyörii tarpeeksi nopeasti.

Muuten ihan nÀppÀrÀ pikkuprojekti. :slight_smile: