Hi Searcher,
Danke für die Hinweise!
Ja ich weiß, ich hätte mal noch ein paar mehr Kommentare in den Code schreiben sollen, damit klarer wird was da überhaupt passiert :-/
Das Bild des FTS in dem verlinkten Post auf der 2. Seite ist zwar nicht mehr ganz aktuell da dort weder die Sensorik für die Lenkachse noch die Sensorik für die Spurführung eingebaut ist, aber für die Erklärung dürfte es aureichen.
Also kurz zum Programm: Vorne am FTS ist ein IFR-Sensor. Der hängt am Port 0. Dann gibts für die Spurführung zwei nebeneinder befindliche Spulen, die sich unter dem Fahrzeug befinden und einen Kupferdraht abtasten, auf dem ein Impuls läuft. Sie hängen am Port 2 und 3 und heißen im Programm Links und Rechts, bzw werden die analogen Werte unter diesen Variablennamen abgespeichert. Sind beide Spulen direkt über dem Draht, wird eine bestimmte Spannung von jedem Sensor ausgegeben die einem analogen Wert von so 400 bis 600 entspricht. Ist ein Sensor auserhalb des Drahtes, wird ein analoger Wert von 777 ausgegeben. Also wenn z.b. der linke Sensor 600 und der rechte Sensor 777 zeigt, weiß das Programm, dass das FTS rechts von der Spur ist und lenkt entsprechend.
Um dann wieder für die Geradeausfahrt die Mittelstellung der Lenkachse zu finden haben wir ne Lichtschranke an Port 4, die sich direkt über dem roten Zahnrad der Lenkachse befindet. Die zeigt eine Spannung an wenn das rote Zahnrad nicht in der Mitte ist und keine Spannung, wenn es in der Mitte ist. Deswegen das "Loop Until Sensor_lichtschranke < 800". Wir haben auch noch nen Poti an der Lenkachse, um nen bestimmten Lenkwinkel zu erreichen, aber der wird im Moment nicht benutzt. Die Spurfolgung hat auch so ganz gut geklappt.
Zu 1.: Ah okay, ist mir gar nicht aufgefallen. Ich hatte das Programm ursprünglich aus dem RN-Control Testprogramm gebastelt. Kann ich die Zeile mit dem "Tccr1b" dann einfach weglassen? Oder braucht man das?
Zu 2.: Den Quellcode für die Timevorgabe hab ich direkt vom Programm rnAVR von roboternetz.de übernommen, das mir auch die Werte für den Prescaler und die Timevorgabe gegeben hat. Ich weiß nicht wie alt das Programm ist und ob es fehlerfreien Quellcode erzeug, hab es über die Suchfunktion gefunden. Ich kenn mich mit Interrupts leider gar nicht aus und hab das am Wochenende mal in nem Buch bzw im RN-Wiki nachgelesen. Also ob es funktioniert kann ich nicht genau sagen, da sich mit dem Timer gar nichts mehr getan hat.
Kann es vielleicht auch sein dass der Quellcode im ISR zu lang ist und der Prozessor es gar nicht schafft den 10 Mal pro Sekunde abzuarbeiten und es deswegen Probleme gibt, sprich er noch gar nicht fertig ist ihn abzuarbeiten, ihn aber erneut aufrufen will? Ich hab auch irgendwo mal gelesen dass man da eigentlich keine allzu langen Befehle reinschreiben sollte. Eigentlich würde es auch reichen wenn er nur ein Interrupt pro Sekunde hat.
Lesezeichen