The only pins used for normal operation are the GND, VDD, RXD0, and TXD0. All others are left floating.
You are keeping things in reset by playing with the other pins.
The only pins used for normal operation are the GND, VDD, RXD0, and TXD0. All others are left floating.
You are keeping things in reset by playing with the other pins.
Dave
Always wear safety glasses while programming.
I understand your point, Dave, but I already built the PCB with hookups to MSEL and _RES_PD from the MCU so have to make them work in the setup.
This code works! The fix was to set TRISC so that _RES_PD and MSEL were declared as outputs. When this worked I was able to read the EEPROM to see what the IP was for the iChip website that it established and then to got to it via http://xx.xx.x.xxx/ichip and set the parameters I wanted.
Now on to figure out how to integrate this working code into my application so I can use the iWiFi module to send an email via its connection with my wireless router to the internet.
Thanks for your help, Dave. I hope this attached code will show others who visit this thread how to setup a iWiFi MiniSocket module to set its parameters without having to use the config utility.
/s/ John Ellis
Code:' STATUS: Works OK! '< FL_PIC16F886 >' ' First valid PIC found within the first 200 lines will ' highlight AND set device. '< FL_PBPW >' ' OR < FL_PBPL > '< FL_MPASM >' ' OR < FL_PM > ' Set configuration fuses for the MCU ' To use standard config include file, comment out below statement @ __config _CONFIG1, _HS_OSC & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF ASM ERRORLEVEL -306 ENDASM DEFINE OSC 8 ADCON1 = %00001110 TRISC.1 = 0 ' Make pin output for MSEL TRISC.2 = 0 ' Make pin output for _RES_PD ' Define variables and aliases CNT VAR BYTE CNT = 0 temp VAR BYTE 'Already declared in main program as temp D_LAY VAR BYTE ADR VAR BYTE [9] MSEL VAR PORTC.1 ' iChip Mode Select (MSEL) _RES_PD VAR PORTC.2 ' iCHIP RESET/Power-Down (_RES_PD) TX VAR PORTC.6 RX VAR PORTC.7 PAUSE 2000 'Initialize iWiFi MiniSocket Module HIGH _RES_PD ' Set high for normal ops PAUSE 500 ' Delay to stabilize coming out of power down mode LOW MSEL ' Exit SERIALNET mode and return iChip to normal AT+i mode PAUSE 10000 ' Delay 10 sec HIGH MSEL ' Proceed with normal AT+i command ops PAUSE 2000 ' Delay 2 sec BOOT: 'iCHIP SET UP HIGH PORTC.4 :PAUSE 500 ' Short Blink the LED_RED as heart beat LOW PORTC.4: PAUSE 500 ' while disconnected from router. WRITE 3,3 'EEPROM test to see if program executes to here..it does. SEROUT2 TX,84,["AT+iBDRA",$d,$a] ' FORCE ICHIP TO AUTO BAUD WRITE 4,4 'EEPROM test to see if program executes to here..it does. SERIN2 RX ,84,2500,BOOT,[WAIT("I/OK")] ' SETTING BAUD TO 9600 PAUSE 100 WRITE 5,5 'EEPROM test to see if program executes to here..it does! SEROUT2 TX,84,["AT+iRPG=booger",$d ,$a] ' SETS REMOTE PASSWORD SERIN2 RX ,84,2500,BOOT,[WAIT("I/OK")] PAUSE 100 'SEROUT2 TX,84,["AT+iWSEC=0",$d ,$a] ' WPA-TKIP PROTOCAL ' Commented out until WPA setup on wireless router 'SERIN2 RX ,84,2500,BOOT,[WAIT("I/OK")] PAUSE 100 SEROUT2 TX,84,["AT+iWLSI=Buckskin",$d,$a]' SET SSID WE ARE LOOKING FOR SERIN2 RX ,84,2500,BOOT,[WAIT("I/OK")] ' PAUSE 100 'SEROUT2 TX,84,["AT+iWLPP=macmac3X3",$d,$a]' SET PASS-PHRASE ' Commented out until WPA setup on wireless router 'SERIN2 RX ,84,2500,BOOT,[WAIT("I/OK")] PAUSE 100 SEROUT2 TX,84,["AT+i!RP10",$d,$a] ' REPORTS CONNECTION PARAMETERS SERIN2 RX ,84,2500,BOOT,[WAIT("I/OK")] ' FOR DEBUGGING PAUSE 100 SEROUT2 TX ,84,[ "AT+iIPA?" , $d , $a ] ' RETURNS IP ADDRESS ' FOR DEBUGGING SERIN2 RX ,84 , 2500 ,BOOT , [ DEC ADR[0] , DEC ADR[1] , DEC ADR[2] , DEC ADR[3] ] PAUSE 100 WRITE 16,ADR[0] ' Write the IP to EEPROM for post run identify WRITE 17,ADR[1] WRITE 18,ADR[2] WRITE 19,ADR[3] WRITE 6,6 'EEPROM test to see if program executes to here..it does! SEROUT2 TX,84,["AT+iWWW",$d,$a] ' STARTS WEB SERVER SERIN2 RX,84,1000,BOOT,[WAIT("I/(")] PAUSE 100 GOSUB Blink ' IF WE GET HERE BLINK LED_GRN PAUSE 100 GOTO BOOT Blink: HIGH PORTC.5 :PAUSE 500 ' Short Blink the LED_GRN..IT DOES AFTER ~2 minutes! LOW PORTC.5: PAUSE 500 RETURN
Glad you got it working!!!
But,
TRISC.1 = 0 ' Make pin output for MSEL
TRISC.2 = 0 ' Make pin output for _RES_PD
Would/should not have made a difference because the HIGH/LOW commands do that in the background.
Must have been another change...
Dave
Always wear safety glasses while programming.
I thought it was working...and it is to a point. However I am seeing an anomaly I can't understand. I hope you can help me figure this out.
I am programming my application with the below code using a PICKIT2. I have the PICKIT2 set to "VDD Target" so that the PICKIT2 is not providing power...my application has its own power.
The programming of the device is normal and it starts working and executes the program normally as long as the PICKIT2 is still connected (but not providing power).
However, when I disconnect the PICKIT2 and power down my application and then reapply the application's power, the code is obviously stopping execution at the point in the code where the AT+i coommand is given to set auto-baud at 9600 baud. I know this from the WRITE 4,4 statement not appearing in EEPROM after the test run and the LED_RED not blinking. However, when I then reconnect the PICKIT2 and load the PICKIT2 software with its screen, my application then works normally and executes the complete program with the LED_RED blinking as a heart beat during the BOOT loop.
It is almost like the iWiFi module isn't getting power when the PICKIT2 is disconnected and therefore the AT+iBDRA fails...but it is getting power...I checked with a voltmeter.
I am stumped and can't go any further in integrating this code with my overall application until I resolve this anomaly.
Do you or anyone have any ideas why the iWiFi module would act this way with this code and this scenario?? At least I was able to use this code when it worked while PICKIT2 was connected to identify the IP address, log into the iChip web server from my PC via the wireless route,r and set parameters on the iChip.
John
CODE]
'< FL_PIC16F886 >' ' First valid PIC found within the first 200 lines will
' highlight AND set device.
'< FL_PBPW >'
'< FL_MPASM >'
' Set configuration fuses for the MCU
' To use standard config include file, comment out below statement
@ __config _CONFIG1, _HS_OSC & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF
ASM
ERRORLEVEL -306
ENDASM
DEFINE OSC 8
ADCON1 = %00001110
TRISC.1 = 0 ' Make pin output for MSEL
TRISC.2 = 0 ' Make pin output for _RES_PD
' Define variables and aliases
CNT VAR BYTE
CNT = 0
temp VAR BYTE 'Already declared in main program as temp
D_LAY VAR BYTE
ADR VAR BYTE [9]
MSEL VAR PORTC.1 ' iChip Mode Select (MSEL)
_RES_PD VAR PORTC.2 ' iCHIP RESET/Power-Down (_RES_PD)
TX VAR PORTC.6
RX VAR PORTC.7
PAUSE 2000
CLEAR
'Initialize iWiFi MiniSocket Module
HIGH _RES_PD ' Set high for normal ops
PAUSE 500 ' Delay to stabilize coming out of power down mode
LOW MSEL ' Exit SERIALNET mode and return iChip to normal AT+i mode
PAUSE 5000 ' Delay 5 sec
HIGH MSEL ' Proceed with normal AT+i command ops
PAUSE 2000 ' Delay 2 sec
BOOT: 'iCHIP SET UP
WRITE 3,3 'EEPROM test to see if program executes to here..it does under all conditions.
SEROUT2 TX,84,["AT+iBDRA",$d,$a] ' FORCE ICHIP TO AUTO BAUD
SERIN2 RX ,84,2500,BOOT,[WAIT("I/OK")] ' SETTING BAUD TO 9600
PAUSE 100
WRITE 4,4 'EEPROM test to see if program executes to here..it does when
'application is connected to PICKIT2 but DOESN'T when
'disconnected and then started on application's own power.
'However when reconnected to PICKIT2 and the PICKIT2 screen
'is then opened, it executes normally again. PICKIT2 is set to
'VDD target and is not supplying power to the application.
HIGH PORTC.4 :PAUSE 500 ' Short Blink the LED_RED as heart beat
LOW PORTC.4: PAUSE 500 ' during BOOT loop. Doesn't Blink when
' disconnected from PICKIT2!
SEROUT2 TX,84,["AT+iRPG=booger",$d ,$a] ' SETS REMOTE PASSWORD
SERIN2 RX ,84,2500,BOOT,[WAIT("I/OK")]
PAUSE 100
WRITE 5,5 'EEPROM test to see if program executes to here..it does!
'SEROUT2 TX,84,["AT+iWSEC=0",$d ,$a] ' WPA-TKIP PROTOCAL
' Commented out until WPA setup on wireless router
'SERIN2 RX ,84,2500,BOOT,[WAIT("I/OK")]
PAUSE 100
SEROUT2 TX,84,["AT+iWLSI=Buckskin",$d,$a]' SET SSID WE ARE LOOKING FOR
SERIN2 RX ,84,2500,BOOT,[WAIT("I/OK")] '
PAUSE 100
'SEROUT2 TX,84,["AT+iWLPP=macmac3X3",$d,$a]' SET PASS-PHRASE
' Commented out until WPA setup on wireless router
'SERIN2 RX ,84,2500,BOOT,[WAIT("I/OK")]
PAUSE 100
SEROUT2 TX,84,["AT+i!RP10",$d,$a] ' REPORTS CONNECTION PARAMETERS
SERIN2 RX ,84,2500,BOOT,[WAIT("I/OK")] ' FOR DEBUGGING
PAUSE 100
SEROUT2 TX ,84,[ "AT+iIPA?" , $d , $a ] ' RETURNS IP ADDRESS
' FOR DEBUGGING
SERIN2 RX ,84 , 2500 ,BOOT , [ DEC ADR[0] , DEC ADR[1] , DEC ADR[2] , DEC ADR[3] ]
PAUSE 100
WRITE 6,6 'EEPROM test to see if program executes to here..it does!
SEROUT2 TX,84,["AT+iWWW",$d,$a] ' STARTS iChip WEB SERVER
SERIN2 RX,84,1000,BOOT,[WAIT("I/(")]
WRITE 7,7 'EEPROM test to see if program executes to here..it does!
PAUSE 100
GOSUB Blink ' IF WE GET HERE BLINK LED_GRN
PAUSE 100
WRITE 16,ADR[0] ' Write the IP to EEPROM for post run identify
WRITE 17,ADR[1] ' Use PC host to then go to iChip web server at
WRITE 18,ADR[2] ' http:ADR[0].ADR[1].ADR[2].ADR[3] and set all
WRITE 19,ADR[3] ' desired iChip parameters for operations
GOTO BOOT
Blink:
HIGH PORTC.5 :PAUSE 500 ' Short Blink the LED_GRN..IT DOES AFTER ~1 minute!
LOW PORTC.5: PAUSE 500
RETURN
[/CODE]
Does the PIC run without the PicKit2?
Do a blinky to verify.
The Sparkfun device looks like it requires 5 and 3 volts.
Do you have both? Do they share a ground, VSS ?
Do you have capacitors near the PIC across VDD and VSS?
Did you change the backup battery problem?
Dave
Always wear safety glasses while programming.
I created a set of code that is the same as above post down through the _RES_PD and MSEL initialization followed only by a mainloop that blinks the LED. I did this so that all the setup code I was using was still the same in this test. This blinky code works whether the PICKIT2 is connected or not, so that didn't ID the problem.
Yes. Actually I have the iWiFi module running on 3.32 volts which is within its required Vdd range, so the lov voltage side of the Sparkfun converter is at 3.32v.The Sparkfun device looks like it requires 5 and 3 volts.
Do you have both?
Yes, I created a large ground plane layer on the top layer of my PCB right below the iWiFi module's outline where it is mounted to the PCB and this ground plane is shared with the level converter, the PIC and the rest of the PCB circuit.Do they share a ground, VSS ?
Yes, I have a 10uf tantalum and a 0.1uf ceramic connected near Vdd on the PIC to the Vss.Do you have capacitors near the PIC across VDD and VSS?
Yes, after I cut the traces to the pull-ups and greenwired them to Vcc I then replaced the backup battery and the clock is running fine and maintaining time.Did you change the backup battery problem?
These were all good questions and I appreciate you making me think through this. The bad news is that the code still quits running when the PICKIT2 is disconnected. However the good news is that I am now sending and receiving an email from the ichip (but only when the PICKIT2 is connected). Still trying to figure out the AT+i commands and right sequence of WAITs to only send one email when I want to. At this time for some reason it is sending two emails one minute apart repeated every 8 minutes. I thought I had the timing in this code set to only send one every 5 minutes and don't see where this is causing the repeats at the wrong interval. I only want it to send one every 5 minutes. I don't think I have the WAIT statements for I/OK, I/DONE, and I/ERROR correct and the timeouts to the EMAIL label may be causing repeated emails. Here is the EMAIL routine code I am using....any suggestions?
Code:EMAIL_SET: SEROUT2 TX,84,["AT+iSBJ:iChip ADC TEMPERATURE",$d,$a] 'Permanently sets Email header Subject field SERIN2 RX ,84,2500,EMAIL_SET,[WAIT("I/OK")] SEROUT2 TX,84,["AT+iTOA:[email protected]",$d,$a] 'Permanently sets Email addressee SERIN2 RX ,84,2500,EMAIL_SET,[WAIT("I/OK")] SEROUT2 TX,84,["AT+ito:jellis00",$d,$a] 'Permanently sets Email header =To: description SERIN2 RX ,84,2500,EMAIL_SET,[WAIT("I/OK")] SEROUT2 TX,84,["AT+iREA:[email protected]",$d,$a] 'Permanently sets the RETURN EMAIL Address SERIN2 RX ,84,2500,EMAIL_SET,[WAIT("I/OK")] SEROUT2 TX,84,["AT+iFRM:iChip",$d,$a] 'Permanently sets Email header =From: description. SERIN2 RX ,84,2500,EMAIL_SET,[WAIT("I/OK")] SEROUT2 TX,84,["AT+iSMTP:smtp.comcast.net",$d,$a]'Sets the SMTP Server Name or IP. SERIN2 RX ,84,2500,EMAIL_SET,[WAIT("I/OK")] SEROUT2 TX,84,["AT+iSMA=1",$d,$a] 'Permanently sets SMTP authentication method SERIN2 RX ,84,2500,EMAIL_SET,[WAIT("I/OK")] SEROUT2 TX,84,["AT+iSMP:Kevin111",$d,$a] 'Permanently sets authenticated SMTP login SERIN2 RX ,84,2500,EMAIL_SET,[WAIT("I/OK")] SEROUT2 TX,84,["AT+iSMU:je.lodestar",$d,$a] 'Permanently sets Authenticated SMTP login User Name. SERIN2 RX ,84,2500,EMAIL_SET,[WAIT("I/OK")] GOSUB Blink_GRN ' Short blink the LED_GRN if gets to here CNT = CNT + 1 FOR D_LAY = 1 TO 12 ' Delay for 1 min PAUSE 5000 NEXT D_LAY IF CNT > 4 THEN ' Execute if 5 minutes have passed FOR I = 0 TO 1 ' Long Blink LED_GRN 2x if gets to here HIGH PORTC.5 PAUSE 2000 LOW PORTC.5 PAUSE 2000 NEXT GOSUB GET_T GOSUB EMAIL ' Send an email every 2 minutes CNT = 0 ' Reset CNT after 2 minutes ENDIF PAUSE 2000 GOTO BOOT END ' To protect code from going to never-never-land EMAIL: SEROUT2 TX,84,["AT+iEMA:",$d,$a] 'Defines a plain text e-mail body SEROUT2 TX,84,["HI, THIS IS FROM 206 N Veterans.",$d,$a] SEROUT2 TX,84,["SENT EVERY HOUR.",$d,$a] SEROUT2 TX,84,["THE TEMPERATURE IS.",$d,$a] SEROUT2 TX,84,[DEC temp," F Inside.",$d,$a] SEROUT2 TX,84,["GO TO:",$d,$a] SEROUT2 TX,84,["http://www.lodestarassoc.com/ichip/ichip.html",$d,$a] SEROUT2 TX,84,["FOR A ONE MINUTE UPDATE.",$d,$a] SEROUT2 TX,84,[$d,$a,".",$d,$a] SERIN2 RX ,84,2500,EMAIL,[WAIT("I/OK")] GOSUB Blink_GRN ' Short blink LED_GRN 3x GOSUB Blink_GRN GOSUB Blink_GRN PAUSE 1000 GOTO Sent SERIN2 RX ,84,2500,EMAIL,[WAIT("I/ERROR")] GOSUB Blink_RED ' Short blink LED_RED 3x GOSUB Blink_RED GOSUB Blink_RED PAUSE 1000 SERIN2 RX,84,2500,EMAIL,[WAIT("I/DONE")] PAUSE 2500 ' After successfully sending the e-mail, allow 2.5 seconds 'delay for iChip re-initialization following an Internet mode session. GOSUB Blink_GRN ' Short blink LED_GRN 4x GOSUB Blink_GRN GOSUB Blink_GRN GOSUB Blink_GRN PAUSE 1000 Sent: ' Label for GOTO after email is sent to skip other WAIT checks. RETURN
To have accurate timing you will need to interrupt base the routine. You can use the RTC for that.
Dave
Always wear safety glasses while programming.
Bookmarks