Příkaz "SETINT"

Viper707

Re: Příkaz "SETINT"

Příspěvek od Viper707 »

Dúfam, že som plne pochopil situation....
Ideme ovládať PC hru cez reálny pult. Doteraz čo som pozeral, tak ten pokey je vlastne USB-to-LTP konvertor. Primárne je určný k riadeniu CNC strojov. Neviem ako je to cele zapojené, ale moc by ma to zaujímalo. Čo viem, tak MSTS je možné plne ovládať cez bežnú klávesnicu s PS/2 koncoukou. PICAXE viem čítať tieto signály a aj ich vyhodnocovať. Treba zistiť u známeho, čo všetko vie dostať z PC von (napr.: rýchlosť, napätia, indikácie atď...) a akým spôsobom (asi to budú signály tip digital,PWM,...).
Idem si pustiť film, otvoriť vínko, študovať manuály a keď opíšeš spôsob komunikácie s PC tak skúsim niečo ponavrhovať.
David
Příspěvky: 39
Registrován: 19 dub 2013, 18:05

Re: Příkaz "SETINT"

Příspěvek od David »

Zdravím,
jak jsem psal, řízení lokomotivy v MSTS pomocí reálného pultu řešit není třeba. Ovládání je již pomocí převodníku PoKeys 56U, který de facto nahrazuje klávesnicci, vyřešeno a vše funguje bez jakýchkoli problémů ... http://www.youtube.com/watch?v=RiqR0bIzMyM . Stejně tak je funkční zařízení pro kontrolu bdělosti strojvedoucího, které bylo vytvořeno s použitím Picaxe 08M2 pro případy, kdy lokomotiva jede po nekódovaném traťovém úseku ... http://www.youtube.com/watch?v=zJcVBWsO1z8 .
Řešit je tedy třeba chování mobilní části VZ-tky v případě, kdy lokomotiva jede po kódovaném traťovém úseku. Je tedy zcela nepodstatné, jak se lokomotiva v MSTS pomocí reálného pultu ovládá. Důležité je, že se na již zmíněných pinech pararelního portu PC objevují log.1 či log.0 v závislosti na tom, jaký návěstní znak svítí na návěstním opakovači v kabině lokomotivy na monitoru PC.
Picaxe 14M2 by tedy pracoval jen s úrovněmi log.1 či log.0 přiváděnými jak z onoho pararelníko portu PC, tak z tlačítka či spíše dvou pararelně zapojených tlačítek bdělosti, mikrospínače v brzdiči přímočinné brzdy a spínače v řídícím kontroléru. Uvedené prvky jsou umístěny v reálném pultu a v případě zařízení KBS fungují bezchybně. Vše, co se týká té KBS-ky s Picaxe 08M2 je k dispozici zde http://www.edisk.cz/stahni/40290/KB_Pic ... 2.3KB.html . Ke schématu zapojení bych jen doplnil, že aut.výlukou je myšlen spínač v brzdiči přímočinné brzdy (brzdič BP), který je trvale sepnut při plném zabrzdění lokomotivy a elmech.převodníkem zase spínač v řídícím kontroléru, který spíná jen na krátkou chvíli při pohybu volantu kontroléru mezi jednotlivými výkonovými stupni. Právě tento spínač poskytuje zařízení VZ "informaci" o tom, že strojvůdce manipuluje s kontrolérem.
Dám tedy dohromady schéma mého návrhu připojení prvků k Picaxe 14M2 ať je to přehlednější. Bude-li zájem, není problém dojednat osobní skouknutí řešení pultu. Přeci jen je to lepší než sepisování dlouhých elaborátů.

S pozdravem

David
feruna
Příspěvky: 18
Registrován: 17 dub 2013, 02:30

Re: Příkaz "SETINT"

Příspěvek od feruna »

Krááása! Já chci taky mašinku :roll:
David
Příspěvky: 39
Registrován: 19 dub 2013, 18:05

Re: Příkaz "SETINT"

Příspěvek od David »

Po delší době zdravím,
řeším simulaci ovládání ovládací skříňky traťového radiového systému na lokomotivě a i tentokrát se trápím s příkazem SETINT. :?

Použit je mikrokontrolér PICAXE 14M2 a níže uvádím velmi "začátečnický" zápis programu zatím bez použití zmíněného příkazu ...

REM TRS pro pult 749 172-3
trs_kopac_zrychli:
low c.1
sleep 156
high c.4
high b.5
pause 3000
low b.5
pause 4000
high c.1
high b.5
pause 3000
low b.5
stop

Mohl bych poprosit o "nakopnutí" jak řešit návrat na začátek programu v případě, kdy bude na konci běhu programu stisknuto tlačítko připojené na vstup C.0 (na pin C.0 přivedena log.1) ? Nějaké pokusy jsem již prováděl, ale nedařilo se. ;)

Co jsem se dočetl (a vlastně i s nezdarem vyzkoušel), příkaz SETINT lze použít jen jednou. Existuje ale řešení i pro situaci, ve které by na konci běhu výše uvedeného programu došlo ke stisku tlačítka na pinu C.0 a poté k "přeskoku" na níže uvedený program ? Objevila-li by se potom na pinu C.0 po stisku tlačítka log.1, je třeba aby se opět aktivoval program "trs_kopac_zrychli" a tak stále dokola ...

trs_zpomal:
low c.1
sleep 156
high c.2
high b.5
pause 3000
low b.5
stop

Děkuji za případné rady či doporučení.

David
jova
Příspěvky: 362
Registrován: 16 pro 2013, 11:40

Re: Příkaz "SETINT"

Příspěvek od jova »

A proč na to chceš použít zrovna ten příkaz SETINT?
Ten se používá v případě, kdy potřebuješ aby se po stisknutí konkrétního tlačítka provedlo něco kdekoli v celém, nebo části programu.
Pokud to má být funkční jen na konci programu, normálně bych to tam zacykloval místo toho STOP a dal tam odkaz na to tlačítko.
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Příkaz "SETINT"

Příspěvek od AlesH »

Mám trochu problémy pochopit, co přesně by měl program dělat (kdy se má co spouštět). Pokud je to tak, že po stisku tlačítka se má (jednou) spustit (pod)program "trs_kopac_zrychli" a teprve po jeho skončení se má po dalším stisku tlačítka spustit (pod)program "trs_zpomal", tak použitelným řešením je už dříve zmiňovaný "polling" a přepínání "příznaku", který (pod)program se má spustit. Např. nějak takto:

Kód: Vybrat vše

#picaxe 14M2
symbol co = b0 ; jaky program se ma spustit po stisku tlacitka (1 = zrychli, 2 = zpomal)
co = 1
start:
  if pinC.0 = 1 then ; bylo stisknuto tlacitko
    if co = 1 then
     co = 2
     gosub trs_kopac_zrychli
    else
     co = 1
     gosub trs_zpomal
    endif
  endif
goto start

trs_kopac_zrychli:
...
return ; misto end

trs_zpomal:
...
return ; misto end
V programu tvrdě předpokládám, že tlačítko bude uvolněno dřív, než 3 sekundy po stisknutí (konec stisku tlačítka prostě nemám nijak ošetřen).

Pokud by to mělo reagovat na stisk tlačítka i v průběhu vykonávání podprogramů (ještě před jejich dokončením), tak pak už bychom se asi bez přerušení (SETINT) neobešli. Dej vědět, jak to má být.
David
Příspěvky: 39
Registrován: 19 dub 2013, 18:05

Re: Příkaz "SETINT"

Příspěvek od David »

Zdravím
a děkuji za tip. Vyzkouším.

Upřesnil bych požadavky ...

Po přivedení napětí na PIC se rozběhne program "trs_kopac_zrychli". Po jeho skončení musí být na pinech C.1 a C.4 log.1 a na B.5 log 0. Stisk tlačítka (na pinu C.0 log.1) bude následovat až po skončení programu, tedy ne za jeho běhu. Také předpokládám, že stisk nebude běžně trvat déle než 3 sekundy, ale protože by mohly systém ovládat i děti, dá se nějak ošetřit stisk delší (nevím, dejme tomu sekund 5-10) ?

Po stisku tlačítka (pin C.0 = log.1) by následoval skok na program "trs_zpomal". Na jeho konci kdy bude na pinu C.2 log.1 a B.5 log.0 by opět následoval stisk stejného tlačítka (pin c.0 = log.1) a znovu by naběhl program "trs_kopac_zrychli".

David
jova
Příspěvky: 362
Registrován: 16 pro 2013, 11:40

Re: Příkaz "SETINT"

Příspěvek od jova »

Pořád mi tam ještě nejsou jasné ty sekundy na stisk tlačítka, ale třeba zatím takto?

Kód: Vybrat vše

REM TRS pro pult 749 172-3 
trs_kopac_zrychli:
low c.1
rem sleep 156
high c.4 
high b.5 
pause 3000
low b.5
pause 4000
high c.1
high b.5
pause 3000
low b.5 
stop1:
if pinc.0=1 then goto trs_zpomal 
goto stop1 

trs_zpomal:
low c.1
rem sleep 156
high c.2
high b.5
pause 3000
low b.5 
stop2:
if pinc.0=1 then goto trs_kopac_zrychli
goto stop2 
David
Příspěvky: 39
Registrován: 19 dub 2013, 18:05

Re: Příkaz "SETINT"

Příspěvek od David »

Nastavením "sleep 156" je myšlena změna na výstupních pinech po cca.6-ti minutách po spuštění daného programu.

Děkuji. Vyzkouším ...

... Děkuji, funguje přesně tak jak je třeba.

David
jova
Příspěvky: 362
Registrován: 16 pro 2013, 11:40

Re: Příkaz "SETINT"

Příspěvek od jova »

To jsem pochopil, mě šlo o:
Také předpokládám, že stisk nebude běžně trvat déle než 3 sekundy, ale protože by mohly systém ovládat i děti, dá se nějak ošetřit stisk delší (nevím, dejme tomu sekund 5-10) ?
Ale jestli to takhle vyhovuje, tak už to neřeš.
Odpovědět