Goeieavond,

Vandaag heb ik eens geprobeerd een programmatje te schrijven (dit is mijn eerste) om een servomotor aan te sturen via een PIC


DEVICE 16F628A                ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE              ;Alle ingangen digitaal

CLEAR                         ;Wis alle RAM geheugen
dim duty as byte
;Hoofdprogramma
 WHILE 1 = 1              ;Oneindige lus
  SERVO PORTA.1, duty, 5    ;Puls 1,5mSec, komt (meestal) overeen met de motor-as centreren 
  DELAYMS 20             ;Zorgt ervoor dat 50x per seconde het signaal verzonden wordt
WEND                     ;Terug naar WHILE

END 

Klopt dit ongeveer of kunnen hier nog wat verbeteringen bijkomen?
Klopt ook de regel met het SERVO-commando? Hier ben ik niet zeker van

Groetjes


DEVICE 16F628A                ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE              ;Alle ingangen digitaal

CLEAR                         ;Wis alle RAM geheugen
symbol duty = 1500
;Hoofdprogramma
 WHILE 1 = 1              ;Oneindige lus
  SERVO PORTA.1, duty     ;Puls 1,5mSec, komt (meestal) overeen met de motor-as centreren 
  DELAYMS 20             ;Zorgt ervoor dat 50x per seconde het signaal verzonden wordt
WEND                     ;Terug naar WHILE

END 

je kan het gewoon testen of als je het compileert en hij klopt niet krijg je een fout.

Ik krijg dus inderdaad een foutmelding.

EROOR [Line 10] : Unrecognised or Illegal characters found',5 '! (Test.bas)

Hoe moet je deze dan wegkrijgen?

op regel 10 staat de delayms
ik denk niet dat die fout is maar dat je niet op regel 1 bent begonnen met schrijven.

ik ken de notatie van servo porta.1 duty niet. mogelijk moet je daarvoor een apart include voor invoegen. ik weet ook niet of de poort van de PIC dat aankan..

die delayms klopt. het gaat om de regel er boven.

heb je de verzie van het script wat ik voor je heb gemaakt al geprobeerd?

Robbert

@Robbertbd: Je mist de regel

DIM duty AS BYTE

@MAH: Je hebt

SERVO PORTA.1, duty, 5

de '5' staan en dat mag niet.

Kijk maar eens bij de help van Proton

[Bericht gewijzigd door marcob op (13%)]

en de dim duty heeft geen inhoud.
daarom had ik hem veranderd naar symbol dyty = 1500
als je die dim gebruikt moet je dit doen:
DIM duty AS BYTE
duty = 1500

dan zal de servo een puls krijgen van 1.5 mS.

Robbert

Je hebt gelijk, zo zou het ook moeten werken.
Zo ziet het voorbeeld in de help eruit:

 ' Control a servo motor attached to pin 3 of PORTA 
 DEVICE 16F628          ' We'll use the new PICmicro 
 DIM Pos as WORD        ' Servo Position 
 SYMBOL Pin = PORTA.3   ' Alias the servo pin 
 ALL_DIGITAL = ON       ' PORTA to digital 
 CLS                    ' Clear the LCD 
 Pos = 1500             ' Centre the servo 
 PORTA = 0              ' PORTA lines low to read buttons 
 TRISA = %00000111      ' Enable the button pins as inputs 
 
 ' Check any button pressed to move servo
Main:  
 IF PORTA.0 = 0 AND Pos < 3000 Then Inc Pos ' Move servo left  
 IF PORTA.1 = 0 Then Pos = 1500             ' Centre servo 
 IF PORTA.2 = 0 AND Pos > 0 Then Dec Pos    ' Move servo right
 SERVO Pin , Pos 
 DELAYMS 5             ' Servo update rate 
 PRINT AT 1 , 1 , "Position=" , Dec Pos , " " 
GOTO Main 

Misschien heeft de TS er wat aan
EDIT:
Ik maak zelf ook een fout, het moet WORD zijn in plaats van eem Byte

Cursus deel 8 gaat volledig over servo's aansturen met Proton PIC Basic.

Zie www.picbasic.nl/beginners8.htm

Op 15 november 2007 11:28:30 schreef Frits Kieftenbelt:
Cursus deel 8 gaat volledig over servo's aansturen met Proton PIC Basic.

Zie www.picbasic.nl/beginners8.htm

Dit deel heb ik inderdaad nog niet gezien.
Ik had mij gebaseerd op het 7e deel van die site, misschien dat het daarom rare dingen deed. :)

@Robbertbd: ik ga zo dadelijk eens proberen.