' ********************************************************************** ' * File: uk_BAS51_059.BAS * ' * Version: 1.1 * ' * Date: 18.03.12 * ' * 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 059 of BASCOM 8051 course. ' A/D converter: one conversion for each key pressure. ' The program perform a single conversion, of one analog input of Mini Module, ' in corrispondence of a key pressure and then it shows the resulted combination. ' The conversion is executed with the A/D converter section of microcontroller, ' that has the following features: ' - 10 bits maximum resolution; ' - programmable conversion time up to a minimum value of 5 usec; ' - successive approximation conversion technique; ' - analog sample & hold that reduce conversions noise; ' - 8 different inputs, multiplexed; ' - voltage applicable to analog inputs: 0÷Vref; ' - external reference voltage Vref, variable in the 0÷3.0 V range; ' The Mini Module GMM 5115 support 7 analog inputs in place of the 8 available ' on microcontroller; one of these is converted by this program, as described ' in following definitions. ' The program describes its functionalities and shows conversions on 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. ' ' 18/03/12: uk_BAS51_059.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 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!!! ' ' GMM TST3 pin Z2 pin Signal Used uP ' resource GMM TST3 GMM 5115 GMM 5115 signal ' CN4.3 30 24 P1.3 ADC3 CEX0 ADC3 ' 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 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. Pinrx Alias P3.0 ' Signal connected to GMM 5115 RxD Pintx Alias P3.1 ' Signal connected to GMM 5115 TxD Pinadc3 Alias P1.3 ' Signal connected to GMM 5115 analog input ADC3 '************************* Constants declaration ******************************* '************************* Variables declaration ******************************* Dim Choice As Byte ' Operation selected on console Dim Chadc As Byte ' Channel of A/D converter section Dim Cmbadc As Word ' Combination obtained from A/D converter Dim Hlpf As Byte ' General purpose bit variabile Dim Hlpb As Byte ' General purpose byte variabile '************************ Subroutines declaration ***************************** Declare Sub Ini_adc() ' Initialize A/D converter section Declare Sub Get_adc(chadc As Byte) ' Convert analog input channel of A/D converter '****************************** Main program *********************************** Main: Pinrx = 1 ' Initialize signals for serial communication Pintx = 1 ' as digital inputs Print ' Separate from previous visualization by showing 2 empty new line on console Print Print " Single conversion of GMM 5115 analog input with key pressure" Print "Mount Mini Module on Z2 of GMM TST3, connect analog input to convert" Print "between pins 17 (GND) and 3 (ADC3) on CN4 of GMM TST3." Print "When a key is pressed on the console, the analog input is converted" Print "and the obtained numeric combination is displayed on the console." Print Print "Acquired combination from ADC3 (points)" Call Ini_adc() ' Initialize lines and A/D converter section, used by program Do ' Begin endless loop Choice = Waitkey() ' Wait key pressure on console Call Get_adc(3) ' Convert channel ADC3 of A/D converter Print Cmbadc ' Show combination obtained by conversion, on console Loop ' End endless loop End '*************************** End of main program ******************************* '*********************** Subroutines used by program *************************** ' Initialize resources, variables and peripheral devices used for A/D conversion. ' Input: None ' Output: None Sub Ini_adc() ' Define multifunctions signals connected to used A/D inputs Pinadc3 = 1 ' Set signal connected to ADC3 as digital input Hlpf = Pinadc3 Adcf = &H08 ' Set signal connected to ADC3 as analog input Adclk = &H10 ' Set A/D clock to 50% End Sub ' Convert channel of A/D converter in polling and it returns the obtained ' 10 bits combination ' Input: Chadc = channel to convert ' Output: Cmbadc = combination obtained from conversion Sub Get_adc(chadc As Byte) ' Perform conversion of passed channel Adcon = Chadc Or &H20 ' Enable A/D and select channel NOP ' 4 usec delay as Tsetup settling time of Sample & Hold NOP NOP NOP NOP Adcon = Chadc Or &H28 ' Start conversion Do ' Loop that wait end of conversion Hlpb = Adcon And &H10 ' Acquire A/D control register and mantain bit End Of Conversion Loop Until Hlpb = &H10 ' Repeat until bit End Of Conversion is active ' Obtain 10 bits complete combination from performed conversion Hlpb = Addl ' Acquire byte L of combination Cmbadc = Addh ' Acquire byte H of combination Adcon = &H00 ' Disable A/D by setting standby mode Hlpb = Hlpb And &H03 ' Transform byte L of combination by mantaining 2 Bits Shift Cmbadc , Left , 2 ' Transform byte H of combination by mantaining 8 Bits Cmbadc = Cmbadc Or Hlpb ' Obtain complete 10 bits combination Cmbadc = Cmbadc And &H03FF ' Mask only the 10 Bits meaningfull End Sub '******************* End of subroutines used by program ************************