Hallo,

ich möchte euch meine neue Erweiterung zeigen. Es soll eine IR-Abstandmessung werden.

Ich verwende hierzu 4 Ports:

- 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

Der Code für das Testprogramm sieht so aus:
Code:
#include <nibobee/iodefs.h>
#include <nibobee/delay.h>
#include <nibobee/analog.h>
#include <nibobee/led.h>
#include <stdlib.h>

#define FALSE 0
#define TRUE 1

uint8_t objekt_sichtbar_rechts(uint8_t distance_r)
{
	uint16_t j,z;
	
	PORTA |= (1 << PA0);   // PA0 auf HIGH (LED ausschalten) 
   	DDRA |= (1 << DDA1);   // PA1 als Ausgang
   	PORTA &= ~(1 << PA1);   // PA1 auf LOW

	OCR2  = 254-distance_r;   // wenn OCR2=0xFE dann Objekt sehr nahe 
	z=0;
	for(j=0;j<30;j++) // loop time: 5ms
	{
		if (PINA & (1 << PA3))z++;
		delay(6); // 6*Sleep(6)=1ms
	}
	if (z>=29) return FALSE; // Objekt nicht gefunden
	else return TRUE;
}

uint8_t objekt_sichtbar_links(uint8_t distance_l)
{
	uint16_t i,y;

	PORTA |= (1 << PA1);    // PA1 auf HIGH (LED ausschalten)
   	DDRA |= (1 << DDA0);   // PA0 als Ausgang
   	PORTA &= ~(1 << PA0);   // PA0 auf LOW

	OCR2  = 254-distance_l;   // wenn OCR2=0xFE dann Objekt sehr nahe 
	y=0;
	for(i=0;i<30;i++) // loop time: 5ms
	{
		if (PINA & (1 << PA3))y++;
		delay(6); // 6*Sleep(6)=1ms
	}
	if (y>=29) return FALSE; // Objekt nicht gefunden
	else return TRUE;
}



uint8_t abstand_rechts()
{
	uint8_t k,n;
	
	k=255;
	for(n=0;n<8;n++)
	{
	  if (!objekt_sichtbar_rechts(n)) k=n; // solange kein Objekt, Distanz erhoehen
	}  
	return k;
}

uint8_t abstand_links()
{
	uint8_t l,m;
	
	l=255;
	for(m=0;m<8;m++)
	{
	  if (!objekt_sichtbar_links(m)) l=m; // solange kein Objekt, Distanz erhoehen
	}  
	return l;
}



/*************************************************************************

	Hauptprogramm

*************************************************************************/
int main(void)
{
   	led_init();
	uint8_t n,m;

   	while(1)
	{
	   	n=abstand_rechts();
	   	m=abstand_links();
	   		
		if ((n!=255) && (m!=255))
	   	{
	   		if (n<2) led_set(LED_R_RD, 1);
			if (m<2) led_set(LED_L_RD, 1);


			delay(10);
		}
	}

}
Das Problem ist nur - die IRLEDs leuchten nicht...

Kann mir jemand helfen?