Hi,
sieh mal hier: http://www.nicai-systems.de/nibobee.html
Wird in C programmiert, Aufbauen (Löten) musst du ihn selbst - ist aber im Handbuch sehr gut erklärt. Und Erweiterungen gibt es auch schon einige.
Ein kleiner Beispielcode für den Betrieb eines Infrarotmodules:
// nibobee IR-LEDs an PA0 und PA1 im Wechsel mit 36kHz ansteuern 10.1.2010 mic
// https://www.roboternetz.de/phpBB2/ze...=479870#479870
// Die Anoden der rechten IR-LEDs hängen mit Vorwiderstand an PA0 (X1-AN0)
// Die Anoden der linken IR-LEDs hängen mit Vorwiderstand an PA1 (X1-AN1)
// Die Kathoden beider IR-LEDs sind mit PA3 (X3-AN3) verbunden
// Der Empfänger SFH5110 ist mit PA2 (X2-AN2) verbunden
#include <nibobee/iodefs.h>
#include <nibobee/delay.h>
#include <nibobee/led.h>
#include <stdlib.h>
#define FALSE (1==0)
#define TRUE (1==1)
int main(void)
{
led_init();
delay(2000); // wait4programmer
// Timer2-Setup für 72kHz
TCCR2 = (1 << WGM21) | (1 << CS20); // CTC-Mode, no prescaling, no OC2-PIN!
OCR2 = 208; // 36kHz @15MHz
DDRC |= (1<<PC4) | (1<<PC5); // Anoden der LEDs mit Vorwiderstand (??? Ohm) an PA0/1
PORTC &= ~((1<<PC4) | (1<<PC5)); // low = LEDs aus
DDRC &= ~(1<<PC6); // keine 72kHz-Ansteuerung
PORTC &= ~(1<<PC6); // deshalb Kathoden-Pin auf Ausgang ohne PullUp
if(TRUE) led_set(0,1); // true-Test
sei(); // und los
while(1)
{
DDRC |= (1<<PC6); // Trägerfrequenz an Kathoden einschalten
TIMSK |= (1 << OCIE2); // ISR aktivieren
led_set(2,1);
PORTC |= (1<<PC5); // rechte IR-LEDs einschalten
delay(1000); // zwei Sekunden mit 36kHz blinken
PORTC &= ~(1<<PC5); // IR-Leds wieder ausschalten
led_set(2,0);
led_set(1,1);
PORTC |= (1<<PC4); // dito für linke IR-LEDs
delay(1000);
PORTC &= ~(1<<PC4);
led_set(1,0);
TIMSK &= ~(1 << OCIE2); // ISR ausklinken
DDRC &= ~(1<<PC6); // keine Trägerfrequenz an Kathoden
PORTC &= ~(1<<PC6); // bedeutet alle IR-LEDS aus
led_set(LED_R_YE, 0); // Kontroll-LED aus
delay(2000); // zwei Sekunden dunkel
}
}
ISR (TIMER2_COMP_vect)
{
static uint8_t status=0;
if(status)
{
led_set(LED_R_YE, 1); // Kontroll-LED
PORTA |= (1<<PA3);
status=0;
}
else
{
led_set(LED_R_YE, 0);
PORTA &= ~(1<<PA3);
status=1;
}
}
Lesezeichen