Lab-irkit2

Aus LaborWiki
Version vom 13. November 2010, 18:34 Uhr von Siro (Diskussion | Beiträge) (added more documentation... still not done everything)
Wechseln zu: Navigation, Suche

Diese Seite beschäftigt sich mit CanIR Version 2

Quellcode Dateien:

lab-irkit2.c
lab-irkit2.h

Was kann diese lib?

Was geht:

  • beliebige Taktquelle (Quarz > 10 Mhz empfohlen)
  • alle standart IR Trägerfrequenzen (30khHz, 33kHz ,36kHz ,38kHz ,40kHz ,50kHz)
  • beliebige selbstdefinierbare Trägerfrequenzen
  • bis zu 8 Kanäle gleichzeitig (selbe Trägerfrequenz, vielfaches der Bit-pulslänge)
  • vordefinierte Standartcodes NEC, Sharp, Philips, ....
  • einstellbare Pulsbreite (für LEDs, die mit Pulsstrom versorgt werden, std. 10% Pulsbreite)
  • nicht benutzte Känale sind freie Pins (werden nicht angesteuert)

Was geht nicht:

  • Timer0 & Timer1 benutzen (wenn ein Code gesendet wird)
  • Auf verschiedenen Kanälen gleichzeitig unterschiedliche Trägerfrequenzen
  • mehr als 32bit lange Codes
  • unterschiedliche Ports verwenden, für die Kanäle

Funktionen

uint8_t ir_freqInit(uint16_t freq, uint16_t pulselength)
Initialisiert die Timer, einstellbar sind Trägerfrequenz und bit-Pulslänge.
Parameter:

  • uint16_t freq
  • uint16_t pulselength

return:

  • 0 : Fehler
  • 1 : Kein Fehler

freq:
F_CPU/Trägerfrequenz
IR_FREQ30K = F_CPU/(30000)

Vordefiniert:

  • IR_FREQ30K
  • IR_FREQ33K
  • IR_FREQ36K
  • IR_FREQ38K
  • IR_FREQ40K
  • IR_FREQ56K

pulselength:
bit-Pulslänge in Mikrosekunden, abhängig vom verwendeten Code, siehe lab-irkit2.h!
Vordefiniert u.A.:

  • IR_PhilipsRC5_pulselength
  • IR_SIRC_pulselength
  • ...

Beispielquelltext

Code example:

#include <stdio.h>
#include <stdlib.h>
#include "lab-irkit2.h"
int main(void)
{
//initialize ir subsystem
ir_init(IR_NEC_Carrier, IR_NEC_pulselength); //initialize the IR subsystem
uint8_t codelength=0;  //store the generated code length
ir_genHeader(0, IR_NEC_header, IR_NEC_headerlength);  //generate header
codelength=ir_genCode(IR_NEC_headerlength,0,IR_NEC_oneCode,IR_NEC_oneCodelength,IR_NEC_zeroCode,IR_NEC_zeroCodelength,0b00010000110010001110000100011110, 32);  //generate code
while (1)
{	
ir_sendCode(codelength);  //transmit code
}
}