Identifikace neznameho serioveho async kodu
Moderátor: Moderátoři
ondraN:
v příloze jsou 3 měření pomocí Saleae sw druhé (novější) řady, konkrétně verze 2.3.15-master. Novější mi nefungují.
Jedná se jako předtím o postupné ruční stisknutí (tentokrát šesti) ovládacích tlačítek na DO, pořadí zůstává stejné, délka stisku je vidět z pulsu Tx Vcc (napájecí napětí vysílacího modulu).
Vysílaný kód tlačítka se stále opakuje, dokud je stisknuté, nebo je délka/počet opakování zdola softwarově omezena na nějaké minimum (popsal jsem už výše).
Jednotlivé záznamy se liší nastavením kódování vysílače - kód je součástí názvu souboru.
Vzorkování je tentokrát nastaveno na 4 MHz.
Díky za pomoc.
v příloze jsou 3 měření pomocí Saleae sw druhé (novější) řady, konkrétně verze 2.3.15-master. Novější mi nefungují.
Jedná se jako předtím o postupné ruční stisknutí (tentokrát šesti) ovládacích tlačítek na DO, pořadí zůstává stejné, délka stisku je vidět z pulsu Tx Vcc (napájecí napětí vysílacího modulu).
Vysílaný kód tlačítka se stále opakuje, dokud je stisknuté, nebo je délka/počet opakování zdola softwarově omezena na nějaké minimum (popsal jsem už výše).
Jednotlivé záznamy se liší nastavením kódování vysílače - kód je součástí názvu souboru.
Vzorkování je tentokrát nastaveno na 4 MHz.
Díky za pomoc.
- Přílohy
-
- Saleae_Logic_2.zip
- (46.12 KiB) Staženo 17 x
Myslím, že v první části je identifikace vysílače 11bitů, pak jsou vložené dvě jedničky a pak je kód tlačítka. Vzhledem k tomu, jak je koncipováno párování, tak si přijímač zapamatuje adresu vysílače a na tu reaguje. Nemá to žádnou paritu, ta je daná opakováním a asi bude stačit přijetí dvou nebo tří stejných bloků za sebou. Pro náhradu jiným zařízením postačí, naskenování kombinací posledních čtyř bitů (16kombinací) pro jednotlivá tlačítka a pak si zapamatovat ID všech vysílačů, se kterýmy to bylo možné spárovat. No a pak stačí jen vygenerovat (nejspíš přes nějaký MCU, ale šlo by to i HW) ID, dvě jedničky a kód tlačítka. A pak ještě ten vysílač, ale to není moje parketa ![Smile :)](./images/smilies/icon_smile.gif)
![Smile :)](./images/smilies/icon_smile.gif)
ondraN: perfektní odpověď, ale prosím o vysvětlení, jak jsou v daném kódu definovány stavy (0 a 1).
Jsou to úrovně v daném okamžiku a synchronizace je hranami pulsů, nebo nějak jinak?
Párování u tohoto systému je tupě statická, člověkem prováděná činnost. Přijímač má kódování nastavitelné jumpery nebo DIPswitchem (pokud si dobře vzpomínám), vysílač to kdysi míval taky, teď se nastavuje v setup módu (vyvolaném stisknutím kombinace tlačítek) postupným stisknutím tlačítek nastavujících 0 a 1.
Čili přijímač se ničemu nepřizpůsobuje, je nastavený předem a vysílač se musí nastavit stejně.
Jsou to úrovně v daném okamžiku a synchronizace je hranami pulsů, nebo nějak jinak?
Párování u tohoto systému je tupě statická, člověkem prováděná činnost. Přijímač má kódování nastavitelné jumpery nebo DIPswitchem (pokud si dobře vzpomínám), vysílač to kdysi míval taky, teď se nastavuje v setup módu (vyvolaném stisknutím kombinace tlačítek) postupným stisknutím tlačítek nastavujících 0 a 1.
Čili přijímač se ničemu nepřizpůsobuje, je nastavený předem a vysílač se musí nastavit stejně.
Jak jsou v daném kódu definovány stavy (0 a 1)?
To by vyžadovalo další zkoumání. Ale je to úplně zbytečná informace. Prostě vygeneruješ identický signál, co generuje vysílač. Ta informace, co je 0,1 a jakýma hranama se co synchronizuje, je zbytečná. Máš prostě identifikační část paketu, ta je vždy stejná pro každý vysílač (nastavený na kók přijímače), a pak máš výkonnou část v různých variaích a tu přilepíš k té identifikační. Více prostě nepotřebuješ. A to že se přijímač nepřizpůsobuje, je další bonus, který to zeště zjednodušší, protože potřebuješ jen jednu identifikaci.
To by vyžadovalo další zkoumání. Ale je to úplně zbytečná informace. Prostě vygeneruješ identický signál, co generuje vysílač. Ta informace, co je 0,1 a jakýma hranama se co synchronizuje, je zbytečná. Máš prostě identifikační část paketu, ta je vždy stejná pro každý vysílač (nastavený na kók přijímače), a pak máš výkonnou část v různých variaích a tu přilepíš k té identifikační. Více prostě nepotřebuješ. A to že se přijímač nepřizpůsobuje, je další bonus, který to zeště zjednodušší, protože potřebuješ jen jednu identifikaci.
Mně je samozřejmě od počátku jasné, že přesnou reprodukcí stávajícího signálu by to bylo vyřešené.
Ale chtěl jsem pro zajímavost vědět víc, dělám to tak skoro vždycky. No a jelikož nejsem specialista na kódování, tak se ptám tady.
Čili ještě jednou díky ondroviN za příspěvky. Kdybys se časem (nebo někdo jiný) chtěl ještě zamyslet nad způsobem přenosu stavů (0 a 1) daným kódem, tak to - čistě ze zvědavosti - taky uvítám.
Ale chtěl jsem pro zajímavost vědět víc, dělám to tak skoro vždycky. No a jelikož nejsem specialista na kódování, tak se ptám tady.
Čili ještě jednou díky ondroviN za příspěvky. Kdybys se časem (nebo někdo jiný) chtěl ještě zamyslet nad způsobem přenosu stavů (0 a 1) daným kódem, tak to - čistě ze zvědavosti - taky uvítám.
To jde samozřejmě zjistit, ale už potřebuješ svůj vlastní generovaný signál a trochu s ním experimentovat. Dá se tak zjistit třeba citlivost přijímače na přesné generování signálu a spousta dalších věcí. Ale vzhledem k tomu, že je ten signál generovaný a zpracovaný MCU, může být algoritmus téměř jakýkoli a platný jen pro tohle zařízení, ne obecně. Pro ukojení zvědavosti je to dobré, ale pro splnění požadovaného cíle a dalšího použití to moc cenu nemá.
Můj tip je ten, že se v přijímači měří poměr trvání H a L a podle toho se to vyhodnocuje. Má to tu výhodu, že se vždy generuje synchronizační hrana (ať je bit 1 nebo 0) a dá se použít třeba interní RC oscilátor MCU, který zrovna přesností neoplývá. Podobně je to řešené třeba u digitálních LED WS2812D, tak mrkni do datasheetu.
Můj tip je ten, že se v přijímači měří poměr trvání H a L a podle toho se to vyhodnocuje. Má to tu výhodu, že se vždy generuje synchronizační hrana (ať je bit 1 nebo 0) a dá se použít třeba interní RC oscilátor MCU, který zrovna přesností neoplývá. Podobně je to řešené třeba u digitálních LED WS2812D, tak mrkni do datasheetu.
Čili to by vedlo na princip typu "digitální PWM", viz výše... Jo, kouknu, díky.ondraN píše:...
Můj tip je ten, že se v přijímači měří poměr trvání H a L a podle toho se to vyhodnocuje. Má to tu výhodu, že se vždy generuje synchronizační hrana (ať je bit 1 nebo 0) a dá se použít třeba interní RC oscilátor MCU, který zrovna přesností neoplývá. Podobně je to řešené třeba u digitálních LED WS2812D, tak mrkni do datasheetu.
Soustředím se i na ten taky výše uvedený Holtek HT12E, tam se (pokud to dobře chápu) přenáší 0 a 1 právě rozdílnými šířkami pulsů.