Obsluha tlačítka

Milops3
Příspěvky: 51
Registrován: 09 kvě 2013, 20:51

Re: Obsluha tlačítka

Příspěvek od Milops3 »

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...
CZMartin_k
Příspěvky: 61
Registrován: 29 kvě 2014, 17:04

Re: Obsluha tlačítka

Příspěvek od CZMartin_k »

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.
CZMartin_k
Příspěvky: 61
Registrován: 29 kvě 2014, 17:04

Re: Obsluha tlačítka

Příspěvek od CZMartin_k »

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?



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


Děkuji za rady.
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Obsluha tlačítka

Příspěvek od AlesH »

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ě?
CZMartin_k
Příspěvky: 61
Registrován: 29 kvě 2014, 17:04

Re: Obsluha tlačítka

Příspěvek od CZMartin_k »

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ě?
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.
Odpovědět