Zaslal: so únor 01 2014, 10:58 Předmět: Dekódování dat
Ahoj, potřeboval bych vytvořit čtečku dat ze zařízení, které vysílá infračerveně a cyklicky bez přestávky.
V zařízení se nacházi EEPROM, ze které jsou vysílána data "tak jak jsou" přes infraledky. Pokud se podívám osciloskopem, vidím jednotlivé byte, ale nemůžu je přečíst.
Přenosový rámec je velmi podobný klasické RS232 při nastavení 8N1 9600, ale pokud se snažím takto přečíst, jsem neúspěšný.
Otázka: Musí být v protokolu RS232 mezi STOP bitem a novým START bitem mezera? Můj názor je, že je datový rámec tohoto přenosu pouze podobný s RS232, ale takto číst nejde. Jakým způsobem by zde sériový kanál poznal, že zrovna "toto" je začátek nového byte? Může mi toto tvrzení někdo potvrdit nebo vyvrátit?
Přiložil jsem fotografii osciloskopu (mám bohužel analog bez paměti) a vyznačil v jednotlivé byte. Na fotografii chybí ze začátku a konce byte 255, je to znázorno jako spojitá čára se stop bitem na konci.
Založen: Jun 30, 2005 Příspěvky: 1576 Bydliště: Pardubický kraj
Zaslal: so únor 01 2014, 11:39 Předmět:
Pokud se u RS232 vysílají rámce těsně zasebou, bez větší mezery, tak v závislosti na přenášených datech může dojít k falešné synchronizaci, tzn. že přijímač není schopen přesně určit co je start/stop bit a co data.
Založen: Jul 21, 2006 Příspěvky: 25741 Bydliště: skoro Brno
Zaslal: so únor 01 2014, 12:28 Předmět:
Pokud se to synchronizuje tou hodnotou 255, pak se krátké pakety dat takto přenášet dají. _________________ Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
Založen: Oct 02, 2009 Příspěvky: 5286 Bydliště: PO
Zaslal: so únor 01 2014, 14:26 Předmět:
Prijímač musí byť ready pred zahájením vysielania. Dovtedy vysielač musí mať na výstupe úroveň stop-bitu. Žiadalo by si to aspoň jeden riadiaci signál. Prijímač oznamuje vysielaču pripravenosť prijímať.
Hlavně na konci je další start-bit, takže celkem přečteno uartem bude 7B. Ta koncová mezera úrovně stop-bitu musí být tedy delší než 1B aby stihl reciver za 7B správně zastavit.
Absence mezery mezi stop-start není kritická, pokud jsou rychlosti srovnatelné, což třeba nejsou vlivem nepřesnosti použitého zdroje hodin a to i třeba v závislosti na teplotě.
Možná i proto se používají 2 stop-bity.
Bez znalosti na čom je to přijímané, jak je to zapojené a co je výsledkem příjmu se dál nehneme.
.. přijímač není schopen přesně určit co je start/stop bit a co data.
Přijímač považuje za start-bit cokoliv kdykoliv po vypršení doby (start-bit+8databit+případná parita). stop generuje vysílač a přijímač nijak nekontroluje, respektive stopbit je ta pauza mezi vysíláníma.
edit: Ještě že jsem se do toho tak pěkně zamotal. Pokud je tedy po vypršení té doby linka ve stavu stop, odblokuje se reciver a čeká na start.
Vysílající zařízení by se dalo popsat jako IR vysílač ve venkovním prostředí, který vysílá nepřetržitě tento krátký řetězec. Problém je, že v jeho dosahu můžu být třeba jen 2-3s a data se musí přenést. Jedná se tedy o komerční výrobek, který já musím testovat. Rád bych si zjednodušil práci a vyrobil čtečku s textovým LCD, která vypíše informace v blízkosti. Víc přiblížit bohužel situaci nesmím.
Nemůžu tedy přidat žádný řídící signál a ani změnit protokol. Potřebuji vyhodnotit tento řetězec tak jak je. Nemůžu ani ovlivnit kdy začne vysílání, do dosahu zařízení se dostanu vždy v jiný okamžik. V komerční čtečce (kterou bohužel nemůžu mít trvale) je na dekodovaní IR demodulátor a jde na Rx nohu procesoru. Proto mě udivuje, že nelze data vyhodnotit sériákem a ani naprogramovaný PIC jim též nerozumí. Měl by někdo ještě jiný nápad? V nejhorším případě napíšu kód kde bude synchronizace se spádovou hranou po bytu 255.
Založen: Jan 13, 2007 Příspěvky: 15722 Bydliště: Olomouc
Zaslal: so únor 01 2014, 18:51 Předmět:
fcharlief napsal(a):
Přenosový rámec je velmi podobný klasické RS232 při nastavení 8N1 9600, ale pokud se snažím takto přečíst, jsem neúspěšný.
Otázka: Musí být v protokolu RS232 mezi STOP bitem a novým START bitem mezera?
Není důvod, proč by tam musela být. Lze to přečíst tak jak to leze. Ale ty jsi vůbec nenapsal, proč ti to nejde přečíst a ani čím nebo jak se to snažíš číst.
Založen: Jul 21, 2006 Příspěvky: 25741 Bydliště: skoro Brno
Zaslal: so únor 01 2014, 19:16 Předmět:
Ten poslední start bit může znamenat další byte "255" plus stop bit, já tam žádný problém nevidím a mezery netřeba.
Správně řečeno je tam v klidu logická 1 jako na UARTu, start bit je 0, stop bit je 1, 8 bitů, a podle mě to sedí. Delší stop bit ničemu nevadí. _________________ Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
Snažím se to přečíst pomocí IR demodulátoru, ten má na výstupní noze 10k pull-up rezistor a jde do max232. Výstup z demodulátoru je sejmut osciloskopem a je na fotce. V klidu (pokud je vysílač mimo demodulátor) je výstup v LOG1.
Čtu to pomocí Term95 a mnou napsaným prográmkem, výsledek je stejný. Leze z toho hatmatilka..
Teoreticky bych mohl špatně odhadnout přenosovou rychlost. Odhadnul jsem jí podle délky jednoho bite na osciloskopu. (1 / 0.000105).
Mohu poprosit o objasnění jak tedy pozná sériák jednotlivé datové rámce pokud není přítomna mezera? Představuji si to jako změtici jedniček a nul co jdou za sebou a jelikož je mezi znaky stejná mezera, netuším jak to pozná.
Založen: Jul 21, 2006 Příspěvky: 25741 Bydliště: skoro Brno
Zaslal: so únor 01 2014, 22:40 Předmět:
Sériák to nepozná, pokud mu nesedí pozice-úrovně start a stop bitů, ohlásí chybu rámce či jak se to jmenuje. Pokud se ztratí, chytí se až na, jak říkáš, pauze.
To zařízení může používat vlastní krystaly a přenosová rychlost vůbec nemusí být standartní, takže to na pár bytech ujede...
Navíc podobná zařízení někdy používají složitější kódování, jako třeba Manchester, a ta podoba s UART může být čistě náhodná, i když tady to na to nevypadá. _________________ Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
Sériák to nepozná, pokud mu nesedí pozice-úrovně start a stop bitů, ohlásí chybu rámce či jak se to jmenuje. Pokud se ztratí, chytí se až na, jak říkáš, pauze.
To zařízení může používat vlastní krystaly a přenosová rychlost vůbec nemusí být standartní, takže to na pár bytech ujede...
Navíc podobná zařízení někdy používají složitější kódování, jako třeba Manchester, a ta podoba s UART může být čistě náhodná, i když tady to na to nevypadá.
Složité kódování zde nebude určitě. Jelikož vím co vlastně mám přečíst, kódování je celkem vidět z osciloskopu. Data jsou shodná s EEPROM v desce 1:1. Jestli myslíš hodinový krystal, tak MCU je taktován na 8.432MHz. Jeslti se mohu zeptat, jaký bys navrhoval postup čtení ty?
Víš aspoň jeden byte, který má ve zprávě být? Nebo to jsou náhodná data?
Jako částečné řešení bych viděl přijimát jednotlivé bity a ty pak ručně napasovat do rámce tak, aby bezi nimi byly bity 10.
Prostě bity ukládat a ukládat (pokud víš nějakou délku, pak uložít 2x tolik bitů), pak najít první výskyt 10 a zkontrolovat, zdali za dalších 8 bitů je taky 10 atd.
Jenže se stejně může stát, že když vysílač bude cyklycky vysílat 10101010 10 10101010 10 10101010 10, tak to stejně nezasynchronizuješ. Potřeboval bys vědět aspoň jeden byte, který by pořád ve zprávě byl. Ten pak použít jako synchronizační (za ním musí být 10) a už jedeš.
Teď jsem koukal, že na obrázku se dva byty opakují (je to ten 3. a 6. - dejme tomu hodnota 170) - ty se opakují stále?
Ale budeš muset programově zjistit délku jednoho bitu, abys poznal více bitů stejné hodnoty za sebou.
Založen: Jan 13, 2007 Příspěvky: 15722 Bydliště: Olomouc
Zaslal: ne únor 02 2014, 9:29 Předmět:
Mimochodem, ta tvoje definice start bitu, 8 bitů a stop bitu je divná. Jak jsi přišel na to, že to tak má být ? Nemůže to být posunuto např. o 1 nebo 2 bity doleva ?
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.