<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[forum.rcl-radio.ru &mdash; Atmega88 + IR]]></title>
	<link rel="self" href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=484&amp;type=atom" />
	<updated>2022-03-19T15:03:17Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.rcl-radio.ru/viewtopic.php?id=484</id>
		<entry>
			<title type="html"><![CDATA[Atmega88 + IR]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=5543#p5543" />
			<content type="html"><![CDATA[<p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2022/03/dbeb764172faabdd21bec74b8e8fc995.png" alt="http://forum.rcl-radio.ru/uploads/images/2022/03/dbeb764172faabdd21bec74b8e8fc995.png" /></span> </p><br /><div class="codebox"><pre><code>#define IR_IN PC3

#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;
#include &lt;Wire_low.h&gt;         // http://forum.rcl-radio.ru/viewtopic.php?pid=5521#p5521
#include &lt;Lcd1602_i2c_low.h&gt;  // http://rcl-radio.ru/wp-content/uploads/2022/03/Lcd1602_i2c_low.zip
Lcd1602_i2c_low lcd(0x27);// адрес I2C

bool data[96],st,st1,raz;
uint32_t cod;
byte i1,i2,s;
unsigned long data_ir;

int main(){
  wire_set(12000000,100000); // тактовая частота контроллера, частота шины I2C
  lcd.setInit();
  lcd.Clear(); // очистка экрана
  lcd.led(1);  // включение и отключение подсветки экрана
  ////////// TIMER_1
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (12000000/((6749+1)x1)) = 562.5 mks
  OCR1A = 6749;
  TCCR1B |= (1 &lt;&lt; WGM12);
// Prescaler 1
  TCCR1B |= (1 &lt;&lt; CS10);
  TIMSK1 |= (1 &lt;&lt; OCIE1A);  
  sei();
  
  
while(1){  
    lcd.Curs(0,0);
    lcd.PrintString(&quot;IR_CODE&quot;);
 if(raz==1){
    lcd.Clear();
    data_ir = IR();
    String stringVar = String(data_ir, HEX);
    char charVar[10];
    stringVar.toCharArray(charVar, 10);
    lcd.Curs(1,0);
    lcd.PrintString(charVar);
    _delay_ms(200);
    }
    
  }}

ISR(TIMER1_COMPA_vect){
     if(((PINC &gt;&gt; IR_IN) &amp; 1)==0&amp;&amp;st==0&amp;&amp;raz==0){st=1;OCR1A = 6749;}
     if(st==1){s++;}
     if(s&gt;20&amp;&amp;((PINC &gt;&gt; IR_IN) &amp; 1)==0){st1=1;}   
     if(st1==1){data[i1]=((PINC &gt;&gt; IR_IN) &amp; 1);i1++;} 
     if(i1&gt;96){i1=0;s=0;st=0;raz=1;st1=0;TCCR1B &amp;= ~(1 &lt;&lt; CS10); }
     }

uint32_t IR(){
 _delay_ms(100);
 cod=0;i2=0;
 for(int ai=0;ai&lt;96;ai++){
   if(data[ai] + data[ai+2] == 2){cod += ((uint32_t)0 &lt;&lt; 31-i2);i2++;ai=ai+1;}
   if(data[ai] + data[ai+2] == 1){cod += ((uint32_t)1 &lt;&lt; 31-i2);i2++;ai=ai+3;}}
 raz=0;
 TCCR1B |= (1 &lt;&lt; CS10);OCR1A = 239;//50000 kHz
 if(cod==1||cod&gt;0x7fffffff){cod=0xFFFFFFFF;}
 return cod;}       </code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2022-03-19T15:03:17Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=5543#p5543</id>
		</entry>
</feed>
