Banzai
07.05.2007, 23:50
Hallo Leutz,
nachdem ich mich überzeugt habe, dass mein SRF05 unter BÄHSCOM funktioniert, wollte ich das mal in C umsetzen.
Ich scheitere aber anscheinend an der Umschalterei beim Auslösen und Messen auf einem Pin.
/*PSEUDOCODE*/
/* SRF05 an PB2 */
void doUltra()
{
static int counter = 0;
DDRB |= (1<<PB2); // Ausgang
PORTB |= (1<<PB2); // High
/* Messvorgang? */
_delay_us(20); /* min 10µs sind gefordert */
PORTB &= ~(1<<PB2); // Low
DDRB &= ~(1<<PB2); // Eingang
PORTB |= (1<<PB2); // High (interner Pullup?) */
while( PINB & (1<<PB2) ); // auf Signal warten????
while(!(PINB & (1<<PB2)) // Zählen wielange High
counter++;
return counter;
}
Jedenfalls hängt sich die Funktion in der while-Schleife auf, anscheinend kommt kein Signal (auch wenn das Ding 20cm vor einer Wand steht!).
Das jetzt hier keine Zeit gemessen wird, sei mal vernachlässigt.
Hat jemand einen fertigen Code dafür? Wäre für jeden Tipp dankbar.
thx4answer
Banzai
nachdem ich mich überzeugt habe, dass mein SRF05 unter BÄHSCOM funktioniert, wollte ich das mal in C umsetzen.
Ich scheitere aber anscheinend an der Umschalterei beim Auslösen und Messen auf einem Pin.
/*PSEUDOCODE*/
/* SRF05 an PB2 */
void doUltra()
{
static int counter = 0;
DDRB |= (1<<PB2); // Ausgang
PORTB |= (1<<PB2); // High
/* Messvorgang? */
_delay_us(20); /* min 10µs sind gefordert */
PORTB &= ~(1<<PB2); // Low
DDRB &= ~(1<<PB2); // Eingang
PORTB |= (1<<PB2); // High (interner Pullup?) */
while( PINB & (1<<PB2) ); // auf Signal warten????
while(!(PINB & (1<<PB2)) // Zählen wielange High
counter++;
return counter;
}
Jedenfalls hängt sich die Funktion in der while-Schleife auf, anscheinend kommt kein Signal (auch wenn das Ding 20cm vor einer Wand steht!).
Das jetzt hier keine Zeit gemessen wird, sei mal vernachlässigt.
Hat jemand einen fertigen Code dafür? Wäre für jeden Tipp dankbar.
thx4answer
Banzai