Fórum témák

» Több friss téma
Fórum » PIC 16F84(a) infra -jel feldolgozas
 
Témaindító: gtk, idő: Máj 20, 2006
Témakörök:
Lapozás: OK   1 / 2
(#) gtk hozzászólása Máj 20, 2006 /
 
Sziasztok!

Új vagyok a listán, bele is vágnék a közepébe:

PIC 16F84(A)-val szeretnék infrajel-feldolgozást megvalósítani. Hogyan lehet ezt legegyszerűbben elérni? Láttam 12Fxxx gyári megvalósítást, közvetlenül a PIC-be volt vezetve a jel.
Minden ezzel kapcsolatos információ érdekel.

Köszönöm!
(#) raron válasza gtk hozzászólására (») Máj 20, 2006 /
 
Ha jól tudom itt van egy csomó könyv. Infrás is.

Pic-es cikk meg itt van a He-n.

Szerintem 16F628(A)-t vegyél. Ez kb. fele annyiba kerül, és van benne USART, és még sok minden.
(#) Sehecica válasza gtk hozzászólására (») Máj 20, 2006 /
 
Szerintem is ez a legjobb megoldás
(#) raron válasza Sehecica hozzászólására (») Máj 20, 2006 /
 
Itt is van valami infrás dolog, de itt biztosan megcsinálták a infrás távirányitást.[/link]
(#) raron válasza raron hozzászólására (») Máj 20, 2006 /
 
Ez szerintem jó.

Egyébként a He-n is van még asszem fényerőszabályzás PIC-el, vagy hasoló.
(#) gtk válasza raron hozzászólására (») Máj 23, 2006 /
 
Koszonom a sok valaszt,de nem egeszen a megadottakra vagyok kivancsi.
Az erdekel ,hogy ha egy infra jelet beviszek egy 16F84 -be,hogyan tudom a kul. gomb jeleit egymastol? megkulonboztetni?Hogyan lehet a jelet 'feldolgozni'?
(#) vicsys válasza gtk hozzászólására (») Máj 23, 2006 /
 
Nos itt van egy leírás a dekodolásról. Ez az egyik leggyakrabban használt RC5-ös kódoláshoz van. Elég érthető sztem. (mellesleg a propeller clock is ezt a szabványt használja)
[link=http://www.xs4all.nl/~sbp/knowledge/ir/ir.htm]http://www.xs4all.nl/~sbp/knowledge/ir/ir.htm[/link]
(#) bbatka válasza gtk hozzászólására (») Máj 24, 2006 /
 
Röviden az elve a következő. TMR0 pörög a háttérbe és az infrajelet pl. az RB0-ra viszed (persze dekódolás után) és az RB0-ra megszakítást teszel. Minden megszakítás után kiolvasod a TMR0 értékét. A TMR0 értéke persze tükrözi a bejővő impulzusok szélességét. Utánna feltétel vizsgálattal össze kell hasonlítani ezeket az értékeket azzal amit szeretnél kapni. Ha megegyezik akkor kapcsolja az adott funkciót. Remélem nem volt túl zavaros. Lehetőleg kódolt átvitelt használj, mert a négyszögjel átviteles elég zavarérzékeny.
Előfordulhat persze hogy a kódolt átvitel nem valósítható meg valamilyen okból. pl. Több egymástól független megszakítás figyelés.
Gondolom valamelyik TSOP infravevő ic-t akarod használni. A HAM bazárból olcsón beszerezhető.
(#) gtk válasza bbatka hozzászólására (») Máj 24, 2006 /
 
Koszonom mindenkinek!
bbatka ravezetett a megoldasra
Ezt :
Idézet:
„Lehetőleg kódolt átvitelt használj, mert a négyszögjel átviteles elég zavarérzékeny.”
meg egy picit legyszi fejtsd ki.

Koszi.
(#) bbatka válasza gtk hozzászólására (») Máj 24, 2006 /
 
Kicsit félreérthető voltam. Négyszögjel alatt a periódikus négyszögjelet értettem. A kapcsolások között a fényerőszabályzónál kénytelen voltam periódikus négyszögjelet használni, mert a hálózati nullátmenetek között kevés az idő kódolt átvitelre. Sajnos meg kellett tapasztalnom hogy egy periódikus négyszögjeles átvitel érzékeny a hálózati zavarokra, aztán a TSOP1230-at árnyékolnom kellett agyba-főbe.
Szóval kitalálsz egy kódolást pl. 1 = 1000us 0 = 1750 us és ebből építed fel az átvitelt. Az adónak folyamatosan kell küldeni a jelcsomagokat, mert az infraátvitel bizony elég megbízhatatlan. A vevő oldalon legalább 3 beérkező helyes kódcsomag után fogadd el helyesnek az átvitelt és kapcsold az adott funkciót. Ami fontos hogy ezután tegyél egy 1s -os várakozást , különben peregni fog a kapcsolás.
(#) gtk válasza vicsys hozzászólására (») Máj 24, 2006 /
 
Koszonom.
Igen ,valoban ertheto.
De az adott oldalon talalt rajzon direkt pic -be van kotve az infra..Na most akkor kell valamifele IC meg vagy sem?

Udv ,gtk.
(#) gtk válasza vicsys hozzászólására (») Máj 24, 2006 /
 
Igen,ertheto.
Koszonom mindenkinek!
Kinek adjam a pontot hogy ne legyen baj?
(#) vicsys válasza gtk hozzászólására (») Máj 24, 2006 /
 
Az alkalmazott infra érzékelő tartalmaz egy belső erősítőt és így a kimenetén már egy nagyon szép jelsor jön ki. Tehát digitálisan rögtön illeszthető a pic bemenetére. A feldolgozást szoftveresen lehet megoldani. Leírás és minta van a linken. Bbatka jobban vágja a dekodolást...:yes:
(#) gtk válasza bbatka hozzászólására (») Máj 30, 2006 /
 
Idézet:

. Minden megszakítás után kiolvasod a TMR0 értékét. A TMR0 értéke persze tükrözi a bejővő impulzusok szélességét. Utánna feltétel vizsgálattal össze kell hasonlítani ezeket az értékeket azzal amit szeretnél kapni...

Nem teljesen vilagos szamomra - sajnos -.
'Minden megszakitas utan...'?
-Ha 0 megszakitast allitok be akkor minden 0nal interruptol,es ket megszakitas kozott eltelt idot adja a Timer0, erre gondolsz?
De mindebbol hogy lesz nekem mondjuk 01101 ,amit hasonlithatok?
-vagy nem is hasonlit az amit en ide irtam es a Te elkepzelesed?) -
(#) bbatka válasza gtk hozzászólására (») Máj 30, 2006 /
 
Kicsit régen foglalkoztam már a TMR0-nal. De úgy rémlik hogy a TMR0 megszakítás nem engedélyezem. Viszont a bejővő infrajel RB0 megszakítása után miután az interrupt rutinból visszatérne a főprogramba a TMR0 értékét akár nullázhatod is. Így a két interrupt közötti TMR0 változást kapod meg. Nem muszály a TMR0-t használni mint számlálót. Akár te is tehetsz a főprogramba egy változót, aminek az értékét folyamatosan növeled egy végtelen ciklusban. Majd mikor az interrupt ciklusból visszatérne ennek a változónak az értékét törölni kell. Minden megszakítás 1 bitnek felel meg. Ha nyolc bites kialakítást akarsz akkor össze kell várnod 8 bit beérkezését és ha mind helyes akkor egy változó értékét eggyel megnöveled. Ha három helyes 8 bites kódsorozat beérkezett akkor kapcsolja Toggle (váltakozó) módban az adott funkciót. pl.lámpa ki-be. És nagyon fontos az 1s-os várakozási idő mert különben kezelhetetlen lesz az egész. Van nekem egy saját gyártású riasztó központom. Infrás beléptetésű. Holnap elküldöm a kódját neked. Ez az egész módszer az én agyszüleményem. Biztos lehet még javítani rajta.
pl. 250ms után a változók nullázása, akkár történt valami akár nem. Ez is megoldható egy TMR-el ha megszakítást engedélyezel rá. Ez utóbbit még nem próbáltam ki. Ez is a biztonságot szolgálná. Ha támad valami jó ötleted légyszí oszd meg velünk.
(#) gtk válasza bbatka hozzászólására (») Jún 2, 2006 /
 
Meg csak elmeleti szinten dolgozok vele,mert nincs kesz az egetom.Ha valamire jutok termeszetesen megosztom veletek is.
(#) gtk válasza bbatka hozzászólására (») Júl 14, 2006 /
 
Sziasztok ujra!

Most jutottam odaig hogy nekifoghatok a PIC -infra dolognak gyakorlatban is.
Atneztem tobb forrast is,de pl basic -et nem ertem,C-ben meg PICet nem progiztam.
ASM-ben lenne inkabb jo...

Az en elkepzelesem a fprumban elmondottak alapjan ,az infraval kapcs. a kov. lenne:

-Ugy olvastam valahol hogy a jel nehany egyessel kezdodik,akkor eszerint-:
Egy kulso kapcsoloval jelezni a PIC -nek,hogy tanitas.
RB0 INT,TIMER0 engedelyezes;
ket megszakitas (az elso 2 bit(1esek)) kozotti idot megmerni ,DE HOGYAN?
Ha megvan a bitek kozotti ido,akkor ennyi idonkent olvasni az RB0 -rol mondjuk 8 bitnyi

adatot.HOgy lehet ezt?(az olvasast tudom,az idonkenti olvasast nem.)
Kov. lepes,hogy megegyszer olvasni 8 bitnyi adatot, ezt meg az elozo 8 beolvasott bitet

elmenteni egy -egy valtozoba,aztan osszehasonlitani,ha egyezik akkor ugras egy rutinra ,ami

egy LEDet hajt,ami jelzi hogy ok,johet a mentes PIC/EEPROMba.
Ekkor bevitelkezelessel egy gomb nyomasra elmenteni az adatot EEPROMba.

Es azt addig ismetelni amennyi taviranyito -gomb hasznalatat akarjuk.

Ez lenne a tanitas resze nagyvonalakban.

A hasznalat meg:

INT jelzi hogy adat van,8 bitnyi adat olvasasa elozoleg meghatarozott idonkent,(mondjuk az

idot is elozoleg elmenteni EEPROMba,hogy megorizzuk.);ez ketszer,osszehasonlitas es ha

egyezik akkor hasonlitas az EEPROM elso,majd kov. es kov adataval,if agakban meg ugras

megfelelo rutinra.

Mi a velemenyetek?

Probaltam leirni amennyire tudtam.
HOzzaszolasokat es otleteket varok.

Udv!
(#) bbatka válasza gtk hozzászólására (») Júl 14, 2006 /
 
Ha tanításos módszerben gondolkodsz akkor valóban szükséged lesz egy EEPROM-ra.
A PIC valamelyik lábára teszel egy kapcsolót két alapvető módszer van. Nem részletezem biztos ismered. Szóval az első dolog az előbb említett láb állapotától függően adatmentés vagy funkció kiválasztás összehasonlítással. Mivel megszakítást használsz két ciklust kell írnod "főciklus" és "megszakítás ciklus". Normál esetben legtöbb időben a főciklus fut. Abban az esetben ha megszakítás érkezik az RB0-ra olyankor a program a megszakítás ciklusba kerül.
"ket megszakitas (az elso 2 bit(1esek)) kozotti idot megmerni ,DE HOGYAN?" Mondatodra a válasz a következő ahogy már korábban is leírtam. TMR0 értéke állandóan változik. Olyankor amikor a megszakítást követően a program kikerül a főprogramból , ekkor a TMR0 értékét azonnal le kell mentened egy másik változóba és az összehasonlítást ezzel kell végezned. A megszakítás ciklus végén pedig a TMR0 értékét nulláznod kell. Szóval így mérheted meg a TMR0 változó értékének a változásával idézőjelben az időt.
1. esetben EEPROM-ba írsz a megszakítás ciklusban
2. esetben a beérkező megszakításidő (TMR0 segédváltozójának értékét ) hasonlítod össze az EEPROM tartalmával a megszakítás ciklusban. Persze nem árt tudni előre hogy hány bitet is akarsz felhasználni az összehasonlításhoz.
Azért jó a Basic mert egyszerű + a két ciklus jól láthatóan elkülönül a forrásban.
Egyébként amit leírtál az jó.
(#) gtk válasza bbatka hozzászólására (») Júl 15, 2006 /
 
Koszi hogy segitesz!

Tudom hogy sokat targyaltuk ezt a temat mar itt a topicban,de minel tobbet foglalkozom vele annal bonyolultabbnak tunik
Idézet:

Olyankor amikor a megszakítást követően a program kikerül a főprogramból , ekkor a TMR0 értékét azonnal le kell mentened egy másik változóba és az összehasonlítást ezzel kell végezned.

Tehat,INT rutinba ugrott a program,itt elmentem a TIMER0 jelenlegi erteket egy T valtozoba,es kinullazom a regisztert,kovetkezo INTnal (2.INT) timer0 erteket hasonlitom T-vel es visszairom T-be.Csak itt meg tudni kell hogy az elso INT -nel vagyok vagy a masodiknal...
Ami meg nem vilagos :
Ha az RB0 -t ugy allitom hogy 1. nel INT,akkor az elso ket egyes kozott lesz INT nekem?mert ha ket egyes egymasutan jon es nincs szunet kozottuk(??) akkor csak az elsonel fog INTerruptolni,nem?
A masik dolog meg az,hogy mi garantalja hogy a bit-sorozatot en az elso bittol olvasom es mondjuk nem a kozepetol?mert a kozepen is lehet ket egyes egymas utan..szoval ez nekem meg zavaros tobbek kozott

Minden bit-nel INTerrupt,vagy csak az elso 2 bit kozotti ido meresekor,tovabb meg sima RB0 olvasas?

8bitet szeretnek felhasznalni.

(#) bbatka válasza gtk hozzászólására (») Júl 15, 2006 / 4
 
Kicsit kómás vagyok, de azért megpróbálok valami értelmes választ adni. Valóban nem olyan egyszerű mint amilyennek elsőre tünik az infraátvitel.
1. eset - EEPROM-ba írás
- TMR0 értéke folyamatosan nő (persze az osztókat úgy kell beállítani hogy két várható megszakítás között az értéke még véletlenül se csorduljon túl)
- Interrupt RB0
- A program átugrik az interrupt ciklusba
- TMR0 értékének lementése egy T segédváltozóba (erre azért van szükség mert a TMR0 értéke még az interrupt ciklusban is nő, és az összehasonlító feltételektől függően hamis eredményt kaphatnánk)
- T segédváltozó értékének beírása az EEPROM-ba

2. Eset - Összehasonlítás
- Minden beérkező (RB0-ra) impulzusnak megszakítást kell kiváltania.
- Miután megtörténik az interrupt ciklusba való áttugrás TMR0 érték beírása T segédváltozóba az utánna következő összehasonlításhoz.
- Az összehasonlításnál az a lényeg hogy két feltételt kell vizsgálnod. Az első esetben megvizsgálni hogy az EEPROM-ba lévő első érték megegyezik-e T értékével. Ha T = EEPROM (1. eleme) akkor a következő interruptnál azt kell vizsgálni hogy T=EEPROM (2.elemével). És így tovább mindig megvizsgálsz két egymást követő tartalmat. És ha a 8. bit beérkezése után is igazak voltak az előző feltételek akkor OK a kód.

Szóval annak nemigazán van jelentősége hogy hol a kód eleje meg a vége, hanem annak van jelentősége hogy egymás után milyen értékek érkeznek be sorba.

Ha azt a módszert használod amit javasoltam. Mármint hogy eltérő szélességű a "0" és az "1" akkor nem lesz ilyen problémád --> "Ha az RB0 -t ugy allitom hogy 1. nel INT,akkor az elso ket egyes kozott lesz INT nekem?mert ha ket egyes egymasutan jon es nincs szunet kozottuk(??) akkor csak az elsonel fog INTerruptolni,nem?"
(#) gtk válasza bbatka hozzászólására (») Júl 15, 2006 /
 
HOgy lehet ugy allitani az RB0 -t hogy mindig interruptoljon?(0,1. nel is)

Idézet:

Szóval annak nemigazán van jelentősége hogy hol a kód eleje meg a vége, hanem annak van jelentősége hogy egymás után milyen értékek érkeznek be sorba.


Szoval csak a bitek koztti idot mered es hasonlitod az elmentettel?

Idézet:

Ha azt a módszert használod amit javasoltam. Mármint hogy eltérő szélességű a "0" és az "1" akkor nem lesz ilyen problémád-->......




Elmelkedem rajta
(#) bbatka válasza gtk hozzászólására (») Júl 15, 2006 /
 
1. Az interrupt ciklus végén újra engedélyezed az interruptot.

2. YES !
(#) zsuscsinyo válasza bbatka hozzászólására (») Aug 31, 2008 /
 
Szia bbatka!

Énis ebben a cipőben járok mint a gtk.. és csak annyi hozzáfűzni való kérdésem lenne, hogy:

...ha a TMR0-át pörgetem akkor mennyire állítsam az előosztót 4MHz-es kvarc esetében ha az 1bit-re jutó idő ~800uSec?

...ha megtörtént a megszakítás az RB0/INT porton akkor ugyebár "elhangzott" a START-bit, utána indítom a TMR0-át (persze nullázom minden kiolvasott érték után hogy véletlen se interruptoljon), ezt követően hogyan "gyúrom" egybe ezt a sok 1-est meg 0-át mondjuk egy HEX értékbe? kb 25-26 bit-ről lenne szó mivel egy PHILIPS Hi-Fi távirányítót használnám tanulás céljából, csatolok pár képet a mintavételezésről. Ha kicsit tudnál még segíteni a program struktúrájában, azért hálás lennék

Előre is köszi!
üdv! Zsuscsinyo
(#) bbatka válasza zsuscsinyo hozzászólására (») Aug 31, 2008 /
 
Szia !

Utoljára kb. 2 éve foglalkoztam ezzel a témával. A tudásom szinte lenullázódott. Az első kérdésedre kapásból nem is tudom a választ. Úgy emlékszem hogy a 16F627-es adatlapján mintha lett volna egy képlet rá.

A második kérdésedre mellékeltem a 2005 óta müködő primitiv lakásriasztóm kódját. Ekkor még azt sem tudtam hogy a TMR0-t hogy kell használni. A sors íroniája hogy most meg már nem tudom. A "loop" hurokra céloztam.
Utána következik közvetlenül ami téged érdekel. Igaz decimálisba alakít. 1 byteba.

Sajna csak ennyit tudtam segíteni. A parlagfű allergiám is megvisel. Elég vacakul alszok, a fejem meg nem fog.
(#) zsuscsinyo válasza bbatka hozzászólására (») Szept 4, 2008 /
 
Köszi a segítséget ezzel is sokat segítettél, sikerült megoldanom!

Amúgy meg jobbulást

Én is sírok néha a parlagfűtől
(#) Josza hozzászólása Máj 19, 2010 /
 
Hello
Lenne egy olyan kérdésem, hogy nekem van egy PIC16F84-es PIC-em! Azt szeretném megoldani, hogy egy sima TV távirányítóval mondjuk 4 gombot felprogramozni (assembler nyelven)! Én ezt úgy gondoltam, hogy a programfutás közben odaér, a 4 nyomógombhoz aztán mikor megnyomom, az egyiket elugrik, egy szubrutinra és mikor azt végrehajtja, visszatér, a program elejére ahol ismét figyeli a 4 gombot.
Sajnos még kezdő vagyok PIC programozásban! Esetleg nem tudna nekem mutatni valaki hasonló programot akár egy nyomógombra és lehetőleg legyen hozzá leírás (Én MPLAB-ot használok)

Mellesleg melléklek, egy kapcsolást miként kötném be az INFRA vevőt a PIC-hez!
(#) Hp41C válasza Josza hozzászólására (») Máj 19, 2010 /
 
Szia!

Nézd meg a "Propeller óra" vagy a "Wand óra" leírását, programját. Az órák a Philips RC5 kóddal működtethetők. A Propeller óra cikkben távirányító is található...
Ahhoz, hogy egy akármilyen TV távirányítót fel tudjunk használni, ismerni kellene az általa küldött infra csomag felépítését..
A TSOP tápját az adatlapja szerint szűrni kell, a kimenetére egy felhúzó ellenállás javasolt. A fénycsőlámpák zavarhatját a vevő múködését...
(#) Josza válasza Hp41C hozzászólására (») Máj 19, 2010 /
 
Hello
Köszönöm válaszod…
Ki is javítottam a kapcsolást!
Igazság szerint nekem jobb lenne, ha bármilyen távirányítóval menne a dolog! Még várok, hátha valaki mégis tudna nekem segíteni…
(#) jpocok válasza Josza hozzászólására (») Máj 19, 2010 /
 
Szia!
HP41C ötlete is jó, de a Tied sajnos nem fog működni. Nézd meg Nigel Goodwin oldalán az IR-panel leírását és annak programozását!

Szerk: keresztezték egymást hozzászólásaink. Még mindig javítani kell a kapcsoláson. Nézd meg, amit írtam!
(#) Hp41C válasza Josza hozzászólására (») Máj 19, 2010 /
 
Szia!

A távirányító által küldött formátum meghatározásához ajánlom a Girder -es cikket...
Következő: »»   1 / 2
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem