PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Streckenmessung etc.?



wölfchen
28.02.2004, 21:30
Hallo,
habe bis jetzt mal einfache Sachen mit dem AVR (Atmega8) gemacht, da ich ja noch Anfänger bin.
Aber ich habe ein Frage.
Ich möchte an der Achse meines geplanten Robots einen Sensor anschließen der mir pro Umdrehung zwei Pulse gibt. Diese Pulse möchte ich auf einer bestimmten Strecke messen (z.B. 10 Meter) und anschließend "zwischenspeichern" damit alle nachfolgenden Unterprogramme mit diesem Wert arbeiten können. Wie schreibt man so etwas in Assembler, finde da keine Beispiele?
Habt ihr ein Programmierbespiel für für mich?
danke wölfchen

04.03.2004, 18:28
Hallo, kann mir denn niemand etwas sagen?
Mir reicht auch schon wenn mir jemand erklärt wie ich die zurückgelegte Strecke messen kann, im Meter.
danke wölfchen

04.03.2004, 19:15
Mir reicht auch schon wenn mir jemand erklärt wie ich die zurückgelegte Strecke messen kann, im Meter.


Mit dem Teil den du in der Grundschule versäumt hast, kann ich dir gerne aushelfen:
Die Formel für den Radumfang ist PI*Raddurchmesser. Genau diese Strecke legt dein Robot zurück, wenn sich das Rad einmal dreht.
Wenn du die Radumdrehungen zählst kannst du dir ausrechnen, wieweit der Robot gefahren ist.

Wie du deinem AVR beibringst, dass der die Radumdrehungen zählt weiss ich auch nicht.

Jan_Weber
05.03.2004, 14:04
An deiner Stelle würde ich mir die AVR-Programmierung mit der Sprache C aneignen. Dafür gibt es einen tollen freien Compiler, AVR-GCC, zu bekommen bei www.avrfreaks.net unter dem Namen "WINAVR". Das Programmieren in einer Hochsprache ist viel einfacher und bei C auch ziemlich hardwarenah.

Ausserdem musst du dir keinen Kopf machen um math. Routinen, die sind alle dabei. Du kannst also durchaus direkt mit Fließkommazahlen arbeiten (Pi ist ja eine solche). Das ist allerdings etwas rechenzeitaufwendig. Vielleicht brauchst du auch keine absoluten Werte in Meter, sondern kannst auch mit Ticks wirtschaften.

Ich würde den Sensor an einen Interruptpin anschließen, eine globale Variable definieren, und diese bei jedem Interrupt inkrementieren.

Gruß,

Jan