Lab-irkit2: Unterschied zwischen den Versionen

Aus LaborWiki
Wechseln zu: Navigation, Suche
K (added more documentation... still not done everything)
K (more doku will follow)
Zeile 23: Zeile 23:
== Funktionen ==
== Funktionen ==


'''uint8_t ir_freqInit(uint16_t freq, uint16_t pulselength)'''
'''uint8_t ir_init((uint16_t freq, uint16_t pulselength)'''
<br>
<br>
Initialisiert die Timer, einstellbar sind Trägerfrequenz und bit-Pulslänge.
Initialisiert die Timer und Ports, einstellbar sind Trägerfrequenz und bit-Pulslänge.
<br>
<br>
Parameter:
Parameter:
Zeile 50: Zeile 50:
* IR_PhilipsRC5_pulselength
* IR_PhilipsRC5_pulselength
* IR_SIRC_pulselength
* IR_SIRC_pulselength
* ...
'''void ir_disable(void)'''<br>
Stoppt sofort den Sendevorgang auf allen Kanälen, schaltet alle Timer aus.<br>
<br>
'''uint8_t ir_genHeader(uint8_t channel, uint32_t headerCode, uint8_t headerLen)'''<br>
Generiert einen IR Header auf dem ausgewählten Kanal.<br>
Parameter:
* uint8_t channel
* uint32_t headerCode
* uint8_t headerLen
return:
* 0 : Fehler
* 1 : Kein Fehler
channel:<br>
Gültige Werte: 0..7<br>
<br>
headerCode:<br>
Gültiger Wert: >0<br>
Bitcode des Headers.<br>
Vordefinierte HeaderCode u.A.:<br>
* IR_PhilipsRC6_header
* IR_SIRC_header
* ...
headerLength:<br>
Länge des Headercodes in bit.<br>
Gültige Werte: 1..32<br>
Vordefinierte HeaderCodelength u.A.:<br>
* IR_PhilipsRC6_headerlength
* IR_SIRC_headerlength
* ...
* ...



Version vom 13. November 2010, 18:45 Uhr

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_init((uint16_t freq, uint16_t pulselength)
Initialisiert die Timer und Ports, 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
  • ...

void ir_disable(void)
Stoppt sofort den Sendevorgang auf allen Kanälen, schaltet alle Timer aus.

uint8_t ir_genHeader(uint8_t channel, uint32_t headerCode, uint8_t headerLen)
Generiert einen IR Header auf dem ausgewählten Kanal.
Parameter:

  • uint8_t channel
  • uint32_t headerCode
  • uint8_t headerLen

return:

  • 0 : Fehler
  • 1 : Kein Fehler

channel:
Gültige Werte: 0..7

headerCode:
Gültiger Wert: >0
Bitcode des Headers.
Vordefinierte HeaderCode u.A.:

  • IR_PhilipsRC6_header
  • IR_SIRC_header
  • ...

headerLength:
Länge des Headercodes in bit.
Gültige Werte: 1..32
Vordefinierte HeaderCodelength u.A.:

  • IR_PhilipsRC6_headerlength
  • IR_SIRC_headerlength
  • ...

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
}
}