Dekódování dat
Moderátor: Moderátoři
Dekódování dat
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.
Děkuji,
Karel
- Přílohy
-
data.jpg- (120.59 KiB) Staženo 90 x
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č 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.Zmije píše:.. přijímač není schopen přesně určit co je start/stop bit a co data.
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.
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.
Díky,
Karel
fcharlief píše:
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.
- ZdenekHQ
- Významný člen
- Příspěvky: 25519
- Registrován: 21 črc 2006, 00:00
- Bydliště: skoro Brno
- Kontaktovat uživatele:
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í.
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[?]
Č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á.
- ZdenekHQ
- Významný člen
- Příspěvky: 25519
- Registrován: 21 črc 2006, 00:00
- Bydliště: skoro Brno
- Kontaktovat uživatele:
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á.
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[?]
ZdenekHQ píše: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?
Díky
-
petrfilipi
- Příspěvky: 2901
- Registrován: 13 zář 2005, 00:00
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.
Ať se daří.
Petr Filipi
-
petrfilipi
- Příspěvky: 2901
- Registrován: 13 zář 2005, 00:00