' ********************************************************************** ' * File: uk_BASAVR_041.BAS * ' * Version: 1.1 * ' * Date: 07.02.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 41 of BASCOM AVR course. ' Servomotor. ' The program allows to define some Servomotor rotations in the start position ' (0°), middle or neutral position (90°) and stop position (180°), through a ' proper choice from console menu. The signal selected to drive the Servomotor ' is the PB1 of Mini Module, reported on CN4.3 connector of GMM TST3. ' The program has been tested with the model Servo standard 900-00005 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: Config servos, Servo(). ' ' 07/02/11: uk_BASAVR_041.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 ' ' 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 Nrel0 = 32 ' Reload numbers equal to 0°, 90°, 180° positions Const Nrel90 = 85 ' obtained with experiments Const Nrel180 = 138 '************************* Variables declaration ******************************* Dim Choice As Byte ' Selected operation Dim Reln As Byte ' Reload number for duration of pulse on PCM signal used to drive Servo '************************ 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 " Servomotor movement to fixed positions" Print "Mount Mini Module on Z2 of GMM TST3, connect Servo PCM signal to CN4.3." ' The Servomotor managemnt is performed with the high level instructions of ' BASCOM. These generates a signal that doesn't exactly match the timing ' specifications of the Servo control signal PCM, but they allows anyway a ' right movement. ' 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 ' obtain a maximum resolution on positions. Config Servos = 1 , Servo1 = Portb.1 , Reload = 10 ' Define Servo management with BASCOM Enable Interrupts ' General interrupts enable Servo(1) = Nrel90 ' Servo on middle neutral position (half rotation) Do ' Begin endless loop Print ' Show menu with possible operations Print "I -> Position Servo to initial rotation (0 degree)" Print "M -> Position Servo to middle rotation (90 degree)" Print "F -> Position Servo to final rotation (180 degree)" Print "Perform the choice by pressing associated key: "; Choice = Waitkey() ' Wait selection of operation to execute Printbin Choice ' Shows performed choice Print If Choice >= "a" Then ' If choice is lower case Choice = Choice And &HDF ' Convert it in upper case End If Select Case Choice ' Check converted choice Case "I": ' Selected Initial position = 0° Reln = Nrel0 ' Set reload number for initial position = 0° Case "M": ' Selected Middle position = 90° Reln = Nrel90 ' Set reload number for middle position = 90° Case "F": ' Selected Final position = 180° Reln = Nrel180 ' Set reload number for final position = 180° Case Else: ' Selected operation is not valid Printbin &H07 ' Generate an advise BEL on console End Select Servo(1) = Reln ' Define PCM pulse duration with obtained reload number Loop ' End endless loop End '*************************** End of main program *******************************