die long Werte hat ich mir eigentlich für so Spiralfahrten überlegt, wo mein
Sauroboter Robertina den Boden z.B. in Spiralen abfährt.
Habe mich etwas ernsthafter mit den Encoderwerten beschäftigt.
Da das Programm aus Asuro Band II recht hohe Maximal-Werte (600-850) ausgab, bin ich dann irgendwie/wann daraufgekommen, dass im Gegensatz zu Odometry/ie(data) die neuen Encoderfunktionen (EncoderInit(),IsrEnc, ...) mit eiem 8-bit ADC arbeiten. (in irgendwelchen Doku's hab ich nichts dazu gefunden, hab's dann an dem ADLAR beim ADMUX erkannt und daran, dass nur ADCH dem Encoder/tmp - Wert zugewiesen wird (in IsrEnc().
Hab dann ein eigenes Programm geschrieben, um an die 8-bittigen Werte meiner Encoder zu kommen. (Dein Win-Programm machte bei der Installation gar-nichts, nur hängte sich der Rechner auf. (Vielleicht liegt das aber daran, dass meine Systempartition nicht die C: , sondern seit einer dubiosen (fast Neu) Installation die E: Partition ist.) Auch verwende ich die Asuro-Bib 2,80 , da ich auch mit dem ATmega168 experimentiere.
Parallel dazu hab ich, da die Kurven doch sehr lichtempfindlich und auch geschwindigkeitsabhängig waren, die Hardware vom Asuro leicht modifiziert: Den R22 Widerstand (470 Ohm) - er befindet sich in der Nähe Pin 1-3 vom Atmega8 - hab ich entfernt bzw. den Draht durchgekniffen, auf der Rückkseite von der +5V Versorgung eine Schottky-Diode gelötet und an deren Kathode (Strich) einen Elko/Tantal gelötet. Von dem Pukt aus hab ich die Anoden der Encoder Leds D13/D14 mit je einem 349 Ohm Widerstand verbunden. Die Kathoden der Leds hab ich direkt an Masse angeschlossen (Verbindungsleiterbahn Kathode D12 nach Anode D13 hab ich unterbrochen (etwa da, wo auf dem Foto der Widerstand den schwarzen Kabelbinder "untertunnelt").
Mit der separaten Versorgung hab ich mehrere Vorteile:
- Betrieb der Backleds parallel zum Encoder möglich
- stabilere / störungsfreiere Versorgung der EncoderLeds (entkoppelt über Diode und Elko)
- freie Wahl der Ströme durch die Encoderdioden unabhängig von der Belastbarkeit des ATmega-Ports (bei hohen Diodenströmen schalten die FotoTransistoren T11/T12 besser durch (gegen 0V).
- Anpassungsmöglichkeit der Encoderkennlinie durch unterschiedliche Ströme durch entsprechende Widerstandswahl. (Hab ich (noch?) nicht gemacht, könnte aber vielleicht in sehr heller Umgebung was bringen).
Ich denke aber - einfacher und vielleicht auch besser wäre es, die Dioden in Reihe geschaltet zu lassen und nur den Widerstand nach + VCC (je nach Batteriezustand 5V-6V) so zu dimensionieren, dass ein höherer Strom fliesst ( bei mir z.Z. ca 2 x 12 mA : (5V - 2*1,1V) = 3,8V.
Ein Betrieb mit 20mA ist wohl sinnvoll (bei IRL80 max. 60mA möglich),
dann würde ich die Dioden aber in Reihe geschaltet lassen mit einem 154 Ohm Widerstand, besser noch mit einer Fet-Konstantstromquelle (z.B. FET BF245 oder besser BBS129 (Depletion Mode-Mosfet)), die ich auf 20 mA einstelle.
Mit diesen Hardwareänderungen und den neu ermittelten 8-Bit Parametern My_ODO... hab ich jetzt saubere Encoderwerte auch bei wechselnden Lichtverhältnissen (wenn gar nichts mehr geht, kann man auch die Encoder-Transistoren/Dioden gegen Fremdlicht kapseln oder gleich bessere Reflexlichtschranken (z.B. CNY70) einbauen).
Vielleicht komm ich auch nochmal dazu, das Programm von hai1991 zu testen/ändern, aber zumindest gehen bei mir jetzt die Go/Turn Funktionen.
Lesezeichen