Forum: Compiler & IDEs Problem bei Pulslänge messen ATMega32


von Tobi (Gast)


Angehängte Dateien:

Lesenswert?

Moin

Ich habe da so mein Probleme die Länge eines Impulses zu messen. Ich hab 
auch schon dieverse Beiträge durchgesucht und versucht damit mein 
Problem zu lösen, was leider nicht geklappt hat :( Deswegen hoff ich das 
mir jemande hier helfen kann.
Ich verwende einen ATMega 32 bei 1MHz
Also mein Problem. Ich habe mir ein Ultraschallmesser SRF05 gekauft. Um 
die Messung zu aktivieren, muss ein min 10µs langer Impuls gesendet 
werden und dann muss der Port auf Eingang geschaltet werden. Das Klappt 
auch alles soweit und ich bekomme auch Zeiten ausgegeben, aber nicht 
die, die ich erhofft habe.
Der Impuls der vom SRF05 ausgesendet wird ist zwischen 100µs bis 25ms 
lang. Jenachden wie weit das Objekt weg ist, umsolänger ist auch der 
Impuls. Teilt man die Impulslänge durch 58, so soll das ergebniss in cm 
rauskommen. Leider Klappt das nicht. und ich weiß nicht vorran das lieg. 
die Ergebnisse stimmen nicht mit der Tatsächlichen Entfernung ein.
Vielleicht hab ich ja irgendwo ein fehler drin. Hoffentlich kann mir 
jemand helfen. Wäre euch sehr dankbar.

Gruß Tobi

von Tobi (Gast)


Lesenswert?

Schade. weiß keiner wo mein problem ist?

mfg tobi

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Nach Umkonfigurierung von Timer1 die IRQ-Flags zurücksetzen?

Der Verwending von Timer1 schein etwas zerfrickelt zu sein. Du willst 
doch ständig messen und nicht nur 1x? AM besten ginge das über 2 Timer: 
Timer1 macht den InCapt und ein anderer die Zeit.

Zudem versteh ich nicht, warum die Länge des Echos von den Entfernung 
abhängen soll? Die Zeit, bis man das Echo hört, sollte davon abhängen...

Johann

von Stefan E. (sternst)


Lesenswert?

1
volatile int i[5],j=0;
->
1
volatile unsigned char j;
2
unsigned int i[5];
und
itoa -> utoa

von Stefan E. (sternst)


Lesenswert?

Johann L. wrote:

> Zudem versteh ich nicht, warum die Länge des Echos von den Entfernung
> abhängen soll? Die Zeit, bis man das Echo hört, sollte davon abhängen...

Ne, das ist ein Ultraschallmesser mit "Eigenintelligenz". Der gibt das 
Messergebnis als längencodierten Pulse aus.

von Stefan E. (sternst)


Lesenswert?

Für die 10 µS würde ich übrigens einfach nur ein _delay_us nehmen (aber 
natürlich nicht mit 10, sondern etwas mehr).

von STK500-Besitzer (Gast)


Lesenswert?

Man kann das Ding komplett mit einem Timer erschlagen.
Für den ICP lässt man den Timer konstant durchlaufen.
Beim Overflow-Interrupt setzt man den Pin auf Senden.
Im OCR steht dann 10 für 10 µs bei 1MHz Timer-Frequenz.
In der OCR-ISR schaltet man den Pin dann auf Empfang, da zu diesem 
Zeitpunkt der Sendepuls fertig sein soll.
Die ICP-Flanke müsste zu diesem Zeitpunkt auf steigende Flanke 
eingesetellt sein. Sobald die ICP-ISR aufgerufen wird, sichert man das 
ICR und schaltet die Flankendetektionsrichtung um auf fallende Flanke.
Wenn die ICP-ISR wieder aufgerufen wird, sichert man auch wieder das ICR 
(input Capture Register); diesmal in einer anderen Variablen.
Um die Pulsdauer herauszubekommen, subtrahiert man den ersten Wert vom 
zweiten. Dabei ist es egal, ob es zwischendurch einen Überlauf gab oder 
nicht.  Das geht deswegen, weil der Zahlenraum begrenzt ist (auf Papier 
ausprobieren, falls dasnicht klar geworden ist.)
Dann sollte man zu sinnvollen Ergebnissen kommen.

http://www.robotikhardware.de/download/srf05doku.pdf

enhält ja auch ein Bascom Bespiel...

von Tobi (Gast)


Lesenswert?

danke für die antworten. ich werde es mal ausprobieren und sagen obs 
dann klappt oder nicht.

mfg tobi

von Gast (Gast)


Lesenswert?

Bedenke auch die Schallgeschwindigkeit, die immer von der Temperatur 
abhängig ist, was die Genauigkeit beeinflußt. Das Mosul scheint mir 
keinen Sensor zur Temperaturkompensation zu haben.

http://www.sengpielaudio.com/DieSchallgeschwindigkeitLuftdruck.pdf

Außerdem musst Du bei den SFRxx Modulen immer auch die 
Richtcharakteristik der US-Keule beachten. (Diagramm im Datenblatt). 
Diese ist 3-dimensional.
Zudem wird das US-Signal von allem in der näheren Umgebung befindlichen 
Gegenständen zerstreut und diffus reflektiert.

Wenn Du z.B. bei Deinen Versuchen den SRF05 zu dicht am Tisch hast, 
verfälscht Dein Ergebniss durch Reflektionen. Aus Erfahrung würde ich 
mindestens 20cm Höhe pro Entfernungsmeter vorsehen.

von Michael F. (Firma: HTL Rankweil) (mik2412)


Lesenswert?

@ Tobi

ich muss eine ähnliche anwendung realisieren und bin aber ein neuling 
auf dem Mikrcontrollergebiet.

kannst du deshalb den kompletten code veröffentlichen? würde mir sicher 
weiterhelfen.

mfg Michael Fleisch

von bibbel (Gast)


Lesenswert?

Ich interessiere mich auch für den kompletten code, oder über eine 
korrigierte version. Ich bin leider noch nicht erfahren genug den fehler 
selber zu finden.

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.