Zdravím,
prosím o rady, návody, odkazy…
potřeboval bych rozblikat IR diodu ve spolupráci s 8051 (Dallas DS89C450)…
něco malinko v C s tímto kontrolerem mi jde… z různých zdrojů jsem tak trošku zmaten, potřeboval bych nějakým způsobem usměrnit a navést, jednak jak diodu správně připojit a následně správně rozblikat…
moc děkuji
administrator: přejmenováno z "IR vysílač (C - keil)"
S IR diodou je problém - je IR(infra red - pro lidské oko neviditelné spektrum). Tedy když ji rozblikáš, stejně to neuvidíš .
Nejdřív si to vyzkoušej na obyčejné LED diodě. Pak uprav parametry blikání dle požadovaných a vyměň led za IR.
Pokud by se ani tak nedařilo, doplň parametry blikání a odkaz na použitý překladač. Taky to něco malikno jdoucího by mohlo pomoct.
V C pro x51 jsem zaím psal akorát v keilu pro mcu silabs.
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 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 . Můžu ti načrtnout zapojení, ale to je tak asi vše.
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?
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 .
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 . 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 .
O obecném nevím .
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ě.
Ve tvém případě už to není pseudokód, ale jen kód - jde (měl by jít) přeložit .
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).