PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo ansteuern Mega32



Netzwerg
23.02.2007, 15:31
Hi,
Ich möchte gerne ein Servo mit PWM am Pin d5 beim MEGA32 (sollte dieser spezial port sein oder?) ansteuern. Hab dazu folgenen code zusammengesucht.


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

Config Portd = Output




Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1

Enable Timer1
Enable Interrupts

Do

Compare1a = 50
Compare1b = -50
Portd.6 = 1
Waitms 2000
Compare1b = 50
Compare1a = -50
Portd.6 = 0
Waitms 2000
Loop

End


aber leider ruckelt das Servo nur ein bischen, habs auch schon mit anderen Werten außer -50 -> 50 versucht immer ruckelt das servo und zieht eine menge an Strom. Ist der Code den Richtig oder liegt da der Fehler begraben, denn mit einer normalen Fehrnsteuereung kann man das Servo normal anstuern ohne Probleme.

bertl100
23.02.2007, 15:36
sieh mal in der Hilfe unter "config servos" nach.

Vielleicht gehts dann besser.

Jon
23.02.2007, 15:45
Schon mal das Wort Servo angeklickt?
Da ist ein Code dabei. Das muss nicht so kompliziert wie bei deinem Code sein.

jon

Netzwerg
23.02.2007, 16:18
Hi, Danke
den Code hab ich schon ausprobiert und zwar in der form


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000


Config Servos = 2 , Servo1 = Portd.4 , Servo2 = Portd.5 , Reload = 1

Config Portd = Output

Enable Interrupts



Do

Servo(1) = 110
Servo(2) = 100
Portd.6 = 1
Waitms 2000
Servo(1) = 60
Servo(2) = 60
Portd.6 = 0
Waitms 2000
Loop

End




läuft immer noch nicht , bei diesem Code blinkt nicht einmal das led. Das Servo rukelt immer noch, zwar anders als beim ersten code aber.... Vorm halben jahr hatte ich schon ein mal mit Servos etwas gebaut damals hab ich es auch hin bekommen leider nur habe ich den code nicht mehr. Ist denn der Code nun falsch muss man irgentwelche spezial Bits noch setzten?

Mosi
23.02.2007, 16:38
probier mal: reload=10
Gruß, Rene

Netzwerg
23.02.2007, 19:48
hi,
ich hab mal ein servo dran gehangen wo das poti abgekoppelt ist etc.
da läuft der erste Code rukel frei leider verhält er sich bei einem "normalen" servo komisch. Das schlägt aus und zuckt ein bischen rum.
Beim Zweiten code ruckelt das abgekoppelte servo in einer Richtung. und bei dem Normalen servo ruckelt das acuh zu immer der gleichen stelle(egal wie ich die werte wähle ). Woran kann das liegen ?

MFG

magic33
23.02.2007, 20:13
die frequenz von 1Mhz ist viel zu wenig habe persönlich die erfahrung gemacht das das servo sich erst ab 4Mhz so richtig verhält

Jon
23.02.2007, 20:17
Bei normalen Servos ist es normalerweise
reload=20
Meine Servos funktionieren auch bei 1MHz ohne Probleme. Musst du ausprobieren.

jon

magic33
23.02.2007, 20:22
das servo ansich alleine sollte gehen aber wenn noch ein timer ins spielkommt und dann noch timer 0 dann ist essig mit sauberem signal bei 1Mhz

beim tiny26 mit 8mhz intern ist das alles kein problem siehe oben im beitrag

wenn das layout für eagel gewünscht wird oder das programm kann ich gerne zur verfügung stellen


'/////////////////////////////////////////////////////////
'/// BASCOM ISP PROGRAMMER TEST ///
'/// PORT B toggel LED SERVOan portb3 LCD
' ADC1 porta1=signal 0-5V FUNKTION TYNY26 feb 2007
'/////////////////////////////////////////////////////////
$regfile = "AT26def.dat" ' used device
$crystal = 8000000

$hwstack = 32 ' default use 32

$swstack = 10 'default use 10 for

$framesize = 40 'default use 40 for



Ddra = &B11110000
Config Adc = Free , Prescaler = 64 , Reference = Off
Start Adc
Config Pinb.3 = Output
Config Pinb.4 = Output
Config Pinb.5 = Output
Config Servos = 1 , Servo1 = Portb.3 , Reload = 10
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portb.5 , Rs = Portb.4
Config Lcd = 20 * 2
Const Teiler = 0.00488
Const Teiler2 = 1.636
Enable Interrupts


Dim Wertad As Word
Dim Tmp As Word
Dim Wertse As Byte
'Dim A As Byte
'Dim Teiler As Single
Dim Volt As Single

Wertad = 500


Do
Waitms 10
Wertad = Getadc(1)

If Wertad > 1022 Then Wertad = 1022
If Wertad < 10 Then Wertad = 10
Tmp = Wertad / 4
If Tmp > 150 Then Tmp = 150
If Tmp < 40 Then Tmp = 40
Wertse = Low(tmp)

Servo(1) = Wertse

Volt = Wertad * Teiler
Cls
Lcd "Volt :" ; Volt
Locate 1 , 11 : Lcd " V " '; Fusing(volt , "# . ##")
Lowerline
Wertse = Wertse - 40
Volt = Wertse * Teiler2
Lcd "Grad :" ; Volt
Locate 2 , 13 : Lcd " " '; Fusing(volt , "# . ##")

Waitms 100


Loop



eminen wichtig bei bascom ist die reienfolge der inizialisierung

minium :)
15.04.2007, 09:52
Hi,

aber bei der Version, die ist, wenn man auf servo klickt, kann man nur 5 servos ansteuern. Das ist im Moment mein Problem, da ich 6 habe. Weiß jmd. ob es bei der neuen Bascom Version besser ist ? (das man mehr als 5 servos ansteuern kann)

Viele Grüße