mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Servoansteuerung mit pic 16f872


Autor: elektrolurch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/tab...) 
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'

Autor: elektrolurch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als Zusatzinformation, ich benutze einen 4 Mhz Keramikschwinger.

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.