Dallas DS89C450 - IR vysílač (C - keil), rozblikání LED

mám DS89C450 od Dallasu… programuje se přes SPI, takže programátor netřeba…
součástky nejsou problém nakoupit…
osciloskop ( … … bohužel… - možná bych se pokusil si někde něco obstarat)…

takové ty sedmisegmentovky, diody již mám za sebou, seriovkou taky jakž takž komunikuju… ale tady si vážně nevím rady… kde bych měl začít?

Tak nejdřív si musíš skouknout samotný protokol en.wikipedia.org/wiki/RC-5 .

Tam uvidíš, že základ kounikace na 36kHz je pulz o délce 27.8us a je jich vždy 32 v řadě. To je úloha jak vyšitá pro pwm.
Na procesor jsem zatím nekoukal, ale pravděpodobné má timer schopný pwm generovat.
Začátek je tedy rozchodit pwm na 36kHz. Pak nastavit šířku pulzu na požadovanou délku (25-33%) a nakonec dát dohromady vyslání bitu (tedy buď 32 pulzů světla (šířka pulzu 20-33%) a 32 pulzů tma (pwm na nulu) nebo opačně). Když budeš mít funkční bit, tak už by to měla bejt hračka :slight_smile:.

Bude třeba plně využívat hw schopnosti procesoru (přerušení).

jj diky…
avšak… určitě něco takového někdo už řešil, jen se mi nepovedlo najít kde a kdo:)
je myslíš lepší hledat, nebo se pokusit něco “zbastlit” na vlastní triko?.. nejradši bych použil třeba nějakou hotovou knihovnu, či něco podobného …

Tak ten procesor není ohledně periferií tak moderní, jak jsem očekával ale zas má rychlý jednocyklový jádro, takže nutné využití hw by nebylo tak akutní… Cenu za dobře vytvořený datasheet bych jim tedy nedal, to je tragédie tam něco najít.

Když chceš něco hotovho, asi budeš muset líp hledat :smiley:. Ovšem portování na tvůj konktrétní mcu se stejně nejspíš nevyhneš.
Osobně kdybych něco přijatelnýho do hodiny nenašel, tak bych to neřešil a napsal si to sám. Když znáš svůj hw a máš potřebné vybavení, tak je to práce na odpoledne :slight_smile:.

ok, začnu tedy (určitě ne jedno-odpolení) pokus něco stvořit…

nějaký obecný algoritmus?.. nebyl by?:slight_smile:

O obecném nevím :slight_smile:.
Začal bych tím generováním pulzů. Vzhledem k tomu, že implementováné timery nedosahují ani náznakem schopností svých kolegů v jiných mcu (avr, pic a spousta dalších), použil bych je pouze tvoření periody 36kHz signálu.
Na to se hodí timer2 v režimu autoreload.
Pokud např. poženeš jednocyklový jádro na 27MHz, tak na periodu (27.8us) potřebuješ 27e6/36e3 = 750 instrukčních cyklů. Autoreload hodnota pro timer by tedy byla 65536-750=64786.

Pokud by ti nevadilo, že program nemůže dělat nic jiného (kromě případných obsluh přerušení), mohl bych zkusit napsat jakýsi pseudokód, jeho implementace by už ale byla na tobě.

klidně… to budu rád…

zatím využívám jen obě seriové linky (timer 1)
xtal mám 11.0952MHz

pokud to pomůže:)

Tu máš něco na zkoumání :slight_smile:.
rc5.c (2.32 KB)

diky vřele… prostuduji a určitě se budu dál ptát :slight_smile:

a jak by si řešil dekodování?:slight_smile:

Nijak. Koupil bych přijímač, ze kterýho ty data přímo polezou :wink:.
tme.eu/cz/katalog/#id_catego … 0%3B112305
cz.farnell.com/infrared-receivers
Třeba tu o jednom padla zmínka: https://forum.mcontrollers.com/t/chovani-sfh5110-38-jak-pripojit-jak-zmerit/1787/1
Pokud to chceš na přenost dat mezi dvěma mcu, tak na to jsou určeny ir transcievery. cz.farnell.com/infrared-transceivers

ok, diky…
jinak by to mělo být něco jako univerzální dálka, kterou budu řídit ještě přes BT modul, třeba ze SW v PC…

snad …:slight_smile:

tak ještě bych se chtěl poptat k tomu kodování:

zkoušel jsem blikat na přístroj (satelit od philipsu), ale nechce se mu reagovat… RC5 by snad měl umět (v tom si taky nejsem úplně jistej)

mohli byste prosím někdo zkontrolovat můj pseudokod? (hlavne nastaveni timeru)

HW: přes odpor (330) oteviram tranzistor BC639 a tam spínám HSDL-4220 diodu + odpor (9) se zemí…
rc5.c (2.41 KB)

Ve tvém případě už to není pseudokód, ale jen kód - jde (měl by jít) přeložit :slight_smile:.

Každopádně nemá moc smysl do toho koukat jak husa do flašky. Připoj to na osciloskop nebo analyzer, skontroluj časování a jesli to vůbec bliká.
Ty s hw moc nekamarádíš viď. Časování řešený tímle způsobem nebude moc přesný, ale jesli to vezme přijímač tak budiž. Druhá věc je zda bude takhle vygenerovaná rychlost přenosu v toleranci pro dekodér přijatých dat (vpodstatě uart).

tak přeložit to jde (i když jsem tenhle pseudokod ( :slight_smile: ) trošku pro publikování tady ořezal) … diody taky bliká…

noo… s tím časovačem právě:) to teda moc nekamarádím no … a proto jsem tu čekal nějaký nápad jak to vyrobit líp:)

ď

Minimálně na generování nosné (36kHz) je timer více než žádoucí. Na začátku vysílání ho jen spustit a pak dle potřeby čekat na jeho přetečení (uplynutí 27.8us). Čekání na uplynutí doby sepnutí (25-33%) pak lze provést dalším timerem nebo i programově (buď sw smyčka požadované délky nebo jen sledovat timer generující nosnou a čekat na dosažení požadované hodnoty).
Zkusim to nějak došolichat, ale nemám na čem testovat, takže si budeš muset nějak poradit.

Mimochodem - je ovládané zařízení opravdu na 36kHz? Nosných se používá víc.

Tvůj mcu má jednocyklový jádro. Seš si jistej, že timery čítají 1/12 frekvence krystalu?

edit: tu máš něco na luštění, je tam počítáno s tím, že timer tiká plnou rychlostí hodin.
Při vysílání příkazu ignoruješ toggle bit. Jesli se pokoušíš volat u zařízení funkci, která vyžaduje opakované stisky tlačítka, tak ho musíš při každém simulovaném stisku měnit. Proto jsem tam původně sestavení vysílané proměnné tak rozepsal.

Jinak omluv tu pauzu, byl jsem obden v práci na 24h a to jsem rozhodně neměl chuť něco bastlit :slight_smile:.
rc5.c (3.21 KB)

děkuji za nápovědy…
teď jsem byl taky týden mimo…

jj… časovač čítá XTAL/12, a navíc jsem přišel na to, že tenhle můj zkušební Philipls používá RC6… takže mě teď pěkně poslouchá…

budu dál “tvořit” a jistě se zase objevím s dalšími problémy :slight_smile:

diky

Zdravim,

teď si tu zase hraju s NEC protokolem, neměl někdo zkušenosti?
popis zde:
sbprojects.com/knowledge/ir/nec.htm

snažím se rozchodit tento přístroj:
dune-hd.com/firmware/rc/

časování si tipnu, že mám nastaveno dobře, podle mě ale jen asi nějak špatně adresuju, nebo posílám špatnej command, protože je vidět, že “tak nějak” přístroj poslouchá (je-li ve screen modu a něco se mu pokisím zaslat, tak se probudí… to je ale vše… víc mě neposlechne)…

pro například funkci POWER z popisu RC přístroje zasílám:
00 od nejnižšího bitu, pak BF od nejnižšího, stejně pak 43 a BC …

hlavička 9ms burs a 4.5ms pauza… nevíte v čem bych mohl dělat chybu?
popřípadě, mám postnout svůj kod?

děkuji :slight_smile:

ono na konci to casasovanie može byt mimo…

skus dat kod…