- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 32

Thema: Servo-Befehl stört 1wire Kommunikation

  1. #21
    Benutzer Stammmitglied
    Registriert seit
    03.09.2011
    Beiträge
    72
    Anzeige

    E-Bike
    Ich habe jetzt den

    L293D (PWM) an (Atmega PB2, also OC1B und den
    Servo an PB1, also OC1A.

    Könntest du mir die Hardwarebasierende Ansteuerung des Servo mittels OC1A erläutern?

  2. #22
    Benutzer Stammmitglied
    Registriert seit
    03.09.2011
    Beiträge
    72
    Mist, Hardware ist ja BP3, also OC2 !!! -- Richtig!?

  3. #23
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Das hier sollte einfach auf einen ATM8 umzuschreiben sein:
    Code:
    $Regfile = "m32def.dat"
    $crystal = 16000000
    $hwstack = 48
    $swstack = 32
    $framesize = 32
    
    ' ### Reine Hardware-Pulserzeugung für ein einzelnes Servo, jitterfrei ###
    
    Const WGM10 = 0
    Const WGM11 = 1
    Const WGM12 = 3
    Const WGM13 = 4
    
    Servopin Alias PortD.4
    Config Servopin = Output                                    ' OC1B als Ausgang
    
    Servo_Pos Alias Compare1B                                   ' Stellposition des Servos
    Servo_Pos = 3000                                            ' Defaultposition, 2000 = 1ms, 4000 = 2ms
    
    TCCR1A = Bits(WGM11 , WGM10 , COM1B1)                       ' Mode 15, Fast PWM, CTC
    TCCR1B = Bits(WGM13 , WGM12 , CS11)                        ' Mode 15, Prescaler 8
    COMPARE1A = 39999                                           ' Obere Zählgrenze
    Enable Compare1A
    
    Enable Interrupts
    
    Do
      For Servo_Pos = 2000 To 4500                              ' Testcode, wechselweise Endpositionen anfahren
        Waitus 80
      Next Servo_Pos
      For Servo_Pos = 4500 To 2000 Step -1
        Waitms 1
      Next Servo_Pos
    Loop
    
    End
    
    20ms_Tick_ISR:                                              ' ISR wir alle 20ms aufgerufen, kann für weitere Zwecke verwendet werden
    
    Return
    Bascom benötigt für den ATM8 nicht die Definitionen der WGM..., die sind bereits im .dat drin, können also entfallen. Was geändert werden muss, ist die Pindefinition für OC1B.

  4. #24
    Benutzer Stammmitglied
    Registriert seit
    03.09.2011
    Beiträge
    72
    Dankeschön.


    Soweit verstehe ich das. Die "20ms-Tick-ISR" muss doch aber aber auch aufgerufen werden?

    Was ich gerade gar nicht verstehe sind OC1A und OC1B wie stehen die jetzt mit den Timern in Verbindung?

    Muss ich den Timer1 im o.g. Code nicht konfigurieren?

    Und: was mache ich jetzt mit meinem L293D, den habe ich sonst immer über Compare1a angesprochen!?

    Ich bringe gerade alles durcheinander!

    Danke.
    Geändert von spelli2001 (11.09.2012 um 23:29 Uhr)

  5. #25
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Die PWM muss per Timer2 gemacht werden. Der Code zeigt einzig, wie man mit dem 16Bit Timer1 ein Servo im Hardwaremode als Fast-PWM ansteuert. Compare1A ist der neue Top-Wert, damit der Zähler eben nicht bis 65535, sondern nur bis 39999 zählt. Denn sonst wären es keine 20ms Wiederholrate, sondern entsprechend mehr. Compare1B sorgt dann für den eigentlichen Servoimpuls.

  6. #26
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Du musst noch ein On Compare1A 20ms-Tick-ISR einfügen, das hat sich beim Editieren aus dem Staub gemacht. Timer1 wird direkt über die Timerregister eingestellt, mit dem Config-Befehl könntest Du den Modus 15 nicht einstellen.

  7. #27
    Benutzer Stammmitglied
    Registriert seit
    03.09.2011
    Beiträge
    72
    Okay. Ich dachte OC1A wäre Timer1 und OC1B Timer2...

    Folglich hatte ich auch Compare1A und Compare1B zugeordnet...


    Das "Config Timer1 =" fällt weg, da Hardware?

    Über "On Timer1 20ms_Tick_ISR" rufe ich die Routine auf?

    Wie spreche ich denn dann über den Timer2 den L293D an? Dafür hatte ich immer Compare1A verwendet??????

  8. #28
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Wie gesagt, eine PWM auf Timer2, sollte ganz normal per Config Timer2 gehen, muss man nur aufpassen, weil's da kein Compare..A oder B gibt, da's nur ein PWM-Kanal ist.
    Config Timer1 fiel weg, da über TCCR1A und TCCR1B der Timer eingestellt wurde.

  9. #29
    Benutzer Stammmitglied
    Registriert seit
    03.09.2011
    Beiträge
    72
    So Servo läuft soweit! Vielen Dank MagicWSmoke für deine geduldige und ausführliche Erklärung!

    An Timer2 mache ich morgen ran!

  10. #30
    Benutzer Stammmitglied
    Registriert seit
    03.09.2011
    Beiträge
    72
    Ah, Also wird die Timer2 PWM über "OC2" an PB3 des ATM8 ausgegeben?

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Ähnliche Themen

  1. SD21 servo programm befehl speicherung problem
    Von michel999 im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 0
    Letzter Beitrag: 17.01.2011, 17:13
  2. Servo stört Microcontroller
    Von Krampfda im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 19
    Letzter Beitrag: 08.10.2009, 21:22
  3. servo-befehl in interrupt-routine funzt nicht
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 28.02.2009, 19:49
  4. cmucam 2 frage zu befehl Servo Mask
    Von Projector im Forum Sensoren / Sensorik
    Antworten: 3
    Letzter Beitrag: 19.01.2007, 18:07
  5. Servo mit Bascom Befehl mach nur "scheiße"
    Von AVRboy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 14
    Letzter Beitrag: 22.10.2006, 23:58

Berechtigungen

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

Solar Speicher und Akkus Tests