Forum: Mikrocontroller und Digitale Elektronik Servoansteuerung mit pic 16f872


von elektrolurch (Gast)


Lesenswert?

Hallo ihr Elektronikmenschen,
Ich bin momentan dabei einen Roboter zubauen. Ich habe mir dafür den 
BoE-Bot von Parallax ( 
http://www.parallax.com/Store/Robots/AllRobots/tabid/128/ProductID/302/List/1/Default.aspx?SortField=ProductName,ProductName) 
zugelegt um das Gestell und die Servos zu haben. Die Platine und 
Schaltung werde ich selber realisieren.
Ich benutze einen PIC16F872, das PicKit2 von Microchip und programmiere 
mit MPLAB.
Ich habe die Schaltung auf einem Steckbrett aufgebaut und die beiden 
Servo's so programmiert, dass er vorfährts fährt. Ich habe die 
Standartzeiten für Vorfährts- bzw. Rückwärtsfahren benutzt.
Steuer ich einen Servo vorwärts und einen rückwärts an, ergibt das die 
Vorwärtsfahrt, da sie ja Seitenverkehrt eingebaut sind. Möchte ich nun 
rückwärtsfahren und ändere die Zeiten, steuern sie nicht in eine, 
sondern in entgegengesetze Richtung. Nun frage Ich mich, wie ich die 
Rückwärtsfahrt realisiere.

Das Programm ist im Anhang!

Danke für eure Hilfe im Voraus :)






;***** VARIABLE DEFINITIONS
w_temp        EQU     0x7E
status_temp   EQU     0x7F
RB1        EQU     0x21
RB2        EQU     0x22
zeit1        EQU     0x23
zeit        EQU     0x24
;***** DEFINITIONEN

#DEFINE   Servo1    PORTB,1
#DEFINE   Servo2    PORTB,2

;**********************************************************************
    ORG     0x000             ; processor reset vector
    clrf    PCLATH            ; ensure page bits are cleared
      goto    init              ; go to beginning of program

init
    bsf  STATUS,RP0
    movlw  B'00000000'
    movwf  TRISB
    movlw  B'11111111'
    movwf  TRISA
    bcf  STATUS,RP0
    clrf  PORTB
    clrf  PORTA
main
 ;vorwärts fahren0
    Bsf  Servo1
    call  wait1
    Bsf  Servo2
    call  wait2
    Bcf  Servo1
    Bcf     Servo2
    call  wait3
    goto  main

wait1 ;2ms
    movlw  D'4'
    movwf  zeit
    movlw  D'125'
    movwf  zeit1
    nop
    decfsz  zeit1,f
    goto  $-2
    decfsz  zeit,f
    goto  $-6
    return

wait2 ;1ms
    movlw  D'2'
    movwf  zeit
    movlw  D'100'
    movwf  zeit1
    nop
    decfsz  zeit1,f
    goto  $-2
    decfsz  zeit,f
    goto  $-6
    return

wait3 ;18ms
    movlw  D'18'
    movwf  zeit
    movlw  D'249'
    movwf  zeit1
    nop
    decfsz  zeit1,f
    goto  $-2
    decfsz  zeit,f
    goto  $-6
    return



    END                       ; directive 'end of program'

von elektrolurch (Gast)


Lesenswert?

Als Zusatzinformation, ich benutze einen 4 Mhz Keramikschwinger.

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.