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: