"Warten" für µs


#1

Hallo zusammen,

ich habe erfolgreich mit dem NEPO ein paar erste Programme zur Steuerung eines kleinen Lego-Fahrzeugs umgesetzt.

Nun würde ich gerne eine Hinderniserkennung mit IR-Reflex-Sensoren (http://irsensor.wizecode.com/) ermöglichen. Die Sensoren habe ich noch aus einem Arduino Starter-Kit übrig.

Das Problem: Um eine größtmögliche Reichweite der Sensoren zu erzielen, darf die IR-Diode immer nur sehr kurz (etwa 200µs – 400µs) eingeschaltet werden, da sich der Empfänger sonst an die höhere “Grundhelligkeit” anpasst und die Sensitivität automatisch runterregelt.

Daher meine Frage: Gibt es irgendeinen Weg, im NEPO eine derart kurze Wartezeit über Programmierblöcke zu realisieren? Ließe sich der “warte”-Block ggf. zwischen “ms” und “µs” umschalten? Oder geht das eventuell auf der kurzen Ebene gar nicht im Calliope, weil er im Hintergrund noch andere Dinge (PWM der Motoren zum Beispiel? Ich habe ja keine Ahnung…) erledigt?

Wenn das Thema in einem anderen Forum besser aufgehoben ist, würde ich mich ebenfalls über eine Rückmeldung freuen.

Vielen Dank!


#2

ms= 1/1000 sekunde somit müssten 200µs = 20 ms sein oder hab ich mich verrechnet?


#3

Hallo,

200 µs = 0,2 ms. Leider geht das in NEPO nicht. Der verwendete C++ Befehl uBit.sleep() hat lt. https://lancaster-university.github.io/microbit-docs/ubit/#sleep als kleinstmögliches Argument 6 ms.

Nur im PXT-Editor gibt es unter Fortgeschritten - Steuerung einen Warte-Block im µs-Bereich.

Toni


#4

Mist, zu spät :-):

Wollte gerade selbst auf https://github.com/lancaster-university/microbit/blob/master/inc/MicroBit.h#L208 verweisen.

Es gibt aber andere „blocking wait“ Methoden, mit denen das klappen könnte. Wäre das etwas, wofür ich ggf. einen Pull Request (wo?) beitragen könnte?


#5

Anfragen können direkt im OpenRoberta-Projekt auf Github unter https://github.com/OpenRoberta/robertalab gestellt werden.


#6

Beim Versuch den DHT11 Sensor auszulesen habe ich auch immer einige µs gewartet. Später stellte ich fest dass es garnicht nötig ist, da die Ausführung eines Befehls schon ein paar µ-Sekunden dauert. Schreib mal ein paar Dummy-Befehle und miss wie viel Zeit sie benötigen. Danach auf High schalten, Dummybefehle in benötiger Zeit (evt. Schleife) ausführen, Signal auf low. Wurde auch bei anderen Sensoren (Lego) so gemacht. Viel Erfolg und bitte Rapport :wink: