Infrarood codes herkennen

Pagina: 1
Acties:
  • 828 views sinds 30-01-2008
  • Reageer

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 15-10-2025
Hey,

voor ons werk moeten wij een stukje software schrijven, die infrarood codes kan inleren en uitsturen.
Dit moet gebeuren met een Pocket Pc (pda), en het geheel gebeurd in C# (dit laatste doet er op dit moment niet veel toe).

Het lukt ons op dit moment om infrarood in ons programma binnen te krijgen, we krijgen een rits met bitjes/bytes binnen op het moment dat we bijvoorbeeld op een knop van een afstandsbediening drukken en hem bij de PDA houden.

Nu is het de bedoeling om uit deze rits bitjes en bytes, de juiste infrarood code te herkennen.
Van een RC5 code weten we dat hij uit 14 bits bestaat, met 2 startbits en eindbit, en dat het derde bit van opeenvolgende infrarood codes telkens wisselt (het togglebit).

We hebben vanmorgen al flink zitten nadenken over hoe we dit moeten gaan doen, maar we zijn nog niet echt uit over hoe we het (theoretisch) moeten gaan doen.

Ik vroeg me af of jullie hier misschien ervaring mee hebben, of misschien een idee hebben over hoe je zoiets in theorie aan zou kunnen pakken.

Het lijkt mij vrij lastig om uit een reeks tekens iets te herkennen dat meerdere malen voorkomt, omdat je van tevoren niet exact weet hoe dat waar je op wil gaan checken, eruit ziet.

  • ShellGhost
  • Registratie: Augustus 2001
  • Laatst online: 16-12-2021
Misschien heb je hier wat aan: http://www.irda.org/

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 15-10-2025
IrDA is toch een protocol binnen infrarood?

Wij willen puur infrarood herkennen, zoals van een tv afstandsbediening, stereotoren, of whatever. (het gaat om erg veel verschillende apparaten die we moeten kunnen inleren op het programma).

Maar in ieder geval bedankt :)

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Heb je dit topic al gelezen?

[ Voor 12% gewijzigd door jelmervos op 09-09-2005 12:21 ]

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18-04 23:33
Waarom ga je uit van de data die je hebt? Waarom ga je niet uit van de protocollen die je kent en kijk je of de data er aan voldoet. Het zou een hele vooruitgang zijn als je de afzonderlijke frames hebt btw.

[edit]
Die apparaten die jij opnoemt werken allemaal met RC5 volgens mij.

[ Voor 16% gewijzigd door farlane op 09-09-2005 12:27 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 15-10-2025
Deze apparaten werken wel met RC5, maar het kan goed mogelijk zijn dat we in de toekomst apparatuur tegen komen die met een ander protocol werken.

Nog een iets directere vraag; hoe komen we erachter of de baud rate goed staat?

Is er een formule om frequentie om te rekenen naar baud?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18-04 23:33
TangLeFuzZ schreef op vrijdag 09 september 2005 @ 15:55:
Is er een formule om frequentie om te rekenen naar baud?
Welke frequentie bedoel je?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
TangLeFuzZ schreef op vrijdag 09 september 2005 @ 15:55:
Is er een formule om frequentie om te rekenen naar baud?
Ja: 1 baud is 1 bit*Hz.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Bware81
  • Registratie: November 2002
  • Laatst online: 24-01-2022
zoek maar eens op RC6 want veel apparaten gebruiken dat tegenwoordig zoals de xbox bv.

je moet gewoon pollen op je infrarood en zodra er verandering optreed je data gaan verwerken als je 't protocol weet

de meeste apparaten sturen een signaal uit van rond de 37khz

AMD64 XP3000+, 1024MB Kingston, ASUS K8V deluxe SE, ATI Radeon 9800 pro Realtek8139 Nic, ITE RAID contr, 2x 80GB Maxtor,2x 160GB sataMaxtor, NEC1300a DVD-r, Samsung DVD/CD-r combo. 21inch crt Compaq


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Eigenlijk was het best makkelijk te vinden
http://www.clearwater.com.au/rc5/

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • vso
  • Registratie: Augustus 2001
  • Niet online

vso

tja...

handige link alleen ze hadden het e.a mogen verklaren betreft gebruik van oplossingen zoals FFT maar goed google = hulp
farlane schreef op vrijdag 09 september 2005 @ 12:26:
Waarom ga je uit van de data die je hebt? Waarom ga je niet uit van de protocollen die je kent en kijk je of de data er aan voldoet. Het zou een hele vooruitgang zijn als je de afzonderlijke frames hebt btw.
als je de bovenstaande link leest zou dat een hels karwei zijn als je alle codes apart zou moeten progammeren. al niet helemaal te spreken over de filter(s) zeker als je meerdere mensen hebt die met de afstands bediening zitten te rotzooien. deze manier zou misschien meer CPU kracht kosten dan noodzakelijk.
Bware81 schreef op vrijdag 09 september 2005 @ 18:36:
zoek maar eens op RC6 want veel apparaten gebruiken dat tegenwoordig zoals de xbox bv.

je moet gewoon pollen op je infrarood en zodra er verandering optreed je data gaan verwerken als je 't protocol weet

de meeste apparaten sturen een signaal uit van rond de 37khz
goede punten

tip 2: kijk eens naar de bluetooth kit van ??? BTkit waarop je analoge apparaten kan aansluiten bestuurbaar/data uitwisseling tussen bv gsm en een IR/analoog apparaat

tip3 http://www.lirc.org/ ? Linux infrarood Remote Control zeker dat je in de opensource meuk veel kan vinden. en dit staat al 99% volgens mij geprogammeerd dus ...


Wat doen jullie moeilijk ?
ik heb ooit ook zoiets moeten maken voor school theorie/simulatie met smalltalk/ en een produkt

de Theorie:
1) een IR signaal werkt met start/stop bit zodat begin+einde van de code bekend is
2) de ontvanger zet het om naar digitaal dus je werkt met bits ipv IR signalen
3) de toggle bit geeft aan dat bv geluid ingedrukt blijft en dus steeds harder/zachter moet
4) er is altijd IR storing
5) de verzender en de ontvanger gebruiken 1 type code die een afgesproken formaat is bv 2start en stop bits + 5 commandogroep-bits (tv/hifi etc) + toggle + 8functiebits (RC5)

het doel
- ontvang je een code ja/nee
- herken de ontvangen code rc5/rc6 etc
- decodeer de code naar type apparaat en functie + status (toggelbit change(s))

de rest
in het ideaale geval:
Alleen al op de bovenstaande informatie kan je al je "bitsets")oftewel een druk op 1 knop ontleden naar "code strings".
je kan een string dan vergelijken met de bekende codes dus is het 8,9 t/m kweet ik veel bits
dus 00????t/m?????00 waarbij 00 de start/stopbit is en de ??t/m?? de onbekende code
daaruit kan je al afleiden welk type code het is.
volgens mij moet je zelfs het verschil tussen data en afstandsbediening kunnen zien.

nadeel:
interferentie maakt het iets moeilijker.


dus met dit allemaal vind ik dat je beter had kunnen zoeken :D

Tja vanalles


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 15-10-2025
Bedankt voor jullie reacties, en sorry voor mijn late reactie. We zijn met wat tussenprojectjes bezig geweest en hebben dit daardoor even aan de kant moeten leggen.

Hebben aardig veel aan bovenstaande posts en links, het is me al een stuk duidelijker nu.

Echter, we zijn even een stap terug (of verder, ligt er aan hoe je het bekijkt) gegaan, en we proberen nu een rauw signaal van een afstandsbediening van een televisie na te maken, en die uit te sturen via de comm poort.

We hebben hier een oscilloscoop staan waarmee we het signaal bekijken, het signaal dat we uitsturen ziet er goed uit, maar het is veel te zwak.
Als we bijvoorbeeld Nevo erbij halen, dan zien we dat zij eenzelfde signaal uitsturen, maar dan VEEL sterker.

We gebruiken op dit moment een aantal coreDLL functies icm een DCB structure zoals hier staat aangegeven:
http://msdn.microsoft.com...vio/base/setcommstate.asp

Heeft iemand misschien enig idee, hoe we ons signaal zouden kunnen versterken?
We hebben al vrij veel geprobeerd door instellingen in het DCB structure te wijzigen, maar we krijgen hem niet sterker.

Een idee dat op dit moment bij ons speelt; zouden ze bij Nevo misschien dmv multithreading, op hetzelfde moment het signaal gewoon meerdere keren door de poort rammen, of is dit niet mogelijk?

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
:D
Nee, dat soort dingen doet absoluut niets. Een COM poort is simpelweg een lijst met bits, en een bit kun je niet op 2 krijgen, hoe hard je ook probeert.

De grote vraag is wat je precies bedoelt met signaalsterkte.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 15-10-2025
De sinus(osciliscoop) uit de Nevo applicatie is veel sterker dan de sinus die we zelf krijgen als we een reeds van byte's naar de output sturen

er moet dus iets zijn waardoor je de sterkte of de infrarood led harder laat branden ...

[ Voor 6% gewijzigd door TangLeFuzZ op 22-09-2005 13:14 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Sinus uit de applicatie? D'r komen bitten uit een seriele poort. Bovendien zeg je nog steeds niet hoe je die "sterkte" meet. Dat is geen term die je normaal gesproken voor een sinus gebruikt. Die wordt gekenmerkt door nulnivo, aplitude, frequentie en fase. ( N+A*sin(fi+f*t) )

Overigens: probeer je nu de comm poort (RS-232) of een IRDA poort?

[ Voor 14% gewijzigd door MSalters op 22-09-2005 15:22 ]

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Hertog
  • Registratie: Juni 2002
  • Laatst online: 07:36

Hertog

Aut bibat, aut abeat

MSalters schreef op donderdag 22 september 2005 @ 15:21:
Sinus uit de applicatie? D'r komen bitten uit een seriele poort. Bovendien zeg je nog steeds niet hoe je die "sterkte" meet. Dat is geen term die je normaal gesproken voor een sinus gebruikt. Die wordt gekenmerkt door nulnivo, aplitude, frequentie en fase. ( N+A*sin(fi+f*t) )

Overigens: probeer je nu de comm poort (RS-232) of een IRDA poort?
Volgens mij probeert ie met een op de RS-232 poort aangesloten IR-led codes uit te sturen. Dat signaal vangt ie op met een oscilloscoop en blijkt te zwak te zijn.

TS: Als dat inderdaad het geval is: ik heb zelf ook een IR-led aan een RS-232 poort proberen te hangen met verschillende op internet te vinden schakelingen en het is me nog niet gelukt het signaal sterk genoeg te krijgen om er mijn apparaten mee te bedienen. Maar als je inderdaad eenzelfde signaal ziet dat alleen te zwak is, is wat je uit stuurt wel goed, alleen de zend-schakeling niet. Als jij of iemand anders een betere schakeling weet houd ik me overigens van harte aanbevolen. :)

"Pray, v. To ask that the laws of the universe be annulled in behalf of a single petitioner, confessedly unworthy." --Ambrose Bierce, The Devil's Dictionary


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 18-04 05:37

alienfruit

the alien you never expected

Zo'n programma bestaat toch al voor de PcketPC? Ik heb het wel eens gezien op de PPC van een vriend. Werkte best aardig.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18-04 23:33
Als je de LED voedt vanuit de com poort krijg je het nooit sterker. Je moet dan een aparte voeding hebben en de seriele poort als schakelaar gebruiken.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 15-10-2025
We zijn op dit moment al een heel stuk verder. Het lukt ons om succesvol een infrarood code op te bouwen en uit te sturen via de com poort. (apparatuur aansturen is dus geen probleem meer).

Nu zijn we bezig met het lastigere deel van de opdracht, het inlezen.

Met de coredll functie ReadFile zijn we al een aardig eind gekomen, we krijgen al data binnen via de infrarood poort en kunnen deze data weergeven.

Het probleem is echter dat je met ReadFile geen nullen ziet. ReadFile leest immers niet 'niks' in, hij leest data in wanneer hij deze krijgt. Dus met readfile alles binnen halen vanaf het moment dat er 'iets' op de infrarood poort binnen komt, krijgen we niet wat we uiteindelijk willen, want we zullen ook de nullen in het signaal moeten weten.

In theorie denken we nu dat het volgende de juiste oplossing is:

(dit geld alleen voor RC5, waar we eerst mee willen beginnen in te lezen)

Een timer starten die elke 889 microseconden iets doet:
- Probeer met readfile data uit te lezen
- - Leest hij data: zet deze in een array
- - Leest hij geen data: zet een 0 in de array

In theorie lijkt me dit de beste manier, maar waarschijnlijk zie ik weer veel over het hoofd... hebben jullie misschien nog tips, of weten jullie een manier waarmee we dit zouden moeten doen?

Edit:

Een volgend probleem is dat met ReadFile elke 889 microsec iets uitlezen lastig wordt, aangezien je dan de commtimeout op 889 microsec zou moeten zetten, en die timeout kun je instellen op miliseconden, dus het is altijd minstens 1000 microsec.

[ Voor 10% gewijzigd door TangLeFuzZ op 12-12-2005 10:12 ]


  • El_kingo
  • Registratie: Mei 2002
  • Laatst online: 17-03-2025
RC5 (/6) codes zijn niet zo moeilijk om mee te werken, in feite is het RC5 signaal niets anders dan een manchester code (kun je daar ook op googlen :) )

RC5 codes voor resp. 1 of 0:
code:
1
2
3
4
5
6
7
8
Manchester codes
                   ___
  Logic one:      |
               ___|

               ___
  Logic zero:     |
                  |___


Om dus een logische nul te herkennen moet je dus gewoon kijken naar het omslagpunt van je signaal, gaat ie van laag naar hoog is het een (logische) 1, andersom een (logische) 0.
Pagina: 1