Problema na faixa de infravermelho após codificação da taxa de intermitência / diferença e taxa para TSOP1236


0

Programei um ATTINY13 para acionar um led IR em 36kHz com este código:

void setup(){
  DDRB |= (1<<PB0); //Set pin PB0 as output
  //DDRB |= (1<<PB1); //Set pin PB1 as output
  TCNT0 = 0;
  TCCR0A = 0;
  TCCR0B = 0;

  TCCR0A |=(1<<COM0A0); //Timer0 in toggle mode Table 11-2
  TCCR0A |=(1<<WGM01); //Start timer 1 in CTC mode Table 11.5
  TCCR0B |= (1 << CS00);// Prescaler table 11.6
  OCR0A=110; //CTC Compare value, 36khz
}

void loop(){ //cycle = 1/36 = 28μs

 for (int i=0; i<10; i++) { //burst of 10 cycles
  TCCR0A |=(1<<COM0A0); //on for 14μs
    delayMicroseconds(14); 
  TCCR0A &= ~(1<<COM0A0); //off for 14μs
  delayMicroseconds(14);
 }
  delayMicroseconds(392); //gap of 14 cycles
}

A função de loop é baseada na folha de dados do TSOP1236 sobre taxa e taxa de burst / gap:

• A frequência da portadora deve estar próxima da frequência central do passe de banda (por exemplo, 36 kHz). • O comprimento da rajada deve ser 10 ciclos / rajada ou mais. • Após cada rajada entre 10 e 70 ciclos, é necessário um intervalo de pelo menos 14 ciclos. • Para cada rajada com mais de 1,8 ms, é necessário um tempo de intervalo correspondente em algum momento no fluxo de dados. Esse intervalo deve ser pelo menos 4 vezes maior que o burst. • Até 800 rajadas curtas por segundo podem ser recebidas continuamente.

Estou recebendo leituras agora no final do receptor, usando o Arduino e um attachInterrupt ().

Eu postei uma pergunta aqui sobre isso. Ele ganhou o prêmio tumbleweed, mas eu parecia ter encontrado a resposta.

No entanto, o alcance diminuiu significativamente de alguns metros, quando eu estava ultrapassando o LED e não estava usando lacunas, para cerca de 30 centímetros agora. Também não é muito estável; às vezes não relata uma quebra de feixe, às vezes relata.

Eu só preciso de um metro. O que estou fazendo errado?

Respostas:


1

Você está inicializando o timer para gerar uma portadora de 36 kHz. No loop for, você liga e desliga o timer 10 vezes para o pino de saída de comparação no período de 28us - ou 36kHz. Obviamente, isso não funciona, modulando-o duas vezes. Basta conectá-lo, deixá-lo ligado por mais de 10 ciclos, como 500 nós, e desconectá-lo, por exemplo, 1000 nós.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.