Hi,
ich bin im Moment dabei, die hohe Kunst der C-Programmierung zu lernen.
Mein Ziel, natürlich zu lernen wie ich meinen eigenen Fahrtregler programmieren kann!
Mein Traum wäre ja, meine Bots auf Dauer "teil-Autonom" zu machen. Aber davon bin ich noch weeeeiiiiit entfernt.
Um den Einstieg zu schaffen habe ich mir zwecks dessen den NiboBee von Reichelt besorgt. Ein klasse Teil! Die anfängliche programmiererei ist sehr leicht gestaltet, da alle Funktionen vorgegeben sind. Man muss diese nur noch richtig verstricken.
Hier mein Baby. Wie man sieht, habe ich schon ein bissl daran gebastelt.
Dazu gehöhrt:
-ein modifiziertes "Vorderrad" (sieht man hier nicht)
-eine Akku-Spannungsmessung
-Helligkeitssensor zur Einstellung der Display-Beleuchtung (funzt najaaa)
-neben den vier Tastern auf dem Grafik-Modul sind LEDs die ich durch blaue LEDs ersetzt habe.
-und zur guter Letzt habe ich den Orange-Empfänger an die Bee gehängt
http://imageshack.us/g/13/1032443.jpg/
Soo, warum mache ich den Tread? Ich bin jetzt mit den Bord-Sensoren/Aktoren relativ vertraut. Nun möchte ich einen großen Schritt weiter gehen. Ich will die Biene ferngesteuert haben!!!
Ich habe Reiner auch schon zu dem Thema befragt und wir beide denken, warum das nicht öffentlich machen? Wenn sich jemand irgendwann auch mal mit dem Thema beschäftigen möchte, so kann er diesen Tread zur Hilfe nehmen.
Evt. hat der ein oder andere auch schon Erfahrung mit dem Thema und kann auch was dazu schreiben.
Als Anfang poste ich hier mal das bisherige geschreibsel:
Hi Reiner,
Ich hab da mal eine Frage zum Fahrtregler-Programmieren:
Ich lerne in letzter Zeit ja das C-Programmieren. Dazu habe ich diesen NIBOBee von Reichelt, ein klasse Teil!!
Nun bin ich mit dem Tutorial dazu durch und versuche mich an eigene Projekte.
Ich bin zwar noch ein ziemlicher Anfänger, aber ich weiss jetzt zumindest die Grundlegenden Dinge und den generellen Aufbau eines Programms.
So, nun möchte ich den nächsten Schritt wagen und versuchen einen Empfänger an die kleine Bee zu hängen.
Ich möchte mir das Programm zwar selbst erarbeiten, aber ich weiss noch garnicht wie man sowas überhaupt angeht.
Ich möchte keine Komplettlösung, nur einen Anhaltspunkt. smile
Als erstes müsste ich wissen, wie verarbeitet man das Signal überhaupt in dem Programm?
Wär nett, wenn du mir dabei helfen könntest, im Inet habe ich dazu noch nicht so ganz viel herausgefunden.
Hallo Andreas,
Zum Erfassen von den Empfängersignalen:
Du muss im Prozessor einen Timer laufen lassen. Z.B. einen 8-Bit-Timer, der dann Werte von 0 bis 255 liefert.
Der Timer muss durch einen Prescaler so eingestellt werden, dass seine Zykluszeit das abdeckt, was denn an Pulsen so reinkommt. Heißt: Die Pulse sind maximal 2ms lang, das muss der Timer können.
Beim PIC ist der Timer so eingestellt, dass er sich all 4ms wiederholt bzw. abgelaufen ist. Somit ergeben die 4ms einen Bereich von 255 Stufen.
Jetzt musst Du also eine Schleife im Prozessor laufen lassen, der ständig den Pin abfragt, an dem der Empfänger hängt. Wenn der Puls "high" wird, dann merkst Du Dir den aktuellen Zählestand des Timers in einer Variablen. Dann macht der Prozessor wieder was anderes und schaut regelmäßig auf den Empfängerpin. Irgendwann ist der Puls abgelaufen, der Pin geht auf Low. Auch das kriegst Du mit und merkst Dir den zweiten Zählerstand.
Anschließend wird gerechnet. Die Differenz zwischen den beiden gemerkten Zählerständen ergibt im Prinzip die Pulslänge. Allerdings zunächst nur in einer Zahl. Jetzt müßte man die Zahl auf eine Zeit umrechnen. Braucht man aber nicht. Denn im Endeffekt willste ja nur das PWM-Signal für den Motor errechnen oder einen Schalter auslösen. Stichwort dazu wäre "Lookup-Table". Dazu bei Bedarf gerne mehr....
Danke für die schnelle Antwort:
Puuh, ich hab noch null Ahnung von Timern. smile
Sprich der erste Schritt wird wohl sein den Timer kennen zu lernen...
Hallo Andreas,
ja, lies mal im Datenblatt die Beschreibung von den Timern, dann wird die Sache schon klar.
Im Prinzip gibt es mehrere Möglichkeiten, mit Timern zu arbeiten. Ich empfehle:
- keinesfalls einen Interrupt auslösen, wenn ein Timer abgelaufen ist. => Macht nur Ärger im Programmablauf
- Den Timer frei laufen zu lassen. Wenn er bei 255 angekommen ist, dann fängt er ganz normal wieder von vorne an.
- Bei meiner Software ist der Timer über die Vorteiler so eingestellt, dass er eine Laufzeit von 4ms hat, bevor er wieder von vorne anfängt.
- Darauf achten, dass bei einem Standardquarz für den Prozessor (z.B. 4MHz) der Timer gut läuft. Zum Schluss wird dann der Quarz noch auf ein Vielfaches erhöht (z.B. dann 16MHz). Der Vorteiler vom Timer muss das dann wieder so können, dass nach der Umstellung von 4MHz auf 16MHz der Timer immer noch einen Bereich von 4ms hat.
Wenn Fragen sind, dann einfach melden. Wir können das meinetwegen auch über das Forum machen, dann haben die anderen auch etwas zum lesen. *grinsel*. Vielleicht findet sich noch jemand, der in die Prozessorprogrammierung einsteigen will.
Da es bei dem NiboBee zu Timern, etc. nichts an Beispielen/Übungen gibt, wende ich mich an euch.
Wie ich meinen Timer konfiguriere und den Prescaler einstelle weiss ich denke ich jetzt.
Dazu gibt es ja die Interrups, (ich weiss, ich sollte die nicht einsetzten, aber wenigstens kennenlernen muss ich die ja mal. ) in denen man ja weitere Befehle aufrufen kann etc.
Dafür ist die Seite Microcontroller.net nicht schlecht.
Nur weiter komme ich jetzt nicht. Und eine Idee wie du (Reiner) das meintest mit den Puls-, bzw. Pegel-Abstand-Messen hab ich mal garnicht.
Hab meinen bisherigen Code in den Anhang gepackt. Hoffe das funzt.
Das Programm scheint so auch zu laufen, die LED blinkt und blinkt.
Also wie geht es weiter? Wie stell ich fest, wann der Pegel am Eingang high oder low ist??
Vielen Dank erstmal für eure Hilfe, hoffe ich kriege das bald hin "ganz ungeduldig ist".
Hoffe auch das hier ist jetzt nicht zu unübersichtlich geraten. Keine Ahnung wie ich das besser zusammenschreiben könnte.
Gruß