' ********************************************************************** ' * File: uk_BASAVR_032.BAS * ' * Version: 1.1 * ' * Date: 29.11.10 * ' * 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 32 of BASCOM AVR course. ' The program shift, in reversed clockwise direction, a turned on LED of the 15 ' available on the TIO 16 board that is connected to I/O connectors of ' GMM TST3. ' The program describes its functionalities 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 AVR (see IDE Configuration). ' The program works only when the GMM AM08 is mounted on Z2 socket of GMM TST3!! ' Inside the program the terms that identify the used signals refers to electric ' diagram and technical manual of GMM TST3!! ' ' Added instructions: None. ' ' 29/11/10: uk_BASAVR_032.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 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 !!! ' ' TIO 16 GMM TST3 pin Z2 pin Signal Used uP ' LED resource GMM TST3 GMM AM08 GMM AM08 signal ' LD1 CN4.2 33 27 ADC7 ADC7 ' LD2 CN4.1 32 26 PCO ADC0 PC0 ' LD3 CN4.4 31 25 PC1 ADC1 PC1 ' LD4 CN4.3 30 24 PB1 OC1A PB1 ' LD5 CN4.6 29 23 PB0 ICP PB0 ' LD6 CN4.5 28 22 PB2 OC1B /SS PB2 ' LD7 CN4.8 27 21 PD6 AIN0 PD6 ' LD8 CN4.7 26 20 PD7 AIN1 PD7 ' LD9 CN4.15 25 19 PD2 INT0 PD2 ' LD10 CN4.16 24 18 PD3 INT1 PD3 ' LD11 CN4.13 23 17 PD4 T0 XCK PD4 ' LD12 CN4.14 22 16 PD5 T1 PD5 ' LD13 CN4.11 21 15 PC2 ADC2 PC2 ' LD14 CN4.12 19 13 PC3 ADC3 PC3 ' LD15 CN4.9 14 8 PB3 MOSI OC2 PB3 ' LD16 CN4.10 15 9 PB4 MISO PB4 ' ' 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. 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 ******************************* '************************* Variables declaration ******************************* Dim Dirio As Byte ' Variable with digital I/O direction Dim Iod As Byte ' Variable with digital I/O status Dim Shled As Word ' Variable for 16 bits shift '************************ Subroutines declaration ****************************** Declare Sub Ini_pa(byval Dirio As Byte) ' Initialize GMM TST3 port A Declare Sub Set_pa(byval Iod As Byte) ' Set GMM TST3 port A Declare Sub Ini_pc(byval Dirio As Byte) ' Initialize GMM TST3 port C Declare Sub Set_pc(byval Iod As Byte) ' Set GMM TST3 port C '****************************** Main program *********************************** Main: Pinrx = 0 ' Initialize signals for serial communication Pintx = 0 ' as digital inputs Call Ini_pa(&Hff) ' Initialize lines connected to port A as outputs Call Ini_pc(&Hff) ' Initialize lines connected to port c as outputs Print ' Separate from previous visualization by showing an empty new line Print " Reversed clockwise shift on the 15 LEDs of TIO 16" Print "Mount Mini Module on Z2 of GMM TST3 and connect TIO 16 to CN4." Print "Shift in execution.."; Shled = &H8000 ' Initialize for last LED enabled Do ' Begin endless loop Iod = Low(shled) ' Obtain low byte of 16 bits variable for shift Iod = Iod Xor &HFF ' Convert value in reversed logic Call Set_pa(iod) ' Drive red LEDs with obtained combination Iod = High(shled) ' Obtain high byte of 16 bits variable for shift Iod = Iod Xor &HFF ' Convert value in reversed logic Call Set_pc(iod) ' Drive yellow and green LEDs with obtained combination Rotate Shled , Right , 1 ' Rotate LED turned on in circular and reversed clockwise direction Waitms 50 ' Delay for each shift Loop ' End endless loop End '*************************** End of main program ******************************* '*********************** Subroutines used by program *************************** ' Initializes the 8 pins of uP connected to port A on CN4 of GMM TST3: ' PA.0 -> ADC7 PA.1 -> PC0 PA.2 -> PC1 PA.3 -> PB1 ' PA.4 -> PB0 PA.5 -> PB2 PA.6 -> PD6 PA.7 -> PD7 ' with the I/O modality passed in dirio parameter (bit at 1=output at high ' level; bit at 0=input), by leaving unchanged the status of all the other ' lines. ' Note: On GMM AM08 all the 8 lines of port A can be defined as input, but only ' 7 lines as output. Sub Ini_pa(byval Dirio As Byte) ' Initialize line connected to microcontroller analog signal, managed through ' the relative A/D converter section, as input Config Adc = Single , Prescaler = Auto , Reference = Avcc ' Initialize A/D section with conversion on request, Start Adc ' best prescaler, Vref=5 V and enable it ' Initialize other 7 lines of port A, connected to digital signals of ' microcontroller Portc.0 = 1 ' Set initial status high for PA.1->PC0 as output Ddrc.0 = Dirio.1 ' Define direction for PA.1->PC0 Portc.1 = 1 ' Set initial status high for PA.2->PC1 as output Ddrc.1 = Dirio.2 ' Define direction for PA.2->PC1 Portb.1 = 1 ' Set initial status high for PA.3->PB1 as output Ddrb.1 = Dirio.3 ' Define direction for PA.3->PB1 Portb.0 = 1 ' Set initial status high for PA.4->PB0 as output Ddrb.0 = Dirio.4 ' Define direction for PA.4->PB0 Portb.2 = 1 ' Set initial status high for PA.5->PB2 as output Ddrb.2 = Dirio.5 ' Define direction for PA.5->PB2 Portd.6 = 1 ' Set initial status high for PA.6->PD6 as output Ddrd.6 = Dirio.6 ' Define direction for PA.6->PD6 Portd.7 = 1 ' Set initial status high for PA.7->PD7 as output Ddrd.7 = Dirio.7 ' Define direction for PA.7->PD7 End Sub ' Set status of the 8 lines of uP connected to port A on CN4 of GMM TST3, ' with the status passed in Iod parameter, by leaving unchanged all the other ' lines. ' Note: On GMM AM08 only 7 lines of port A can be defined as output. Sub Set_pa(byval Iod As Byte) Portc.0 = Iod.1 ' Define state of line PA.1->PC0 Portc.1 = Iod.2 ' Define state of line PA.2->PC1 Portb.1 = Iod.3 ' Define state of line PA.3->PB1 Portb.0 = Iod.4 ' Define state of line PA.4->PB0 Portb.2 = Iod.5 ' Define state of line PA.5->PB2 Portd.6 = Iod.6 ' Define state of line PA.6->PD6 Portd.7 = Iod.7 ' Define state of line PA.7->PD7 End Sub ' Initializes the 8 pins of uP connected to port C on CN4 of GMM TST3: ' PC.0 -> PD2 PC.1 -> PD3 PC.2 -> PD4 PC.3 -> PD5 ' PC.4 -> PC2 PC.5 -> PC3 PC.6 -> PB3 PC.7 -> PB4 ' with the I/O modality passed in dirio parameter (bit at 1=output at high ' level; bit at 0=input), by leaving unchanged the status of all the other ' lines. Sub Ini_pc(byval Dirio As Byte) ' Initialize 8 lines of port A, all connected to digital signals of ' microcontroller Portd.2 = 1 ' Set initial status high for PC.0->PD2 as output Ddrd.2 = Dirio.0 ' Define direction for PC.0->PD2 Portd.3 = 1 ' Set initial status high for PC.1->PD3 as output Ddrd.3 = Dirio.1 ' Define direction for PC.1->PD3 Portd.4 = 1 ' Set initial status high for PC.2->PD4 as output Ddrd.4 = Dirio.2 ' Define direction for PC.2->PD4 Portd.5 = 1 ' Set initial status high for PC.3->PD5 as output Ddrd.5 = Dirio.3 ' Define direction for PC.3->PD5 Portc.2 = 1 ' Set initial status high for PC.4->PC2 as output Ddrc.2 = Dirio.4 ' Define direction for PC.4->PC2 Portc.3 = 1 ' Set initial status high for PC.5->PC3 as output Ddrc.3 = Dirio.5 ' Define direction for PC.5->PC3 Portb.3 = 1 ' Set initial status high for PC.6->PB3 as output Ddrb.3 = Dirio.6 ' Define direction for PC.6->PB3 Portb.4 = 1 ' Set initial status high for PC.7->PB4 as output Ddrb.4 = Dirio.7 ' Define direction for PC.7->PB4 End Sub ' Set status of the 8 lines of uP connected to port C on CN4 of GMM TST3, ' with the status passed in Iod parameter, by leaving unchanged all the other ' lines. Sub Set_pc(byval Iod As Byte) Portd.2 = Iod.0 ' Define state of line PC.0->PD2 Portd.3 = Iod.1 ' Define state of line PC.1->PD3 Portd.4 = Iod.2 ' Define state of line PC.2->PD4 Portd.5 = Iod.3 ' Define state of line PC.3->PD5 Portc.2 = Iod.4 ' Define state of line PC.4->PC2 Portc.3 = Iod.5 ' Define state of line PC.5->PC3 Portb.3 = Iod.6 ' Define state of line PC.6->PB3 Portb.4 = Iod.7 ' Define state of line PC.7->PB4 End Sub '******************* End of subroutines used by program ************************