' Robby006.bas ' ' Henk van Winkoop ' Build: ' 001, 2004-08-10, original release ' 002, 2004-08-11, comment added ' 003, 2004-11-25, due to Dirk's comment: line 'COM_NAV_PWR_F=off' changed to 'COM_NAV_PWR_F=on' ' ' This program shows the alternative #MY_SYS_SYSTEM function that behaves exactly ' the same as the system driver 'SYS SYSTEM' command. ' ' 'SYS SYTEM' command takes 1.3ms ' 'MY_SYS_SYSTEM' function takes 70ms!!! (so it's a little slower...) ' ' Just for understanding how the 'SYS SYSTEM' function and the EXTPORT register work together. ' '-------------------------- '------ I/O PORTS --------- '-------------------------- '- INTERFACE LCD/EXTPORT -- define sdio port[1] define sclio port[3] define strobe port[4] '--------------------------- '------ DRIVE ------------- '--------------------------- define SPEED_L da[1] define SPEED_R da[2] define REV_L port[6] define REV_R port[5] '-------------------------- '---- SYSTEM MEMORY ------- '-------------------------- '---- OPERATION DATA ------ '-------------------------- '+---------------------------------------------------------------+ '| EXTPORT register | '+-------+-------+-------+-------+-------+-------+-------+-------+ '| 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | bit number '+-------+-------+-------+-------+-------+-------+-------+-------+ '|LED4_F |LED3_F |LED2_F |LED1_F |SNS_PWR|ACS_PWR|ACS_PWR|COM_NAV| bit name '| | | | |_F |_HI_F |_LO_F |_PWR_F | '+-------+-------+-------+-------+-------+-------+-------+-------+ '| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | &H06 = all LEDS off and all POWERS off '+-------+-------+-------+-------+-------+-------+-------+-------+ define EXTPORT byte[4] define COM_NAV_PWR_F bit[25] 'my defines define ACS_PWR_LO_F bit[26] 'my defines define ACS_PWR_HI_F bit[27] 'my defines define SNS_PWR_F bit[28] 'my defines define LED1_F bit[29] define LED2_F bit[30] define LED3_F bit[31] define LED4_F bit[32] '--- SYSTEMROUTINEN ----------- define PLM_SLOW &H01C4 define SYSTEM &H01C9 ' define bSftNum byte[6] (Byte ShiFTNUMber) ' define bExpCpy byte[7] (Byte EXtPortCoPY) '================================================================================ ' USER VARIABLES ' first variable characters: ' 'y' is used for bYte variables ' 'b' is used for Bit variables ' 'w' is used for Word variables (2 bytes) ' Because when programs get large, as a programmer you will now what type of variable it is... ' ...avoiding confusions and mistakes. '================================================================================ define ySftNum byte[6] '(bYte: ShiFTNUMber) define yExpCpy byte[7] '(bYte: EXtPortCoPY) '================================================================================ ' MAIN PROGRAM '================================================================================ 'initialize all Robby systems gosub INIT_SYSTEM 'start running led #RUNNING_LEDS1 'clear all led bits in EXTPORT register EXTPORT = EXTPORT and &H0F 'led1 on LED1_F=on gosub MY_SYS_SYSTEM 'wait for 200ms pause 10 'clear all led bits in EXTPORT register EXTPORT = EXTPORT and &H0F 'led1 on LED2_F=on gosub MY_SYS_SYSTEM 'wait for 200ms pause 10 'clear all led bits in EXTPORT register EXTPORT = EXTPORT and &H0F 'led1 on LED3_F=on gosub MY_SYS_SYSTEM 'wait for 200ms pause 10 'clear all led bits in EXTPORT register EXTPORT = EXTPORT and &H0F 'led1 on LED4_F=on gosub MY_SYS_SYSTEM 'wait for 200ms pause 10 'clear all led bits in EXTPORT register EXTPORT = EXTPORT and &H0F 'led1 on LED3_F=on gosub MY_SYS_SYSTEM 'wait for 200ms pause 10 'clear all led bits in EXTPORT register EXTPORT = EXTPORT and &H0F 'led1 on LED2_F=on gosub MY_SYS_SYSTEM 'wait for 200ms pause 10 'go back to the start of the endless loop goto RUNNING_LEDS1 '-------------------------------------------------------------------------------- ' THIS CODE WILL ALSO GENERATE THE SAME RUNNING LED ' Using complete EXTPORT byte write in stead of single bit write '-------------------------------------------------------------------------------- ' #RUNNING_LEDS2 ' EXTPORT=&H16:gosub MY_SYS_SYSTEM:pause 10 ' EXTPORT=&H26:gosub MY_SYS_SYSTEM:pause 10 ' EXTPORT=&H46:gosub MY_SYS_SYSTEM:pause 10 ' EXTPORT=&H86:gosub MY_SYS_SYSTEM:pause 10 ' EXTPORT=&H46:gosub MY_SYS_SYSTEM:pause 10 ' EXTPORT=&H26:gosub MY_SYS_SYSTEM:pause 10 ' goto RUNNING_LEDS1 '-------------------------------------------------------------------------------- 'Basic Mainprogram end end '================================================================================ ' INIT SYSTEM '================================================================================ #INIT_SYSTEM '---initialyse-engines-controllers--- 'make left engine control output/low (=forward), if input: high-impedance noise may switche engine controller REV_L=on 'make right engine control output/low (=forward), if input: high-impedance noise may switche engine controller REV_R=on 'avoiding uncontrolled signals on moter-speed outputs SYS PLM_SLOW 'set left engine speed to stop (no reason detected to do this, just to be sure engine is off) SPEED_L=0 'set right engine speed to stop (no reason detected to do this, just to be sure engine is off) SPEED_R=0 '---initialyse-subsystem-power-controller--- 'define serial-data signal as output-low sdio = off 'define serial-clock signal as output-low sclio = off 'define strobe signal as output-low strobe = off 'prepair EXTPORT communication/navigation power off (by setting bit to ON!) COM_NAV_PWR_F=on 'prepair EXTPORT refernce-voltage-microphone-power off SNS_PWR_F=off 'prepair ACS power to NONE by setting LO and HI to ON(!) ACS_PWR_LO_F=on ACS_PWR_HI_F=on 'send contents of EXTPORT (memory 4) to shiftregister IC I11 (activating settings) sys SYSTEM 'return return '================================================================================ ' MY SYS SYSTEM ' This function does exactly the same as the 'SYS SYSTEM' command. ' This function only differs in that it uses to extra byte variables. ' Use variable bytes 'yExpCpy and 'ySftNum. ' define ySftNum byte[6] (Byte ShiFTNUMber) ' define yExpCpy byte[7] (Byte EXtPortCoPY) ' ' Mayby now you will understand why 'sdio', 'sclio' and 'strobe' need to be defined... ' ...in INIT_SYSTEM before they can be used by the original 'SYS SYSTEM' command. ' ' +---------------------------------------------------------------+ ' | EXTPORT register | ' +-------+-------+-------+-------+-------+-------+-------+-------+ ' | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | bit number ' +-------+-------+-------+-------+-------+-------+-------+-------+ ' |LED4_F |LED3_F |LED2_F |LED1_F |SNS_PWR|ACS_PWR|ACS_PWR|COM_NAV| bit name ' | | | | |_F |_HI_F |_LO_F |_PWR_F | ' +-------+-------+-------+-------+-------+-------+-------+-------+ ' | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | Example value &H36 (LED3_F = on, all powers off) ' +-------+-------+-------+-------+-------+-------+-------+-------+ ' ' | | ' | +-------+ +-------+-------+ | ' | 0 | 1 | 0 0 0 | 1 1 | 0 | 'sdio' signal (bit 8 first) ' +-------+ +-------+-------+-------+ +-------+-------+ ' | | ' | +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ | ' | | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 'sclio' signal ' +-+ +-+-+ +-+-+ +-+-+ +-+-+ +-+-+ +-+-+ +-+-+ +-+-------+ ' | | ' | +---+ | ' | | | | 'strobe' signal ' +-----------------------------------------------------------------+ +-+ ' | | '================================================================================ #MY_SYS_SYSTEM 'use a copy of EXTPORT (so EXTPORT is unchanged) (SYS SYSTEM does also not change EXTPORT register contents) yExpCpy = EXTPORT 'for all 8 bits in 'yExtCpy' do... for ySftNum = 1 to 8 'if most left bit (bit 8) of 'bExt' is set... '...then make 'serial-data' output (sdio) high '...else make 'serial-data' output (sdio) low if ( ( yExpCpy and &H80 ) = &H80 ) then sdio = on else sdio = off 'generate one positive pulse at microcontroller port[3] 'microcontroller port[3] is connected to IC I11 pin 3 (serial-clock input) 'now high or low level on IC I11 pin 2 (serial-data input) is shifted into IC I11's internal shiftregister 'Remember: the 8 outputs of the shifregister IC I11 do NOT change when data is clocked in... ' ...they only change according the corresponding shiftregister bits, if a single 'pulse strobe' is executed! pulse sclio ' bExt variable '+----+----+----+----+----+----+----+----+ '| b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | before shift left '+----+----+----+----+----+----+----+----+ '| b7 | b6 | b5 | b4 | b3 | b2 | b1 | 00 | after shift left '+----+----+----+----+----+----+----+----+ 'shift copy-of-EXTPORT register one position to the left yExpCpy = yExpCpy SHL 1 'handle next bit next 'now all 8 bits from EXTPORT register are in the same position in the IC I11 shiftregister 'but the IC I11 shiftregister outputs did not change since the last 'pulse strobe' 'generate one positive pulse at microcontroller port[4] 'microcontroller port[4] is connected to IC I11 pin 1 (strobe input) 'now the 8 outputs of IC I11 internal shiftregister are connected to the chip output (or: activated) '(when data at serial-data input is shifted into the shiftregister by 'sdio' and 'sclio' then 'the shiftregister outputs will not changes until a strobe pulse is executed) 'now activate the shiftregister outputs according the internal shiftregister bits pulse strobe 'return return