Sida 1 av 2
läsa av SAMSUNG IR fjärr.
Postat: 3 november 2007, 10:45:23
av squiz3r
Hej. Jag har byggt en motagare med en 33KHz IR-modul sammt en PIC och lite kringelektronik. Sen byggde jag en fjärkontroll till den, men den lyckas jag inte få nån bra räckvid på. Men nog om det.. Nu tänkte jag istället försöka läsa av en fjärrkontroll från SAMSUNG. Jag vill bara läsa av 3 av knapparna, men när jag kollade på oscilloscopet så va den en jätte lång signal, och jag har googlat lite men kan inte hitta någon bra info om vilka bitar som är data.. Så det kanske är någon här som vet vad som är vad, eller har en bra länk?
Bild från oscilloscopet: (varje ruta i rut nätet är 5ms lång, och signalen är ju inverterad eftersom jag tog den från en ir-modul)
Tacksam för snabb hjälp!
Mvh
Postat: 3 november 2007, 10:59:27
av thepirateboy
Har ingen aning vad samsung använder för protokoll men har du kollat på denna sida om något stämmer in
http://www.sbprojects.com/knowledge/ir/ir.htm
Annars kanske det är enklare att ta någon annan fjärr med känt protokoll.
Postat: 3 november 2007, 11:41:44
av sodjan
Postat: 3 november 2007, 11:44:04
av micke.prag
Jag har inte tittat så noga själv men lirc-projektet har ju rätt mycket dokumenterat
http://www.lirc.org
Postat: 3 november 2007, 12:25:25
av bengt-re
Startkondition och sedan innebär kort hög puls etta och kort hög puls en nolla. Det är väl inga problem att dekoda? Lite beroende på uC och programmeringsvana finns det ett antal olika sätt att lösa detta på. CCP är en bra variant på PIC. Läs av alla pulslängder och dekoda dem efteråt är enklast. interupsrutin som går på interupt on change och som där läser av timer och skriver ner eller dekodar omdelbart är lite stökigare, men förbrukar färre register och är effektivare om än lite stökigare att skriva.
Det går faktist att skriva detta i högnivå språk till och med så länge språket har någon capture funktion. OM du letar lite på forumet så finns det (för ungefär 2,5-3 år sedan) ett inlägg där jag dekodade en fjärrkontroll i basic så visst tusan går det!
Postat: 3 november 2007, 13:16:34
av Icecap
"sedan innebär kort hög puls etta och kort hög puls en nolla"???
OK, det blir ju mycket enklare då....

Postat: 3 november 2007, 13:29:43
av squiz3r
Icecap: Tänkte också på det
Tack för alla tipps och länkar! Jag har gämfört signalerna under oscilliscopet nu ett tag och jag tar en lite "gen väg" och skiter i vad som är vad i koden, utan kollar bara på sakerna som ändrar sig.
Tyvär har jag en välldigt kort deadline, så jag får nog hoppa över de lite mer proffsiga funktionerna som bengt-re tippsade om och köra på ett lite nobigare sätt med mjukvaru-timer m.m
Jag håller på nu att försöka göra ett sätt att kolla hur lång pulsen är.
--
Jag testade även räckviden med min SAMSUNG fjärrkontroll, och motagaren såg signalen på ca. 10m hål utan problem. Längre bort än så kunde jag inte komma inne i huset. Men den rävkvidden är helt okej för mig
Mvh
Postat: 3 november 2007, 13:30:52
av bengt-re
JO, men finns ju bifas-kodade också och då är det lite stökigare att läsa ut...
Detta är rätt enkelt.
Läs av startkondition
loopa till dess du har en giltig startbit
Capture ettorna stoppa in pulslängden i något regiser
Kolla om timern overflowar -> gå till leta startkondition igen
loopa till dess du har läst av alla bitarna
Tolka bitarna
om mellan xx och xx skriv en nolla
om mellan xx och xx skriv en etta
om inte något av ovanstående - konstatera fel och gå till läs av startkondition
Mata ut resultatet
En fungerande, emn kanske inte vacker kod:
http://elektronikforumet.com/forum/viewtopic.php?t=4749
Postat: 3 november 2007, 14:44:06
av squiz3r
Nu tycker jag att jag förkänar en liten paus, (så jag kan hänga lite på EF

)
Nu har jag kodat den så att den läser av när jag trycker på off knappen (den röda) på fjärrkontrollen och inte bryr sig om de andra två. Helt utan några interrupt eller timer's
Nu är det ganska enkelt fixat att göra så den styr ett RC servo åt önskatt håll beroende på vilken av de två andra knapparna jag trycker på
Mvh.
Postat: 3 november 2007, 20:29:51
av bengt-re
Hur gjorde du då! *nyfiken*
Postat: 3 november 2007, 20:47:54
av squiz3r
bengt-re: Inte världens bästa sätt, men ensålänge verkar det fungera
För att hitta statbiten väntar jag tills ingånegn blir låg, sen kollar jag med hjälp av en kort pause i en delayloop, sammt en counter (typ: counter = counter + 1) sen när jag hittar en som är tillräckligt lång konstaterar jag att det är startbiten
. Då väntar jag i 19ms och har då hoppat bort till en av bitarna som alltid är en 1'a (på de tre knappar jag vill läsa av), efter att den har blivit låg börjar jag räkna hur många nollor det kommer innan nästa etta (för att veta om det är en etta eller nolla så kollar jag först när den blir hög, sen väntar jag i 0,9ms och kollar sen om den är hög, är den fortfarande hög då så är det en etta, annars är det en nolla. Sen räknar jag antalet nollor med samma counter-princip och sparar i en variabel). Sen tar jag den variabeln minus 6 (decimalt), och om ZERO biten är satt då kan jag konstatera att det var on/off knappen som man tryckte på, och om det inte blir noll får jag fortsätta att kolla bitar på samma vis för att lista ut vilken knapp det var.
När jag har konstaterat att det var on/off knappen som man tryckte på så kollar den i en flagga om den är på eller av nu. Om den är på så stänger den av (noll'ar flaggan) och om den var av så sätter den på (sätter flaggan). Sen i main rutinen så sätter den en LED till samma värde som flaggan. Sen är taken att om den är avstängd (LED'n av och flaggan låg) så ska den inte reagera på någon annan kanpptryckning än on/off knappen.
För att nolla flaggan om den är hög, och sätta den om den var låg från början använde jag först detta kommandot med n fick konstiga fel (den gick bara att sätta på inte av

)
Kod: Markera allt
btfsc flagga
bcf flagga
btfss flagga
bsf flagga
Men som saggt så fungerade inte det, och efter ett tag kom jag framm till felet. Eftersom den först kollar den första sen efter att den har ändrat (om det ska ändras) så kollar den den andra så kommer den alltid köra den ansra (och sätta flaggan) oavsett vilket värde den hade från början.. Men detta löste jag genom att först spara det i en temporär flagga och sen flytta över det till den flaggan som det ska vara i.
Eftersom den skulle kunna fastna i en loop om det är fel signal, och inte komma ur den på annat sätt än att reseta PIC'en (den regerar ju inte på rätt kod då heller) så ska jag försöka lära mig använda WDT'ern också. Det verkar vara ganska lätt
Lite flummigt skrivet, hoppas ni förstår ändå!

Mvh
Postat: 3 november 2007, 20:51:29
av bengt-re
Tror jag hajade.... Säger som J Stalin.
"Spelar ingen roll vad katten har för färg så länge den fångar råttor..."
Eller skit samma hur man löser problemen så länge de blir lösta

Postat: 3 november 2007, 20:53:51
av squiz3r
"Spelar ingen roll vad katten har för färg så länge den fångar råttor..."
Mja.. Fast en självlysande färg på katten kanske skrämmer iväg råttorna
Denna är ju inte riktigt lika stabil som en "riktig" lösning skulle jag gissa
Mvh
Postat: 4 november 2007, 14:57:25
av squiz3r
Nu är den klar, och verkar fungera bra
Jag testade den här inne nu igen, jag kunde gå ca. 15m ifrån den innan en vägg kom ivägen, och där va det inga problem för signalen att nå fram. Men sen testade jag den ute i dagsljuset, och då nådde den bara ca. 9m. Men det duger nog
--
Jag funderat på att bygge en sån liten sak som tar emot signalen och sen skickar vidare den, som en "mellan bas", så sätter man den imellan och kan på det viset öka räckvidden
Mvh
Postat: 4 november 2007, 14:59:34
av Icecap
Med ett par Easy Radio-moduler och ett par µC kan du skicka fjärrissignalerna 150-200m...