Railnet

ADAM - Ovladač lokomotiv pro Loconet

DCC | Zdeno Janeček, 27. 06. 2010 (13165 zhliadnutí)

Vymyslel jsem na žádost jednoho modeláře ovladač, který je trošičku jiný než stávající ovladače. Je určen na domácí ježdění pod Loconetem a teda pod IBX, Minibox nebo RKDCC.  Je postaven na  platforme mikropočítače Atmega8 nebo 88, které mi vyhovují po stránce pinové, vestavěných periferií a jiných vlastností (rychlost, spotřeba, dostupnost, cena). 

Už dost dlouho jsem nic nepublikoval a dal jsem si oddych od modelaření a různých přešlechtěných akademiků. Já vím, že nejsem žádný zázrak, ale přece jenom, všechno má své meze a hranice. V zásadě mi to dobře padlo, udělal jsem spoustu jiných věcí, které jsem zanedbal.

Ale najdou se lidé, kteří si trochu váží mé práce a nedají mi pokoj a stále něco chtějí. Moje Vedzesy jdou stále na odbyt a hlavně jejich přepínací režim je velmi žádoucí. Dost mne zaskočila prosba o digitální ovladač na lokomotivy, který by uměl toho trochu víc, než Fred nebo Fredi. Taky mi něco naznačovali, že jsou s Fredi problémy. Nepátral jsem, o co se jedná, je mi to v zásadě šumafuk.

Ovladač dostal jméno Adam, protože je to „kurnik“ dlouhá doba, kdy zase něco vymýšlím. Postavil jsem dva kusy na otestování a dost dlouho je už testuji, asi 2 měsíce. Adam je dvoulokomotivový ovladač s nekonečnými kolečky (enkodéry) , které ovládají nezávisle dvě loko. Má ovládání 9-ti funkcí a umí posílat pakety „B0“ Loconetu na ovládání příslušenství. Dále má zabudovaný piezo reproduktor, který vrčí podle toho, jak rychle jede loko. Není to žádný zvukový modul, ale je to užitečná indikace o nastavené rychlosti, která mi velmi chyběla u enkodérů. Dále má zabudované programování adresy a ID čísla. Dále má možnost sledovat provoz na DCC, zda moje pakety jdou do kolejí. V případě, že to tak není, ovladač se sám inicializuje.

Schéma je zase až neskutečně jednoduché a je to moje tradice, jak s minimem dosáhnout maximum.

Popis funkce Adama

Napájení Adama je z pinů 1 a 6 konektoru RJ, který zároveň slouží na připojení sběrnice Loconet a uzemnění. Signál DCC je usměrněn přes dvojici zelených LED diod, které ukazují, že napájeni je v pořádku. To je dost častá chyba, kdy zkřížené drátky v zásuvkách znefunkční Loconet. Touto indikací máme okamžitou informaci o problému. Přes odpor a Zenerku je stabilizované napětí na 4,1V , které spolehlivě stačí na napájení Adama. Adam má spotřebu asi 12mA, což je trošku více než je normální, ale to dělají LEDky, které nejsou vysoko svítivé. Některé odpory jsou zbytečné, jako třeba u enkoderu, ale nemám dobrou zkušenost, to nechat na PULL-UP odporech. Indukované brumové napětí je dost velký hazard.
Vstup Loconetu je přes odpory R2,R3, které zajišťují vstupní impedanci a snižují napětí na velikost, která nepoškodí procesor. Signál je vedený na pin RxD a Int0, které zajišťují korektní zpracování Loconetu. Výstup Loconetu je přes TxD a 2 tranzistory BC337 a ty slouží jako dvojitý invertor a napěťový posilovač výstupu.

Signál DCC se přivede přes přizpůsobovací odpory R4, R16 na pin Int1, přes který ovladač sleduje, zda se objevují jeho pakety na sběrnici DCC (koleje) a pokud to tak není, provede inicializaci.

Adam má tři ovládací prvky a to klávesnici 4 x 4 a 2 enkodéry s tlačítky. Enkodér je tzv. nekonečné kolečko, které umí rozlišit, zda se točí doleva nebo doprava a podle toho se nastavuje rychlost loko.

Tady se musím zastavit nad problémy, které si myslím, že enkodéry mají. První je ten, že enkodéry mají životnost 15 000 cyklů. Doufám, že se mysli 15 000 otoček o 360st. Pokud je to 15 000 kroků, tak je to pěkný odrb. Druhé je to, že lineární in-/de-krementace se musí nastavovat postupně a nejde ji žádným způsobem obejit. To znamená, že na dosažení 128 st. rychlost, se musí vykonat 128 kroků. Což je naprosto šílené a životnosti enkoderu to neprospěje. Proto jsem to programově omezil na 32 kroku a nastavil tabulku rychlostí proporcionálně. Male rychlosti narůstají pomalu a velké stále rychleji. Tím jsem omezil největší problém a to zahlcení sběrnice, kdy rychle protočení enkoderu je schopné poslat 60-100 příkazů za vteřinu, což asi není to pravé ořechové. Další problém je indikace nastavené rychlosti, kdy při zasunuti ovladače, se musí vizuálně zjistit skutečná rychlost. To jsem obešel vrčením přes piezo, je to i zajímavé, ale může to někomu vadit, pokud tam má skutečný zvukový dekodér. Nemyslím si, že použití enkodérů je až tak výhodné. Zcela určitě vymyslím verzi s potenciometry. Ideální by bylo sehnat potenciometr s tlačítkem, hledal jsem a nenasel jsem , jen víceřadové do autorádií.
Enkodéry mají na sobě tlačítka, které jsou naprosto super a jsou jedinečné. Jedině to opravňuje použití enkodérů, protože spojeni s regulací rychlosti, je vysoce intuitivní. Mam to vyřešené tak, že první stlačení nastaví nulovou rychlost a loko zastaví podle brzdné křivky (která je v loko definovaná) a druhé stlačení nastaví „1“, teda emergency stop. Tohle považuji za obrovskou výhodu oproti klasice, protože hledání stop tlačítka na Fredech je poněkud nešťastné. Zároveň to snižuje zatížení sběrnice, protože zastavení se vykoná jediným příkazem. Přitom to není na úkor modelovosti, protože loko zastaví podle brzdné křivky.
Klávesnice 4 x 4 je poněkud veliká a pokud se najde menší, určitě ji použiji. Taky cena 6Euro je dost vysoká a je 2x vyšší než cena procesoru .

Programová rutina na obsluhu klávesnice mi dala dost zabrat, protože procesor je dost rychlý a nastavení čekacích smyček bylo naprosto klíčové, aby se potlačily hazardy a přitom se nic neztratilo. Musel jsem najít kompromis mezi obsluhou enkodérů a klávesnice, které mají opačné nároky na rychlost.

Přes klávesnici se obsluhuje dost věcí a to :

  1. směr jízdy aktuální loko - tlačítko * , indikované duoLED diodou u příslušného enkoderu. Uvažoval jsem nad tím, zda udělat imaginární nulu a od ní doprava nebo doleva by se měnil směr a následně rychlost. Potom jsem si ale pomyslel, že to není zvykem a upustil jsem od toho. Ale vůbec není problém to zabudovat a aktivovat.
  2. volba 9 funkcí aktuální loko – tlačítka 1-9. Chtěl jsem zabudovat 12 funkcí, ale odradila mne dvojstisková volba, protože mám k dispozici jen 10 číselných tlačítek. Požadavek byl na 9 funkcí a tak jsem to nechal tak.
  3. inicializace slotů obou lokomotiv - tlačítka A nebo B. Tahle funkce je trochu problematická a nevím, zda ji časem nezruším. V zásadě nemůže nic pokazit, proto jsem ji tam nechal.
  4. programování adresy vybrané loko – tlačítko # > adresa >A nebo B. Volba adresy je nutná, protože nepodporuji stav Dispatch, který považuji za přežitek a zbytečný.
  5. programování ID čísla do EEPROM ovladače – tlačítko # > ID > C nebo D. Volba ID je dodatková možnost, kdy setkání stejných ID je stále reálnější a musí být možnost ho opravit.
  6. posílání paketů „B0“ ovládání příslušenství – tlačítko D > adresa > A do rovna , B do odbočky. Tohle byl vlastně klíčový požadavek na objednávku Adama, kdy ovládání příslušenství přes IBX a následné překopání do DCC, je realizovatelné. Mám vyvinuté dekodéry, které se dají ovládat přímo z Loconetu, překopávání do DCC je nevhodné na modulovku. Dokonce teď realizuji možnost stavět jedním příkazem celé vlakové cesty. Procesory mají 500 bajtů EEPROM, kde se dají nahrát postupnosti do řetězcových proměnných nebo polí a následně poslat do dekodérů.
  7. on/off, zvuková indikace rychlosti aktuální loko – tlačítko C. Zvukovou indikaci rychlosti jsem doplnil dodatečně, protože chybějící zpětná vazba mezi rychlosti a nastavením velmi chybí.

Protože využití paměti 8kB v M8 nebo M88 je na úrovni 6kB, tak jsem velmi silně uvažoval o zabudováni programovacích příkazů pro lokodekodér přes slot 124. Sám to ve své centrále používám a je to celkem dobrá věc. Sice používám jen jeden režim a to nastavováni podle NMRA 9.2.1, strana 8 předpisu. Jedná se o nastavováni #CV23, #CV24 , které definuji zrychlení nebo zpomalení lokomotivy. Tohle by byla asi velmi žádaná funkce, protože ale nepoznám centrálu, která to podporuje, tak jsem se na to vybodnul.

Mel jsem v ruce klon IBX od PIKO a ten to nepodporuje.

Nevýhoda procesorů M8 oproti M88 je v tom, že nemají zabudované přerušení na vývodech a tak všechno musí být obslouženo v hlavním programu. Z toho vyplývá, že pokud jste v režimu programování, či už schválně nebo omylem, tak je zablokované ovládání loko. Procesor M88 má obsluhu přerušení na pinech zabudovanou a tak je obsluha loko (enkodéry) nezávislá na stavu ovladače. Já si myslím, že M8 jsou neperspektivní a budu je vyřazovat z aplikací. Množství periferií, které M88 má k dispozici je jednoznačný argument a i programy se píší snadněji. Vymýšlení a realizace ovladače byla celkem zábava a problémy byly celkem běžné a řešitelné. Nenarazil jsem na žádný principiální problém, se kterým bych si nevěděl rady. I programování RISC instrukcí se mi celkem usadilo a nemám s nimi potíže.

Nepočítám s nějakou velkou výrobou těchto ovladačů, proto pokud bude mít někdo zájem, klidně mu pošlu podklady na výrobu.

Súvisiace články:
ADAM - úpravy a opravy (28.07.2010)
[Akt. známka: 0,00 / Počet hlasov: 8] -      + 

Pridať nový komentár

gaborm 27.06.2010 13:25:57

ahoj, zaujímavý počin, aj by som povedal, že sa mi páči. poprosím o odpoveď na tri otázky, napriek tomu že ma pravdepodobne považuješ za prešlachteného akademika :-). 1. ako sa správa tento ovládač v prípade, keď chce inicializovať adresu loko, ktorú už riadi iný ovládač? 2. tých deväť funkcií je vrátane f0? to jest f0 ja na 1? alebo sa svetlá zapínajú na "0" + 9 funkcií? 3. keď považuješ dispatch za prežitok (ktorý je určitým bezpečnostným prvkom), akým spôsobom je zabezpečené náhodné alebo úmyselné neprevzatie inej loko? tým nemám na mysli súvis s otázkou čís. 1. kombinácia "# > adresa > a", je na môj vkus prijednoduchá. existuje nejaký "hosť" mód, v ktorom nie je možné meniť adresu? vopred ďakujem. gáborm

Reagovať

zdeno 27.06.2010 14:58:08

re:

1/ je to chranene stejne jako fred nebo fredi, teda zacne vsechno blikat a ovladac se neprihlasi. zrovna ted jsem opravoval chybu v programu, kdy zadavatel nahodil obe adresy stejne. tim padem se druhe loko neprihlasilo a ovladac zustal zablokovany. tohle jsou speky, ktere se daji vychytat jen pouzivanim. 2/ ano f0 je na 1 a dalsich 8 funkci nasleduje (2-9). pokud se podivas na protokol dcc, tak zakladni pakety prislusenstvi umoznuji jen 9 funkci, vcetne f0. dalsi funkce musi jit pres jine druhy paketu. i loconet 1.1 umoznuje jen 12 funkci v zakladnich paketech, dalsi funkce jdou jinymi pakety, ktere dokonce ani nejsou volne pristupne pro koncove pouzivatele.

Reagovať

pokracovani 27.06.2010 14:59:52

re:

3/ kazda centrala kontroluje adresy a pokud pride pozadavek pres bf na pouzitou adresu, tak posle zpatky kompletni paket e7, vcetne id cisla. takze ovladac to porovna se svojim id a exne. ---- uz jste opravili tu chybu, ze to dlouhe komentere tvrde oreze ?? radsi jsem to rozdelil.

Reagovať

gaborm 27.06.2010 15:39:26

re: re:

ďakujem za odpovede. k 3., písal som, že nemám na mysli tento spôsob ochrany, keďže som sa naň pýtal v prvej otázke. náčrt situácie. na layout-e mám v depe mašinu, ktorej ovládač je už pol hodinu odpojený. adolescent v záchvate nudy čakajúci na povolenie odjazdu zo stanice voľne mačká ľubovoľnú kombináciu na adam-ovi (nerobme si ilúzie). v okamihu povolenia odjazdu pridá rýchlosť, jeho loko stojí a náhodne zmenená adresa loko sa na druhej strane layout-u začína pohybovať. čo s tým? gáborm

Reagovať

gaborm 27.06.2010 15:51:05

re: re: vysvetlenie

aby si ma nechápal tak, že hľadám chybu za každú cenu. naozaj sa mi to ľúbi, cenovo je to veľmi výhodné, hlavne keď sa to nejak vhodne zakrabičkuje. tým sa to stáva dosť zaujímavým aj pre modulovkárov a toto je naozaj reálne riziko použitia. ilúzie o poučení obsluhy si nerobím. gáborm

Reagovať

zdeno 27.06.2010 16:15:17

zajimavy napad, zaheslovat ovladac. ;-) --- zatim je to tak, ze to ma prava administratora, teda vsechno. je to urcene na domaci pouziti, teda neni to otestovane na velkem setkani. predpoklad nahodneho nebo zlovolneho jednani nebyl podkladem pro vyhotoveni tohoto ovladace. v zasade neni problem naprogramovat nejaky pin, kterym se ovladac zablokuje pred zmenou adresy a id. ale treba do velkych stanic by se urcite hodily dve zalohy na jednem ovladaci. zaheslovat to je otazkou tri prikazu, teda nic extra. dokonce by ten pin mohl byt verejne znamy, prece jenom stlacit nahodne 8 tlacitek v presnem poradi by byla obrovska smola.

Reagovať

gaborm 28.06.2010 09:38:09

re: vysvetlenie ii

ďakujem za ozrejmenie, ale railnet sú primárne stránky modulovkárov, takže každý nápad tu zverejnený je v prvej rade posudzovaný z tohoto uhlu pohľadu.

Reagovať

jkiss 28.06.2010 09:14:48

zdeno, pri všetkej úcte k tvojim schopnostiam, prosím zober nasledovné slová ako konštruktívny príspevok, nie ako útok proti tebe alebo proti tvojim nápadom. ak si pozorne pozrieš ako máš urobené budenie loconet: tak pri zapnutí zariadenia je výstup atmel v 3. stave, teda vysoký odpor. následne q3 je zavretý, naopak q2 otvorený: t.j. vysiela na loconet signál "break". inak povedané zasunutím adama dôjde na krátku dobu zablokovanie veškerej komunikácie na ln až do doby, kým sa atmel inicializuje, čo môžu byť rádove aj desiatky milisekúnd. signál "break" na ln znamená že všetky zariadenia prestanú komunikovať, a prípadne aktíve zar. čo malo "rozrobenú" komunikáciu musí začať odznova. nuž, neviem či je to takto správne. stačí pohľad na schémy freda a miniboxu, kde táto situácia nehrozí.

Reagovať

jozef kiss 28.06.2010 09:21:01

pokračovanie: iste, na domácom koľajisku je to šum-a-fuk, ale na modulisku, kde sa vyberajú zapínajú ovládače veľmi často, môže to znamenať riadne zabrzdenie ln. navyše: k blokovaniu ln dochádza počas zapínania, teda prechodového javu kontaktov. takže navyše máme ešte náhodný, falošný signál...

Reagovať

zdeno 28.06.2010 12:40:30

no obavam se, ze mas pravdu. --- resenim je pull-up odpor, ktery to bude okamzite tahat do "1". tim padem vystupni tranzistor se bude stejne tahat do "1" a nedojde k bloknuti sbernice. jeste to muzu vyresit prefazovanim txd a vyhodit jeden tranzistor. --- pridelal jsem jeden switch, ktery blokuje zadavani adresy a id. tim padem se nebude dat adam preprogramovat bez otevreni a odstraneni jumperu.

Reagovať

gaborm 28.06.2010 13:24:04

re:

nie je potom ten dispatch jednoduchsi?

Reagovať

jki 28.06.2010 15:18:15

re:

no nie som si istý, či som to pochopil: >resenim je pull-up - ten tam už je a robí tú šarapatu, lebo s nárastom napätia okamžite otvára q2. q2 by mal mať "pull down" a q3 by mal byť pnp emitor na + ak sa nemýlim, musel by som si to nakresliť...

Reagovať

gaborm 28.06.2010 17:20:14

re:

vidím, že sa musím spresniť. či nie je dispatch jednoduchší som myslel ako otváranie krabičky kôli preprogramovaniu adresy loko ;-).

Reagovať

28.06.2010 15:46:09

dispatch neni resenim hardware, --- je tam chyba v navrhu, kdy treti stav up blokuje loconet. ten pull-up musi jit primo na vyvod txd, teda pind.1 tim padem se bude s nabihanim napajeni otevirat q3 a zavirat q2. tim padem se vlastne vubec q2 vubec neotevre, protoze 0,7v nabehne v bazi q3 mnohem drive nez muze dojit k otevreni q2. hodil jsem to na osciloskop a je to tak. nekdy se tam objevi impuls o delce 60ns, coz je na hranici toho, co dokazu zmerit.. predtim to bylo okolo 5 - 20ms, coz je kurnik dost. --- jinak jsem se dival do datasheetu a nejde prefazovat usart. potom by se to muselo resit softwerovym uartem.

Reagovať

jki 28.06.2010 16:34:35

re:

aha už to je jasné. ale aj tak - ak sa dva tranzistory počas prechodvého javu nábehu napájania preťahujú -kto z koho, tak z toho môžu byť len nepríjemné zákmity... stav oba zavreté a 3. stav pri nábehu mi pripadajú spoľahlivejšie... ak si to nameral že je to ok, v poriadku, otázka je ako to bude vyzerať pri inej dvojici tranzistorov a rozptyle parametrov a parazitných kapacít, mágie podobne...

Reagovať

zdeno 28.06.2010 19:14:03

re: re:

muzes mi verit, ze se neuspokojim jen s jednim nebo dvoma meranimi. zasunul jsem konektor nekolik desitek krat a i tak, ze jsem zasunoval velmi pomalicku. neni tam zadna kapacita, ktera by to zbrzdila. dokonce jsem to hodil na dvojpaprsek osciloskop a ten ukazuje, ze napeti narusta na obou bazich stejne a v momente dosazeni bodu otevreni se ten druhy okamzite zavira. takze ten cas je opravdu v ns. ja mam jen 20mhz osciloskop a ten ma problem to zachytit a to jeste jen pomoci triggeru. --- ted jsem vytahnul fredy a ty to maji taky na hranici 150ns. tam to ale neni tranzistorem ale ten impuls primo vyrobi 16f84 pri nastaveni do "0", kdy zustane chvilku v "1" pri prechodu z tretiho stavu. v tomto je atmega omnoho lepsi.

Reagovať

zdeno 28.06.2010 19:24:42

prepac gabor, az ted jsem si to vsimnul. ;-) --- je to vsechno kompromis, pokud mas dispatch mod, zas musis chodit ku centrale, nebo miniboxu a nastavovat tu adresu. takze to ma vsechno sve vyhody a nevyhody. ja uprednostnuji variabilitu a jednoduchost. pokud bude ten objednavatel doma, urcite bude mit radsi vsechno pod palcem a v dosahu. pokud pujde na setkani, zablokuje adresu, ktera mu bude pridelena pro jeho loko a smytec. za celou dobu setkani se to nebude menit. --- ale pochybuji, ze on nekdy pujde na setkani, stavim mu kolejiste na doma a ten druhy ma kolejiste taky doma. --- jinak cena tohoto ovladace neni zrovna nizka. vychazi to na 20 euro v soucastkach.

Reagovať

Pridať nový komentár