tak jinak,
1) 1x 74hc165 -> 8x vstup/ 8 tlacitek
2) 1x 74hc595 -> 2x 74LS247 -> 2x 7segment
nebo
2x 74hc595 -> 2x 7segment +( zalezi kolika mA to krmis )
3) 1x 74hc595 -> 8x vystup / 8x led
na ovladani tohohle vseho ti staci 4 piny
+
6x ADC / pro 6x potenciometry
=
10 pinu obsazenejch a mas to vsechno
pro ovladani tech pos.registru se da pouzit SPI
co pos.registru to 8bit promena, preruseni kazdejch (treba) 20ms kde budes cist stav tlacitek a po kazdym 3 nebo 4 preruseni (60-80ms) obnovys stav 7seg. + led, v mainu si plnis promeny pro zobrazeni a vyhodnocujes tlacitka
muj navrh...
Obsluha tlačítka
-
- Příspěvky: 61
- Registrován: 29 kvě 2014, 17:04
Re: Obsluha tlačítka
Jojo díky. Na sedmisegmentovku mám 2 obvody 4026, protože je dvoumístná. Na 74HC595 budou připojené jen kontrolky a potenciometry budou připojené na multiplexor 4026, těch bude 7 nebo možná 8. Pak ještě musím připojit motor, 2 tlačítka pro start a stop, RGB LED diodu a tím se mi zaplní poslední volná packa u mikroprocesoru.
-
- Příspěvky: 61
- Registrován: 29 kvě 2014, 17:04
Re: Obsluha tlačítka
Po dlouhé době chci už konečně dodělat tenhle projekt... Teď jsem bohužel neměl čas. Rozhodl jsem se použít picaxe 40X2. Má více pinů a větší paměť na ukládání a více proměnných. Program zatím dělám takovej univerzální, protože nevím, jak to přesně bude fungovat, jestli mě ještě něco napadne, ani jak bude dlouhej program. Po dokončení projektu, až budu chytřejší, tak ten program možná poupravím pro jinej picaxe s použitím registru a jiných obvodů. Program jsem zatím začal přepisovat a používat více proměnných, abych nemusel každou hodnotu v programu několikrát měnit, když by bylo potřeba... Jelikož tady nefunguje multitasking, jako u řady M2, tak bych potřeboval poradit, protože mě nenapadá, jak to udělat, aby to fungovalo. Už jsem se dozvěděl, že musím nakonfigurovat ADC piny, to už vím jak, ale ještě to nemám přepsané. Start programu udělám asi přes nějaký skok na čtení, ale pokud po stisknutí tlačítka pro změnu modu, program skočí na nějaký danný úsek. Tak jak budu zpětně kontrolovat furt ty všechny vstupy, jestli se náhodou nezměnily? Chtěl jsem to udělat přes příkaz gosub a return, jenže jak tam mám docílit toho, že když to skočí na čtení z aktuálního módu (např mod 1 nebo mod 2), potom to skočí na jinej úsek programu (např. mod 8). Tak jak pak vypnout ten předchozí mod, aby nerušil ten aktuálně běžící? Nebo nenapadá to někoho nějak jinak, jak by to šlo udělat?
Děkuji za rady.
Kód: Vybrat vše
symbol svit = b24
symbol zhasni = b25
symbol tpt = 50 ;pauza u tlacitek
;Ovládací tlačítka (vstupni piny ADC mikrokotroleru)
symbol tss = pinB.0 ;tlacitko start/stop
symbol tm = pinB.1 ;tlacitko mody
symbol tp = pinB.2 ;tlacitko pauza programu
symbol tssm = pinB.3 ;tlacitko start/stop motoru
symbol tvvm = pinB.4 ;tlacitko vlevo/vpravo u motoru
;Proměnné pro uložení hodnot z tlačítek
symbol htss = b0 ;hodnota pro tlacitko start/stop
symbol htm = b1 ;hodnota pro tlacitko mody
symbol htp = b2 ;hodnota pro tlacitko pauza programu
symbol htssm = b3 ;hodnota pro tlacitko start/stop motoru
symbol htvvm = b4 ;hodnota pro tlacitko vlevo/vpravo u motoru
;Hlavní RGB led dioda 50W - ovládaná PWM (vystupni piny PWM mikrokotroleru)
symbol rl = D.7 ;red led
symbol gl = D.6 ;mg led
symbol bl = D.5 ;mb led
;Motor a ventilátor (vystupni piny a vystupni pwm piny mikrokontroleru)
symbol m1s1 = C.0 ;motor 1 stav 1
symbol m1s2 = B.6 ;motor 1 stav 2
symbol m1r = C.1 ;motor 1 rizeni pres PWM
symbol m2s1 = B.7 ;motor 2 stav 1
symbol m2s2 = D.4 ;motor 2 stav 2
symbol m2r = C.2 ;motor 2 rizeni pres PWM
;Potenciometry (vstupni piny ADC mikrokotroleru)
symbol pr = D.0 ;potenciometr pro red led
symbol pr2 = D.1 ;potenciometr pro red led 2
symbol pg = D.2 ;potenciometr pro mg led
symbol pg2 = D.3 ;potenciometr pro mg led 2
symbol pb = B.5 ;potenciometr pro mb led
symbol pb2 = C.3 ;potenciometr pro mb led 2
symbol pm = C.4 ;potenciometr rychlosti motoru
;Promenne pro ulozeni hodnot z potenciometru (vetsi hodnota - max 1023, mensi hodnota - max 255)
symbol hprv = w20 ;vetsi hodnota potenciometru pro red led
symbol hprm = b27 ;mensi hodnota potenciometru pro red led
symbol hpr2v = w19 ;vetsi hodnota potenciometru pro red led 2
symbol hpr2m = b26 ;mensi hodnota potenciometru pro red led 2
symbol hpgv = w18 ;vetsi hodnota potenciometru pro green led
symbol hpgm = b25 ;mensi hodnota potenciometru pro green led
symbol hpg2v = w17 ;vetsi hodnota potenciometru pro green led 2
symbol hpg2m = b24 ;mensi hodnota potenciometru pro green led 2
symbol hpbv = w16 ;vetsi hodnota potenciometru pro blue led
symbol hpbm = b23 ;mensi hodnota potenciometru pro blue led
symbol hpb2v = w15 ;vetsi hodnota potenciometru pro blue led 2
symbol hpb2m = b22 ;mensi hodnota potenciometru pro blue led 2
symbol hpmv = w14 ;vetsi hodnota potenciometru pro motor
symbol hpmm = b21 ;mensi hodnota potenciometru pro motor
;Kontrolky potenciometrů (vystupni piny mikrokotroleru)
symbol kpr = C.5 ;kontrolka potenciometru red
symbol kpg = C.6 ;kontrolka potenciometru mg
symbol kpb = C.7 ;kontrolka potenciometru mb
;7 segment led display (vystupni piny mikrokotroleru)
symbol l7c = A.0 ;led 7-segmentovka clock
symbol l7r = A.1 ;led 7-segmentovka reset
symbol l7t1 = A.2 ;led 7-segmentovka tecka 1
symbol l7t2 = A.3 ;led 7-segmentovka tecka 2
symbol ppf = b10 ;pomocna promenna cyklu for
cteni:
;Tlacitko - pricita do promenne hodnotu + 1
;Tlacitko start/stop
if tss = 1 then
let htss = htss + 1
if htss > 1 then
htss = 0
endif
do
pause tpt
loop while tss = 1
endif
;Tlacitko mody
if tm = 1 then
let htm = htm + 1
if htm > 1 then;1 je potreba zmenit podle poctu modu!!!
htm = 0
endif
do
pause tpt
loop while tm = 1
endif
;Tlacitko pauza programu
if tp = 1 then
let htp = htp + 1
if htp > 1 then
htp = 0
endif
do
pause tpt
loop while tp = 1
endif
;Tlacitko start/stop motoru
if tssm = 1 then
let htssm = htssm + 1
if htssm > 1 then
htssm = 0
endif
do
pause tpt
loop while tssm = 1
endif
;Tlacitko vlevo/vpravo motor
if tvvm = 1 then
let htvvm = htvvm + 1
if htvvm > 1 then
htvvm = 0
endif
do
pause tpt
loop while tvvm = 1
endif
;potenciometry:
readadc10 pr, w27
let hprv = w27 / 64 max 1023
let hprm = w27 / 256 max 255
readadc10 pr2, w26
let hpr2v = w26 / 64 max 1023
let hpr2m = w26 / 256 max 255
readadc10 pg, w25
let hpgv = w25 / 64 max 1023
let hpgm = w25 / 256 max 255
readadc10 pg2, w24
let hpg2v = w24 / 64 max 1023
let hpg2m = w24 / 256 max 255
readadc10 pb, w23
let hpbv = w23 / 64 max 1023
let hpbm = w23 / 256 max 255
readadc10 pb2, w22
let hpb2v = w22 / 64 max 1023
let hpb2m = w22 / 256 max 255
readadc10 pm, w21
let hpmv = w21 / 64 max 1023
let hpmm = w21 / 256 max 255
return
;Vyber modu
mody:
pulsout l7r, 10
for ppf = 0 to htm
pulsout l7c, 10
next ppf
if htm = 1 then
goto mr
endif
if htm = 2 then
goto mg
endif
if htm = 3 then
goto mb
endif
if htm = 4 then
goto mr_b
endif
if htm = 5 then
goto mg_b
endif
if htm = 6 then
goto mb_b
endif
if htm = 7 then
goto mr_p
endif
if htm = 8 then
goto mg_p
endif
if htm = 9 then
goto mb_p
endif
;Jednotlive mody
;1.
mr:
if htm > 1 then
pwmout rl, off
goto mody
endif
pwmout rl, b24, w10
pause 50
goto mr
;2.
green:
if htm > 2 then
pwmout gl, off
goto mody
endif
pwmout gl, b24, w10
pause 50
goto green
;3.
blue:
if htm > 3 then
pwmout bl, off
goto mody
endif
pwmout bl, b24, w10
pause 50
goto blue
;4.
mr_blik:
if htm > 4 then mody
low rl
pause svit
high rl
pause zhasni
goto mr_blik
;5.
green_blik:
if htm > 5 then mody
low gl
pause svit
high gl
pause zhasni
goto green_blik
;6.
blue_blik:
if htm > 6 then mody
low bl
pause svit
high bl
pause zhasni
goto blue_blik
;7.
mr_pwm:
for ppf = 0 to 1023 step b25
if htm > 7 then mody
pwmout rl, b26, ppf
pause svit
next ppf
for ppf = 1023 to 0 step -b25
if htm > 7 then mody
pwmout rl, b26, ppf
pause svit
next ppf
goto mr_pwm
;8.
green_pwm:
for ppf = 0 to 1023 step b25
if htm > 8 then mody
pwmout gl, b26, ppf
pause svit
next ppf
for ppf = 1023 to 0 step -b25
if htm > 8 then mody
pwmout gl, b26, ppf
pause svit
next ppf
goto green_pwm
;9.
blue_pwm:
for ppf = 0 to 1023 step b25
if htm > 9 then mody
pwmout bl, b26, ppf
pause svit
next ppf
for ppf = 1023 to 0 step -b25
if htm > 9 then mody
pwmout bl, b26, ppf
pause svit
next ppf
goto blue_pwm
Re: Obsluha tlačítka
No, musím konstatovat, že ten tvůj poslední kód mi v PICAXE Editoru vůbec neprojde přes "syntax check". Jednak to píše, že "pwmout" příkazy jsou použity na nevhodných pinech a jednak jsou tam skoky na neexistující návěští. Má to být jen nějaká "nefunkční kostra programu"? Pokud ano, tak ten kód jsi sem ani dávat nemusel (protože z něj stejně nelze nic moc poznat). Pokud Ti ale ten kód funguje, tak v tom případě mi něco uniká nebo mám nějaké úplně jiné vývojové prostředí PICAXE.
Jinak obecně lze stisky tlačítek obsluhovat buď častým čtením stavu příslušných pinů, nebo nastavením vhodného přerušení na příslušné piny. Ve Tvém konkrétním případě by to přerušení snad mohlo být trochu vhodnější. Stačí to takhle obecně?
Jinak obecně lze stisky tlačítek obsluhovat buď častým čtením stavu příslušných pinů, nebo nastavením vhodného přerušení na příslušné piny. Ve Tvém konkrétním případě by to přerušení snad mohlo být trochu vhodnější. Stačí to takhle obecně?
-
- Příspěvky: 61
- Registrován: 29 kvě 2014, 17:04
Re: Obsluha tlačítka
Já jsem právě měl tu sekci s módama jako komentář, protože jsem ji ještě celou nepřepsal, protože si nejsem jistej jak... U toho "PWM" jsem už taky přišel na to, že ho mám nastavené na špatné packy, to jsem nastavoval přes internet, ale asi to tam bylo nějak blbě... S takovým "multitaskingem" nemám žádné zkušenosti. Vůbec teda netuším, co to je to přerušení a jak na něj. Napadlo mě, že bych tam měl nějak ty skoky na to časté čtení, ale nejsem si jist, jak to všechno dobře napsat a ošetřit. Něco zkusím a pak se kdyžtak ozvu.AlesH píše:No, musím konstatovat, že ten tvůj poslední kód mi v PICAXE Editoru vůbec neprojde přes "syntax check". Jednak to píše, že "pwmout" příkazy jsou použity na nevhodných pinech a jednak jsou tam skoky na neexistující návěští. Má to být jen nějaká "nefunkční kostra programu"? Pokud ano, tak ten kód jsi sem ani dávat nemusel (protože z něj stejně nelze nic moc poznat). Pokud Ti ale ten kód funguje, tak v tom případě mi něco uniká nebo mám nějaké úplně jiné vývojové prostředí PICAXE.
Jinak obecně lze stisky tlačítek obsluhovat buď častým čtením stavu příslušných pinů, nebo nastavením vhodného přerušení na příslušné piny. Ve Tvém konkrétním případě by to přerušení snad mohlo být trochu vhodnější. Stačí to takhle obecně?