• Ten serwis używa "ciasteczek" (cookies). Korzystając z niego, wyrażasz zgodę na użycie plików cookies. Learn more.
  • Szanowny Użytkowniku, serwisy w domenie modelarstwo.info wykorzystują pliki cookie by ułatwić korzystanie z naszych serwisów. Jeśli nie chcesz, by pliki cookies były zapisywane na Twoim dysku zmień ustawienia swojej przeglądarki.

DCC samoróbka oparta na Arduino

r-mik

Pan Chlewik
Reakcje
145 30 0
Trochę dokładniej zbadałem kod i jest tam bardzo poważny błąd. Komunikacja po UART (przerwania) zakłóca generowanie pakietów DCC!
Łatwo wywnioskować, że autor kodu, nie sprawdził czy i ile błędnych pakietów generuje program. Wszystko działa tylko dlatego, że pakiety generowane są w kółko i prędzej czy później pakiet wyjdzie niezakłócony. Użycie innych przerwań wywoła taki sam skutek. Błąd można poprawić ale wymaga to napisania własnych procedur obsługi przerwań UART pseudo wielopoziomowych. Aby zrobić dobrze trzeba robić wstawki ASM.
To tłumaczy, dlaczego obsługiwana jest tylko jedna lokomotywa (wiedza z wcześniejszych wypowiedzi Forumowiczów, sam tego nie sprawdzałem). Otóż, gdyby zwiększyć liczbę lokomotyw poprawnych pakietów docierających do każdej lokomotywy byłoby mniej. W konsekwencji lokomotywy reagowałyby z opóźnieniem albo zatrzymają się gdy timeout jest krótki. Możliwe też, że będą poruszać się skokami.
Nie pisałem, że arduinowe rozwiązania to zabawki-dema? Arduinowe DCC nadaje się do testowania pojedynczej lokomotywy, zapisu/odczytu CV ale już nie nadaje się nawet na amatorską makietę no chyba, że jeździ na niej jedna lokomotywa bez oświetlonych wagonów w DCC albo z oświetleniem sterowanym tym samym adresem co lokomotywa ale co to za makieta z jedną lokomotywą?

AVR to zła platforma do programowego generowania sygnału DCC. Do tego najlepszy jest uC z DMA ostatecznie z wielopoziomowym systemem przerwań. Xmega ma i jedno i drugie ale w stosunku do ARM jest droga więc jedynym rozsądnym rozwiązaniem jest ARM. DMA powinno pobierać czasy generowanych impulsów z tablicy i sterować timerem. Po wygenerowaniu całej tablicy wywołać przerwanie, w którym nastąpi zamiana adresu tablicy a poprzednia, teraz nieużywana, zostanie wypełniona nowymi wartościami. W ten sposób obciążenie CPU do generowania sygnału = 0%, DMA "ukradnie" 1-2% czasu CPU, zależnie od szybkości pracy CPU. Żadne pakiety nie wyjdą z błędem powodowanym przez przerwania. W AVR, mimo, że obciążenie CPU przez przerwania timera jest na poziomie 20-30% pakiety będą wychodzić z błędami gdy wykonywać będą się inne przerwania np używane w tym kodzie przerwania od UART. Należy zauważyć, że komunikacja AVR ze "światem zewnętrznym" jest przez UART więc błędnych pakietów jest sporo!
Kod raczej jest do uratowania ale po co się meczyć? Zamiast UNO za ok 90zł można kupić https://kamami.pl/zestawy-uruchomie...rozwojowa-z-mikrokontrolerem-stm32f411ce.html za niecałe 5 dych. Ma wszystko co potrzeba a nawet więcej, ma programator/debuger i nie jest to klon! Nawet jak porównać tą płytkę z klonem UNO za 30zł to jak porównać Lamborghini do najtańszego modelu Fiata z tym, że Lamborghini nie kosztuje miliony a mniej niż 100 tysięcy.


Wobec bardzo poważnych błędów, które znalazłem, nie ma sensu abym tracił czas na szukanie kolejnych. Jeśli jednak ktoś chciałby je poznac z chęcią przyjmę zlecenie. Z jeszcze większą zlecenie na poprawienie błędów ale od razu zaznaczam, że będzie to kosztowniejsze niż napisanie tego kodu od "zera" na ARM.
 
Ostatnio edytowane:
OP
OP
Misiek

Misiek

Znany użytkownik
NAMR
Reakcje
5.075 140 0
Ile klawiszy funkcyjnych obsługuje arduinowe DCC?
Jaki zakres CV?
Ile akcesoriów?
Centralka oferuje takie możliwości jakie można wyciągnąć z dodatku w postaci JMRI.
Na początku postu jest to "zobrazkowane".

I tak jak Andrzej napisał - składa się toto w kilka minut i nawet taki laik elektroniczny jak ja ze szczątkową wiedzą o Arduino, potrafił to złożyć.

Na forum amerykańskim trainboard.com co jakiś czas pojawia się watek o DCC++ więc jakoś to nadal żyje własnym życiem.
Jest chyba nawet wersja rozwojowa z zaimplementowanym WiIFi - to wtedy nawet nie trzeba się z tym podłączać d komputera.
 

r-mik

Pan Chlewik
Reakcje
145 30 0
Jeśli się rozwija na AVR to dziedziczy poważne błędy w generowaniu pakietów. To po prostu zabawka i to kiepska. Można to zrobić taniej i lepiej, niestety, temat umarł zanim się urodził http://forum.modelarstwo.info/threa...emade-projekt-otwartego-oprogramowania.50655/ Nikt nie chce inwestować kasy w coś z czego nie będzie miał zysku. Nie dziwię się, dla idei pracowało się ze PRL, teraz pracuje się dla pieniędzy lub innych korzyści.

Temat centralki nie jest taki całkowicie upadły. Wystarczy napisać do redakcja@elportal.pl w sprawie projektów DCC. Jeśli będzie zainteresowanie, temat zostanie podjęty przez AVT. Pojawią się zestawy do montażu, jak będzie zapotrzebowanie to i zmontowane urządzenia. Niestety, większość zamiast napisać krótki list, woli godzinami siedzieć na FB a później narzekać, że nie można kupić taniej wersji homemade i kupuje drogie klony PACO.
 
Reakcje
3 0 0
Czytasz to co chcesz. Pisałem że centralkę na Arduino używam tylko do programowania dekoderów i testowania lokomotyw.
Centralka podłączona do najnowszej wersji JMRI pozwala obsłużyć 28 klawiszy funkcyjnych.
Do sterowania akcesoriami nie używam DCC, mam własny system sprawdzony od lat.
 

r-mik

Pan Chlewik
Reakcje
145 30 0
używam tylko do programowania dekoderów i testowania lokomotyw.
Bo tylko do tego się nadaje i to nie do końca. Używanie arduinowej zabawki na makiecie nie ma sensu, więc temat jest przereklamowany. Kilka stron na temat jakie to cudo a okazuje się, że to nawet nie zabawka. Nikt nie sprawdził czy działa to zgodnie z normą a kod wykazuje, że nie ma prawa działać dobrze. Ktoś coś tam zbudował, coś tam jeździ, coś tam czyta. tak to działają chińskie urządzenia.

Centralka podłączona do najnowszej wersji JMRI pozwala obsłużyć 28 klawiszy funkcyjnych.
Nie ma więc możliwości sprawdzić czy dobrze zaimplementowałem obsługę klawiszy funkcyjnych 29-68. Dla mnie to Arduino to nawet nie zabawka, przydatność zerowa. Widzę tylko same wady tego rozwiązania. Do pracy wymaga komputera. To duży minus. Gdy debuguję soft dekoder nie może być galwanicznie połączony z komputerem. Gdybym natomiast potrzebował czegoś tylko do zmiany i odczytu CV, np na spotkaniach, to wystarczy kupić jakiś zestaw startowy lokomotywy, wagonów, torów z centralką i manipulatorem. Różnica w stosunku do zestawu bez centralki to ok 300zł a poza sterowaniem cyfrowym jest jeszcze dekoder.
 
OP
OP
Misiek

Misiek

Znany użytkownik
NAMR
Reakcje
5.075 140 0
Nie ma więc możliwości sprawdzić czy dobrze zaimplementowałem obsługę klawiszy funkcyjnych 29-68. Dla mnie to Arduino to nawet nie zabawka, przydatność zerowa. Widzę tylko same wady tego rozwiązania.
Czyli nie jest to produkt dla Ciebie.

Dla kilku innych osób takie rozwiązanie jak proponuje ten wynalazek jest w zupełności wystarczające. To, że jest jakiś "obcy" standard DCC?
Dla mnie obcym standardem jest Xpressnet, NCE, MRC Maerklin, Motorola i kilka innych, których nie używam.
Składak jest do zabawy w domu i/lub programowania w domu, lub na imprezach. To tak, na wszelki wypadek, gdyby do programowania było potrzebne osobne stanowisko.

Dla mnie i dla wielu innych użytkowników, bez urazy, wywody z zagadnień elektroniki nic nie mówią i nie mam pojęcia co to jest: ;)
"AVR to zła platforma do programowego generowania sygnału DCC. Do tego najlepszy jest uC z DMA ostatecznie z wielopoziomowym systemem przerwań. Xmega ma i jedno i drugie ale w stosunku do ARM jest droga więc jedynym rozsądnym rozwiązaniem jest ARM. DMA powinno pobierać czasy generowanych impulsów z tablicy i sterować timerem. Po wygenerowaniu całej tablicy wywołać przerwanie, w którym nastąpi zamiana adresu tablicy a poprzednia, teraz nieużywana, zostanie wypełniona nowymi wartościami. W ten sposób obciążenie CPU do generowania sygnału = 0%, DMA "ukradnie" 1-2% czasu CPU, zależnie od szybkości pracy CPU. Żadne pakiety nie wyjdą z błędem powodowanym przez przerwania. W AVR, mimo, że obciążenie CPU przez przerwania timera jest na poziomie 20-30% pakiety będą wychodzić z błędami gdy wykonywać będą się inne przerwania np używane w tym kodzie przerwania od UART. Należy zauważyć, że komunikacja AVR ze "światem zewnętrznym" jest przez UART więc błędnych pakietów jest sporo!
Kod raczej jest do uratowania ale po co się meczyć? Zamiast UNO za ok 90zł można kupić https://kamami.pl/zestawy-uruchomie...rozwojowa-z-mikrokontrolerem-stm32f411ce.html za niecałe 5 dych. Ma wszystko co potrzeba a nawet więcej, ma programator/debuger i nie jest to klon! Nawet jak porównać tą płytkę z klonem UNO za 30zł to jak porównać Lamborghini do najtańszego modelu Fiata z tym, że Lamborghini nie kosztuje miliony a mniej niż 100 tysięcy."

Złożyłem sprzęt, działa. Czyli jest OK a pakiety i przerwania? Toż to jakieś zabobony!

Gdybym natomiast potrzebował czegoś tylko do zmiany i odczytu CV, np na spotkaniach, to wystarczy kupić jakiś zestaw startowy lokomotywy, wagonów, torów z centralką i manipulatorem. Różnica w stosunku do zestawu bez centralki to ok 300zł a poza sterowaniem cyfrowym jest jeszcze dekoder.
I tu się mylisz.
Kupno najprostszego komputera, który udźwignie JMRI to koszt kilkudziesięciu zł.
O ile dobrze pamiętam, pierwszy który dał temu radę (i nawet obskoczył kilka imprez z makietą N (co prawda z inną centralką, ale nadal jako głowny zestaw sterujący makietą - to tak per analogiam) kosztował 80zł,
Drugi, też w tym celu kupiony ale z opcją, "zabiorę se na wakacje, żeby sprawdzić pocztę i zdjęcia z aparatu gdzieś przerzucić" kosztował 120zł.
Nadal jest to kwota <200zł za sprzęt DCC.
Poza tym... założenie jest takie, że komputer w domu to chyba teraz każdy ma? Jedni mają PC, inni laptopa, czasem jedno i drugie i jeszcze konsolę i psa.
Inaczej, jakby rzecz ujmując nie zabiera się za składanie tego Arduino nie mając go do czego podłączyć?

Niestety, większość zamiast napisać krótki list, woli godzinami siedzieć na FB a później narzekać, że nie można kupić taniej wersji homemade i kupuje drogie klony PACO.
Tu zaś masz rację, zamiast rzeźbić z Paco, czy Nanoxem, można, teoretycznie, złożyć Arduino.
Ale w tym, jest jeszcze haczyk. Nie wiem czy są dostępne obecnie takie Shieldy jak są zalecane do budowy a aktualizacji wątku w temacie innych Shieldów nikt nie dopisał. Może na wspomnianym forum amerykańskim coś jest, nie wiem, nie czytam tamtych wątków.

Temat centralki nie jest taki całkowicie upadły. Wystarczy napisać do redakcja@elportal.pl w sprawie projektów DCC. Jeśli będzie zainteresowanie, temat zostanie podjęty przez AVT. Pojawią się zestawy do montażu, jak będzie zapotrzebowanie to i zmontowane urządzenia.
Teraz z kolei to mi wygląda jakbyś próbował zdewaluować wartość użytkową składanego własnoręcznie i hobbystycznie urządzenia, po to tylko, żeby zareklamować swoje własne komercyjne projekty?
 

r-mik

Pan Chlewik
Reakcje
145 30 0
Złożyłem sprzęt, działa.
Windows$ te działa tylko jak? Beznadziejnie. Nawet prawdziwego multitaskingu nie ma choć był reklamowany jako pierwszy (kłamstwo do potęgi, bo UNIX juz miał multitasking) prawdziwy (kolejne kłamstwo), kto używał UNIX wie o czym piszę.
Fiat126p też jeździ ale o wygodzie niema mowy.
Rozwiązanie na Arduino to takie połaczenie Fiata126p z Windows$, wychodzi złom + badziewie = wielkie szczęście, niczym w matematyce, dwa minusy dają plus.

Kupno najprostszego komputera, który udźwignie JMRI to koszt kilkudziesięciu zł.
Kolejne, zawodne prądożerne pudło, kolejne kabelki. Jak ktoś lubi niech dźwiga ze sobą dodatkowe komputery uruchamiające się kilka minut. ja wole centralkę startującą kilka sekund.
 

wicy

Znany użytkownik
Reakcje
653 1 3
Tak trochę z innej beczki, choć blisko...
Czy ktoś próbował już zrobić na Arduino "centralę do centrali"? :) Chodzi mi o "coś" (najlepiej Arduino), co zbierając informacje z detektorów zajętości odcinków (dowolnych: IR, magnetycznych, prądowych) będzie współpracowało z główną centralą DCC wysyłając do lokomotyw stosowne sygnały, np. zwalnianie, chwilowa zatrzymanie, sygnał dźwiękowy, itp. Czyli chyba taka Arduinowa mysz.
O ile z centralą Arduino DCC++ nie ma problemu, bo przyjmuje ona rozkazy przekazywane po RS232 w formie łańcuchów znaków, o tyle już współpraca z z21 (na ten przykład) wymaga... no właśnie, czego wymaga? Systemu UNO>RS485>z21? Ktoś już się bawił w taki układ?
 

bojleros

Nowy użytkownik
Reakcje
2 0 0
Fiat126p też jeździ ale o wygodzie niema mowy.
Niedzielnego amatora elektroniki nie przekonasz o niższości najpopularniejszych produktów Atmela bo liczy się dla nich prostota IDE i samego procesora. Większość z nich nie stać na cyfrowy oscyloskop (podstawowe narzędzia elektroniczne) więc ich dzieła są sprawdzane metodą objawowo-termiczną :) Sam bym widział chętnie zamiennik tego ustrojstwa na Ardunio tymbardziej że już nawet sam układ liczników w prostych atmelach to absolutne minimum szczątkowo zdolne do sterowania mostka tranzystorowego a co dopiero mowa o dma :X3:
 
Autor wątku Podobne wątki Forum Odpowiedzi Data
DCC 10
DCC 10
DCC 9
DCC 176
DCC 9

Podobne wątki