Könnte es daran liegen, dass du Timer0 und Timer1 durcheinanderwirfst?
Hi !
Zum projekt : ich möchte die laufzeit des von einem beeper ausgegeben schalls zum micro messen. Daraus liese sich dann leicht über die schallgeschwindigkeit die enfernung errechnen.
dazu habe ich hier mal ein programm geschrieben:
Allerdings funktioniert das noch nicht so ganz... Erg und Ti sind irgendwie immer null. und das programm endet nie, so wie es eigentlich sollte... Könnte das daran liegen, das der Timer weiterhin fleisig überleuft und interrupts produziert ? und dann natürlich wieder zurück in die Schleife springt ?Code:$regfile = "m32def.dat" $crystal = 16000000 $baud = 9600 Dim X As Integer Dim Ti As Word Dim Xsave As Integer Dim Erg As Long Dim Zwierg As Long Config Pind.7 = Output Config Lcdbus = 4 Config Lcdpin = Pin , Db4 = Pinc.7 , Db5 = Pina.5 , Db6 = Pina.6 , Db7 = Pina.4 , E = Pinc.6 , Rs = Pinc.5 Config Lcd = 16 * 4 Config Timer1 = Timer , Prescale = 1 Config Adc = Single , Prescaler = Auto Start Adc On Timer0 Tim1_isr Enable Timer1 Enable Interrupts Sound portd.7 , 200 , 450 Do If Getadc(2) > 614 Then Ti = Timer0 Xsave = X Exit Do End If Loop Sound Portd.7 , 2000 , 1000 Erg = Ti * 63 Zwierg= Xsave * 65536 Erg = Erg + Zwierg Cls Lcd "berechnung:" Lowerline Lcd Erg ; " // " ; Ti Tim1_isr: X = X + 1 Return End
Würde mich interessieren, was ihr dazu sagt ! (sonst hätte ichs auch net hier rein gestellt ^^)
mfg Javik
Könnte es daran liegen, dass du Timer0 und Timer1 durcheinanderwirfst?
Hi !
ich bin ein Trottel ! Ich hab vorher überall Timer0 dranstehen gehabt und dann gesehen das des blos ein 8bit Timer ist. Dann wollte ich auf den 16bit Timer und dabei hab ich wohl was übersehen...
Auf jeden fall bringt er jetzt ergebnisse ! Aber die sind viiiiel zu ungenau !
Kann des daran liegen, dass fü den Befehl Sound der timer auch verwendet wird ? Wie kann man den Sound wieder ausstellen?
mfg Javik
hi,
das programm ist etwas dünn geraten um exakte ergebnisse liefern zu können. ist auch nicht so richtig klar, was an adc(2) hängt ('ne Taste?).
aber egal, ein ähnliches problem hatte ich auch schon.
in erster linie musst du berücksichtigen, dass dein empfangenes signal immer unterschiedlich ausfallen wird, je nach umgebung etc. du darfst also nur die info im signal auswerten, das könnte so ablaufen.
1. schallsignal erzeugen, dauernd senden
2. innerhalb des schallsignals eine kennung einbauen
3. wenn kennung abgeschickt, timer starten
4. wenn kennung empfangen, timer stoppen und auswerten
5. zyklisch wiederholen bis z.b. 255 messwerte zusammen sind
6. mittelwert bilden und ausgeben
das ist grob der ablauf einer software für echolote, so sollte es gehen
gruss, harry
Hi !
an Adc(2) hängt ein Microphon, das auf die frequenzen in dennen der Pizo lautsprecher sendet. An adc(2) liegt dann mehr spannung an.
An was für einen kennung denkst du da ? Mein Microphon kann leider nciht auf verschieden frequenzen reagiren.
mfg Javik
Hast du die Wechselspannung vom Mikrofon direkt an den ADC-Port gehängt?Zitat von Javik
Trotzdem wird das nicht sehr genau. Wir hatten das Problem schon mal hier in einem Thread. Manf hat uns dann drauf gebracht. Die Membran des Senders und des Empfängers müssen jeweils anschwingen. Dein Programm überwacht die Spannung des Mics auf einen bestimmten Schwellwert der aber vom Pegel des reflektierten Signals abhängig ist.
Dadurch variiert die Erkennungszeit des Signals.
Wie ungenau ist denn deine Messung? mm o. km?
Gruß, Sonic
Bild hier
If the world does not fit your needs, just compile a new one...
Hi,
Nein ich habe das signal mit nem OV verstärkt und durch nen Hochpassgejagt...
Kannst du mir sagen wie der Thread heist ?
Naja ^^ sender und emfpänger sind ca 5 cm von einander entfernt, was rein rechnerisch kein problem sein sollte, aber er errechnet einen abstnd von ca 0,2m - 0,3m.....
Javik
Naja, die Anstiegszeit bekommst du damit kleier ab nicht weg ;-(Zitat von Javik
https://www.roboternetz.de/phpBB2/vi...erschiebung%2AZitat von Javik
Jetzt fehlt nur noch die Frequenz und man könnte anfangen zu Rechnen um den Fehler einzugrenzenZitat von Javik
Aber nach den Werten liegt der Messwert 400%-600% daneben, das kann nicht nur am Einschwingverhalten liegen...
Gruß, Sonic
Bild hier
If the world does not fit your needs, just compile a new one...
Wie lang ist denn dein Schallimpuls? Bei einer solch geringen Distanz bekommt man zwangsläufig Probleme, da dein Empfänger schon ein Echo detektiert, während der Sender noch am Senden ist.
hi,
wenn dein micro nur eine freq. detektiert kannst du die kennung z.b. aus 2 pausen bauen, die 1. zum 'ohrenspitzen' als attention-signal, damit der uc weiss, jetzt gilt's gleich, die 2. als messpause. in der fernsehtechnik wird auf ähnliche weise der zeilen- und bildkipp-impuls erzeugt.
gruss, harry
Lesezeichen