Forum: Mikrocontroller und Digitale Elektronik Timer Zeitmessung für Entfernungsmessung Ultraschall ATMEGA 8


von Lars O. (nelo)


Angehängte Dateien:

Lesenswert?

Hallo,
ich möchte mittels eines Ultraschallboards eine Entfernungsmesseung
machen. Dazu habe ich eine Schaltung die ein Ultraschallimpuls sendet 
sobald Sie 0V (Low Signal) hat. Der Ausgang dazu soll PD 6 sein.
Der Echo Eingang soll PD7 sind und wechselt von 5V auf 0V sobald das 
Signal empfangen wurde.

Die Schaltung habe ich gestetet und Funktioniert soweit sehr exakt.

Meine Frage nun her ob ich irgendwo einen denkfehler in meinem Code habe 
oder nicht.

Ich möchte mit dem PD6 mein Signal senden, warte durch eine Schleife 
eine kurze Zeit ab (Nachschwingen Ultraschallsender). Timer Starten und 
ihn mit PD7 wieder stoppen sobald das Signal empfangen wurde.
Timerinhalt in eine Variable kopieren mit der ich arbeiten kann....

C Code ist angehängt.

P.s. habe den Code um das unwesendliche gekürzt und bitte 
nichterschlagen bin noch anfänger.

Vielen Dank für eure Hilfe

von Stephan K. (stephan_k)


Lesenswert?

Du hast einen Denkfehler. ;-)
Man triggert den Ausgang. Sobald der Echo Pin auf high geht faengt man 
die Messung erst an und ermittelt dann, wie lange das Signal unterwegs 
ist. Du misst also im Moment nix, da du nach dem triggern deine Messung 
beginnst.
Hab ich auch falsch gemacht beim ersten mal.

von Lars O. (nelo)


Lesenswert?

Stephan K. schrieb:
> nach dem triggern deine Messung
>
> beginnst.

Also setzte ich den Ausgang(PD6) auf Low, Trigger das nachschwingen des 
Senders, Starte den Timer und warte auf das Low im Eingang (PD7) um den 
Timer zu Stoppen?

Falls ich dich noch immer falsch verstanden habe kannst du mir kurz ein 
Beispiel geben? mein Kopf ist momentan leider nicht mehr ganz da... ;-)

Danke aber schon mal ...

von Lars O. (nelo)


Lesenswert?

Kann mir bitte jemand helfen ?
Ich hab versucht das umzusetzen aber bekomme keinen wert mehr 
ausgegeben.

Vielen lieben dank

von nicht gast (Gast)


Lesenswert?

1
for (i=0; i<x; i++)                    // Ein Durchgang er Schleife dauert bei 8Mhz 0,75us also 200,25us
2
    asm volatile("nop");           // Warte einen Prozessortakt
Das lieber ganz in Assembler machen, da ein anderer Compiler, dass 
anders übersetzen könnte.

von Lars O. (nelo)


Lesenswert?

Ist denn der Rest vom Aufbau her so ok ?
Entweder nehme ich den Wert falsch aus meiner Funktion oder mache dann 
sonst was falsch da mein Atmega8 solbald die Messfunktion aufgerufen 
wird aussteigt....

MFG

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
Noch kein Account? Hier anmelden.