Hallo,
so ich bin nun schon fast fertig mit dem code für den Ultraschallentfernungsmesser. Nur eins fehlt noch, nämlich die Erkennung von einem timer Überlauf ( der 16 bit timer wird benutzt). Als Neuling bringe ich das nicht auf die Reihe ohne Hilfe. Hier mein Code:
Code:
unsigned int messen (void) {
unsigned int messwert;
TCNT1 = 0xBB80; /* Vorladen auf 48000 */
PORTC |= (1<<PC5); /* Senden */
TCCR1B = 0x2; /* timer starten und Vorteiler auf 8 setzen */
_wait_us(25);
PORTC &= ~(1<<PC5); /* Sender ausschalten*/
while (1) {
if(PINC & (1<<PINC4)) { /* Wenn Signal zurückkommt... */
TCCR1B = 0x0; /* Timer stoppen */
messwert = TCNT1 - 48000; /* Vorladewert wieder abziehen */
messwert *= 0.0172; /* In Sekunden umrechnen */
return messwert;
}
if (1*) { /* Abbruch bei timer Überlauf */
return 0;
}
}
}
Was noch wichtiges anzumerken ist:
Ich sende nur einen kurzen Impuls. Das wird später noch geändert werden ,falls sich rausstellen sollte, dass es nicht klappt.
Sind noch Fehler im Code? Und wie mache ich, dass er dort wo eine eins mit stern (1*, kein falschgeschriebener pointer ) in der If-Bedienung steht, der timer Überlauf erkannt wird und die Funktion 0 zurückgibt?
Lässt sich noch was optimieren?
danke schonmal im Vorraus für eure Hilfe
mfg
Lesezeichen