031-035 dekoder dcc - cyfronika.com.plcyfronika.com.pl/dok/avt5201.pdf32 ELEKTRONIKA PRAKTYCZNA...

5
31 ELEKTRONIKA PRAKTYCZNA 9/2009 Dodatkowe materiały na CD PROJEKTY POKREWNE wymienione artykuły są w całości dostępne na CD Tytuł artykułu Nr EP/EdW Kit Samoczynna Blokada Liniowa EP8/2009 AVT–5198 PODSTAWOWE PARAMETRY • Zgodny ze specyfikacją DCC • Płytka dwustronna 25×20 mm • Mikrokontroler ATtiny85 • Zasilanie do 20 VDC • Sterowanie silnikiem lokomotywy, oświetleniem i innymi, dodatkowymi funkcjami • Uniwersalny: możliwość zastosowania do sterowania semaforem, przejazdem kolejowym itp. AVT–5201 W ofercie AVT: AVT–5201A – płytka drukowana oczywiście zastosować procesor w obudowie SMD, ale pojawiają się kłopoty ze zmianą programu w już zmontowanym urządzeniu. Z takich powodów postanowiłem więc zbu- dować dekoder w oparciu o procesor AVR. AVR-y dostępne również w małej, mającej osiem wyprowadzeń obudowie, co umożliwia miniaturyzację dekodera. Ponad- to mają one wbudowany przetwornik A/C, co daje możliwość implementacji funkcji ABC. Wbudowany generator PWM ułatwia stero- wanie silnikiem, a pamięć EEPROM umoż- liwia zapamiętanie konfiguracji i jej zmianę bezpośrednio na makiecie. Ponadto AVR-y mogą pracować bez zewnętrznego generato- ra kwarcowego. Mój wybór padł na ATTiny85. Ten mi- krokontroler ma małe wymiary, niską cenę zakupu. Do jego programowania można za- stosowań tani debuger „AVR Dragon”. Po- nadto, jego zaletami są stosunkowo duża pamięć programu (8 KB) oraz danych (1 KB), co umożliwiło napisanie programu w języ- ku C. Cały kod programu jest dostępny na płycie CD_EP9/2009B oraz na stronie www. kolejki-h0.pl. Dekoder realizuje następujące funkcje: – Sterowanie silnikiem, to jest kierunkiem i prędkością obrotów w 28 krokach; prąd stały 0,8 A. – Ustawienie minimalnego napięcia zasi- lania silnika, przy którym lokomotywa zaczyna się poruszać. – Ustawienie maksymalnego napięcia zasi- lania silnika. Dekoder DCC Sterowanie makietą kolejową Spośród wielu tematów prezentowanych w EP, niesłabnącym zainteresowaniem cieszą się te związane z modelarstwem. Faktycznie, współczesna elektronika stwarza miłośnikom budowy wszelkich modeli ogromne możliwości. W poprzednim numerze opublikowaliśmy opis układu Samoczynnej Blokady Liniowej zapobiegającego kolizjom na makiecie kolejowej. Teraz opisujemy kolejny komponent, umożliwiający sterowanie ruchem na makiecie. W kolejnych numerach opublikujemy pulpit sterowniczy, jak również układ generatora dźwięków lokomotywy. Rekomendacje: modelarze kolejowi. Modelarzom kolejowym nie trzeba tłu- maczyć co to jest dekoder DCC i do czego służy. Niewtajemniczonym powiem, że umożliwia on sterowanie lokomotywami na makiecie. Każda z nich może jechać w in- nym kierunku i z inną prędkością. Ponadto może realizować dodatkowe funkcje, takie jak sterowanie oświetleniem, rozsprzęganie, generowanie dymu czy dźwięków. W Internecie dostępnych jest wiele roz- wiązań dekoderów. Konstrukcja większości z nich oparta jest o mikrokontrolery PIC- 16F84A. Zbudowałem kilka takich dekode- rów, ale niestety nie spełniały one moich wymagań. Największą ich wadą był brak funkcji ABC (zatrzymanie lokomotywy przed semaforem). Spowodowane jest to brakiem przetwornika AC w PIC16F84A. Ponadto procesor w obudowie DIP jest stosunkowo duży i wymaga zewnętrznego rezonatora, co także wpływa na gabaryty dekodera. Można PROJEKTY

Transcript of 031-035 dekoder dcc - cyfronika.com.plcyfronika.com.pl/dok/avt5201.pdf32 ELEKTRONIKA PRAKTYCZNA...

31ELEKTRONIKA PRAKTYCZNA 9/2009

Sterowanie makietą kolejową

Dodatkowe materiały na CD

PROJEKTY POKREWNE wymienione artykuły są w całości dostępne na CDTytuł artykułu Nr EP/EdW Kit

Samoczynna Blokada Liniowa EP8/2009 AVT–5198

PODSTAWOWE PARAMETRY• Zgodny ze specyfi kacją DCC• Płytka dwustronna 25×20 mm• Mikrokontroler ATtiny85• Zasilanie do 20  VDC• Sterowanie silnikiem lokomotywy, oświetleniem i  innymi, dodatkowymi funkcjami• Uniwersalny: możliwość zastosowania do sterowania semaforem, przejazdem kolejowym itp.

AVT–5201 W ofercie AVT:AVT–5201A – płytka drukowana

oczywiściezastosowaćprocesorw obudowieSMD, ale pojawiają się kłopoty ze zmianąprogramuw jużzmontowanymurządzeniu.Z takichpowodówpostanowiłemwięczbu-dowaćdekoderw oparciuo procesorAVR.

AVR-y dostępne są również w  małej,mającej osiem wyprowadzeń obudowie, coumożliwiaminiaturyzacjędekodera.Ponad-tomająonewbudowanyprzetwornikA/C,codajemożliwośćimplementacjifunkcjiABC.Wbudowany generator PWMułatwia stero-wanie silnikiem, a  pamięć EEPROMumoż-liwiazapamiętaniekonfiguracji i  jejzmianębezpośrednio na makiecie. Ponadto AVR-ymogąpracowaćbezzewnętrznegogenerato-rakwarcowego.

Mój wybór padł na ATTiny85. Tenmi-krokontroler mamałe wymiary, niską cenęzakupu.Do jegoprogramowaniamożna za-stosowań tani debuger „AVR Dragon”. Po-nadto, jego zaletami są stosunkowo dużapamięćprogramu(8 KB)orazdanych(1 KB),co umożliwiło napisanie programuw  języ-ku C. Cały kod programu jest dostępny napłycieCD_EP9/2009Borazna stroniewww.kolejki-h0.pl.

Dekoderrealizujenastępującefunkcje:– Sterowaniesilnikiem,tojestkierunkiemi prędkościąobrotóww 28krokach;prądstały0,8 A.

– Ustawienie minimalnego napięcia zasi-lania silnika, przy którym lokomotywazaczynasięporuszać.

– Ustawieniemaksymalnegonapięciazasi-laniasilnika.

Dekoder DCCSterowanie makietą kolejową

Spośród wielu tematów prezentowanych w  EP,

niesłabnącym zainteresowaniem cieszą się te związane

z  modelarstwem. Faktycznie, współczesna elektronika stwarza

miłośnikom budowy wszelkich modeli ogromne możliwości.

W  poprzednim numerze opublikowaliśmy opis układu

Samoczynnej Blokady Liniowej zapobiegającego kolizjom na

makiecie kolejowej. Teraz opisujemy kolejny komponent,

umożliwiający sterowanie ruchem na makiecie. W  kolejnych

numerach opublikujemy pulpit sterowniczy, jak również układ

generatora dźwięków lokomotywy.Rekomendacje: modelarze

kolejowi.

Modelarzom kolejowym nie trzeba tłu-maczyć co to jest dekoder DCC i  do czegosłuży. Niewtajemniczonym powiem, żeumożliwiaonsterowanielokomotywaminamakiecie. Każda z  nichmoże jechać w  in-nymkierunku i  z  innąprędkością.Ponadtomoże realizować dodatkowe funkcje, takiejaksterowanieoświetleniem,rozsprzęganie,generowaniedymuczydźwięków.

W Interneciedostępnychjestwieleroz-wiązań dekoderów. Konstrukcja większościz  nich oparta jest o  mikrokontrolery PIC-16F84A. Zbudowałem kilka takich dekode-rów, ale niestety nie spełniały one moichwymagań. Największą ich wadą był brakfunkcjiABC(zatrzymanielokomotywyprzedsemaforem). Spowodowane jest to brakiemprzetwornika AC w  PIC16F84A. Ponadtoprocesor w  obudowie DIP jest stosunkowodużyi wymagazewnętrznegorezonatora,cotakżewpływanagabarytydekodera.Można

Projekty

32 ELEKTRONIKA PRAKTYCZNA 9/2009

Projekty

– Ustawienie częstotliwości PWM zasila-niasilnika.

– Ustawienieczasurozpędzania.– Ustawienieczasuhamowania.– Sterowanie jedną funkcją (np.oświetle-niem).

– ABC.– Konfigurowanie dekodera w  lokomoty-wie.

– Jazdaanalogowa.– ZłączeNMRA651.

Transmisja sygnału w systemie DCC

Zanimrozpocząłemprojektowaniedeko-deraprzejrzałemspecyfikacjęNMRA.Posta-ramsię trochęprzybliżyćsposóbtransmisjisygnałuw systemieDCC.

Napięcie na szynach jest napięciemprzemiennym(jakw RS485czy422).Zmia-ny sygnałunastępująw  różnym czasie, za-leżnieodtegoczytransmitowanejest0,czy1.Wartowiedzieć,żeczasytrwaniapolary-zacjidodatnieji ujemnejw transmitowanymbicie są sobie równe i w wyniku tego śred-nienapięciena torachwynosi0 V. Jedynkareprezentowana jestprzez impulsyo czasietrwania55...61 ms,natomiastzeroprzezim-pulsyo czasietrwania91 ms...1 ms.Typowojedynka to impuls o  maksymalnym czasietrwania120 ms,a doczegosłużądłuższeim-pulsynapiszędalej.W moimukładziejedyn-katoimpulso okresie114 msi wypełnieniu50%,a zerotoimpulso okresie200 msi wy-pełnieniu 50%. Jak łatwo wywnioskować,abypoprawniezdekodowaćsygnałDCC,wy-starczytylkomierzyćczastrwaniaimpulsów

na jednej szynie (tylkododatnich lub tylkoujemnych). Kolejną zaletą takiej transmisjijest fakt, że niezależnie od tego, jak posta-wimy lokomotywę, sygnał zawsze zostaniepoprawniezdekodowany.Polaryzacjasygna-łuna szynachniema znaczenia, ponieważjestonsymetryczny.RamkętransmisjiDCCprzedstawiononarys. 1.

Czasypołowicznetransmitowanegobitusąsobierówne,więcśrednienapięcienato-rach jest równe0 V. Jest jednakpewneod-stępstwoodtejreguły.Jednaz połówekbitu0 może zostać wydłużona nawet do 1  ms.Spowodujeto,wzrostnapięciaśredniegona-wetdo90%amplitudysygnałuDCC.Zależ-nie od tego czyprzedłużymydodatnią, czyujemną połówkę, napięcie będzie się zmie-niałodo–90%do+90%amplitudy.Pytanieczemu to służy? Umożliwia to sterowaniejednąlokomotywąanalogową,bezzamonto-wanegodekoderaDCC.Trzeba jednakuwa-żaćnamaksymalnaamplitudęsygnałuDCC.Najczęściejsięgaona20 V,comożespowo-dować uszkodzenie silnika w  lokomotywiebez dekodera. Trzeba pamiętać, że przezsilnik takiej lokomotywy płyniemaksymal-nyprądnawetwtedy, gdy stoi nieruchomona torze. Sterując taką lokomotywą należyzmniejszyć amplitudę sygnału na bosterzedo12 V,maksymalnie14 V.

RamkaDCCskłada się z preambuły,naktórąprzypada14bitówo wartości1(deko-derakceptujepreambułęo minimalnejdłu-gości12bitów).Popreambulenadawanyjest

bit„0”oznaczającypoczątektransmisji.Na-stępnienadawanyjestadreslokomotywy,poczym znowu „0”. Kolejny bajt to komenda,której transmisję kończy „0”.Ostatnim baj-temjestsumakontrolnaEXORi bito warto-ści„1”.Dopuszczasię,abybitkońcapakietubyłjednocześniepierwszymbitempreambu-ły. Przykładowa ramka transmitująca pręd-kość,kierunekjazdyi sterowaniefunkcjąF0możewyglądaćtak:111111111111 0 [AAAAAAAA] 0 01DFSSSS 0 EEEEEEEE 1gdzie:AAAAAAAA–adreslokomotywyD–kierunekjazdyF–sterowaniefunkcjąF0SSSS–prędkośćjazdy

Jak łatwo się zorientować,można usta-wićjednąz 16prędkościjazdy,a w praktyce14, ponieważ „0” to stop, natomiast „1” tozatrzymanieawaryjne.

Dekoder obsługuje 28kroków (32krokiminusdwiekombinacjestopi 2kombinacjezatrzymania awaryjnego). Jest to możliwe,ponieważ bit F może być używany jako 5bit (najmłodszy) parametru prędkości jaz-dy. Informacje o  sterowaniu oświetleniemsą przesyłanew  ramce sterującewyjściamifunkcyjnymiF1...F4.Osobyzainteresowaneformateminnychramekzachęcamdoprze-czytaniadokumentacjizawartejnaCD-ROM

Budowa i uwagi nt. programowania mikrokontrolera

Po krótkiej teorii czas przejść do opisubudowy dekodera. Pierwszy projekt opartybyło ATTiny85w obudowieDIPi końcówcemocyna ICL7667w obudowieSO-8.Próbywypadłypozytywnie,więcopracowałemko-lejnawersję,tymrazemnaATTiny85w obu-dowie SOIC-8. Zamontowałem go w  loko-

rys. 1. ramka transmisji DCC

rys. 2. Schemat ideowy dekodera DCC

33ELEKTRONIKA PRAKTYCZNA 9/2009

Sterowanie makietą kolejową

waniuprocesoranależyodłączyćprograma-torodJ1.Innymrozwiązaniemjestprzejściew trybDebugWirei zastosowanieprzewodubez podłączonego pinu 2 na złączu J1 lubjeszczelepiej–włącznika.

Sygnał z  torów trafia przez dzielnikiR1–R4 i R2–R3nawejściamikrokontrolera.Pełniąonedwojaką funkcję: odbierajądanecyfrowe z  szyn oraz mierzą napięcie naszynach. Jeśli zostanie wykryta zbyt dużaasymetria, to dekoder może wyhamowaćlokomotywę (o  ileodpowiednio skonfiguro-wany).

OprogramowanieNapisanie programu nie było proste.

Pierwotnie sprawdzano stan wyprowadzeńw  przerwaniu wywoływanym co 10  ms.Niestety, były problemy z  rozróżnieniem„1” od „0”. Jedynka powinna być akcepto-wanadlaczasów52...64 ms,natomiastzero95...120 ms. Przyprzerwaniu generowanymco 10  ms daje to dla jedynki 5...6 zliczeń,a dlazera8...9zliczeń.Różnicapomiędzy6a 8jestniewielka,zwłaszczagdyweźmiesiępoduwagę, że nie zawsze przerwanie byłoobsłużone w  10  ms. Wypróbowałem więcinnerozwiązanie.

Sygnał nawejściuPB2mikrokontrolerawywołujeprzerwanie.W konsekwencjiprze-rwania wywoływane są nie częściej niż co50 ms.Biorącpoduwagę,żeprzerwanieodzboczaopadającegotylkozerujetimeri uru-chamiaprzetwarzanieA/C, to takie rozwią-zaniedajew praktyce8razywięcejczasunarealizacjęprogramugłównego.Timerzliczaco1 ms.Dla „1”daje towartość timeraod-czytanąw przerwaniuw zakresie52...64,dlazera95...120.Umożliwiatopewneodróżnie-nie„0”od„1”.

W programiemożnaznaleźćnastępującąsekwencjęrozkazów:Speed=(((CV5_MaxV–CV2_MinV)*128)/32*Tspeed)/128+CV2_MinV;

Jej zadaniem jest obliczenie wartości,którąnależywpisaćdorejestrukontrolnegoPWM,abylokomotywaporuszałasięz zada-ną prędkością (Tspeed), uwzględniając mi-nimalne (CV2_MinV) i  maksymalne (CV5_MaxV) dopuszczalne napięcie na silniku.Dziwnemożewydaćsięmnożenie,a następ-niedzielenieprzez128.Pierwotniesekwen-cjatawyglądałatak: Speed=((CV5_MaxV-CV2_MinV)/32*Tspeed)+CV2_MinV;.Niechciałaonajednakdziałaćpoprawnie.Powo-dembyłyliczbyułamkowepowstającew wy-nikuoperacji:(CV5_MaxV-CV2_MinV)/32.Zastosowałem więc operacje zmienno-przecinkowe: Speed=((CV5_MaxV-CV2_MinV)/32.0*Tspeed)+CV2_MinV;

Ale dołączone przez kompilator biblio-tekizajęłyprawiepołowędostępnejpamięciFlash. Dodatkowo, czas ich wykonanie byłbardzodługi.Wpadłemwięcnapomysł,aby

WykAZ eLeMeNtÓWrezystory (SMD 1206)R1, R3, R5, R6: 10 kVR2, R4: 30 kVkondensatoryC1: 4,7 mF/25 VC2: 10 mF/16 VPółprzewodnikiU1: 78L05 (SO-8)U2: ATTiny85 (SOIC-8)U3: L2720 (SO-8)M1: mostek prostowniczy S380T1, T2: BSS138 (SOT-23)

motywie i  zaczęły się kłopoty.Okazało się,że częstouszkadzał się ICL7667.Działo sięto jednak tylko namakiecie i  niew  każdejlokomotywie.Okazało się, że podczas próbbosterzasilałemz zasilaczanapięciem18 V,dzięki czemu napięcie zasilające ICL7667nieprzekraczałodopuszczalnych15 V(3 Vto suma spadków na mostku w  bosterze,mostkuw dekoderzeoraznaukładzieL298w  bosterze). Natomiast na makiecie bosterzasilanybyłnapięciemponad20 V,copowo-dowało uszkodzenie ICL7667 przy dużychprędkościach. Byłem zmuszony do zasto-sowania wzmacniacza na układzie L2722.Niestety, nie jest on dostępnyw  obudowieSMD oraz potrzebuje dwóch dodatkowychrezystorów.Schematdekoderamożnazoba-czyćnarys. 2.

Napięcieprzemiennez torówjestprosto-wanew mostkuM1i filtrowaneprzezC1.Za-ciski„Bak+Blue”i „GND”umożliwiająpod-łączenie kondensatora o  dużej pojemności,rzędu1000...2200 mF/25 Vpodtrzymującegozasilaniew przypadkuprzejazdu lokomoty-wyprzez zwrotnicę.Bez tegokondensatoraukład pracuje poprawnie, ale przy wolnejjeździe lokomotywy mogą pojawić się kło-poty.Przeprowadzająctestyz wielomaloko-motywamidoszedłemdowniosku,żewartozastosować jakikolwiek kondensator, naweto pojemności100 mF.

SilniksterowanyjestprzezwzmacniaczU3 typu L2722. Funkcjami (np. oświetle-niem) steruje tranzystor T1 typu BSS138.TranzystorT2niejestpotrzebny,jeślideko-derwykorzystywanyjeststandardowo.Możeon znaleźć zastosowanie, gdy do procesorawgramyprogramobsługiakcesoriów.Wtedydekodermożesterowaćzwrotnicąelektroma-gnetyczną(wyjściaF0i F1),zwrotnicąz sil-nikiem (wyjścia M+ i  M–), 4-komorowymsemaforem świetlnym (wszystkie wyjścia)lub semaforem kształtowym (wyjścia M+i M–zabezpieczoneprzedprzepięciami).

Napięcie do zasilania mikrokontrolerastabilizowanejestprzezU1.PracądekoderasterujemikrokontrolerU2,którymożnapro-gramować w  systemie. Programator podłą-czasiędoJ1.PodczasużytkowaniaDragonaokazałosię,żewbudowanew niegorezysto-ry podciągające, uniemożliwiały poprawnąpracęwejścia PB2.Dlategopo zaprogramo-

zmniejszyćbłądobliczeńprzezpomnożeniewyrażenia: (CV5_MaxV–CV2_MinV)/32przez100,a powykonaniupozostałychob-liczeńpodzieleniuprzez100.Precyzjaobli-czeńwzrosła. Przypomniałomi się jednak,że kompilator z  włączona optymalizacją„O2” zamienia działania typu: a=a*8; naoperację przesunięcia w  lewo o  trzy bity.Zamiast mnożyć i  dzielić przez 100, uży-łem operacji mnożenia i  dzielenia przez128, co kompilator zamienił na operacjeprzesuwania. Dzięki temu wyrażenie takiezajmujemniejpamięciFlashi wykonujesięznacznie szybciej.Możnaw  kodzie źródło-wymzastąpić:Speed=(((CV5_MaxV-CV2_MinV)*128)/32*Tspeed)/128+CV2_MinV; przez: Speed=(((CV5_MaxV-CV2_MinV)<<7)/32*Tspeed)>>7+CV2_MinV;,alekońcowyefektkompilacjibędziepodob-ny(jednaknieidentyczny;drugierozwiąza-niebędziezajmowałomniejpamięci).

Warto przyjrzeć się umieszczonej nalist. 1 procedurzeobsługiprzerwaniaz wej-ścia PB2. Jest ono wywoływane zarównoopadającymjaki narastającymzboczemsy-gnałuDCC.

W  przerwaniu sprawdzany jest stan ti-merai napodstawieodczytanejwartościpo-dejmowana jest decyzja czy transmitowanobito wartości „0”, czy „1”. Jeśli impulsniemieścisięw zakresie,towyjściez przerwa-nia jestbezzerowania timera.Dzięki temu,jeślizakłóceniebyłokrótkie,toistniejeszan-sa, żekolejneprzerwaniezmieści sięw za-danym przedziale czasu i  bit nie zostaniestracony. Po określeniu czasu trwania bitu,odczytywana jest też wartość konwersjiz przetwornikaA/C.Następniezerowanyjesttimeri uruchamianakonwersjaA/C.W pro-gramie nie ma sprawdzenia czy przetwor-nik skończył przetwarzanie, ponieważ czastrwanianajkrótszegosygnałujestpięciokrot-nie dłuższy od czasu przetwarzania prze-twornika taktowanego najniższą, możliwączęstotliwością (podział przez 16). Opcjo-nalniew kodzieźródłowym,możnawłączyćsprawdzaniegotowościprzetwornika.Możeto być konieczne, gdy występuje dużo za-

Rys. 3. Schemat montażowy dekodera

Na CD karty katalogowe i noty aplikacyjne elementów oznaczonych na Wykazie elementów kolorem czerwonym

34 ELEKTRONIKA PRAKTYCZNA 9/2009

Projekty

Tab. 1. Funkcje rejestrówAdres

rejestru CV

Zakres wartości

Wartość domyślna funkcja

1 0...127 3 Adres dekodera2 0...127 30 Minimalne napięcie na silniku (0...50%)

3 0...31 10

Czas rozpędzania lokomotywy. T[ms]=CV3*8 ms*256/8

T[ms]=CV3*256CV3=15 daje czas rozpędzania: 15*256=3,8 sekundy

Wpisanie 0 wyłącza funkcję4 0...15 3 Czas hamowania (reguły jak dla rozpędzania)5 128...255 255 Maksymalne napięcie na silniku (50...100%) dla prędkości 317 0...255 17 ID wersja dekodera (tylko do odczytu, procedura odczytu jeszcze nie obsługiwana)

8 0...255 13 Przy odczycie ID producenta (procedura odczytu jeszcze nie obsługiwana)zapisanie 8 przywraca ustawienia fabryczne (tablica prędkości użytkownika nie jest modyfi kowana)

9 0...3 1

Częstotliwość PWM’a  sterującego silnik0...250 Hz1...500 Hz2...1 kHz3...2 kHz

11 0...255 16

Czas w  8ms od braku transmisji do wyłączenia silnika lub przejścia na jazdę analogową. To czy silnik się zatrzy-ma, czy będzie to jazda analogowa zależy od CV29

CV11=127 da czas 0,008s *127=1 sekundaStandardowe ustawienie daje czas 0,008*16=128 ms

27 0...7 3

Decoder Automatic Stopping Confi guration(+1) Bit0=„1” Zatrzymanie gdy odchyłka dodatnia i  jedzie do przodu

(+2) Bit1=„1” Zatrzymanie gdy odchyłka ujemna i  jedzie do tyłu(+4) Bit2=„1” zmienia reakcję na kierunek

29 0...15 2

Konfi guracja dekodera(+1) Bit0=„0” DIR normal, „1” DIR reversed (zamienione kierunki jazdy)

(+2) Bit1=„0” 14 kroków, „1” 28 kroków(+4) Bit2=„0” tylko DCC (brak transmisji to stop), „1” – Analog możliwy (gdy brak transmisji)

(+16) Bit4=„0” prędkość kontrolowana przez CV2,5,6, „1” indywidualna tablica prędkości134 0...31 6 poziom napięcia po którym nastąpi zatrzymanie lokomotywy przy asymetrii na szynach.136 0...255 80 prędkość do której zwolni lokomotywa, jeśli ustawione zwalnianie zamiast zatrzymania po wykryciu asymetrii

List. 1. Funkcja obsługi przerwania INT0//----------------------------------------------------------------------//// Obsługa przerwania od wejścia INT 0//----------------------------------------------------------------------//ISR (INT0_vect){ static unsigned char volatile VoltR=0,VoltL=0; static char PozVolt=ElemVolt-1; unsigned char nic; if ( RailR == 0) // Mierzymy czas poziomu (R / L - zależy od szyny) { if ( (TCNT0 > 52) && (TCNT0 < 64) ) //Odczytujemy timer { analiza_danych(1); //Wykryto bit o wartości 1 } else if ( (TCNT0 > 90) && (TCNT0 < 255) ) { analiza_danych(0); //Wykryto bit o wartości 0 // Składamy ramkę } else if (TCNT0 > MAX_LOW) { //Gdy czas impulsu większy niż czas maks. TCNT0 = 0; //to zerujemy timer return; //i wychodzimy bez uruchamiania konwersji A/C } else { return; //Gdy czas poza zakresem to wychodzimy z przerwania } //nie zerując timera i nie startując AC VoltR = ADCL; //Wynik do zmiennej nic = ADCH; //ADLAR=0 więc dodatkowy odczyt ADCH ADMUX = 3; //Wejście PB3 (dla V1.1 i ADLAR = 0) ADCSRA = (1<<ADIF) | (1<<ADEN) | (1<<ADSC) | 4; // Start konwersji } else { TCNT0 = 0; //Zerujemy timer VoltL = ADCL; //Wynik do zmiennej nic = ADCH; //ADLAR=0 więc dodatkowy odczyt ADCH ADMUX = 1; //Mux na wejście PB2 ADCSRA = (1<<ADIF) | (1<<ADEN) | (1<<ADSC) | 4; //Start konwersji //--- Obliczenie różnicy napięć na szynach --- VoltTab[ PozVolt-- ] = VoltR - VoltL; // Obliczenie różnicy napięć if ( PozVolt == -1 ) //Gdy tablica pełna to średnia (fl aga dla programu głównego) { PozVolt = ElemVolt-1; //Wskaźnik końca tablicy FL_TabVolCompil = 1; //Informacja o zapełnieniu tablicy } }}

35ELEKTRONIKA PRAKTYCZNA 9/2009

Sterowanie makietą kolejową

kłóceń. Wynik przetwarzania jest zapamię-tywanyw tablicy.Dziękitemuw programiegłównymmożnauśrednićwynikikilkunastupomiarów.

MontażSchematmontażowydekoderaumiesz-

czono na rys.  3. Montaż dekodera rozpo-czynamyodstronyspodniejstronypłytki,lecz nie montujemy mostka. Następniemontujemy górę dekodera bez procesora.W kolejnymkrokumontujemymostek.Nakoniecmontujemyzłącze J1 (jeśliprzewi-dujemyprogramowanieprocesoraw dzia-łającym urządzeniu). Przed wlutowaniemprocesorasprawdzamynapięcienawyjściustabilizatora. U3 lutujemy skracając muwcześniej doprowadzenia. Procesor moż-na zaprogramować przed wlutowaniemw  płytkę lub w  już działającym urządze-niu,korzystajączezłącza J1.Programującprocesor należy odpowiedni ustawić bitykonfiguracyjne:WdgTimerAlwasOn = YESBODLEVEL = 2.7V

Rys. 5. Przykładowe rozwiązanie dekodera DCC dostępne w internecie

Rys. 4. Przykładowe rozwiązanie dekodera DCC dostępne w internecie

DIV CK 8 = NOOSC = Int RC osc 8MHz 6Ck/14Ck + 0ms

Należytakżepamiętaćo zaprogramowa-niupamięcieeprom.

Dekodermożnauruchomićna stanowi-sku testowymlubw  lokomotywie.Konfigu-rowanie dekodera rozpoczynamy od usta-wienia w  trybie serwisowym rejestru CV1.Następnie konfigurujemy CV2, CV5, CV29.

Funkcje spełniane przez poszczególne reje-stryopisanesąw tab. 1.

Autor jest w  trakcie oprogramowywaniadekoderanawykonanegow oparciuo Atme-ga8.W stosunkudoopisanegodekodera,maonczterywyjściafunkcyjnei generatordźwięków(pamięćnapróbki32 MB). Jeśli takidekoderinteresujeCzytelników,toprosimyo listy.

Sławomir Skrzyński, [email protected]

R E K L A M A