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:
Das Problem ist nur - die IRLEDs leuchten nicht...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); } } }
Kann mir jemand helfen?







Zitieren

Lesezeichen