' ********************************************************************** ' * File: uk_BASAVR_045.BAS * ' * Version: 1.1 * ' * Date: 23.04.11 * ' * Development Tools: Bascom-AVR Demo Ver. 1.11.9.1 + * ' * + AVR bootloader grifo(r) Ver. 1.2 * ' * Cards: GMM AM08 + 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 45 of BASCOM AVR 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 PB1 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 AVR (see IDE Configuration). ' The program works only when the GMM AM08 is mounted on Z2 socket of GMM TST3!! ' ' Added instructions: None. ' ' 23/04/11: uk_BASAVR_045.BAS - Ver 1.1 - By G.A. ' First version. ' ' '**************************** IDE Configurations ******************************* ' NOTE: in order to coorectly use this demo program, please execute the following ' steps: ' 1) Check the availability of M8DEF.DAT file into the directory where the ' BASCOM AVR is installed and copy it if not present. ' 2) Into the window "Options | Compiler | Chip" set: ' Chip: m8def.dat ' XRAM: None ' HW Stack: 64 ' Soft Stack: 32 ' Framesize: 64 ' XRAM waitstate: disabled ' External Access Enable: disabled ' 3) Into the window "Options | Communication" set: ' COM port = the PC line connected to GMM AM08, through GMM TST3 ' Baudrate = 19200 ' Parity = None ' Databits = 8 ' Stopbit = 1 ' Handshake = None ' Emulation = TTY ' Font = Terminal, Normal, 12 points, white colour ' Backcolor = Navy ' 4) At the end of compilation, after the code is programmed on GMM AM08, open ' the terminal emulation window of BASCOM AVR with the option: Tools | ' Terminal emulator (Ctrl+T) and then reset or powen on the Mini Module. '************************* Compiler directives ********************************* $regfile "M8DEF.DAT" ' Definitions file for used microcontroller $romstart = &H0 ' Code start address on FLASH $crystal = 7372800 ' Microcontroller crystal frequency $hwstack = 64 ' Hardware stack space $swstack = 32 ' Software stack space $framesize = 64 ' Frame space $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 jumpers must be set in following positions: ' 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 Signal ' signal resource GMM TST3 GMM AM08 GMM AM08 uP ' PCM CN4.3 30 24 PB1 OC1A PB1 ' GND CN4.17 20 14 GND GND ' ' Signal pin COMx pin CN5 pin Z1 pin Signal Signal ' PC DB9 GMM TST3 GMM TST3 GMM AM08 GMM AM08 uP ' TX 3 3 9 3 RxD RS232 PD0 ' RX 2 2 10 4 TxD RS232 PD1 ' 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 Portb.1 ' Bit with output signal connected to Servomotor 1 Pinrx Alias Ddrd.0 ' Bit with direction signal connected to GMM AM08 RxD Pintx Alias Ddrd.1 ' Bit with direction signal connected to GMM AM08 TxD '************************* Constants declaration ******************************* Const Pcmmid = 92 ' 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 = 0 ' Initialize signals for serial communication Pintx = 0 ' as digital inputs Pinservo1 = 1 ' Initialize signals connected to Servo 1 as digital output at high level Ddrb.1 = 1 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 10 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 / 10 = 50 pulse durations = 50 different speeds Config Servos = 1 , Servo1 = Portb.1 , Reload = 10 ' Define Servo management with BASCOM Enable Interrupts ' General interrupts enable Servo(1) = 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 Servo(1) = Hlpw ' Define PCM pulse duration with inserted value Loop ' End endless loop End '*************************** End of main program *******************************