PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfänger braucht Hilfe



Tonyy
12.12.2010, 20:32
Hallo,

Ich wollte mich an ein Programm für einen Servostrecher machen, also eine Schaltung, die die eingehenden Signale auseinander spreizt und weitergibt an den servo. Nun ist mir noch einiges unklar, deshalb hier der Code:


$regfile "m8def.dat"
$crystal = 1000000



Config Portd = Output
Config Portb = Input

Dim Esignal As Byte
Dim Msignalplus As Byte
Dim Msignalminus As Byte
Dim Aplus As Byte
Dim Aminus As Byte
Dim Bplus As Byte
Dim Bminus As Byte


Aplus = Esignal - 150
Bplus = Aplus * 2
Msignalplus = Bplus + 150

Aminus = 150 - Esignal
Bminus = Aminus * 2
Msignalminus = 150 - Aminus




Do
Start:
Pulsein Esignal , Pinb , 0 , 1

Select Case Esignal

Case Is < 150:
Pulseout Portd , 0 , Msignalminus

Case Is = 150:
Pulseout Portd , 0 , Esignal

Case Is > 150:
Pulseout Portd , 0 , Msignalplus

Case Else:
Goto Start
Waitms 10
End Select


Loop

End



Ich habe auf jedenfall verstanden, dass ich mehr mHz brauch als den einen, den der Mega8 hat, möglichst 8mHz aber nun versteh ich das mit Pulseout nicht, gibts da irgendwie einen Umrechenfaktor, den ich vergessen habe? Warum kann man nicht einfach Pulseout = 150 schreiben?
Ja ich hatte bereits die Bascom-Hilfe mir angeschaut, wurde aber daraus auch nicht schlauer.
Danke im Voraus!
mfg

BoGe-Ro
12.12.2010, 21:36
PULSEOUT PORT , PIN , PERIOD

PORT
Name of the PORT. PORTB for example

PIN
Variable or constant with the pin number (0-7).

PERIOD
Number of periods the pulse will last. The periods are in uS when an XTAL of 4 MHz is used.



Eigentlich klärt diese hilfe doch ausreichend auf.
uS sollte man da wohl als µs=Mikrosekunden lesen.
Abhängig von der Variable Period (oder dem Wert der dort an der Stelle steht, wird ein Highsignal von entsprechender Länge ausgegeben.

Wie lang diese Länge ist, bestimmt der Wert und die Geschwindigkeit des Rechners.

hast du also 4MHz Taktfrequenz so würde ein Wert von 150 gleich 150µs entsprechen.

Hast du nur 1 MHz Taktfrequenz, so ist der entsprechende Puls also 4 mal so lang, also 600µs.


Was mir ansonsten auffällt - die Rechnerei am Anfang, vor dem Main, da ist die Variable Esignal=0, da ihr kein Wert zugewiesen wird.

In der Schleife liest du dann Esignal ein und gibst die Pulse aus...allerdings was macht das Case Else? egal welchen Wert nun Esignal hat - es ist definitiv größer, kleiner oder gleich 150....für welchen Zustand sollte dann die Else-Bedingung zutreffen?

Weiterhin, ich weiß nicht was ein Servostretcher ist - aber wenn es sich da um die Ansteuerung von Servomotoren handelt, gibt es einfachere Befehle, die das Timing gleich mit sich bringen, anstelle Pulseout.

Suche mal unter CONFIG SERVOS


Gruß BoGe-Ro

Tonyy
13.12.2010, 20:01
Danke für die Antwort, hatte mir da was falsches gedacht.
Aber im Pulsein-Befehl habe ich richtig verstanden, dass die Schleifen gezählt werden, richtig? Also bei Servomittelstellung entspricht dies Pulsein =150 oder muss diese Zahl auch an den Quarz angepasst werden? In der Bascom Hilfe steht davon nichts genaueres.
Und die Servomittelstellung würde ich also über Pulseout mit einem Wert von 750 bei einem 8Mhz Quarz realisieren?
Und müssen Rechnereien in meinem Fall unterhalb der Messerfassung stattfinden und können somit nicht am Anfang stehen bzw. vor der Messwerterfassung?
Schlussendlich, steht der Pulseout-Befehl dem Servobefehl außer im Code in etwas nach?
Viele Fragen, aber danke schonmal für deine Hilfe :)

BoGe-Ro
14.12.2010, 08:16
So, wie ich die Hilfe zu dem Pulsein-Befehl verstehe, werden ganze 10µs-Schritte gezählt. Wobei direkt im nachfolgenden Satz relativiert wird - es würde von der Quarz-Frequenz abhängig sein.

Ich würde das so deuten, dass es halt nur annähernd 10µs sind.

Zum Pulseout: 150 entspricht 150µs bei 4MHz
dann dürften 150 bei 8 MHz nur 75µs entsprechen.

beim Pulseout-Befehl musst du dich aber letztlich selber um die Frequenz deiner Ausgabe kümmern - also letztlich die Zeit ausrechnen, wann der nächste Pulseout-Befehl kommen muss.

Wenn du das Config Servos - Construct nutzt, wird dir dies alles abgenommen. Einmal initialisiert, änderst du nur noch die Variable, welche den Ausgabewert darstellt, Bascom nutzt dann einen Timer, um immer wieder zum richtigen Zeitpunkt die richtige Pulsbreite auszugeben

Und dies zum Preis von einem Timer - den du wahrscheinlich auch benötigen würdest, um den Startzeitpunkt des nächsten Pulses zu finden.

gib einfach mal Config bei Bascom ein, drücke F1 und suche die Stelle wo Config Servos steht


Gruß BoGe-Ro

Gruß BoGe-Ro