PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timing Probleme mit Ultraschall..



linuxer7
10.01.2011, 11:50
Hallo Leute.

Ich bin kein Elektroniker, aber ich Bastel gerne.
Ich habe mir auch mal einen robi gebaut mit dem was ich so herum liegen hatte.
Das Ding fährt primär auch und funktioniert wie es soll. Nachdem noch ein paar Kleinigkeiten behoben waren machte ich mich an die Sensorik.

Mein "Kleiner" sollte einen US-Sensor bekommen.
Ich hatte noch aus meiner Philips-Baukastenzeit eine Pärchen US-Geber herumliegen.
Kaufen wollte ich nicht etwas also machte ich mich im Internet mal auf die Suche und wurde auch fündig.

Ich baute mir einen US-Sensor zusammen der funktioniert tadellos. Sieht zwar Furcht einflößend aus aber erst mal egal. Es funktioniert.

Na ja es funktioniert im stand. Will damit sagen der Sensor merkt wenn etwas im weg ist wenn der Roboter nicht fährt. Sobald aber das Ding fährt dann funktionert es nicht mehr.

Klingt vielleicht jetzt etwas bescheuert, aber ich weis nicht wie ich es ausdrücken soll.

Zur Funktionsweise der Sensors.

Einen Eingang der durch die SW getriggert wird.
Ich erzeuge einen Burst von 10 Signalen mit einer pause von 10 Microsek. zwischen den einzelnen Zuständen. (Siehe Software)

Der Sensor strahlt dann so oft der Trigger kommt ein Signal ab.
Das Echo (Analog) wird empfangen und weitergeleitet auf die kleine obere Platine. Dort sitzt ein OP LM358 der als Komparator geschaltet ist. Das Ausgangssignal wird dann an einen 74HC14 weitergeleitet der ein Invertierende Schmitttrigger ist. Das Ausgangssignal wir an einen BC617 Darlington weitergereicht und im Kollektor abgriff mit dem Eingangsport verbunden.

Wie gesagt wenn ich die Software so schreibe das im Loop nur die Subroutine Us-Test aufgerufen wird funktioniert es prächtig. Sobald aber noch der Rest der SW (Will das Ding ja auch fahren) eingebunden ist dann funktioniert es nicht mehr.

Ich vermute das es ein Timing problem ist.

Ich bin dann hingegangen und habe versucht es mit dem Timer0 zu realisieren. Es funktioniert auch teilweise, aber dann lässt sich der Robi nicht mehr über die Taster starten.

Also, habe ich die Subroutine us_test im loop aktiv ohne andere Einträge dann funktioniert den Sensor.

Benutze ich den Timer0 und rufe in der Interrupt Routine des Timers die Subroutine us_test auf dann funktioniert die US Erkennung zwar aber ich kann den robi nicht mehr starten. Er reagiert auf den "Start" Taster nicht mehr.

Bin ehrlich gesagt leicht am Ende mit meinem Latein.

Ich benutze Bascom zum Programmieren.

Hat jemand von euch ne Idee.

Gruß
Thomas

Richard
10.01.2011, 12:45
Müsste es nicht ......




Sub Burst(byval Imp_dauer As Long)
For Us1 = 0 To Imp_dauer
Portb.3 = 1 (Pinb.3 =1)?
-----------------------------
Waitus 10
Portb.3 = 0 (Pinb.3 =0)?
-------------------------------
Waitus 10
Next Us1
End Sub



......heißen? Außerdem wird anscheinend nirgends ein Call Us_test ausgeführt?

Gruß Richard

linuxer7
10.01.2011, 13:16
Hallo Richard.

Hast natürlich Recht. Durch das ewige rumprobieren wird die gar nicht mehr aufgerufen.
Sorry mein Fehler.

Sollte so sein.
Sie wird als erstes in der Do-Loop aufgerufen.

Wie füge ich hier Code als Code ein?

Sub Us_test()
Call Burst(10)
If Us_eingang = 1 Then
Status_led = 1
' Call Vollbremsung()
Else
Status_led = 0
End If
End Sub

Gruß
Thomas

linuxer7
10.01.2011, 13:27
Ich habe das mit dem PINB / PORTB gerade mal versucht. PINB geht nicht. Ich glaube das benutzt man auch nur als Eingang.

Gruß
Thomas

Richard
10.01.2011, 17:45
Sollte so sein.
Sie wird als erstes in der Do-Loop aufgerufen.

Wie füge ich hier Code als Code ein?

Vor den Code Eklige Klammer Code Eckige Klammer. Nach dem Code Eckige Klammer /Code Eckige Kammer. Also genau wie quote.

Gruß
Thomas