AVR410: RC5 IR Remote Control Receiver, and to analyze the pulse train a rather complicated program (not tested) has been published on Arduino playground. http://extremeelectronics.co.in/code-libraries/using-ir-remote-with-avr-mcus-part-ii/
Het RC5 protocol is niet makkelijk in software te vangen want de pulsen hebben een gelijke tijdsduur en moeten daarom worden onderzocht voordat u weet of er een 1 of een 0 ontvangen is. Het NEC protocol (ook wel Japanse protocol genoemd) is veel makkelijker in software te vangen want hierbij bepaalt de tijd tussen de pulsen of er een 1 of 0 is ontvangen. Dit is met een timer in een controller relatief gemakkelijk te meten. Om met dit protocol te kunnen werken dient u dus uw afstandsbediening in te stellen op een Japans apparaat (bijvoorbeeld: LG, JVC, Acorp, Hitachi, Nokia, Aiwa, Akai, AverMedia of NEC). De ontvanger werkt correct met de "Provision" universele afstandsbediening van Blokker (minder dan 10 EUR). Deze moet dan ingesteld worden door het TV knopje minimaal 5 seconden ingedrukt te houden totdat het ledje 2 keer kort knippert en vervolgens als code in te voeren: 499 (Hitachi). Het ledje zal daarna 2 keer kort oplichten ter bevestiging. Onderstaand een voorbeeld van een Japanse pulsetrain:

Gebruik.
De controller kan van te voren niet weten wanneer er een toets ingedrukt gaat worden. Daarom moet de TSOP worden aangesloten op een pin die een interrupt kan veroorzaken. Indien er ook sprake is van SPI communicatie tussen controllers moet de TSOP op de master controller worden geplaatst omdat dan de SPI communicatie foutloos zal blijven verlopen. Als aansluitpin moet de Input Capture Pin 1, ICP1, (D6 op de ATmega32) worden genomen. Deze moet worden ingesteld op falling edge herkenning. Deze edge wordt minimaal 4 clockcycles lang gemeten, anders is hij niet geldig als interrupt (Noise Capture Filter=On).Telkens als een burst wordt ontvangen wordt er een falling edge interrupt worden uitgevoerd. In deze interrupt wordt de counter uitgelezen en op 0 gezet om opnieuw te gaan tellen. De waarde van de counter bepaalt het verdere verloop:
1.bit =0 => 1,12 mS
2. bit =1 => 2,25 mS
3 startburst => 13,5 mS
4 verlopen (misschien niet nodig, door het tellen van bits)
http://www.scienceprog.com/ir-remote-control-signal-receiver-using-avr-microcontroller/
-
Software initialisatie.
De TSOP maakt een blokgolf op pin ICP1. Dit veroorzaakt bij het laag pullen een interrupt in Counter 1. De ATmega Counter werkt in de Normal Mode. De totale duur van 1 keer aan en uit (hoog en laag) heet de frequentie. MrBlue loopt op een 16 mHz kristal. Het instellen van CTC voor Timer 1 gebeurt door het schrijven van:
-
Timer Counter 1 Control Register A TCCR1A
-
bit 7,6 - COM1A1:COM1A0 Compare Output Mode for Compare unit A, 0:0 Normal Port Operation.
-
bit 5,4 - COM1B1:COM1B0 Compare Output Mode for Compare unit B, 0:0 Normal Port Operation.
-
bit 3,2 - FOC1A:FOC1B Force Output Compare Mode for Compare unit A of B, 0:0
-
bit 1,0 - WGM11:WGM10 Waveform Generation Mode, 0:0 Normal.
-
Timer Counter 1 Control Register B TCCR1B
-
bit 7 - ICNC1 Input Capture Noise Canceller, 1 ICP1 is Filtered.
-
bit 6 - ICES1 Input Capture Edge Select, 0 Falling edge is trigger.
-
bit 5 - Reserved bit, 0 write to zero.
-
bit 4,3 - WGM13:WGM12 Waveform Generation Mode, 0:0 Normal.
-
bit 2:0 - CS12:CS11:CS10 Clock Select Prescaler, 101(1024 Default), 100(256) 011(64).
-
Timer Interrupt MaSK TIMSK
-
Bits die niet worden beschreven, mogen niet worden gewijzigd.
-
bit 5 - TICIE1 Timer/Counter1, Input Capture Interrupt Enable, 1 Connected to RC5 receiver TSOP.
-
bit 4 - OCIE1A Timer/Counter1, Output Compare A Match Interrupt Enable, 0.
-
bit 3 - OCIE1B Timer/Counter1, Output Compare B Match Interrupt Enable, 0.
-
bit 2 - TOIE1 Timer/Counter1, Overflow Interrupt Enable, 0.
-
I received an Arduino extension / breakout? with my sensor kit. Which frequency and how do I determinate it?
|