In another thread dhouston is working on an Amicus18 shield for ConnectOne modules. These shields have a serial EEPROM on board to take some of the code load away from the MCU.
For comparison a simple email routine is looked at. The code size went from 3,812 bytes used with out the EEPROM to 1,462 bytes used with an external EEPROM. The EEPROM needs to be loaded with data beforehand.
The code displayed below was tested using an 18F6680 (not an Amicus) and a 24FC1025 EEPROM. This is my typical test bed.
This is the code without an EEPROM, You may think it could be tightened up by placing the
SERIN2 RX ,BAUD,2500,EMAIL_SET,[WAIT("I/OK")]
in a sub routine. That line needs to be directly after the "AT+i" command, even a gosub will miss the "I/OK".
Now for the EEPROM loading code. This loads the EEPROM with the "AT+i" strings.Code:' 18F6680 'BASIC CONNECT_ONE EMAIL 'Program Memory Bytes Used: 3812 '<FL_PIC18F6680>' DEFINE OSC 20 @ __CONFIG _CONFIG1H, _OSC_HS_1H @ __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H @ __CONFIG _CONFIG4L, _LVP_OFF_4L BAUD CON 16572 '4800 INVERTED, PC 'BAUD CON 16390 '38400 INVERTED, PC TX VAR PORTB.0 RX VAR PORTB.3 BOOT: SEROUT2 TX,BAUD,[ "AT+I",$d ,$a] SEROUT2 TX,BAUD,["AT+iWWW",$d,$a] SERIN2 RX,BAUD,1000,BOOT,[WAIT("I/(")] EMAIL_SET: SEROUT2 TX,BAUD,["AT+iSBJ:MAC_ETHERNET",$d,$a] SERIN2 RX ,BAUD,2500,EMAIL_SET,[WAIT("I/OK")] SEROUT2 TX,BAUD,["AT+iTOA:[email protected]",$d,$a] SERIN2 RX ,BAUD,2500,EMAIL_SET,[WAIT("I/OK")] SEROUT2 TX,BAUD,["AT+ito:MACKRACKIT",$d,$a] SERIN2 RX ,BAUD,2500,EMAIL_SET,[WAIT("I/OK")] SEROUT2 TX,BAUD,["AT+iREA:[email protected]",$d,$a] SERIN2 RX ,BAUD,2500,EMAIL_SET,[WAIT("I/OK")] SEROUT2 TX,BAUD,["AT+iFRM:MAC_ETH",$d,$a] SERIN2 RX ,BAUD,2500,EMAIL_SET,[WAIT("I/OK")] SEROUT2 TX,BAUD,["AT+iSMTP:mail.XYZ.com",$d,$a] SERIN2 RX ,BAUD,2500,EMAIL_SET,[WAIT("I/OK")] SEROUT2 TX,BAUD,["AT+iSMA=1",$d,$a] SERIN2 RX ,BAUD,2500,EMAIL_SET,[WAIT("I/OK")] SEROUT2 TX,BAUD,["AT+iSMP:PASSWORD",$d,$a] SERIN2 RX ,BAUD,2500,EMAIL_SET,[WAIT("I/OK")] SEROUT2 TX,BAUD,["AT+iSMU:[email protected]",$d,$a] SERIN2 RX ,BAUD,2500,EMAIL_SET,[WAIT("I/OK")] EMAIL_SEND: SEROUT2 TX,BAUD,["AT+iEMA:",$d,$a] SEROUT2 TX,BAUD,["HI, THIS IS FROM MAC_ETH",$d,$a] SEROUT2 TX,BAUD,["SENT EVERY HOUR.",$d,$a] SEROUT2 TX,BAUD,["THE TEMPERATURE IS.",$d,$a] SEROUT2 TX,BAUD,["XX F IN THE SHOP.",$d,$a] SEROUT2 TX,BAUD,["GO TO:",$d,$a] SEROUT2 TX,BAUD,["http://mackrackit.com/mac/ichip/ichipw.py",$d,$a] SEROUT2 TX,BAUD,["FOR A ONE MINUTE UPDATE.",$d,$a] SEROUT2 TX,BAUD,[$d,$a,".",$d,$a] SERIN2 RX ,BAUD,60000,BOOT,[WAIT("I/ONLINE")] PAUSE 1000 GOTO BOOT
The code to work the ConnectOne module with the aid of an external EEPROM.Code:' 18F6680 24FC1025 'LOAD EXTERNAL EEPROM WITH COMMAND STRINGS 'Program Memory Bytes Used: 3564 '<FL_PIC18F6680>' DEFINE OSC 20 @ __CONFIG _CONFIG1H, _OSC_HS_1H @ __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H @ __CONFIG _CONFIG4L, _LVP_OFF_4L DPIN VAR PORTB.2 'I2C DATA PIN CPIN VAR PORTB.1 'I2C CLOCK PIN ADDR VAR WORD B0 VAR BYTE B1 VAR BYTE DATO VAR BYTE TEXT_ VAR BYTE[45] 'BUILD SOME TEXT 'FOR EMAIL_SET 'ES_1 : ADDR = 1 : DATO = 22 FOR B0 = 0 TO 21 LOOKUP B0,["AT+iSBJ:MAC_ETHERNET",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 1 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\22] PAUSE 100 'ES_2 : ADDR = 23 : DATO = 21 FOR B0 = 0 TO 20 LOOKUP B0,["AT+iTOA:[email protected]",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 23 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\21] PAUSE 100 'ES_3 : ADDR = 43 : DATO = 19 FOR B0 = 0 TO 18 LOOKUP B0,["AT+ito:MACKRACKIT",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 44 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\19] PAUSE 100 'ES_4 : ADDR = 65 : DATO = 21 FOR B0 = 0 TO 20 LOOKUP B0,["AT+iREA:[email protected]",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 65 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\21] PAUSE 100 'ES_5 : ADDR = 86 : DATO = 17 FOR B0 = 0 TO 16 LOOKUP B0,["AT+iFRM:MAC_ETH",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 86 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\17] PAUSE 100 'ES_6 : ADDR = 103 : DATO = 23 FOR B0 = 0 TO 22 LOOKUP B0,["AT+iSMTP:mail.XYZ.com",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 103 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\23] PAUSE 100 'ES_7 : ADDR = 128 : DATO = 11 FOR B0 = 0 TO 10 LOOKUP B0,["AT+iSMA=1",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 128 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\11] PAUSE 100 'ES_8 : ADDR = 139 : DATO = 18 FOR B0 = 0 TO 17 LOOKUP B0,["AT+iSMP:PASSWORD",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 139 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\18] PAUSE 100 'ES_9 : ADDR = 157 : DATO = 21 FOR B0 = 0 TO 20 LOOKUP B0,["AT+iSMU:[email protected]",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 157 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\21] PAUSE 100 '##################################### 'BUILD SOME TEXT 'FOR EMAIL_SEND 'ESX_1 : ADDR = 178 : DATO = 10 FOR B0 = 0 TO 9 LOOKUP B0,["AT+iEMA:",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 178 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\10] PAUSE 100 'ESX_2 : ADDR = 188 : DATO = 26 FOR B0 = 0 TO 25 LOOKUP B0,["HI, THIS IS FROM MAC_ETH",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 188 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\26] PAUSE 100 'ESX_3 : ADDR = 214 : DATO = 18 FOR B0 = 0 TO 17 LOOKUP B0,["SENT EVERY HOUR.",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 214 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\18] PAUSE 100 'ESX_4 : ADDR = 232 : DATO = 21 FOR B0 = 0 TO 20 LOOKUP B0,["THE TEMPERATURE IS.",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 232 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\21] PAUSE 100 'ESX_5 : ADDR = 260 : DATO = 19 FOR B0 = 0 TO 18 LOOKUP B0,["XX F IN THE SHOP.",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 260 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\19] PAUSE 100 'ESX_6 : ADDR = 279 : DATO = 8 FOR B0 = 0 TO 7 LOOKUP B0,["GO TO:",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 279 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\8] PAUSE 100 'ESX_7 : ADDR = 287 : DATO = 43 FOR B0 = 0 TO 42 LOOKUP B0,["http://mackrackit.com/mac/ichip/ichipw.py",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 287 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\43] PAUSE 100 'ESX_8 : ADDR = 330 : DATO = 26 FOR B0 = 0 TO 25 LOOKUP B0,["FOR A ONE MINUTE UPDATE.",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 330 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\26] PAUSE 100 'ESX_9 : ADDR = 356 : DATO = 5 FOR B0 = 0 TO 4 LOOKUP B0,[$d,$a,".",$d,$a],B1 TEXT_(B0) = B1 NEXT B0 ADDR = 356 I2CWRITE DPIN,CPIN,$A0,ADDR,[STR TEXT_\5] PAUSE 100 END
Code:' 18F6680 24FC1025 'EEPROM DRIVEN CONNECT_ONE EMAIL 'Program Memory Bytes Used: 1462 '<FL_PIC18F6680>' DEFINE OSC 20 @ __CONFIG _CONFIG1H, _OSC_HS_1H @ __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H @ __CONFIG _CONFIG4L, _LVP_OFF_4L BAUD CON 16572 '4800 INVERTED, PC ' BAUD CON 16390 '38400 INVERTED, PC TX VAR PORTB.0 RX VAR PORTB.3 DPIN VAR PORTB.2 'I2C DATA PIN CPIN VAR PORTB.1 'I2C CLOCK PIN ADDR VAR WORD DATI VAR BYTE[45] DATO VAR WORD B0 VAR BYTE B1 VAR BYTE TEXT_ VAR BYTE[45] BOOT: SEROUT2 TX,BAUD,[$d,$a] SEROUT2 TX,BAUD,[$d,$a] SEROUT2 TX,BAUD,[ "AT+I",$d ,$a] SEROUT2 TX,BAUD,["AT+iWWW",$d,$a] SERIN2 RX,BAUD,1000,BOOT,[WAIT("I/(")] EMAIL_SET: ES_1 : ADDR = 1 : DATO = 22 GOSUB TEXT_1 ES_2 : ADDR = 23 : DATO = 21 GOSUB TEXT_1 ES_3 : ADDR = 44 : DATO = 19 GOSUB TEXT_1 ES_4 : ADDR = 65 : DATO = 21 GOSUB TEXT_1 ES_5 : ADDR = 86 : DATO = 17 GOSUB TEXT_1 ES_6 : ADDR = 103 : DATO = 23 GOSUB TEXT_1 ES_7 : ADDR = 128 : DATO = 11 GOSUB TEXT_1 ES_8 : ADDR = 139 : DATO = 18 GOSUB TEXT_1 ES_9 : ADDR = 157 : DATO = 21 GOSUB TEXT_1 EMAIL_SEND: ESX_1 : ADDR = 178 : DATO = 10 GOSUB TEXT_2 ESX_2 : ADDR = 188 : DATO = 26 GOSUB TEXT_2 ESX_3 : ADDR = 214 : DATO = 18 GOSUB TEXT_2 ESX_4 : ADDR = 232 : DATO = 21 GOSUB TEXT_2 ESX_5 : ADDR = 260 : DATO = 19 GOSUB TEXT_2 ESX_6 : ADDR = 279 : DATO = 8 GOSUB TEXT_2 ESX_7 : ADDR = 287 : DATO = 43 GOSUB TEXT_2 ESX_8 : ADDR = 330 : DATO = 26 GOSUB TEXT_2 ESX_9 : ADDR = 356 : DATO = 5 GOSUB TEXT_2 GOTO BOOT TEXT_1: I2CREAD DPIN,CPIN,$A0,ADDR,[STR DATI\DATO] PAUSE 10 SEROUT2 TX, BAUD, [STR DATI\DATO] SERIN2 RX ,BAUD,2500,EMAIL_SET,[WAIT("I/OK")] PAUSE 1000 RETURN TEXT_2: I2CREAD DPIN,CPIN,$A0,ADDR,[STR DATI\DATO] PAUSE 10 SEROUT2 TX, BAUD, [STR DATI\DATO] PAUSE 1000 RETURN






Bookmarks