Hallo zusammen,
ich habe mir von http://www.e-robotix.de/epages/61660837.sf die ATMEGA32 - Bluetooth - Platine gekauft und sie mit einer eigenen Erweiterung auf Basis der IR-Entfernungsmessung (sh. Anlage) ausgestattet.
Die PINs meiner Platine habe ich so belegt:
- Anoden beider IR-LEDs auf PIN21 (PD7) des ATMEGA32
- Kathode rechte IR-LED auf PIN2 (PB1) des ATMEGA32
- Kathode linke IR_LED auf PIN8 (PB7) des ATMEGA32
- OUT vom SFH5110 auf PIN7 (PB6) des ATMEGA32
Die Software sieht so aus (Codeschnipsel):
Code:
uint8_t objekt_sichtbar_rechts(uint8_t distance_r)
{
uint16_t j,z;
PORTB |= (1 << PB1); // PB1 auf HIGH (LED ausschalten)
DDRB |= (1 << DDB7); // Port B7 als Ausgang
PORTB &= ~(1 << PB7); // PB7 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 (PINB & (1 << PB6))z++;
Sleep(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;
PORTB |= (1 << PB7); // PB7 auf HIGH (LED ausschalten)
DDRB |= (1 << DDB1); // Port B1 als Ausgang
PORTB &= ~(1 << PB1); // PB1 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 (PINB & (1 << PB6))y++;
Sleep(6); // 6*Sleep(6)=1ms
}
if (y>=29) return FALSE; // Objekt nicht gefunden
else return TRUE;
}
So weit so gut, aber die Entfernungsmessung funktioniert nicht, auf OUT des SFH5110 messe ich z. B. keine Spannung.
Bitte um Tipps und Hinweise was ich hier falsch gemacht habe.
Lesezeichen