- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 30

Thema: 8 Servos mit dem Atmega32 steuern

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #19
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.256
    Ich würde die Ansteuerung mal anders, ohne CTC probieren.

    Lass den Timer frei laufen und nimm beim Prescaler einen Wert von 8.
    Somit ist ein Timer Takt von 0,5µs zu erreichen.
    Die Comparematch Interrupts kannst Du dann so setzen, das der gewünschte Servowert zum aktuellen Zählerstand des TCNT Registers dazugezählt wird.
    Der Vorherige Ausgang wird abgeschaltet, der gewünschte aktiviert und fertig ist der Lack.
    Wenn du eine Variable definierst die 20ms entspricht, also 40000 und von dieser dann die gewünschten Servowerte jeweils abziehst und diesen Wert + TCNT als 9ten Wert in das Comparematch Register schreibst, ohne einen Ausgang zu aktivieren kommt auch alle 20ms ein Puls aus dem Controller raus.
    Beim letzten Servo kann der allerdings um maximal 8 ms schwanken.
    Nicht alle Servos packen eine Wiederholrate von 8ms.

    Hier mal ein Codebeispiel für ein Servo.
    PWMOUT ist der Servopin
    ui_pulseout ist die Länge des gewünschten Servopulses in 1/2µs, also 2000 entspricht 1,0ms.
    ui_pauslengh ist die gewünschte Pause allerdings hier ohne abzug des Servopulses, weil ja nur ein Servo bedient wird.
    ub_highpulse ist ein Marker, ob 1 oder 0 am Ausgang anliegen, den kannst Du in eine Byte Variable umwandeln und Ihn dann zum Indizieren der Servoimpulsvariable verwenden.
    Code:
    // Timer 1 output compare A interrupt service routine - Servoimpulse ausgeben
    interrupt [TIM1_COMPA] void timer1_compa_isr(void)
    {
    if(ub_highpulse==0)
        {
        PWMOUT=1;
        OCR1A=ui_pulseout+TCNT1;
        ub_highpulse=1;
        }
    else
        {
        PWMOUT=0;
        OCR1A=ui_pauslengh+TCNT1;
        ub_highpulse=0;
        };
    }
    Hier die Timer 1 Einstellungen Beim TIMSK wurde zusätzlich noch Timer 0 gestartet
    Code:
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 2000,000 kHz = Prescaler 8
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: On
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x02;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    ....
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x11;
    Der Code läuft auf nem ATMEGA16, sollte also auch beim 32er gehen.
    Geändert von wkrug (17.05.2014 um 08:16 Uhr)

Ähnliche Themen

  1. Servos mit PC steuern
    Von Surebetter im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 6
    Letzter Beitrag: 25.04.2010, 14:11
  2. Wie kann ich mit dem CCPR5 Servos steuern ?
    Von Morten im Forum Robby CCRP5
    Antworten: 3
    Letzter Beitrag: 03.05.2009, 13:42
  3. Servos mit ATmega32
    Von murdocg im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 7
    Letzter Beitrag: 17.10.2008, 06:48
  4. 12 Servos mit PIC steuern
    Von m0 im Forum PIC Controller
    Antworten: 13
    Letzter Beitrag: 18.03.2005, 22:11
  5. [ERLEDIGT] Servos mit SD20 steuern
    Von Sebastian im Forum Sensoren / Sensorik
    Antworten: 16
    Letzter Beitrag: 04.12.2003, 14:12

Berechtigungen

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

LiFePO4 Speicher Test