Mám ve zvyku dělat věci jednoduše a tak trochu nadčasově. Není to nové, jen je to udělané trošku jinak. Tím myslím připojení do layoutu. Největší výhoda je, že se nemusí nic nastavovat pomocí jiného programu.Tento modul neumí nic jiné než detekovat a poslat správu, o změně obsazení, paketem s opcode B2.
Teda je možné použít dělenou inteligenci a například shazovat návěstidlo nebo rozsvítit LEDku na panelu pomocí LocoIo. Jinak se tento modul bude dát použít na autoblok, pokud si ho někdo naplánuje, protože je dost univerzální.
Protokol Loconetu je velmi univerzální, tak jsem to využil při stavbě a tak lze modul detekce použít všeobecně, tam, kde se to bude hodit. Přednostně na automatizaci kolejiště pomocí PC nebo dělené inteligence.
Schéma
Obvod je určený na trvalé připojení na Loconet, odkud bere energii na svůj chod a proto musí být navržený velice úsporně. Pokud se použijí předepsané součástky, tak je odběr proudu pod 4mA a to celkem vyhovuje. Stejně ale doporučuji provoz na paralelní sběrnici Loconet (X2), kterou celkem v pohodě obejdete všechny problémy, včetně neústupných “puristů”.
Klíčové součástky jsou procesor a stabilizátor. Pokud se použije stabilizátor na 3V3 typu drop-out, tak provoz procesoru na 8MHz / 2 je velmi úsporný a to doplňuje LM339, který má sám velmi nízkou spotřebu. Dále se musí použít tranzistory (BC337-40) s vysokým h21(min 450), které dokáží spolehlivě stáhnout zdroj proudu v Loconetu.
Na nastavování adresy slouží konfigurační lišta 2x9 jehel a ta se nastavuje pomoci zkratovacích spojek.
Je to klasika 4, 8, 16, 32, 64, 128, 256, 512, 1024 podle binární soustavy. Bity 1 a 2 se používají interně. Spojené piny znamenají zapnutá hodnota. Myslím, že trošku binární matematiky nikomu neuškodí.
Kondensátory ve vstupech jsou keramika 2.2nF a diody Zenerky 3V3, na ochranu vstupů.
Toroidy jsou namotané 2 + 6 závitu (primár, sekundár), to podle hodnoty Q toroidu. Tady je Q 1500.
Pojistka Polyswitch je na 100mA, to jen pro jistotu.
Na vstupy toroidů se připojí do série detekovaná kolej a na výstupu LM339 se objeví kladný impuls při odběru. Ten se detekuje na vstupech procesoru a ten ho vyhodnotí a pošle příslušný paket s opcode B2.
Největší výhoda tohoto návrhu je absence nastavování pomocí cizího programu. Na portech B.0 až B.7 a D.6 se pomocí spojek vybere adresa, na kterou se posílají pakety s opcode B2. To znamená, že pomocí binární soustavy můžete nastavit čtveřici adres od 1-4 až po 2045-2048 včetně. Nejnižší bit LSB je na PD.6 a nejvyšší bit MSB je na PB.7. Nastavujeme teda 9 bitů, plus dva bity adresy interně, teda celkem 11-bitové adresování. Norma dovoluje adresovat až do 4096, ale na to už nemám volný pin. Ale myslím, že za cenu jednoduchého nastavování spojkami na switchi se to oplatí.
Nejmenší spolehlivě detekovaný proud je asi 750uA, teda 15V / 20k ohmů. Zakázané pásmo, kdy není jistota výstupního stavu je až do 25k ohmů, teda je nutné zabezpečit, aby parazitní odběr nikdy nepřekročil hodnotu 600uA. Hodnoty pod 600uA už obvod nedetekuje. Je tam poměrně dobře vyřešená hystereze, takže pokud není odběr přesně mezi 600 až 750uA, tak je údaj o <obsazení / neobsazení> velmi stabilní.
V zásadě by se to dalo udělat ještě citlivější, ale mam dojem, že by to už detekovalo i zapnutí konvice na čaj, což by asi nebylo dobré.
Pokud dojde k přeslechům mezi kanály detekce, musí se osadit železné plechy mezi jednotlivé toroidy, aby se obmezil magnetický přenos. Jsou tam vedeny zemnící spoje, aby se to dalo připájet. Hodně taky pomůže natočení nesouhlasně o 90 stupňů, které to obmezí.
Mám dojem, že toto je celkem vhodné na stavbu i pro začátečníky, tak zkusím napsat návod a dám podklady na stavbu. Zkontroluje se plošný spoj na zkraty a praskliny proti ostrému světlu. Součástky se osazují od nejnižších, teda od drátové spojky až po konektory RJ12 6/6. Celkem doporučuji mikropájku, ale dá se to i pistolovkou. Zapojení nemá záludnosti, jen je třeba pracovat pečlivě.
Jediná věc, která se nedá koupit jsou namotané toroidy, ty si musíme vyrobit sami. Použije se obyčejný telefonní drát 0,5mm v bužírce, z kterého se namotá 2 + 6 závitů a osadí se hotový toroid na plošný spoj. Toroidy se dají sehnat na starých motherboardech anebo se dají koupit v e-obchodech. Soupis a popis součástek je v souborech Eagle. Pokud něco nevíte, zkuste mi napsat, pokud budu vědět, poradím.
Toto je naprosto klíčové, protože falešné ohlasy, teda hazardy dělají velké problémy při automatizaci kolejiště. Určitý počet hazardů teda musíme tolerovat a počítat s nimi. Další problém je vynechání impulsů detekce nějakou dobu, například BMF, když se měří otáčky motoru naprázdno a motor teda funguje jako generátor napětí a loko neodebírá proud. Toto vše se musí vzít do úvahy při psaní programu.
Pokud obvod detekce zjisti nad 50 impulsu, tak se usek považuje za obsazený. Maximum detekovaných impulsů za 20mS může být asi 300, proto hodnota 50 je tak nějak odpovídající. (0,02 / 0,00006 = 333).
Obvod je navrhnutý trošku univerzálně a tak se to musí vzít do úvahy při zapojení do kolejiště. Tím myslím, že to není typická jednoúčelovka, takže při zapojování je nutné trošku přemýšlet.
Důležité je si uvědomit, že se to zapojuje do série s kolejí !!
Tu například zapojeni detekce 4 modulu, kde leva kolej je zapojená průběžně a pravá kolej přes detekci obsazeni. To znamená, že se 4 vývody do toroidů zapojí paralelně na vstup DCC a každý výstup toroidu se zapojí samostatně na jednotlivý modul, viz obrázek.
Obvod neumí nic jiné, než poslat paket s opcode B2 o obsazení nebo uvolnění úseku. Teda musí existovat další obvod, který to vyhodnotí. V současnosti pracuji na LocoIo pro Atmega, která bude umožňovat použití a napojení tohoto modulu. Přikládám RAR soubor, kde jsou podklady pro EAGLE a HEX soubor pro Attiny2313A. Původně byl tento modul plánovaný na DCC GateWay, ale přišel jsem na jednodušší řešení, tak to dávám samostatně.
‚-------------------------------------------------------------------------------------------------------------------- Program na Attiny 2313A, napsaný v BascomBasic, který je do 4kB kódu FREE. https://www.mcselec.com/index.php?option=com_docman&task=cat_view&gid=99&Itemid=54 '-------------------------------------------------------------- '---------- At2313A na detekci obsazeni ----------------------- '-------------------------------------------------------------- '---------- 4x detekce obsazeni ------------------------------- '-------------------------------------------------------------- 'obsazeni pinů '1 - reset 20 - VCC '2 - pind.0 RxD Loconet 19 - pinb.7 adresa 10.bit '3 - pind.1 TxD Loconet 18 - pinb.6 adresa 9.bit '4 - pina.1 krystal 8 MHz 17 - pinb.5 adresa 8.bit '5 - pina.0 krystal 8 MHz 16 - pinb.4 adresa 7.bit '6 - pind.2 vstup detekce 15 - pinb.3 adresa 6.bit '7 - pind.3 vstup detekce 14 - pinb.2 adresa 5.bit '8 - pind.4 vstup detekce 13 - pinb.1 adresa 4.bit '9 - pind.5 vstup detekce 12 - pinb.0 adresa 3.bit '10- zem 11 - pind.6 adresa 2 bit '-------------------------------------------------------------- 'obvod ma 4 detekce obsazeni, proto adresa zacina kazdy 4 byte 'teda nasobky 4 =0, 4, 8, 12, 16 ....2044 'celkovy adresovy prostor je teda 11 bitu = 0 - 2047 adres po skocich 4 adres '<0xB2>,, , ' =<0,A6,A5,A4- A3,A2,A1,A0>, 7 ls adr bits. A1,A0 select 1 of 4 inputs pairs in a DS54 ' =<0,X,I,L- A10,A9,A8,A7> Report/status bits and 4 MS adr bits. '"I"=0 for DS54 "aux" inputs and 1 for "switch" inputs mapped to 4K SENSOR space. ' (This is effectively a least significant adr bit when using DS54 input configuration) '"L"=0 for input SENSOR now 0V (LO) , 1 for Input sensor >=+6V (HI) '"X"=1, control bit , 0 is RESERVED for future! $regfile = "Attiny2313a.dat" 'Soubor s deklaracemi $crystal = 4000000 'Kmitočet krystalu v Hz Config Clockdiv = 2 'basic 8MHz /2 $hwstack = 24 $swstack = 16 $framesize = 16 $baud = 16666 Ddrb = 0 Portb = 255 'portB vstupy s pull-up Ddrd = 2 'TxD Portd = &B0111_1110 'RxD = 0 a zbytek = pull-up 'premenne Dim Acc As Byte Dim Chk As Byte Dim Adrl As Byte Dim Adrh As Byte Dim Uart(4) As Byte Dim Rxd As Byte Dim Wcc As Word 'nulovani Timer1 od hrany Loconetu, tady je zvlastnost prepinani PCMSK2, viz program On Pcint2 Hrana Nosave 'preruseni od PCINT2 Pcmsk2 = 1 'pin RxD Enable Pcint2 'povoleni PCINT2 'nastaveni Timer1 na casovani Loconetu, povoleni vysilani do Loconetu Config Timer1 = Timer , Prescale = 1 , Clear Timer = 1 On Oc1a Cas1 Nosave '250nS x 6240 = 1560 uS Wcc = Pinb * 8 '250nS * 8 = 2uS, použije se adresa na rozliseni po 2uS Ocr1a = 6240 + Wcc 'cas priorit po 2uS Enable Oc1a 'ziskani adresy pro paket B2 z portB.0 až B.7 a D.6 do formatu Loconet 'je to pomerne slozite, vsak norma Loconet je taky pekne sprasena 'napisane v ASM, protože na toto je Bascom prilis ukecany. clr r21 in r20,pinb 'Adr 3 az A11 com r20 in r22,pind 'Adr 2 com r22 lsl r20 rol r21 lsl r20 rol r21 lsl r20 rol r21 lsr r20 bst r22,6 bld r20,1 Sbr r21,64 'bit X podle normy sts {adrl},r20 sts {adrh},r21 Enable Interrupts '*************************************************************** 'hlavni program '*************************************************************** 'tady se volaji jednotlive detekce jedna po druhe a nasledne se vyhodnocuji 'protoze do smycky vstupuji ruzne hazard impulsy a taky treba BMF, 'je nutne to pocitat a spravne vyhodnotit. 'tu to probehne 4x pro kazdy vstup detekce samostatne, podle PCMSK2 Do Pcmsk2 = 4 'preruseni od detekce 1 Wcc = 0 'vynulovani pocitadla Waitms 20 'nascitani pocitadla detekce If Wcc => 50 Then 'vyhodnoceni sbi gpior1,0 'obsazeno Else cbi gpior1,0 'neobsazeno End If Pcmsk2 = 1 'pin RxD If Gpior1.0 <> Gpior1.4 Then Gosub Prvni '---------------------------- Pcmsk2 = 8 'preruseni od detekce 2 Wcc = 0 Waitms 20 If Wcc => 50 Then sbi gpior1,1 Else cbi gpior1,1 End If Pcmsk2 = 1 'pin RxD If Gpior1.1 <> Gpior1.5 Then Gosub Druha '---------------------------- Wcc = 0 Pcmsk2 = 16 'preruseni od detekce 3 Waitms 20 If Wcc => 50 Then sbi gpior1,2 Else cbi gpior1,2 End If Pcmsk2 = 1 'pin RxD If Gpior1.2 <> Gpior1.6 Then Gosub Treti '---------------------------- Pcmsk2 = 32 'preruseni od detekce 4 Wcc = 0 Waitms 20 If Wcc => 50 Then sbi gpior1,3 Else cbi gpior1,3 End If Pcmsk2 = 1 'pin RxD If Gpior1.3 <> Gpior1.7 Then Gosub Ctvrta Loop '*************************************************************** 'podprogramy '---------------------------- 'priznaky se srovnaji a vysila se paket B2 'to probiha pro kazdu detekci a preruseni samostatne Prvni: Gpior1.4 = Gpior1.0 Reset Adrl.0 Reset Adrh.5 Adrh.4 = Gpior1.0 '1=obsazeno / 0=neobsazeno Uart(1) = &HB2 Uart(2) = Adrl Uart(3) = Adrh Gosub Vysilej Return '---------------------------- Druha: Gpior1.5 = Gpior1.1 Reset Adrl.0 Set Adrh.5 Adrh.4 = Gpior1.1 Uart(1) = &HB2 Uart(2) = Adrl Uart(3) = Adrh Gosub Vysilej Return '---------------------------- Treti: Gpior1.6 = Gpior1.2 Set Adrl.0 Reset Adrh.5 Adrh.4 = Gpior1.2 Uart(1) = &HB2 Uart(2) = Adrl Uart(3) = Adrh Gosub Vysilej Return '---------------------------- Ctvrta: Gpior1.7 = Gpior1.3 Set Adrl.0 Set Adrh.5 Adrh.4 = Gpior1.3 Uart(1) = &HB2 Uart(2) = Adrl Uart(3) = Adrh Gosub Vysilej Return '---------------------------- 'vysilani do Loconetu s kontrolu prvniho byte Vysilej: Chk = Uart(1) Xor Uart(2) Chk = Chk Xor Uart(3) Uart(4) = Not Chk Vysi: cbi gpior0,0 'vynulovani priznaku vysilani Bitwait Gpior0.0 , Set Udr = Uart(1) While Ischarwaiting() = 1 'splachnuti bafru prijmu Chk = Udr Wend Gosub Prijmi_bajt If Uart(1) <> Rxd Then Goto Kolize 'kontrola 1. byte Printbin Uart(2) , 3 Return Kolize: Reset Ucsrb.txen 'uvolneni pinu od funkce TxD Reset Portd.1 Waitus 900 Set Portd.1 Set Ucsrb.txen Goto Vysi '--------------------------------------------------------------------------- 'cekani na prijem jednoho byte od UART Prijmi_bajt: If Ischarwaiting() <> 1 Then Goto Prijmi_bajt Inputbin Rxd Return '*************************************************************** 'podprogramy od preruseni '----------------------------- Cas1: sbi gpior0,0 'povoleni vysilani do Loconet Reti '----------------------------- Hrana: push r28 push r29 in r29,sreg push r29 sbi gpior0,0 'zakaz vysilani do Loconet clr r28 sts tcnt1h,r28 'vymazani citace 1 sts tcnt1l,r28 sbic pcmsk2,0 'preskoceni detekce pri nepouzivani rjmp Fff lds r28,{wcc} 'pocitani detekce lds r29,{wcc+1} adiw r28,1 sts {wcc},r28 sts {wcc+1},r29 Fff: pop r29 !out sreg,r29 pop r29 pop r28 Return '------------------------------------------------------------------------------
K tomuto článku nebol doposiaľ priradený žiadny komentár!