Wie kann ich am besten die Zeitmessen die vergeht wenn ich eine Echolotschaltung aktiviere und diese mir, entsprechend der Entfernung zu einem Hindernis und damit die Zeitverzögerung, auf PIN PD.5 ein einfaches TTL-Signal zurückliefert.
Zähler beim Absetzen des Impulses starten und beim Eintreffen der Antwort/des Echos wieder anhalten. Zähler läuft frei mit einer Dir bekannten und ausreichend hohen, aber nicht zu hohen Frequenz (nicht zu hoch wg. Zählerüberlauf).
>Zähler beim Absetzen des Impulses starten soweit kein Problem >und beim Eintreffen der Antwort/des Echos wieder anhalten. Da habe ich mein Problem da man auf PD.5 (AT90S2313) keinen Interrupt auslösen kann bzw. der Capture Pin PD.6(ICP) ist.
kannst du das programm so lannge anhalten, bis die messung zu ende ist?? wenn ja: while(PD6 == 1); time = counter;
noch was vergessen... sollten die zeiten etwas laennger dauern musst du in der TOV Interrupt routione dann eine variable immer eins hoch setzen ;) und unten das ganze addieren...
"Da habe ich mein Problem da man auf PD.5 (AT90S2313) keinen Interrupt auslösen kann bzw. der Capture Pin PD.6(ICP) ist." Wäre es nicht sinnvoller, erst über die benötigten Funktionen nachzudenken und dann den Schaltplan zu machen ? Peter
> Wäre es nicht sinnvoller, erst über die benötigten Funktionen nachzudenken und dann den Schaltplan zu machen? Da gebe ich dir Recht aber ich versuche eine besehende Schaltung um zu verwenden die Schaltung findet ihr hier http://icplan.de/seite16.htm. (Echolot -> http://www.icplan.de/ul2schs.gif Controllerschaltung -> http://www.icplan.de/ul2sens.gif) da ich diese Schaltung im Original habe und diese auch schon die Entfernung messen kann wollet ich mir nur ein neues Programm Schreiben da man leider den Original IC nicht auslesen kann um sich dann die Messfunktion bzw. das Drumherum an seine eigenen Bedürfnisse anpassen zu können.
Wenn ich richtig gerechnet habe, ist die maximale Zeit etwa 25ms. Und da nichts anderes zu tunb ist, kann man es wohl so machen, wie Jens123. Man kann ja noch einen Comparewert aufsetzen, damit das Programm nicht hängenbleibt, falls was kaputt ist. TCNT = 0; TIFR = 1<<OCF1A; while(1){ if( PIND & 1<<PD6 ){ time = TCNT0; break; } if( TIFR & 1<<OCF1A ){ // hier Fehlerbehandlung } } Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.