Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo ansteuern Mega32
Netzwerg
23.02.2007, 16: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, 16:36
sieh mal in der Hilfe unter "config servos" nach.
Vielleicht gehts dann besser.
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, 17: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?
probier mal: reload=10
Gruß, Rene
Netzwerg
23.02.2007, 20: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
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
Bei normalen Servos ist es normalerweise
reload=20
Meine Servos funktionieren auch bei 1MHz ohne Probleme. Musst du ausprobieren.
jon
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, 10: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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.