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.
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 :
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.
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
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.
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.
ď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
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
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.
ď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.
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í.
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...
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.
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ť...
vidím, že sa musím spresniť. či nie je dispatch jednoduchší som myslel ako otváranie krabičky kôli preprogramovaniu adresy loko ;-).
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.
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...
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.
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.