der Timer 1 läuft mit Prescaler 64, die Ergebnisse sind dann in mm.Code:uint16_t getAbstand(uint8_t sensor) { //Ultrschallsensoren abfragen uint8_t tmp_sreg; tmp_sreg = SREG; cli(); uint16_t ergebnis; DDRC |= sensor; //Ausgang high PORTC |= sensor; _delay_us(20); PORTC &= ~sensor; //Pin auf Eingang setzen DDRC &= ~sensor; while(!(PINC & sensor)); //auf Sensorantwort warten TCNT1 = 0; //Counter Register auf 0 setzen while(PINC & sensor); //warten bis Signalende ergebnis=TCNT1; //Signallänge auslesen ergebnis=ergebnis*20; //Abstand berechnen SREG=tmp_sreg; return (uint16_t) ergebnis/29; }
Lesezeichen