Lab-irkit2: Unterschied zwischen den Versionen

Aus LaborWiki
Wechseln zu: Navigation, Suche
K (more doku will follow)
Keine Bearbeitungszusammenfassung
 
(6 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{ProjektInfoBox
|name=Lab-irkit2
|status=unknown
|description=Diese Seite beschäftigt sich mit CanIR Version 2
|tags=Labor Automation,
|update=
}}
== Diese Seite beschäftigt sich mit CanIR Version 2 ==
== Diese Seite beschäftigt sich mit CanIR Version 2 ==
Quellcode Dateien:
Quellcode Dateien:
Zeile 8: Zeile 15:
Was geht:
Was geht:
* beliebige Taktquelle (Quarz > 10 Mhz empfohlen)
* beliebige Taktquelle (Quarz > 10 Mhz empfohlen)
* alle standart IR Trägerfrequenzen (30khHz, 33kHz ,36kHz ,38kHz ,40kHz ,50kHz)
* alle standart IR Trägerfrequenzen (30kHz, 33kHz ,36kHz ,38kHz ,40kHz ,50kHz)
* beliebige selbstdefinierbare Trägerfrequenzen
* beliebige selbstdefinierbare Trägerfrequenzen
* bis zu 8 Kanäle gleichzeitig (selbe Trägerfrequenz, vielfaches der Bit-pulslänge)
* bis zu 8 Kanäle gleichzeitig (selbe Trägerfrequenz, vielfaches der Bit-pulslänge)
Zeile 18: Zeile 25:
* Timer0 & Timer1 benutzen (wenn ein Code gesendet wird)
* Timer0 & Timer1 benutzen (wenn ein Code gesendet wird)
* Auf verschiedenen Kanälen gleichzeitig unterschiedliche Trägerfrequenzen
* Auf verschiedenen Kanälen gleichzeitig unterschiedliche Trägerfrequenzen
* mehr als 32bit lange Codes
* beliebig lange Codes (begrenzt durch Atmega SRAM)
* unterschiedliche Ports verwenden, für die Kanäle
* unterschiedliche Ports verwenden, für die Kanäle


== Funktionen ==
== Funktionen ==


'''uint8_t ir_init((uint16_t freq, uint16_t pulselength)'''
'''uint8_t ir_init(uint16_t freq, uint16_t pulselength)'''
<br>
<br>
Initialisiert die Timer und Ports, einstellbar sind Trägerfrequenz und bit-Pulslänge.
Initialisiert die Timer und Ports, einstellbar sind Trägerfrequenz und bit-Pulslänge.
Zeile 83: Zeile 90:
* IR_SIRC_headerlength
* IR_SIRC_headerlength
* ...
* ...
'''uint16_t ir_genCode(uint8_t headerlength, uint8_t channel, uint8_t oneCode, uint8_t oneCode_length, uint8_t zeroCode,uint8_t zeroCode_length, uint32_t bitCode, uint8_t codeLen)'''<br>
Diese Funktion erzeugt aus dem Codespezifischen Bitmustern das intern von Lab-irkit2 verwendete Format und legt die Daten im SRAM ab.<br>Sobald die Daten erzeugt wurden können diese immer wieder mit '''ir_sendCode(uint16_t codelength)''' gesendet werden.<br>
Parameter:
* uint8_t headerlength
* uint8_t channel
* uint8_t oneCode
* uint8_t oneCode_length
* uint8_t zeroCode
* uint8_t zeroCode_length
* uint32_t bitCode
* uint8_t codeLen
return:
* uint16_t codelength
headerlength, oneCode, oneCode_length, zeroCode, zeroCode_length sind Codespezifisch<br>
benutze einfach die vordefinierten Werte aus [https://www.das-labor.org/trac/browser/microcontroller/src-atmel/scannergame/lab-irkit2.h lab-irkit2.h]<br>
<br>
bitcode:<br>
Der zu sendende Code als Bitmuster. Max 32 Zeichen, muss größer 0 sein<br>
<br>
codeLen:<br>
Länge des zu sendenden Codes. Muss größer 0 sein und kleiner 33<br>
<br>
channel:<br>
Der Kanal auf dem gesendet werden soll. Gültige Werte: 0..7<br>
<br>
'''void ir_sendCode(uint16_t codeLen)'''<br>
Parameter:<br>
* uint16_t codeLen<br>
codeLen:<br>
Länge des zu sendenden Codes, dieser Wert wurde von '''ir_genCode''' erzeugt. Werden verschiedene Codes gesendet, den größten zurückgegebenen Wert nehmen !<br>
Sendet auf allen Kanälen die vorher generierten IR Codes aus.<br>
Diese Funktion startet nur die Timer, es kann in der Hauptroutine weitergerechnet werden! <br>
== Wichtige Definitionen ==
//define output PORT
#define IRPORT PORTD
#define IRDDR DDRD
#define IRUSEDPORTS 0x3
//define how long a carrier pulse last 0..1
//select 0.5 for normal LED mode or
//less values if you overcurrent the IR LEDs
#define IR_pulse_width 0.1f
//max SRAM usage
#define IR_MAX_SRAM 512


== Beispielquelltext ==
== Beispielquelltext ==
Zeile 93: Zeile 150:
  //initialize ir subsystem
  //initialize ir subsystem
  ir_init(IR_NEC_Carrier, IR_NEC_pulselength); //initialize the IR subsystem
  ir_init(IR_NEC_Carrier, IR_NEC_pulselength); //initialize the IR subsystem
  uint8_t codelength=0;  //store the generated code length
  uint16_t codelength=0;  //store the generated code length
  ir_genHeader(0, IR_NEC_header, IR_NEC_headerlength);  //generate header
  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
  codelength=ir_genCode(IR_NEC_headerlength,0,IR_NEC_oneCode,IR_NEC_oneCodelength,IR_NEC_zeroCode,IR_NEC_zeroCodelength,0b00010000110010001110000100011110, 32);  //generate code
Zeile 99: Zeile 156:
  {
  {
  ir_sendCode(codelength);  //transmit code
  ir_sendCode(codelength);  //transmit code
wait(50); //wait a long time, we dont want to start the transmition every cycle
  }
  }
  }
  }

Aktuelle Version vom 8. April 2017, 00:16 Uhr

Lab-irkit2

Release status: unknown [box doku]

Description Diese Seite beschäftigt sich mit CanIR Version 2



Diese Seite beschäftigt sich mit CanIR Version 2[Bearbeiten | Quelltext bearbeiten]

Quellcode Dateien:

lab-irkit2.c
lab-irkit2.h

Was kann diese lib?[Bearbeiten | Quelltext bearbeiten]

Was geht:

  • beliebige Taktquelle (Quarz > 10 Mhz empfohlen)
  • alle standart IR Trägerfrequenzen (30kHz, 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
  • beliebig lange Codes (begrenzt durch Atmega SRAM)
  • unterschiedliche Ports verwenden, für die Kanäle

Funktionen[Bearbeiten | Quelltext bearbeiten]

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
  • ...

uint16_t ir_genCode(uint8_t headerlength, uint8_t channel, uint8_t oneCode, uint8_t oneCode_length, uint8_t zeroCode,uint8_t zeroCode_length, uint32_t bitCode, uint8_t codeLen)
Diese Funktion erzeugt aus dem Codespezifischen Bitmustern das intern von Lab-irkit2 verwendete Format und legt die Daten im SRAM ab.
Sobald die Daten erzeugt wurden können diese immer wieder mit ir_sendCode(uint16_t codelength) gesendet werden.

Parameter:

  • uint8_t headerlength
  • uint8_t channel
  • uint8_t oneCode
  • uint8_t oneCode_length
  • uint8_t zeroCode
  • uint8_t zeroCode_length
  • uint32_t bitCode
  • uint8_t codeLen

return:

  • uint16_t codelength

headerlength, oneCode, oneCode_length, zeroCode, zeroCode_length sind Codespezifisch
benutze einfach die vordefinierten Werte aus lab-irkit2.h

bitcode:
Der zu sendende Code als Bitmuster. Max 32 Zeichen, muss größer 0 sein

codeLen:
Länge des zu sendenden Codes. Muss größer 0 sein und kleiner 33

channel:
Der Kanal auf dem gesendet werden soll. Gültige Werte: 0..7

void ir_sendCode(uint16_t codeLen)
Parameter:

  • uint16_t codeLen

codeLen:
Länge des zu sendenden Codes, dieser Wert wurde von ir_genCode erzeugt. Werden verschiedene Codes gesendet, den größten zurückgegebenen Wert nehmen !
Sendet auf allen Kanälen die vorher generierten IR Codes aus.
Diese Funktion startet nur die Timer, es kann in der Hauptroutine weitergerechnet werden!

Wichtige Definitionen[Bearbeiten | Quelltext bearbeiten]

//define output PORT
#define IRPORT PORTD
#define IRDDR DDRD
#define IRUSEDPORTS 0x3 
//define how long a carrier pulse last 0..1
//select 0.5 for normal LED mode or
//less values if you overcurrent the IR LEDs 
#define IR_pulse_width 0.1f
//max SRAM usage
#define IR_MAX_SRAM 512

Beispielquelltext[Bearbeiten | Quelltext bearbeiten]

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
uint16_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
wait(50); //wait a long time, we dont want to start the transmition every cycle
}
}