Hallo
Prima, allerdings scheint mir der 470er etwas groß. Aber vielleicht ist das auch ein Vorteil weil das ACS dann nicht so empfindlich ist.
Ich habe meine bee jetzt reaktiviert und ein kleines Demo zusammengebastelt. Da mir die Library der bee noch nie gefallen hat, und als kleine Herausforderung für mich, verzichte ich vorerst auf den Einsatz der Lib. Ich hoffe, die Funktionen sind trotzdem nachvollziehbar.
Da meine ACS-Erweiterung andere Pins verwendet habe ich die #defines auch für meine bee eingefügt und auskommentiert. Diese Version sollte deshalb auf deiner bee funktionieren:
PHP-Code:
// Übungen für ACS an Nibobee 9.6.11 mic
// https://www.roboternetz.de/community/showthread.php?53494-ACS-an-NIBObee
// 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 IR-Empfänger ist mit PA2 (X2-AN2) verbunden
// pacman-bee
#define ddr_acs_led_l DDRA // Anoden der IR-LEDs links
#define port_acs_led_l PORTA
#define pin_acs_led_l (1<<PA1)
#define ddr_acs_led_r DDRA // rechts
#define port_acs_led_r PORTA
#define pin_acs_led_r (1<<PA0)
#define ddr_acs_36kHz DDRA // Kathoden der IR-LEDS mit 36kHz getaktet
#define port_acs_36kHz PORTA
#define pin_acs_36kHz (1<<PA3)
#define ddr_acs_tsop DDRA // Eingang IR-Empfänger
#define port_acs_tsop PINA // Achtung, das ist ein Eingang!
#define pin_acs_tsop (1<<PA2)
/*
// radbruch-bee
#define ddr_acs_led_l DDRA // Anoden der IR-LEDs links
#define port_acs_led_l PORTA
#define pin_acs_led_l (1<<PA2)
#define ddr_acs_led_r DDRA // rechts
#define port_acs_led_r PORTA
#define pin_acs_led_r (1<<PA3)
#define ddr_acs_36kHz DDRC // Kathoden der IR-LEDS mit 36kHz getaktet
#define port_acs_36kHz PORTC
#define pin_acs_36kHz (1<<PC2)
#define ddr_acs_tsop DDRC // Eingang IR-Empfänger
#define port_acs_tsop PINC // Achtung, das ist ein Eingang!
#define pin_acs_tsop (1<<PC3)
*/
#include <avr/io.h>
#include <util/delay.h>
void leds(uint8_t status) // status bit0 bis 3 entspricht den LED0 bis 3
{
PORTB &= 0b11110000; // alle LED ausschalten
PORTB |= 0b1111 & status; // gewünschte LED einschalten
}
int main(void)
{
DDRB |= 0b1111; // PB0 bis PB3 sind die LED 0 bis 3
leds(0b1001); // LED 0 und 3 einschalten
_delay_ms(1000); // eine Sekunde warten
leds(0); // alle LED ausschalten
ddr_acs_led_l |= pin_acs_led_l; // linke ACS-LED Anode
ddr_acs_36kHz |= pin_acs_36kHz; // Kathoden beide LED
port_acs_36kHz &= ~pin_acs_36kHz; // Dauerlicht
while(1)
{
port_acs_led_l |= pin_acs_led_l; // linke IR-LED anschalten
leds(0b0010); // LED1 zur Kontrolle einschalten
_delay_ms(500);
port_acs_led_l &= ~pin_acs_led_l; // linke IR-LED ausschalten
leds(0); // LED1 zur Kontrolle ausschalten
_delay_ms(300);
}
return(0);
}
Gruß
mic
Lesezeichen