hallo im forum habe mir eine schaltung sender/empfänger für ultraschall zusammgebastelt, funktioniert auch ganz gut. nun zum problem, irgendwie steh ich bei der sofware auf dem schlauch, setze timer0 vom tin2313 (20MHz) ein und weiss das der schall bei 340m/s rund 29,4µs braucht für 1cm. (angestrebte genauigkeit sollte 1cm sein optimieren kann man immer noch) also routine so geschrieben das der timer bei 29,4µs einen int generiert und dann immer plus 1 rechnet, im studio getestet ja so gehts. leider sind die empfangenen werte bisschen komisch denn ergebniss ist 47m 50cm, 50cm haut auch hin aber die 47m frage ich mich wo die herrkommen??? was sollte/muss unbedingt bei dem programm noch beachtet werden????
oh die vorschau muss man sich erst dran gewöhnen aber hier ist er
Seh ich das richtig: Am PORTD, Pin 5 hängt der Sender. Sobald der Pin auf 0 geht, fängt der zu senden an Am PORTD, Pin 6 hängt der Empfänger. Sobald der etwas empfängt, geht der Pin auf 0 PS: Du machst es einem nicht gerade leicht den Code zu verfolgen.
Wie stellst du eigentlich den Messwert fest? Ich würde auf jeden Fall mal das 0-setzen der Variablen vor den ersten Puls ziehen und nicht danach und mich nicht darauf verlassen, dass das alles beim Power-On des Prozessors schon 0 sein wird.
ja genauso funktioniert pull-ups hab ich auch schon drüber nachgedacht habs ausprobiert und es gab dort kein unterschied ist dieser ansatz denn so realisierbar oder suboptimal???? ähm die ganzen ausgaberoutinen hab ich weggelassen damit die übericht bisschen besser wird aber was meinst du mit: "Du machst es einem nicht gerade leicht den Code zu verfolgen."
den messwert stell ich anhand der zeit fest: start -> timervorbereiten -> signal senden und tccr0b setzen -> timer läuft (29,4-30µs) -> nach dieser Zeit ein interrupt -> dann zeit neu laden in der routine +1 was gleich 1cm ist pind6 weiter pollen warten bis gesetzt pind6 gesetzt dann zu stopp springen werte auslesen ausgabe 10s warten rjmp start hoffe das es jetzt ein wenig verständlich ist
chris schrieb: > ja genauso funktioniert > pull-ups hab ich auch schon drüber nachgedacht habs ausprobiert und es > gab dort kein unterschied Hast du schon mal mit einem Oszi die Zeit zwischen Sender-Statr und Empfänger-Echo ausgemessen? > ist dieser ansatz denn so realisierbar oder suboptimal???? Sieht für mich nicht so schlecht aus. > "Du machst es einem nicht gerade leicht den Code zu verfolgen." Ich werd zb. jetzt nicht die Konfigurationsbist auseinanderpfriemeln um zu sehen wie du deinen Timer/Interrupt konfigurierst. Du verwendest an manchen Stellen Hex Zahlen, bei denen ich mich minutenlang gefragt habe, was das eigentlich soll. Zb in der ISR vergleichst du cm mit $64. Ich hab mich jetzt gefragt was das soll, was ist die spezielle Bedeutung von $64? Draufgekommen bin ich erst im Nachhinein, beim weiteren Analysieren. Du zählst cm und m getrennt. Warum schreibst du das dann nicht einfach cpi temp0, 100 ; 100 cm sind ein Meter und gibst damit einen Hinweis an den Leser was hier passiert. Die Subroutine ganz unten, wer braucht die? Niemand, wenn du den Timer-Konfigurier und Startcode an die Aufrufstelle gleich einfügst, muss man beim lesen nicht im Hinterkopf halten, woher das jetzt aufgerufen wurde, welche Bedeutung das hat, den Code absuchen, obs noch wo einen 2.ten Aufruf gibt. etc. Auch hat sich der Messcode, beginnend mit dem Setzen des Senders und Abbruch durch den Empfänger, als zentrale Stelle der eigentlichen Messung eine etwas bessere optische Hervorhebung verdient. Alles andere ist nur Geplänkel rundherum, aber dort ist das Herz deines Programmes. So hab ich erst mal den Code 3 mal rauf/runterscrollen müssen, um zu finden, wo denn eigentlich die Messung abläuft. Vor diesem Herz sollten alle gemessenen Variablen auf 0 gesetzt werden, danach kommt die Auswertung. Das wär zumindest für mich logisch. Bei dir muss ich 3 mal rumscrollen um rauszufinden ob die Variablen überhaupt auf 0 gesetzt werden. etc. etc. PS: Das erklärt zwar nicht die 40m, aber ich kann deine Berechnung nicht wirklich nachvollziehen. 20000000/8/256 = 9765. Kehrwert davon 0.0001024 Sekunden. In diesen Zeitabständen wird der Timeroverflow aufgerufen. Wie kommst du auf 29,4µs?
Aber summa summarum: Funktionieren müsste es. Fehler in der Ausgaberoutine?
ja gut ist ein wenig eigensinnig der code aber hinweise zur kenntnis genommen :-) geg: f=20Mhz Teiler=8 im tiny im tccr0b einstellbar durch $02 oder 2, pdf tiny2313 S.111 bits=74 gleichung um timer vorzuladen 1/(f/T/bit) = 1/(20Mhz/8/74) = 29,6µs -> 256-74 = 182 muss im tcnt0 stehen
chris schrieb: > 1/(f/T/bit) = 1/(20Mhz/8/74) = 29,6µs -> 256-74 = 182 muss im tcnt0 > stehen Ah, das Vorladen hab ich übersehen.
Stimmt denn deine Taktfrequenz? in deinem Code gibst du ganz oben an, dass die CPU auf 4Mhz läuft. Und hier in deinen Angaben sagst du dass du 20Mhz verwendest.
ja stimmt auch 20mhz habe nur mal wieder vergessen es oben einzutragen da ich std mit 4mhz arbeite
wie lange brauchen die piezoelemente bis sie ein/ausgeschwungen haben??? im datenblatt von ust40r/t ist leider nichts drüber zufinden bei den leuten von roboternetz habe ich das ein oder andere gelesen, dass die erst senden(2,5ms) und nach 1,25ms den timer setzen da das übersprechen wohl sehr stark ist und nach der hälfte der zeit die amplitude so schwach ist das jetzt erst nach dem schall detektiert wird.
ja gut leute denn kann ich ertsmal davon ausgehen das die software zwar den ein oder anderen fehler hat aber nichts dramatisches danke für die hilfe und einen schönen pfingstsonntag noch gruss chris
Hallo Leute, nach dem ihr mir den ein oder anderen Tip gegeben habt läuft die Software + Hardware schon recht gut, nun hab ich aber doch noch ein paar Fragen: 1. Sollte das Tastverhältnis 50:50 sein oder kann auch tan=30: taus=70 sein???(40Khz) 2. zu Testzwecken teste ich die Schaltung erstmal frei im Raum mit einer Pausenzeit zur nächsten Messung von 3s. Wie entscheidend ist die Fläche auf die das Signal trifft?? Im Moment 400x150x15mm Aluplatte. 3. Leider habe ich eine Abweichung bei 40cm gemessen 50-55cm bei 60cm schwankt der Wert so von 76cm-96cm Was könnte dort die Ursache sein oder sollte der Test nur im Rohr durvchgeführt werden???
chris schrieb: > 1. Sollte das Tastverhältnis 50:50 sein oder kann auch tan=30: taus=70 > sein???(40Khz) Das sollte schon 50:50 sein. Du bringst doch mit dem Strom einen Piezo zum schwingen und der will vorzugsweise sinusförmig schwingen. Warum willst Du es überhaupt ändern? > 2. zu Testzwecken teste ich die Schaltung erstmal frei im Raum mit einer > Pausenzeit zur nächsten Messung von 3s. > Wie entscheidend ist die Fläche auf die das Signal trifft?? > Im Moment 400x150x15mm Aluplatte. Das sollte schon reichen. > 3. Leider habe ich eine Abweichung bei 40cm gemessen 50-55cm > bei 60cm schwankt der Wert so von 76cm-96cm > Was könnte dort die Ursache sein oder sollte der Test nur im Rohr > durvchgeführt werden??? Sowohl der Sender als auch der Empfänger schwingen langsam ein. Das dauert mehrere Wellenzüge bis die die volle Amplitude erreichen. Dein Empfänger wird typischerweise irgendwo mittendrin (nachdem schon die ersten paar schwachen Wellen empfangen wurden) entscheiden, dass das Signal jetzt stark genug ist und erst dann ein Signal an den µC geben (evtl. passiert das auch durch die Schwelle des Timer-Eingangs). Wenn das Signal nun einmal stärker und einmal schwächer ist, dann beendet der Zähler seine Arbeit eben mal früher und mal später. Der Effekt sollte eigentlich nicht so stark sein wie Du ihn beschreibst, außer Du hältst die Aluplatte oder den Sender mit der Hand und bei jeder Messung ist der Winkel Sender/Aluplatte anders.
Markus Kaufmann schrieb: Das sollte schon 50:50 sein. Du bringst doch mit dem Strom einen Piezo zum schwingen und der will vorzugsweise sinusförmig schwingen. Warum willst Du es überhaupt ändern? leider gibt es meine schaltung nicht her genau 50:50 einzustellen, ist mehr bei 30-40:70-60, deshalb muss ich mir dafür was anderes überlegen. ich werde es auf jedenfall mit 50:50 probieren und wieder berichten An alle ein frohes Fest und ein guten rutsch ins neue Jahr.
chris schrieb: > leider gibt es meine schaltung nicht her genau 50:50 einzustellen, ist > mehr bei 30-40:70-60, deshalb muss ich mir dafür was anderes überlegen. Es wird mit einem anderen Tastverhältnis wahrscheinlich schon funktionieren, aber die Ergebnisse werden eben schlechter als mit 50:50 sein.
so nun hauts mich vom Hocker !!!!! :-ö Habe mal ne astabile Kippstufe aufgebaut um die 41Khz so das ich das Tastverhältnis sauber auf 50:50 einstellen kann, noch minimale Änderung im Programm vorgenommen alles verbunden und siehe da, ein Steigerung um 100%. Mit der alten Sendeschaltung schwankten die Werte wie erwähnt sehr stark und Abstand zum Empfänger kleiner 15cm totaler Müll im Display Mit der neuen Schaltung stehen die Werte sauber im Display nach jeder Messung ohne Schwankungen, im Moment leider nur 10-30cm, ich glaube ich muss den Empfänger empfindlicher kriegen!!!!
Hallo und ein gesundes neues Jahr erstmal das was ich abhacken kann, sind Sender und Software arbeiten zuverlässig und stabil. Als Empfänger (Ub=10V) habe ich 4x Transistorverstärker Spannungsverstärkung rund 92, leider kann ich nur mit 2 Stufen arbeiten, da ab der dritten sich das Ding aufschwingt (oder was anderes tut) und am Ausgang 250Khz macht. 1. Wo kommen die 250Khz her??? sollte die 3te/4te Stufe etwas weniger Verstärken????? Ich hatte mir vorher überlegt das ich noch ein Bf980 dazu nehme, um die Verstärkung in Abhängigkeit der Regelspannung zu regeln. (s.B. X7) Ohne Regelspannung, X2-X6 verbunden, Entfernung im Raum rund 10-150cm nen plus is noch drin aber das sind die stabilen Werte. Mit Regelspannung X2-X10, X11-X6, X7-X12 verbunden, man kann rund 20cm drauf rechnen im Vergleich ohne Regelspannung. D.h 20cm * 58µs= 1,2ms braucht die Regelung um zu arbeiten oder sehe ich das Falsch????? 2. Wie würdet ihr die Nachführung realisieren oder verbessern????
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.