Hallo!
Ich habe mal deinen Code geflasht:
Bei diesem Programm leuchten zwar die LEDs wie vorgeschrieben, die IR-LEDs allerdings nicht. Die IR-LEDs sind alle richtig rum eingebaut und es gibt auch keine kalten Lötstellen. Danach habe ich mit dem Multimeter an den Anschlüssen von X1, X2 und X3 gemessen und festgestellt, dass dort überhaupt keine Spannung anliegt (bzw. 0,09 V).Code:// 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) #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(10000); // 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(5000); port_acs_led_l &= ~pin_acs_led_l; // linke IR-LED ausschalten leds(0); // LED1 zur Kontrolle ausschalten _delay_ms(3000); } return(0); }
Wie kann das sein?







Zitieren
Lesezeichen