Hallo Community!
Ich möchte einen hc-sr04 mit einem Atmega8 auslesen
es gibt ja ein paar programme dazu im Internet, die ich allerdings nicht zum laufen bekomme.
nun meine Frage: Warum geht das nicht so einfach wie im folgenden Code probiert?
also es lässt sich ohne Fehler Compilieren, danach leuchtet die LED allerdings nur rot.
das Programm soll die LED einschalten wenn etwas näher als 5 cm am Ultraschallsensor ist.
Trigger: PC0
Echo: PC1
LED: PC3
Ich hab denk ich alles durchprobiert und da schon einige Stunden dran geschwitzt ^^Code:#define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> #define ps 1024 //prescaler #define ss 343.2 //sound speed volatile uint16_t value; void timer_init(void){ TCCR0|=(1<<CS02)|(1<<CS00);//prescale for timer 1024 @16MHz } uint8_t HC_SR04(void) { //generate a trigger signal PORTC &= ~(1<<PC0); _delay_us(1); PORTC |= (1<<PC0); _delay_us(10); PORTC &= ~(1<<PC0); while(!(PINC & (1<<PC1))) { } //wait until echo pin be high TCNT0=0; while(PINC & (1<<PC1)) { } //count until echo pin be low return TCNT0*ps*(1/F_CPU)*ss*100; } void motorInit(void) { DDRD |= (1<<7) | (1<<6) | (1<<5); DDRB |= (1<<0); PORTD |= (1<<7); PORTB |= (1<<0); PORTD &= ~((1<<6) | (1<<5)); } int main(void) { motorInit(); //muss aufgrund der gegebenen Platine ausgeführt werden uint16_t y; DDRC |= (1<<3) | (1<<0); DDRC &= ~(1<<1); PORTC &= ~(1<<1); timer_init(); while(1) { y=HC_SR04(); if(y<5) { PORTC |= (1<<3); } else { PORTC &= ~(1<<3); } _delay_ms(1000); } }
würde mich sehr freuen, wenn mir jemand helfen kann!
Lukas







Zitieren


Lesezeichen