Stránka 1 z 1

Čtení Wiegand osmibitem

Napsal: 24 říj 2016, 21:41
od JirkaRCK
Zdravím :-) Rád bych se zde poradil a slyšel vaše názory na softwarovou emulaci přijímače sběrnice Wiegand realizovaného nějakým běžným mikrokontrolérem (např. Atmegou 8 ). Prakticky jde o pár řádků kódu a připojení sběrnice přes dvojici GPIO, v podstatě triviální věc. Jsou takto realizována i různá řešení na internetu (například zde: http://zps-electronics.com/eng/docs/wie ... eader_avr/ ). Třeba podle tohoto zdroje: http://www.dhservis.cz/dalsi_1/wiegand.htm se ale zákmit symbolizující bit řádově docela blíží taktu běžných kontrolérů. Začínám být tedy na vážkách, jak by se to celé chovalo, kdyby ve firmwaru byly ještě další drobnosti (třeba že by mohlo přijít přerušení od přijatého bytu na UARTu), které by mohly procesor na nějaký čas zaměstnat. V ideálním případě bych navíc potřeboval naslouchat z více čteček, řekněme z osmi. Tak nevím, jestli už je pozdě večer a já se v těch strojových časech přepočítávám a hledám problém v tom, v čem vůbec není, anebo jak je možné, že to frčí (Jak spolehlivě - dá se to nasadit v reálu? :-) ) třeba lidem na Arduinu, které je v podstatě také pomalý osmibit a v projektech bývá navíc zasekáno obsluhou spoustou dalších čistě softwarově řešených funkcionalit... Napadá vás nějaké efektivnější řešení?

Napsal: 25 říj 2016, 05:28
od Cowley
S Arduinem (UNO i MEGA) jsem vycital z wiegand ctecky jak 125kHz tak 13.56MHz bez problemu.

Napsal: 25 říj 2016, 07:31
od termit256
Ja to taky kdysi delal, pokud si vzpominam bezelo to na nejake rychlejsi x51. Cteni se delalo v obsluze preruseni a trvalo jen velmi kratce. Mam pocit ze casovani te sbernice neni nejak kriticke, ale pokud by se v obsluze jinych preruseni delo neco zdlouhaveho, neni nic jednoduchsiho nez dat vyssi priority preruseni ke cteni teto sbernice. Schvalne si spocitej kolik casu zabere tech par instrukci u mcu ktery ma treba 20 MIPS.

Napsal: 25 říj 2016, 09:20
od Honza_dy
Před rokem jsem dostal za úkol navrhnout krabičku, která by přijala data ze čtečky popřehazovala jednotlivé byty + něco víc a poslala je zase ven.
Hodně mi pomohlo toto.
Krabička je od té doby v provozu 24/7 a šlape, takže to jde.

Napsal: 25 říj 2016, 09:39
od Cowley
Honza_dy: Hackere ! :)

Napsal: 25 říj 2016, 09:49
od JirkaRCK
termit256: Jasně, přerušení ti chytí sestupnou hranu a pak máš 2ms na zpracování bitu - téměř královský čas. Problém je, jak paralelně připojit více čteček. uC mívají tak 2 - 3 externí přerušení. S šesti čtečkami obsluhovanými jedním uC by ale bylo přerušeních potřeba 12. Takže jediné jednoduché řešení, co mě napadá, je cyklicky v mainu číst stav 12ti GPIO ( :roll: :oops: ). Otázka je, zdali se 5us pulz dá s taktem třeba 16MHz takto spolehlivě zachytit. Přemýšlím, jestli má cenu pouštět se do konstrukcí ala všech 12 vodičů připojených ke GPIO a zároveň přes hradlo AND na společné přerušení. V přerušení pak rozlišovat, který z vodičů přerušení vyvolal - to je druhé řešení, co mě napadlo.

Napsal: 25 říj 2016, 15:50
od termit256
Jsou 8bitove AVR ktere maji desitky externich preruseni

Na ty hradla zapomen, pokud prijde pulz z vice ctecek najednou, nemusis je zachytit.

S tim vzorkovanim by to taky slo, jen bys musel v preruseni timeru treba kazdych 20us rychle nacist stavy vstupu, nekam je zapsat a inkrementovat nejakou nejakou 8bitovou promenou pro kazdy port. Vse ostatni bys zpracovaval v hlavni smycce. Tam by se to muselo stihnout zpracovat do dalsiho pulzu, pokud bys mel v hlavni smycce nejake zdlouhavosti, opet prerusit od dalsiho timeru a zpracovat. Pomocna promena kterou bys v preruseni postupne zvysoval by ti hlidala chyby prenosu - pokud do predpokladane doby neprijde nula ani jednicka, vyhlasi se chyba a nuluje prenos. Neni spatne ty chyby sledovat a v pripade jejich zvyseneho vyskytu na to upozornit.

Ono taky zalezi na co to mas, jestli to ma byt nejaka hracka nebo to ma fungovat naprosto neprustrelne, pokud mozno. Pocitej s tim, ze pokud budes mit draty delsi nez kratke, budes tam mit spoustu ruseni se kterym se musis poprat, pomuze RS485, ale i tak bych to jen na preruseni nenechaval.

Ja to mam delane tak, ze pokud prijde sestupna hrana, navzorkuju port behem 50us nekolikrat a pokud prevazuje nula, pocitam pulz za platny. Po predpokladanem konci pulzu zacinam casovat okno kde se ignoruji vsechny prichozi data, az zhruba do doby kdy predpokladam prijeti dalsiho pulzu. Podstatne se tak snizi pravdepodobnost zachyceni nejakeho ruseni. Ja mam ale jen jednu ctecku, pro tebe by to chtelo asi nejaky rychlejsi MCU.

Napsal: 25 říj 2016, 20:56
od Cowley
8 vstupů najednou jsem viděl naposledy z dob DALLAS (i-button) čteček. U Wiegandu je standard 2-4 vstupy do jednoho MCU, následně oddělené samostatnou RS485 sběrnicí.

Napsal: 26 říj 2016, 19:16
od JirkaRCK
Nakonec to budu řešit MCU pro každou čtečku a k řídící jednotce to připojím přes 485ku, bude to trošku komplikovanější, ale myslím, že za tu spolehlivost to stojí.