' ********************************************************************** ' * File: uk_BAS51_045.BAS * ' * Version: 1.1 * ' * Date: 26.04.11 * ' * Development Tools: Bascom 8051 COMP.,IDE 2.0.14.0 + FLIP 2.4.6 * ' * Cards: GMM 5115 + GMM TST3 * ' * Developed by: GRIFO(r) Italian Technology * ' * via Dell'Artigiano 8/6 * ' * 40016 S. Giorgio di Piano (BO) * ' * Tel. +39 051 892052 Fax. +39 051 893661 * ' * http://www.grifo.com http://www.grifo.it * ' * Author: Gianluca Angelini * ' ********************************************************************** ' Example program 045 of BASCOM 8051 course. ' Continuos rotation Servomotor. ' The program allows to define direction and speed of a Servomotor with ' continuos rotations through proper values inserted by console. The signal ' selected to drive the Servomotor is the P1.3 of Mini Module, reported on CN4.3 ' connector of GMM TST3. This signal is generated by the high level instructions ' of BASCOM, dedicated to Servos. ' The program has been tested with the model Servo standard 900-00008 produced ' by Parallax. ' The program describes its functionalities and uses a serial console provided ' of monitor and keyboard with a fixed physical protocol at 19200 Baud, 8 Bit ' x chr, 1 Stop bit, No parity. ' This console can be another system capable to support a serial RS 232 ' communication. In order to simplify the use it can be used a PC provided of ' one COMx line, that execute a terminal emulation program as HYPERTERMINAL or ' the homonym modality provided by BASCOM 8051 (see IDE Configuration). ' The program works only when the GMM 5115 is mounted on Z2 socket of GMM TST3!! ' ' Added instructions: None. ' ' 26/04/11: uk_BAS51_045.BAS - Ver 1.1 - By G.A. ' First version. ' ' '**************************** IDE Configurations ******************************* ' NOTE: in order to correctly use this demo program, please execute the following ' steps: ' 1) Check the availability of 89C5115.DAT file into the directory where the ' BASCOM 8051 is installed and copy it if not present. ' 2) Into the window "Options | Compiler | Misc" set: ' Register File = 89C5115.DAT ' Byte End(Hex) = A0 ' Size warning = selected at 16384 (=4000H) ' 3) Into the window "Options | Communication" set: ' COM port = the PC line connected to GMM 5115, through GMM TST3 ' Baudrate = 19200 ' Parity = None ' Databits = 8 ' Stopbit = 1 ' Handshake = None ' Emulation = TTY ' Font = Terminal, Normal, 12 points, white colour ' Backcolor = Navy ' Run emulator modal = not selected ' 4) At the end of compilation, after the code is programmed on GMM 5115, select ' RUN mode and open the terminal emulation window of BASCOM 8051 with the ' option: Tools | Terminal emulator (Ctrl+T) and then reset or powen on the ' Mini Module. '************************* Compiler directives ********************************* $regfile "89C5115.DAT" ' Definitions file for used microcontroller $romstart = &H0 ' Code start address on FLASH $iramstart = &H0 ' Data start address on internal RAM $ramstart = &H0 ' Data start address on external RAM $ramsize = &H100 ' External RAM size $crystal = 14745600 ' Microcontroller crystal frequency $large ' Code size > 2K $map ' Generate debug information $baud = 19200 ' Serial communication speed: 19200 Baud ' Other parameters fixed to: 8 bit x chr ' 1 Stop bit ' No parity '******************************* Definitions *********************************** ' The resources used by program are connected as described in following table: ' !!! Note: On GMM TST3 the following jumpers must be properly configured: ' J1 in 2-3 ; J2 in 1-2 ; J3 in 1-2 ; J5 in 2-3 ; J7 in 2-3 ; J8 in 2-3 ' J9 in 2-3!!! ' ' Servo GMM TST3 pin Z2 pin Signal Used up ' signal resource GMM TST3 GMM 5115 GMM 5115 signal ' PCM CN4.3 30 24 P1.3 ADC3 CEX0 P1.3 ' GND CN4.17 20 14 GND - ' ' Signal pin COMx pin CN5 pin Z1 pin Signal Used up ' PC DB9 GMM TST3 GMM TST3 GMM 5115 GMM 5115 signal ' TX 3 3 9 3 RxD RS232 P3.0 ' RX 2 2 10 4 TxD RS232 P3.1 ' GND 5 5 20 14 GND - ' This table shows that the connection cable between PC COM line and CN5 of ' GMM TST3 is a normal pin to pin cable or direct. Grifo(r) can supply it by ' requesting the CCR 9+9E code. Pinservo1 Alias P1.3 ' Signal connected to Servomotor 1 Pinrx Alias P3.0 ' Signal connected to GMM 5115 RxD Pintx Alias P3.1 ' Signal connected to GMM 5115 TxD '************************* Constants declaration ******************************* Const Pcmmid = 29 ' PCM pulse duration equal to Servo stopped (about 1,5 msec) '************************* Variables declaration ******************************* Dim Hlpb As Byte ' General purpose help byte variable Dim Hlpw As Word ' General purpose help word variable '************************ Subroutines declaration ****************************** '****************************** Main program *********************************** Main: Pinrx = 1 ' Initialize signals for serial communication Pintx = 1 ' as digital inputs Pinservo1 = 1 ' Initialize signals connected to Servo 1 as digital output at high level Print ' Separate from previous visualization by showing an empty new line Print Print " High level management of continuos rotation Servomotor" Print "Mount Mini Module on Z2 of GMM TST3, connect Servo PCM signal to CN4.3." ' The Servomotor management is performed with the high level instructions of ' BASCOM. These generates a signal that doesn't exactly match the timing ' specifications of the PCM control signal of continuos rotation Servos, and ' so only few speeds can be set. ' The BASCOM instructions use a periodic interrupt generated by TIMER0, that ' can't be used for other functions!!! ' The timing resolution (=duration) is defined by Reload value used in ' Config Servo... instruction and by selected position with Servo... ' instruction, as illustrated in BASCOM on line help. ' This demo define a minimum reload time, equal to 50 usec, in order to avoid ' vibrations and obtain the speed resolution. ' As the PCM signal duration ranges from 1.25 to 1.75 milliseconds, you ' obtain: ' 1750 - 1250 = 500 microseconds ' 500 / 50 = 10 pulse durations = 10 different speeds ' The speeds really usable are fewer and they are reduced to only 4 or 5!!! Config Servos = 1 , Servo1 = P1.3 , Reload = 50 ' Define Servo management with BASCOM Servo1 = Pcmmid ' Servo on middle neutral position (shaft stopped) Print Print "Generation of PCM signal with middle duration for Servo stopped. Please rotate" Print "the Servomotor trimmer until the shaft is completely stopped and then press a" Print "key to continue..." Hlpb = Waitkey() ' Wait key pressed on console Print Do ' Begin endless loop ' The speed inserted by user change from the maximum in clockwise direction ' to maximum in reversed clockwise direction, by passing through the central ' condition with shaft stopped. Print Print "Value for shaft stopped = " ; Pcmmid ; ". Lower values produce rotation in" Print "clockwise direction and higher values in reversed clockwise direction. The" Print "rotation speed is as much higher as the value difference increase." Input "Insert new rotation speed:" , Hlpw Servo1 = Hlpw ' Define PCM pulse duration with inserted value Loop ' End endless loop End '*************************** End of main program *******************************