Gepost door Jeroen Vreuls op dinsdag 2 mei 2023
We gaan nu naar een stukje programma kijken.
'* Name : SERVO_BESTURING.
'* Author : H.van Zwieten.
'* Notice : Copyright (c) 2010 H.v.Z.
'* : All Rights Reserved
'* Date : 22-3-2010
'* Version : 1.0.
Device 16F887 ; Processor type
Xtal 10 ; Crystal 10 Mhz
Asm ; Config settings
CONFIG_REQ
__CONFIG _CONFIG1, HS_OSC & WDT_OFF & DEBUG_OFF & FCMEN_OFF & LVP_OFF & IESO_OFF & BOR_OFF & CPD_OFF & CP_OFF & MCLRE_OFF & PWRTE_ON
__CONFIG _CONFIG2, WRT_OFF & BOR40V
EndAsm
All_Digital true ; Alle poorten digitaal
Declare LCD_RSPin PORTD.2 ; Reset display poort D.2
Declare LCD_ENPin PORTD.3 ; Enable display poort D.3
Declare LCD_DTPin PORTD.4 ; Data display poort D.4 t/m D.7
Declare Adin_Res = 8 ; Resolutie 8 bits
Declare Adin_Tad = frc ; Set rc osc
Declare Adin_Stime = 50 ; Sample tijd 5
Symbol SERVO_MOT = PORTC.0 ; Uitgang servo
Dim POSITIE As Word ; Variabele positie servo
Dim DATA_IN As Byte ; Variabele data servo
Cls ; Wis display
DelayMS 500 ; Wachttijd
Clear ; Wis geheugen
;543210 ; Hulpregel poort A
PORTA = %000000 ; Maak poort A laag
TRISA = %111111 ; Poort_A I/O
;543210 ; Hulpregel poort B
PORTB = %000000 ; Maak poort B laag
TRISB = %000001 ; Poort_B I/O
;76543210 ; Hulpregel poort C
PORTC = %00000000 ; Maak poort C laag
TRISC = %00000000 ; Poort_C I/O
;76543210 ; Hulpregel poort D
PORTD = %00000000 ; Maak poort D laag
TRISD = %00000000 ; Poort_D I/O
;210 ; Hulpregel poort E
PORTE = %000 ; Maak poort E laag
TRISE = %111 ; Poort_E I/O
;76543210 ; Hulpregel analoog
ADCON0 = %00000001 ; ADCON0 register analoog
;543210 ; Hulpregel analoog poort_B
;ANSELH = %000000 ; ANSEL register analoog poort_B
;----------------------
; TEST PROGRAMMA SERVO.
;----------------------
RUN:
DATA_IN = ADIn 0
POSITIE = 850 + (DATA_IN*5)
Servo SERVO_MOT,POSITIE
DelayMS 10
Print At 1,1,Dec4 POSITIE
GoTo RUN
End
Zoals je kunt zien stelt het programma niets voor, met de instructie SERVO
kun je heel snel iets opzetten om een servo te bedienen. De beginpositie van de servo is hier 850 en die loopt door tot 2125. De gebruikte waarde kan per servo verschillen, dus je moet eerst even testen tot hoever de servo kan.
Het signaal dat gegenereerd wordt ziet er dan als volgt uit, de waarde ligt tussen de 1 ms en 2 ms bij een vaste frequentie van 50 Hz. Alleen gebruik ik niet de standaard frequentie, maar een iets hogere. Analoog inlezen en een printopdracht geven kost ook wat tijd, dus vandaar de DELAYMS 10
.