Lab-irkit2: Unterschied zwischen den Versionen
Siro (Diskussion | Beiträge) K (kommt noch mehr... :)) |
D2ns (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(8 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 ( | * 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 | ||
* | * beliebig lange Codes (begrenzt durch Atmega SRAM) | ||
* unterschiedliche Ports verwenden, für die Kanäle | * unterschiedliche Ports verwenden, für die Kanäle | ||
== Funktionen == | |||
'''uint8_t ir_init(uint16_t freq, uint16_t pulselength)''' | |||
<br> | |||
Initialisiert die Timer und Ports, einstellbar sind Trägerfrequenz und bit-Pulslänge. | |||
<br> | |||
Parameter: | |||
* uint16_t freq | |||
* uint16_t pulselength | |||
return: | |||
* 0 : Fehler | |||
* 1 : Kein Fehler | |||
freq:<br> | |||
F_CPU/Trägerfrequenz<br> | |||
IR_FREQ30K = F_CPU/(30000)<br> | |||
<br> | |||
Vordefiniert:<br> | |||
* IR_FREQ30K | |||
* IR_FREQ33K | |||
* IR_FREQ36K | |||
* IR_FREQ38K | |||
* IR_FREQ40K | |||
* IR_FREQ56K | |||
pulselength:<br> | |||
bit-Pulslänge in Mikrosekunden, abhängig vom verwendeten Code, siehe [https://www.das-labor.org/trac/browser/microcontroller/src-atmel/scannergame/lab-irkit2.h lab-irkit2.h]!<br> | |||
Vordefiniert u.A.:<br> | |||
* IR_PhilipsRC5_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 | |||
* ... | |||
'''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 == | |||
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 | |||
} | |||
} |
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 } }