Forum: Mikrocontroller und Digitale Elektronik HC-SR04________


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von St. E. (reval)


Bewertung
0 lesenswert
nicht lesenswert
HC-SR04 hängt  auf
Hallo . Vielleicht kennt jemand das Problem.
Beim experimentieren bekomme ich vernünfige Werte . Beim Verändern der 
Distanz zwischen Reflektor und HC-SR04 ändern sich wie zu erwarten die 
ausgegebenen Abstände .
Ist der reflektor zu weit entfernt geht das Echosignat nicht wieder auf 
0 . Das Modul hängt .
Kommt der Reflektor wieder nahe vor das Modul änder sich nichts . Echo 
bleibt auf 1 .
Auch das resetten des ansteuernden mc vermag den HC-SR04 nicht wieder 
zum arbeiten zu bewegen . Echo bleibt auf 1 . Wiederbelebt wird das 
modul erst durch Ausschlten und erneutes anlegen der Betriebsspannung .
Ich habe das Steuerprogramm geaendert so daß das Triggersignal nur 
gesendet wird wenn Echo auf 0 ist . Das bringt jedoch keine Abhilfe .
Ist das Problem bekannt oder mache ich etwas falsch .
Bedanke mich im Voraus für jede Hilfe

von Hallo (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
HC-SR04 hängt  auf
Hallo . Vielleicht kennt jemand das Problem.
Beim experimentieren bekomme ich vernünfige Werte . Beim Verändern der 
Distanz zwischen Reflektor und HC-SR04 ändern sich wie zu erwarten die 
ausgegebenen Abstände .
Ist der reflektor zu weit entfernt geht das Echosignat nicht wieder auf 
0 . Das Modul hängt .
Kommt der Reflektor wieder nahe vor das Modul änder sich nichts . Echo 
bleibt auf 1 .
Auch das resetten des ansteuernden mc vermag den HC-SR04 nicht wieder 
zum arbeiten zu bewegen . Echo bleibt auf 1 . Wiederbelebt wird das 
modul erst durch Ausschlten und erneutes anlegen der Betriebsspannung .
Ich habe das Steuerprogramm geaendert so daß das Triggersignal nur 
gesendet wird wenn Echo auf 0 ist . Das bringt jedoch keine Abhilfe .
Ist das Problem bekannt oder mache ich etwas falsch .
Bedanke mich im Voraus für jede Hilfe

von Udo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Falsch programmiert.
Habe damit keine Probleme.

von Hallo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Erst mal danke . Aber an dem Programm kann nicht so viel falsch sein . 
Erzeugt einen 20us impuls am trigger eingang , wartet bis  Echo au 1 
geht und mißt die zeit bis Ecbo wieder auf 0 geht . Am Oszi ist zu sehen 
daß , ist der Fehler eingetreten  Echo dauernd auf 1 bleibt .

von Udo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Keine saubere Gleichspannung ?
Modul defekt ?
Gibt viele Möglichkeiten.
Wie gesagt habe damit keine Probleme.

von Wolle G. (wolleg)


Bewertung
0 lesenswert
nicht lesenswert
Wie groß ist die Wiederholrate? evtl. Zeitabstand zwischen 2 Messungen 
vergrößern; ich glaube, es sollten  >20ms sein

von M. K. (sylaina)


Bewertung
0 lesenswert
nicht lesenswert
wolle g. schrieb:
> Wie groß ist die Wiederholrate? evtl. Zeitabstand zwischen 2 Messungen
> vergrößern; ich glaube, es sollten  >20ms sein

Zwischen Echo ende und dem nächsten Trigger sollten 10 ms liegen, der 
Echo-Puls sollte laut Datasheet maximal 36 ms (2*18ms, wegen Hin- und 
Rückweg) lang sein.
Bei mir hängt sich das Modul aber auch auf, ich muss rund 1 s zwischen 
zwei Trigger-Pulsen warten.
Kommt wohl drauf an ob man ein China-Imitat hat oder das Original.

von Hallo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke für die info . Ja ich benutze einen Nachbau des HC-SR04 . Das 
aufhängen passiert bei mir nur wenn kein echo registriert wird . 
Ansonsten nie . Uebrigens auch interessant . Der Anstieg des Echo 
Signals auf 1 erfolgt bei mir nicht präzise . Mein trigger Signal dauert 
40 us . Ca 490 us nach start des triggers (  ca 450 us nach ende des 
triggersignals ) geht das Echo auf 1 .Diese Zeit schwankt um geschätzt + 
-  3 us . Um stabile Resultate zu erhalten ist es notwendig die 
Zeitmessung erst beim Anstieg des Echosignals auf 1 zu beginnen .
Wenn das Teil hangt hilft bei mir nur noch das kompletteein/aus schalten 
. Mit einer längeren pause zwischen den Messungen kann ich das 
Hängenbleiben nicht verhindern

von M. K. (sylaina)


Bewertung
0 lesenswert
nicht lesenswert
Hallo schrieb:
> Um stabile Resultate zu erhalten ist es notwendig die
> Zeitmessung erst beim Anstieg des Echosignals auf 1 zu beginnen .

Also ich habs mit dem Pin-Change-Interrupt gelöst, d.h. bei mir kann die 
Zeit zwischen Trigger End und Echo Beginn gerne Schwanken wie sie will, 
die Zeitmessung läuft bei mir erst los wenn das Echo-Signal von 0 auf 1 
gewechselt hat. Gestoppt & Ausgewertet wird die Zeitmessung bei mir 
mittels Input Capture Interrupt.

EDIT:

Benutzt du auch einen AVR? Folgender Code (hab ich aus dem Kopf getippt, 
gff. nicht fehlerfrei) würde etwa alle 260 ms eine Messung lostreten und 
das Ergebnis auf einem Display anzeigen (Atmega328 auf Werkseinstellung, 
Echo auf PB0, Trigger auf PB1 angeschlossen):
1
/* main.c beginn */
2
#include "main.h"
3
4
void main(void){
5
  float distance = 0.0;
6
  char distanceInCM[7];
7
  setUpAvr();
8
  for(;;){
9
    sleep_mode();
10
    lcd_gotoxy(10,0);
11
    distance = 1e6/F_CPU*ICR1/58.066
12
    dtostrf(distance,
13
            6,
14
            2,
15
            distanceInCM);
16
  }
17
  lcd_puts(distanceInCM);
18
  lcd_puts_p(PSTR(" cm"));
19
}
20
ISR(TIMER0_OVF_vect){
21
  TCNT1 = 0;
22
  TIMSK1 |= (1 << OCIE1A);
23
  PORTB |= (1 << PB1);
24
  TCCR1B |= (1 << CS10);
25
}
26
ISR(TIMER1_COMPA_vect){
27
  PORTB &= ~(1 << PB1);
28
  TIMSK1 &= ~(1 << OCIE1A);
29
  TCCR1B &= ~(1 << CS10);
30
  PCIFR = (1 << PCIE0);
31
  PCICR |= (1 << PCIE0);
32
}
33
ISR(PCINT0_vect){
34
  PCICR &= ~(1 << PCIE0);
35
  TCNT1 = 0;
36
  TIMSK1 |= (1 << ICIE1);
37
  TCCR1B |= (1 << CS10);
38
}
39
ISR(TIMER1_CAPT_vect){
40
  lcd_gotoxy(10,0);
41
  lcd_puts_p(PSTR("          "));
42
  TCCR1B &= ~(1 << CS10);
43
  TIMSK1 &= ~(1 << ICIE1);
44
}
45
ISR(TIMER1_OVF_vect){
46
  TIMSK &= ~(1 << ICIE1);
47
  lcd_gotoxy(10,0);
48
  lcd_puts_p(PSTR("Timeout!  "));
49
}
50
51
void setUpAvr(void){
52
  // set PB1 as output for trigger
53
  DDRB |= (1 << PB1);
54
  // set timer0
55
  // enable overflow for start trigger
56
  TIMSK0 |= (1 << TOIE0);
57
  // start timer0
58
  TCCR0B |= (1 << CS00)|(1 << CS02);
59
  // set timer1
60
  // define OCR1A for trigger puls-time as F_CPU/1e6*time[us]
61
  OCR1A = F_CPU/1e6*10;
62
  // enable overflow interrupt for timeout
63
  TIMSK1 |= (1 << TOIE1);
64
  // enable pinchange-interrupt
65
  PCMSK0 |= (1 << PCINT0);
66
  // set sleepmode
67
  set_sleep_mode(SLEEP_MODE_IDLE);
68
  // init display
69
  lcd_init();
70
  lcd_puts_p(PSTR("Distance: "));
71
}
72
/* main.c end */
73
74
/* main.h beginn */
75
#ifndef main_h
76
 #define main_h
77
78
 #ifndef F_CPU
79
  #define F_CPU 1000000UL
80
 #endif
81
82
 #include <avr/io.h>
83
 #include <avr/sleep.h>
84
 #include <avr/interrupt.h>
85
 #include "lcd.h"
86
87
 void setUpAvr(void);
88
89
#endif
90
/* main.h end */
Kommt er hier aus dem Timeout nicht mehr raus dann hat sich das 
SRF04-Modul aufgehangen. Das könnte man abfangen indem man das 
SRF04-Modul über einen freien IO mit dem AVR einschaltet. Fällt er in 
den Overflow (bei 1 MHz bei obigen Code nach ca. 65 ms) könnte man so 
dem Modul einmal den Saft abdrehen und es dann wieder zuschalten als 
Quasi Hardware-Reset.

: Bearbeitet durch User
von Patrick J. (ho-bit-hun-ter)


Bewertung
0 lesenswert
nicht lesenswert
Hi

Wobei der US-Sensor wohl ebenfalls eine Spannungsstabilisierung enthält, 
damit die US-Pulse die Innereien nicht unnötig durcheinander wirbeln.
Müsste also ausgetestet werden, wie lange der Saft abgeklemmt sein muß, 
daß der Sensor sicher resetet und wie viel Zeit Er für Sich braucht, 
bevor Er wieder mit der Arbeit beginnt.

Denke, ganz so einfach wird Das wohl nicht, also Sensor-Vdd auf LOW, auf 
High, Messung lostreten und auf Echo oder OVL warten.

Habe selber 'einige' HC-SR04 vom freundlichem Chinesen bekommen, wovon 
drei schon 'bespielt' sind, also schon Mal Strom gesehen haben.
Muß ich mir jetzt Sorgen machen, daß die Teile ausfallen, wenn die 
Entfernung >3m wird? (wobei Die bei mir von der Decke zum Boden schauen 
sollen - das bleibt ganz sicher <3m und wenn nicht, hab ich ganz andere 
Probleme als ein hängender Echo-Sensor)

MfG

von M. K. (sylaina)


Bewertung
0 lesenswert
nicht lesenswert
Patrick J. schrieb:
> Muß ich mir jetzt Sorgen machen, daß die Teile ausfallen, wenn die
> Entfernung >3m wird?

So ein Problem hab ich bisher nicht gehabt. Bei mir bleibt er nur Hängen 
wenn der Trigger zu schnell hintereinander kommt. Ich denke nicht, dass 
du dir Sorgen machen musst, den Fehlerfall aber abzufangen ist gewiss 
auch nicht verkehrt ;)

von Dowt (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Patrick J. schrieb:
> Muß ich mir jetzt Sorgen machen, daß die Teile ausfallen, wenn die
> Entfernung >3m wird?
Die fallen ja nicht permanent aus, sondern nur bis zum nächsten 
Power-Cycle. Ausserdem kann auch so mal eine Fehldetektierung oder 
unglückliche Reflexion passieren und besagte Module hängen fest.

Wenn bei meinen Exemplaren ein zu langes Echo erkannt wird, reicht es, 
Vcc für 100ms abzuschalten (durch uC via PNP Transistor; Vcc wird nicht 
auf GND gezogen). Nach Wiederversorgung noch 200ms warten, 1x triggern 
und nach spätestens 10us ist das Echo low und das Modul funktioniert 
wieder. Nicht schön, aber selten. :D

von Wolle G. (wolleg)


Bewertung
0 lesenswert
nicht lesenswert
Das hilft zwar nicht direkt weiter.
Habe es heute mal getestet. Bei mir gibt es auch bei >3m keine Ausfälle.
Teile kamen aus China.

von Marc V. (Firma: Vescomp) (logarithmus)


Bewertung
0 lesenswert
nicht lesenswert
Hallo schrieb:
> Signals auf 1 erfolgt bei mir nicht präzise . Mein trigger Signal dauert
> 40 us . Ca 490 us nach start des triggers (  ca 450 us nach ende des
> triggersignals ) geht das Echo auf 1 .Diese Zeit schwankt um geschätzt +
> -  3 us .

 In etwa.
 Beitrag "Re: HC SR 04 in Assembler"

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]
  • [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.