mackrackit's ConnectOne example code


Closed Thread
Results 1 to 40 of 92

Hybrid View

  1. #1
    Join Date
    Mar 2009
    Location
    Colorado
    Posts
    378

    Default Re: mackrackit's ConnectOne example code

    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

  2. #2
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924

    Default Re: mackrackit's ConnectOne example code

    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.

  3. #3
    Join Date
    Mar 2009
    Location
    Colorado
    Posts
    378

    Default Re: mackrackit's ConnectOne example code

    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]

  4. #4
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924

    Default Re: mackrackit's ConnectOne example 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.

  5. #5
    Join Date
    Mar 2009
    Location
    Colorado
    Posts
    378

    Default Re: mackrackit's ConnectOne example code

    Quote Originally Posted by mackrackit View Post
    Does the PIC run without the PicKit2?
    Do a blinky to verify.
    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.
    The Sparkfun device looks like it requires 5 and 3 volts.
    Do you have both?
    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.
    Do they share a ground, VSS ?
    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 you have capacitors near the PIC across VDD and VSS?
    Yes, I have a 10uf tantalum and a 0.1uf ceramic connected near Vdd on the PIC to the Vss.

    Did you change the backup battery problem?
    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.

    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

  6. #6
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924

    Default Re: mackrackit's ConnectOne example code

    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.

  7. #7
    Join Date
    Mar 2009
    Location
    Colorado
    Posts
    378

    Default Re: mackrackit's ConnectOne example code

    Dave, I am already using a DS1337 RTC in my applicaton with intention of using an interrupt from it on periodic basis to take a temperature reading and to initiate emails via the wireless module per the code I am currently trouble shooting. You can see the schematic of all this in an email I sent to Darrel Taylor which I copied you on in which I enlisted his help to find out why it is only working when a PICKIT2 is plugged in. I also included you on an email to ConnectOne techsupport and one that was direct to you regarding how you terminated the _RES_PD and MSEL connections in your application. Did you get them??

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts