-
        

Ergebnis 1 bis 10 von 10

Thema: Servo ansteuern Mega32

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    30.09.2006
    Beiträge
    7

    Servo ansteuern Mega32

    Anzeige

    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.
    Code:
    $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.

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.02.2005
    Ort
    Salzburg
    Alter
    37
    Beiträge
    464
    sieh mal in der Hilfe unter "config servos" nach.

    Vielleicht gehts dann besser.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Schon mal das Wort Servo angeklickt?
    Da ist ein Code dabei. Das muss nicht so kompliziert wie bei deinem Code sein.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    30.09.2006
    Beiträge
    7
    Hi, Danke
    den Code hab ich schon ausprobiert und zwar in der form
    Code:
    $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?

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.04.2005
    Beiträge
    146
    probier mal: reload=10
    Gruß, Rene

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    30.09.2006
    Beiträge
    7
    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

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.02.2007
    Beiträge
    210
    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
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken servo_controler.jpg  

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Bei normalen Servos ist es normalerweise
    reload=20
    Meine Servos funktionieren auch bei 1MHz ohne Probleme. Musst du ausprobieren.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.02.2007
    Beiträge
    210
    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
    Code:
    '/////////////////////////////////////////////////////////
    '///  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

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    05.09.2006
    Beiträge
    644
    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
    mfg Jonas

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •