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
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
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 .
Keine saubere Gleichspannung ? Modul defekt ? Gibt viele Möglichkeiten. Wie gesagt habe damit keine Probleme.
Wie groß ist die Wiederholrate? evtl. Zeitabstand zwischen 2 Messungen vergrößern; ich glaube, es sollten >20ms sein
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.
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
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
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
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 ;)
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
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.
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"
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.