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

:slight_smile: jo tak jasně že neuvidím… to bylo jen takové “pojmenování problému” řekněme …

spíš mi právě jde o ten princip blikání (RC5), jestli třeba už někdo neřešil pro tento kontroler (v Cečku nejlépe)… připojení diody zřejmě přes nějaký tranzistor…

tak nějak nevím moc jak na to, kde začít…

Tak s RC5 ti bez příslušného HW bohužel nepomůžu.
IR diody mohou obvykle dostávat při RC5 impulzy nad 50mA, což by asi mcu nedal. Takže tranzistor ano :slight_smile:. Můžu ti načrtnout zapojení, ale to je tak asi vše.

příslušný HW, myslíš?

Ještě jsem nahoru něco dopsal.

Tím HW myslím procesor s programátorem, připojenou diodou a osciloskop u sebe na stole :slight_smile:.

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.