-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Servosteuerung und STK500

  1. #1

    Servosteuerung und STK500

    Anzeige

    Hallo STK 500-Freaks

    Könnt ihr mir einen Ansatz geben, wie ich (für den Anfang mal) einen Servo über ASM ansprechen kann? Reicht ein Servo aus dem Modellbauladen gegenüber? Wie muss ich den Servo auf dem STK verkabeln? Muss man einen Servo konstant bedienen (Loop) oder reicht eine Adressübergabe und der bleibt in dem definierten Winkel? Brauche ich zusätzliche Speisung oder kann das STK das liefern (auch in Hinblick auf später 4 Servos - Wenn nein, speise ich den Saft übers STK oder über einen externen Adapter)? Kann ich überhaupt einen Servo direkt am STK anschliessen oder braucht es was dazwischen? Wenn ja: eine Lochrasterplatine kann ich bestücken, wenn ich weiss, was wie drauf muss. Wenn nein: Puh, schwein gehabt! Bin Windoof-Entwickler und habe keine Ahnung von Volt, mA usw, geschweige denn von Schaltungen oder so. Aber ich werds hinkriegen - bin ein C64-Freak und mit dem hab ich ja auch schon einiges angestellt

    Für alle Anleitungen, Codebeispiele oder sonstigen Hinweise bin ich überdankbar und freue mich, meine Fortschritte in diesem Forum posten zu können.

    Viele Grüsse
    Raoul

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.07.2006
    Ort
    Mannheim
    Beiträge
    454
    Mit dem STK500 programmiert man microcontroller und testet daran hängende Schaltungen. Es ist kurz vor Weihnachten, daher sind Glaskugeln out. Wie sollen wir wissen, was du verbauen willst. Servos gibt es etliche. Wenn du hier Antworten haben möchtest, dann poste hier die Daten der Geräte, die du verwenden willst, dann kann man dir auch sagen ob du Interface Bausteine brauchst, oder nicht. Lieber eine Zahl zu viel als 2 zu wenig, denn wenn man jede Ziffer nachfragen muß, dann nervt das nicht nur, es dauert auch länger.

  3. #3
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    64
    Beiträge
    12.372
    Hier haben wir eine kleine Darstellung über Servos, über die Controller steht im dem Bereich auch einiges.
    Manfred

    http://www.roboternetz.de/wissen/index.php/Servo

  4. #4
    Ich möchte nichts konkretes realisieren. Servos sind einfach interessanter als LEDs und das wäre für mich mein erstes kleines Elektronik-Projekt. Ich bitte um Verständnis für meine Unwissenheit.

    @JonnyP: Ich wollte Dich auf keinen Fall nerven, nur habe ich noch keine Geräte, die ich anschliessen möchte. Das STK (mit AT90S8515-Controller) und meine Neugierde sind im Moment meine Ausgangslage. Vielleicht hast Du mir eine Empfehlung, was für ein Servo-Typ sich einfach und ohne sonstige Infrastruktur verwenden lassen würde?

    @Manf: Danke für den Link, ich habe auch noch ein Code-Beispiel gefunden:

    /* servo ist angeschlossen an PB0 */
    sbi(PORTB, PB0); /* high */

    /* eine gewisse zeit nichts tun,
    * entweder ausrechnen oder experimentell ermitteln
    */
    for(delay=0;delay<servo_value;delay++) {
    asm("nop"); /* nichts tun */
    }

    cbi(PORTB,PB0); /* low */

    Quelle: http://scriptkiller.de/avr_sharp_3d_scanner.php

    Laienhaft schliesse ich daraus, dass ich ein Signal auf einem Portpin setzen, warten und wieder löschen muss. Die Wartezeit definiert den Winkel. Ich muss noch rausfinden, wie man Interrupts programmiert, aber wenn man den Code in einem simplen Loop wiederholen würde, müsste ich am Schluss vermutlich noch eine NOP-Schlaufe anhängen, welche 20ms wartet, um den 20ms-Intervall zu generieren? Nicht sehr fein, aber ist ja auch nur zum Verständnis.

    Nochmals zur physischen Seite: Wie schliesse ich einen Servo auf dem STK an. Servos haben nach meinen neuesten Kenntnissen (danke Manf) 3 Anschlüsse (+5V/GND und den effektiven Signalanschluss (PWM)). Wo ich das Signal anschliessen muss, weiss ich jetzt: PortX/PinX (z.B. PORTB, PB0). Woher kriege ich die +5V? kann mir das STK das liefern? GND werd ich wohl noch irgendwo auf dem Board finden.

    Danke für Eure unendliche Geduld und viele Grüsse, Raoul

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Woher kriege ich die +5V?
    Mit STK500 hast Du Dir was sehr gutes angeschafft, schau Dir die Platine doch genau an, Bei allen Pinheads hast Du ganz unten zwei Anschlüsse GND u. VTG wenn Du jetzt Dein VTarget auf 5V einstellst (AVR STUDIO) kannst Du da die 5V anzapfen...
    Ich hatte problemlos 4 Servos gleichzeitig an STK500 angeschlossen, von da aus sehe ich da keine Probleme...
    Dein Codebeispiel ist schon etwas älter sbi und cbi gibt es bei avr-gcc IMHO nicht mehr dafür solltest Du C pur benutzen
    PORTB |= (1<<PB0);
    um den Pin HIGH zu schalten, und
    PORTB &=~(1<<PB0);
    um den LOW zu schalten,
    seh Dich hier im Forum was um, Beispiele gibt es genug...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  6. #6
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    64
    Beiträge
    12.372
    Als Einstiegs-Servo sind die "Conrad 5€ Servos" zu empfehlen. Sie arbeiten wie die meisten einfachen Modellbauservos und sind eben nicht sehr teuer.
    Manfred

    http://www.roboternetz.de/wissen/ind.../Bezugsquellen

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.07.2006
    Ort
    Mannheim
    Beiträge
    454
    @ raoul.m
    Hallo mein Guter, du nervst mich nicht (ich würde dann nicht mehr antworten). Es sollte nur der Hinweis sein, gleich mit allen Fakten rüber zu kommen. Klapper hier mal das Forum ab und du weisst was ich meine. Es werden ein paar Insider Sätze ins Forum geworfen und manche Leute erwarten, das jeder erkennt, was sie bei sich auf dem Tisch liegen haben.

    Izaseba und Manf haben schon alles wichtige gesagt.
    Ein Tip vielleicht noch zu den Steckanschlüssen auf den STK500: Ich habe mir von Schrott-PC´s die LED-und Tasterkabel mit ihren Flachanschlüssen herausgeholt, die kann ich prima für Peripherie am STK verwenden.

  8. #8
    @Manf: Danke für Deine Empfehlung. Ich schloss daraus, dass das Servo keine speziellen Bedingungen erfüllen muss und habe mir das billigste Servo von einem Modellbauladen besorgt. Conrad wäre inkl. Versand nur unwesentlich günstiger gewesen.

    @izaseba: Mit einem Satz alles erklärt Danke sehr. Ich habe rot auf VTG, schwarz auf GND und gelb (Signal) auf PB0 gestöpselt und schön mit den Servokabeln verzwirbelt und mit Klebstreifen gesichert. Da hab ich sogar Einzel-Pin-Abnehmer mit passenden Kabeln und so gekauft, aber das Lötzinn vergessen (*schäm*).

    Aber anyway - bin eh noch nicht so weit. Irgendwas an meinem Code funzt noch nicht so recht. Ich befinde mich im Moment im AVR-Simulator und habe ein Programm geschrieben, das den 'Funktionstest' vornehmen soll, nämlich schlicht und einfach das Servo in die mittlere Position stellen, sonst nichts. Also: Pin0 auf PortB einschalten (1.5ms warten), ausschalten (20ms warten) und von vorne. Das Timing hab ich aus der Servo-Seite von Manf.

    Hier der Code:

    ;***** STK500 Servo in mittlere Position bringen
    ;************************************************* *********
    .include "8515def.inc" ; Definitionen für AT90S8515
    rjmp RESET ; Reset Handle
    ;************************************************* *********
    .def temp =r16 ; Temporary register
    RESET:
    ser temp ; ???
    out DDRB,temp ; Set PORTB to output
    LOOP:
    out PORTB,temp ; Update Port
    sbi PORTB, PB0 ; Setze PortB, Pin0
    rcall WAITPOS ; warte 1-2ms (Servo-Position)
    cbi PORTB, PB0 ; Lösche PortB, Pin0
    rcall WAITREP ; warte 20ms (Repetition-Periode)
    rjmp LOOP ; usw usf

    ;************************************************* *********
    ; Subroutinen (später mal auf 4Mhz anpassen)
    ;************************************************* *********
    WAITPOS:
    ldi ZH, HIGH(1500) ; setze höheres Z-Byte
    ldi ZL, LOW(1500) ; setze niedriges Z-Byte
    LOOPPOS:
    sbiw ZL, 1 ; decrementiere Z
    brne LOOPPOS ; loop bis Z=0
    ret ; und tschüss

    WAITREP: ; dito WAITPOS
    ldi ZH, HIGH(20000)
    ldi ZL, LOW(20000)
    LOOPREP:
    sbiw ZL, 1
    brne LOOPREP
    ret


    Wenn ich mit F10 durchsteppe, loopt das immer nur hier durch:
    sbi PORTB, PB0 ; Setze PortB, Pin0
    rcall WAITPOS ; warte 1-2ms (Servo-Position)
    Zu
    cbi PORTB, PB0 ; Lösche PortB, Pin0
    usw. kommt er gar nie...hmmm

    Was mache ich falsch?

    Ach und ja: Ich weiss, dass das nicht die optimale Lösung ist (Polling und so) aber ich möchte den Weg vorerst mal in diese Richtung weiter beschreiten. Zuerst mal solls übersichtlich bleiben.

    Herzlichen Dank für Eure Unterstützung und viele Grüsse
    Raoul

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Abend,
    sieht ja garnicht so schlecht aus...
    nur wo setzt Du den Stackpointer ?
    Schau mal hier rein , ich denke an dem Fehlendem Stackpointer dürfte es liegen

    Gute Nacht

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.07.2006
    Ort
    Mannheim
    Beiträge
    454
    Ich denke du solltest bei "Reset" erst mal den Stack initialisieren, sonst gibt es kein ret.
    ; STACK initialisieren
    ldi temp, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse
    out SPL, temp
    ldi temp, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse
    out SPH, temp

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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