www.mikrocontroller.net

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


Autor: Tobi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schade. weiß keiner wo mein problem ist?

mfg tobi

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
volatile int i[5],j=0;
->
volatile unsigned char j;
unsigned int i[5];
und
itoa -> utoa

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Tobi (Gast)
Datum:

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

mfg tobi

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/DieSchallgeschwindigk...

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.

Autor: Michael Fleisch (Firma: HTL Rankweil) (mik2412)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: bibbel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.