mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Servosteuerung - Neuland


Autor: Nickl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Ich muss einen Servo über einen ATMega128 ansteuern... kenn moch aber
mit Servos Null aus!
Könnte mir jemand sagen, wie ich ihn anschließe ? (PWM, Port,...)
Und, hätt eventuell jemand einen source code für mich.. oder einige
funktionen ?
Und andere Wichtige Sachen ?

Mit bestem Danke, lg Nickl

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit der Suche kennst du dich wohl auch nicht aus:

http://www.mikrocontroller.net/forum/read-1-75205.html

Autor: Nickl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Rahul...
Jetzt kenn ich mich mit der theorie aus... aber nach was ich noch auf
der sucha bin wäre ein source beispiel wo genau 1 servo angesteuert
wird.. möglichst einfach, damit ich mich auch auskenna...

danke niki

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
// Steuerung zweier Servos über einen ATmega162 und dessen Timer1
// Setzen der Portpins durch das Overflow-Interrupt
// Rücksetzen der Portpins durch die Output-Compare-Interrupts.
// Servo1 an PORTE 0, Servo 2 an PORTE 1
// 15.Oktober 2005

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

#define Startwert 0x0E66   // Timer-Ticks für 1ms bei 3,686MHz
#define Endwert 0x1CCC     // Timer-Ticks für 2ms bei 3,686MHz
#define Mittelwert 0x1599  // Timer-Ticks für 1,5ms bei 3,686MHz

volatile unsigned int Servo1, Servo2;  // Reload-Werte
volatile unsigned int inkrement1, inkrement2; // Änderungswerte
volatile unsigned char umsch1, umsch2; // Richtungsangabe
volatile unsigned char dec,dec0;  // Refresh

volatile unsigned char Buffer[BufferMax];
volatile unsigned char Buffercount, send;

SIGNAL(SIG_OVERFLOW1)
{
  PORTE = 0x06; // beide Servos "einschalten"
  dec--;
  if (dec == 0)
  {
    dec = dec0;
    if (umsch1 == 0)
    {
      Servo1 += inkrement1;
    }
    else
    {
      Servo1 -= inkrement1;
    }

    if ((Servo1 < Startwert) || (Servo1 >= Endwert))umsch1 = ~umsch1;

    if (umsch2 == 0)
    {
      Servo2 += inkrement2;
    }
    else
    {
      Servo2 -= inkrement2;
    }

    if ((Servo2 < Startwert) || (Servo2 > Endwert)) umsch2 = ~umsch2;

    OCR1A = Servo1;
    OCR1B = Servo2;
  }
}

SIGNAL(SIG_OUTPUT_COMPARE1A)
{
  PORTE &= ~0x02;  // Servo 1 ausschalten
}

SIGNAL(SIG_OUTPUT_COMPARE1B)
{
  PORTE &= ~0x04; // Servo 2 ausschalten
}

int main(void)
{
  DDRE = 0x06;  // zwei Pins als Ausgang
  PORTE = 0x01;  // low am Ausgang. Pull-Up einschalten

  Servo1 = Mittelwert;
  Servo2 = Startwert;

  OCR1A = Servo1;
  OCR1B = Servo2;

  inkrement1 = 0x25;
  inkrement2 = 0x12;

  dec0 = 1;
  dec = dec0;

  umsch1 = 0;
  umsch2 = 0;
  TIMSK = ((1<<TOIE1) | (1<<OCIE1A) | (1<<OCIE1B) | (1<<TICIE1));

  sei();

  TCCR1B = (1<<CS10);

  for(;;)
}

ganz einfach ist es nicht. Aber du willst ja noch was lernen...

Autor: Nickl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bist a guade haut! danke

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
auf www.hannes.de.md findest du ein Beispiel für mehrere Servos am
AT90S4433. Ist in Assembler, aber gut kommentiert.

...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.