Forum: Mikrocontroller und Digitale Elektronik Servoansteuerung


von Andre (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

bin schon den ganzen Tag dabei, ein Multiplexservo über einen 4433
anzusteuern.
Nachdem ich sämtliche Tuts wie auch Google durch habe, kann ich den
Fehler nicht finden.
Im Anhang ein Bild des grundsätzlichen Aufbaus.

Folgende Sympthome treten auf:

Beim einschalten fährt das Servo in eine Richtung (links) und nach
einer Laufzeit von 2-3 sek. bricht alles zusammen (PWR LED aus).
Das Servo steht nicht im Anschlag !

Ich denke mal, das es nicht am Netzteil liegt, denn es ist ein
PC-Netzteil (5V / 7A). Liefert also für ein Servo genug.

Folgenden code verwende ich:

$regfile = "4433def.dat"
$crystal = 4000000
Ddrd = &B11111111
Do
Portd = &B00000000
Waitms 20
Portd = &B11111111
Waitms 1.5
Loop
End

Hat jemand eine Idee ?

Gruß,
Andre.

von ThomasB (Gast)


Lesenswert?

Hallo Andre:
Verwende doch den Befehl -- Config Servos --
siehe online hilfe des Compilers-

Der Transistor ist falsch beschaltet ;-)
Basis ist OK.
Emitter nach Masse (pfeil(der Emitter) zeigt nach aussen
Kollektor nach VCC,bez. an den Servo (open Collector)
der Transi ist ein NPN Typ

mfg ThomasB

von Andre (Gast)


Lesenswert?

Hallo Thomas,

in der schnelle ist mir das nicht aufgefallen im entwurf.

Config Servos habe ich schon benutzt, bzw. das Beispiel welches dabei
ist.

Im Anhang findest Du eine überarbeitete Skizze.
Diese sollte doch funktionieren, oder ?

Das komische ist jetzt, das das Servo immer nur in eine Richtung läuft,
anschliessend bricht alles zusammen.

Ist es auch möglich, das Servo direkt über den PB0 anzusteuern ?

Gibt es irgendwo Schaltpläne ?

Für Hilfe wäre ich sehr dankbar.

Gruß,
Andre.

von Andre (Gast)


Angehängte Dateien:

Lesenswert?

sorry, anhang vergessen. :-)

von ThomasB (Gast)


Angehängte Dateien:

Lesenswert?

hallo Andre:
Die Servos kannst du direkt an die Port hängen
Siehe beigefügte Dateien im ZIP-Format.

von Andre (Gast)


Lesenswert?

Hallo Thomas,

hab das Problem gefunden. Es lag definitiv am Netzteil.
Anscheinend reichte mein 10 Jahre altes Netzteil nicht aus, um ein
popeliges Servo anzutreiben.
Nachdem ich ein Aktuelles ATX angeschlossen habe, gings.

Folgenden Code habe ich verwendet:

.include "4433def.inc"
.def sp = R16
rjmp main

main:
    ldi sp,LOW(RAMEND)
    out SPL,sp

    ldi r16, 0b00000001
          out DDRB, r16
loop:
    rcall delay_20
    ldi r16, 0b00000001
    out PORTB, r16
    rcall delay_1_5  ;delay von 1.5ms (optional delay_1 für 1ms)
    ldi r16, 0b00000000
    out PORTB, r16
    rjmp loop


delay_1_5:
          ldi  R17, $09
WGLOOP5:  ldi  R18, $DD
WGLOOP6:  dec  R18
          brne WGLOOP6
          dec  R17
          brne WGLOOP5
          ldi  R17, $02
WGLOOP7:  dec  R17
          brne WGLOOP7
          ret
delay_20:
          ldi  R17, $86
WGLOOP0:  ldi  R18, $C6
WGLOOP1:  dec  R18
          brne WGLOOP1
          dec  R17
          brne WGLOOP0
          nop
          nop
          ret

delay_1:
          ldi  R17, $1F
WGLOOP10: ldi  R18, $2A
WGLOOP11: dec  R18
          brne WGLOOP11
          dec  R17
          brne WGLOOP10
          nop
    ret

delay_1sek:
          ldi  R17, $24
WGLOOP20:  ldi  R18, $BC
WGLOOP21:  ldi  R19, $C4
WGLOOP22:  dec  R19
          brne WGLOOP22
          dec  R18
          brne WGLOOP21
          dec  R17
          brne WGLOOP20
          ldi  R17, $01
WGLOOP23:  dec  R17
          brne WGLOOP23
          nop
    ret

Gruß,
Andre.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.