Stumped with word variable


Closed Thread
Results 1 to 31 of 31

Hybrid View

  1. #1
    Join Date
    Oct 2009
    Posts
    583


    Did you find this post helpful? Yes | No

    Default Re: Stumped with word variable

    Thanks guys for the additional input. I'm running 2.60 and MPLAB 8.87 which has never been a problem.

    I've come across a previous bit of code that used the highbyte / lowbyte and that compiled fine so it must be to do with something in that statement. I'll try changing the variables (removing the underscore) and see if that has any affect, but as the example code I found also used underscores than I can't see that being the issue.

    Malcolm

  2. #2
    Join Date
    Oct 2009
    Posts
    583


    Did you find this post helpful? Yes | No

    Default Re: Stumped with word variable

    Confused !

    I loaded a version of the code that contained hard coded values for the light on times. EG 14:00 is 840 minutes after midnight. I commented out the hard coded values and enterd the data statements etc so this is what I had

    Code:
    Blue_on_Time var word            'stores the blue on time as a digit in minutes, eg 14:00hrs = 840
    I then added the data statement
    Code:
    data @0
        data    00      'Blue fade IN duration hours
        data    30       'Blue fade IN duration minutes
        data    00      'Blues fade OUT duration hours
        data    30       'Blue fade OUT duration minutes
        data    00       'Whites fade IN duration hours
        data    30      'Whites Fade IN duration MINS
        data    00       'Whites Fade OUT duration HOURS
        data    30       'Whites Fade OUT duration MINS
        data    255       'Blue MAX Intensity %
        data    255      'Whites MAX Intensity %
        data    840
    I then added the read statement

    Code:
    read 10,Blue_on_time
    I then added the line so I could see what values for Blue on time I was getting
    Code:
    lcdout $FE,$D4+11,dec Blue_on_Time
    When that was complied and loaded, the program gave a value of 74 when first run, and obviously the condition was not matched and the blue LEDs remained off. If I then go into the menu option to set the on time to 14:00 the LCD correctly displays 840 as the LCD (simplified part of the code here)
    Code:
    Lighton:
    
    Lcdout $FE,2
    LCDOUT $FE,$80,"Set On Time For "
        IF H_butt = 0 THEN GOSUB delHours
        IF M_butt = 0 THEN GOSUB delMinutes
        lightsetHR[fn]=Hours
        lightsetMN[fn]=Minutes
        if viv >=2 then viv =2
        if viv= 1 then LCDOUT $FE,$C0,"Blue Leds "
        if viv= 2 then LCDOUT $FE,$C0,"white Leds "   
        lcdout $FE,$94,#lightsetHR[fn] DIG 1,#lightsetHR[fn] DIG 0,":",#lightsetMN[fn] DIG 1,#lightsetMN[fn] DIG 0
        Blue_on_Time = (lightsetHR[0]*60)+lightsetMN[0]
        White_on_Time = (lightsetHR[1]*60)+lightsetMN[1]
        
        write 10,Blue_on_Time
    If then add the high / low byte to the option in the read and write statements I get the Illegal character error again.

    The other thing that is now not happening is that if I remove the highbyte / lowbyte from the read / write commands program the chip and then manually set the on time the LCD displays 840 as the value, but when the counter value is reached (ie the clock turns to 14:00) there is no change in state of the LEDs. So its not matching the correct value for the word variable. Could this be due I'm comparing the decimal value for the variable, when in real terms it's still in hex decimal or something ?

    My other option would be to use the lightsetHR[0] and lightsetMN[0] as the data values saved and then try and let the program do the conversion Blue_on_Time = (lightsetHR[0]*60)+lightsetMN[0].


    Update: I've tried the above and I still can't get the case to change from off to on

    Code:
    data @0
        data    00      'Blue fade IN duration hours
        data    30       'Blue fade IN duration minutes
        data    00      'Blues fade OUT duration hours
        data    30       'Blue fade OUT duration minutes
        data    00       'Whites fade IN duration hours
        data    30      'Whites Fade IN duration MINS
        data    00       'Whites Fade OUT duration HOURS
        data    30       'Whites Fade OUT duration MINS
        data    255       'Blue MAX Intensity %
        data    255      'Whites MAX Intensity %
        data    14
        data    00
    And then have this in the read routine

    Code:
    Read 10,lightsetHR[0]
    Read 11,lightsetMN[0]
    This compiled Ok and when loaded the LCD correctly displayed 840 as the value of Blue_on_time, but when the clock turned over from 13:59 to 14:00 the case still remains the same and the LED failed to light.

    If I comment out the read write and data lines, and code the value blue_on_time=840 it works !!!! - obviously I would like to be able to change the on and off times of the two channels (white and blue) rather than had coded.
    Last edited by Scampy; - 9th November 2013 at 17:46. Reason: update on further test

  3. #3
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,612


    Did you find this post helpful? Yes | No

    Default Re: Stumped with word variable

    Hi,
    You can't just say DATA 840 since that is larger than what fits in a byte.
    Are you sure the LCD said 74 and not 72? 840 in binary is 1101001000, look at the 8 least significant bits (marked in red), that's what will actually fit within the byte in EEPROM. It says 72.

    As been written previously you need to use the WORD modifier to store a WORD in EEPROM, and then use it again to read it. Or read the high and low byte "manually" after figuring out in which order the DATA statement stores them.

    /Henrik.

  4. #4
    Join Date
    Oct 2009
    Posts
    583


    Did you find this post helpful? Yes | No

    Default Re: Stumped with word variable

    Henrik,

    I still can't get this to compile. I've tried something different, here is my logic (illogical thinking !!)

    Created eight new variables, as bytes as the values will be 0-12 for hours and 0-59 for minutes
    Code:
    Blue_On_Time_H var byte
    Blue_on_Time_M var byte
    Blue_Off_Time_H var byte
    Blue_off_Time_M var byte
    
    White_On_Time_H var byte
    White_on_Time_M var byte
    White_Off_Time_H var byte
    White_off_Time_M var byte
    Then add eight lines of data to match

    Code:
        data    14      'Blue ON time hours
        Data    00      'Blue ON time minutes
        data    15      'Blue OFF time hours
        Data    00      'Blue OFF time minutes
        Data    14      'Whites ON time hours
        data    01      'Whites ON time minutes
        data    14      'Whites OFF time hours
        Data    20      'Whites OFF time minutes
    Then added the read and write sections

    Code:
    write 10,white_on_time_h              'Whites ON time hours
    write 11,white_on_time_m              'Whites ON time minutes
    write 12,white_off_time_h             'Whites OFF time hours
    write 13,white_off_time_m             'Whites OFF time minutes
    write 14,blue_on_time_h             'Whites ON time hours
    write 15,blue_on_time_m             'Whites ON time minutes
    write 16,blue_off_time_h            'Whites OFF time hours
    write 17,blue_off_time_m            'Whites OFF time minutes
    Code:
    Read 10,white_on_time_h              'Whites ON time hours
    Read 11,white_on_time_m              'Whites ON time minutes
    read 12,white_off_time_h             'Whites OFF time hours
    read 13,white_off_time_m             'Whites OFF time minutes
    read 14,blue_on_time_h             'blue ON time hours
    read 15,blue_on_time_m             'blue ON time minutes
    read 16,blue_off_time_h            'blue OFF time hours
    read 17,blue_off_time_m            'blue OFF time minutes
    I get the illegal character error when compiling. If I comment out the read / write lines for these variables it complies. I've even tried commenting all but just one line and it still fails !

    OK I see I've transposed the data values - but the fact that it's not putting anything into the memory shouldn't matter

    Now corrected:
    Code:
    data @0
        data    00      'Blue fade IN duration hours
        data    30      'Blue fade IN duration minutes
        data    00      'Blues fade OUT duration hours
        data    30      'Blue fade OUT duration minutes
        data    00      'Whites fade IN duration hours
        data    30      'Whites Fade IN duration MINS
        data    00      'Whites Fade OUT duration HOURS
        data    30      'Whites Fade OUT duration MINS
        data    255     'Blue MAX Intensity %
        data    255     'Whites MAX Intensity %
        data    14      'Whites ON time hours
        Data    00      'Whites ON time minutes
        data    15      'Whites OFF time hours
        Data    00      'blue OFF time minutes
        Data    14      'blue ON time hours
        data    01      'blue ON time minutes
        data    14      'blue OFF time hours
        Data    20      'blue OFF time minutes
    Last edited by Scampy; - 9th November 2013 at 21:49. Reason: corrected data

  5. #5
    Join Date
    Oct 2009
    Posts
    583


    Did you find this post helpful? Yes | No

    Default Re: Stumped with word variable

    One more for tonight before I throw this poxy project out the window.

    why does WRITE 10,lightsetHR[1] work when WRITE 10,white_on_time_h cause the illegal error ?

    I've changed the code to the following:
    Data statement:
    Code:
    data @0
        data    00      'Blue fade IN duration hours
        data    30      'Blue fade IN duration minutes
        data    00      'Blues fade OUT duration hours
        data    30      'Blue fade OUT duration minutes
        data    00      'Whites fade IN duration hours
        data    30      'Whites Fade IN duration MINS
        data    00      'Whites Fade OUT duration HOURS
        data    30      'Whites Fade OUT duration MINS
        data    255     'Blue MAX Intensity %
        data    255     'Whites MAX Intensity %
        data    14      'Whites ON time hours
        Data    00      'Whites ON time minutes
        data    15      'Whites OFF time hours
        Data    00      'blue OFF time minutes
        Data    14      'blue ON time hours
        data    01      'blue ON time minutes
        data    14      'blue OFF time hours
        Data    20      'blue OFF time minutes
    Read statement:
    Code:
    Read 0,fadesetHR[0]    'Blue fade IN duration hours
    Read 1,fadesetMN[0]    'Blue fade IN duration minutes
    Read 2,fadeoutHR[0]    'Blue fade OUT duration hours
    read 3,fadeoutMN[0]    'Blue fade OUT duration minutes
    
    read 4,fadesetHR[1]    'Whites fade IN duration hours
    read 5,fadesetMN[1]    'Whites fade IN duration minutes
    read 6,fadeoutHR[1]    'Whites fade OUT duration hours
    read 7,fadeoutMN[1]    'Whites fade OUT duration minutes
    
    Read 8,B_max
    Read 9,W_max
    
    Read 10,white_on_time_h              'Whites ON time hours
    Read 11,white_on_time_m              'Whites ON time minutes
    read 12,white_off_time_h             'Whites OFF time hours
    read 13,white_off_time_m             'Whites OFF time minutes
    read 14,blue_on_time_h             'blue ON time hours
    read 15,blue_on_time_m             'blue ON time minutes
    read 16,blue_off_time_h            'blue OFF time hours
    read 17,blue_off_time_m            'blue OFF time minutes
    Write statements

    Code:
    write 0,fadesetHR[0]    'Blue fade IN duration hours
    write 1,fadesetMN[0]    'Blue fade IN duration minutes
    write 2,fadeoutHR[0]    'Blue fade IN duration hours
    write 3,fadeoutMN[0]    'Blue fade IN duration minutes
    
    write 4,fadesetHR[1]    'Whites fade IN duration hours
    write 5,fadesetMN[1]    'Whites fade IN duration minutes
    write 6,fadeoutHR[1]    'Whites fade IN duration hours
    write 7,fadeoutMN[1]    'Whites fade IN duration minutes
    
    write 8,B_max
    write 9,W_max
    
    write 10,lightsetHR[1]
    write 11,lightsetMN[1]
    write 12,lightoffHR[1]
    Write 13,lightoffMN[1]
    
    write 14,lightsetHR[0]
    write 15,lightsetMN[0]
    write 16,lightoffHR[0]
    Write 17,lightoffMN[0]
    I then have the following section as part of the initialization before the main program loop
    Code:
    lightsetHR[0] = Blue_On_Time_H
    lightsetMN[0] = Blue_On_Time_M
    lightsetHR[1] = White_On_Time_H
    lightsetMN[1] = White_On_Time_M
    
    lightoffHR[0] = Blue_Off_Time_H
    lightoffMN[0] = Blue_Off_Time_M
    lightoffHR[1] = White_Off_Time_H
    lightoffMN[1] = White_Off_Time_M
    And in the main program loop

    Code:
    Blue_on_Time =(lightsetHR[0]*60)+lightsetMN[0]
    Blue_off_time = (lightoffHR[0]*60)+lightoffMN[0]
     
    White_on_Time =(lightsetHR[1]*60)+lightsetMN[1]
    White_off_time = (lightoffHR[1]*60)+lightoffMN[1]

    This compiles fine, and when first run the case changes at the value set in the data statement, and the LCD displays the correct value for Blue on time (eg 842 for 14:02). But when I set the on time up via the menu, even though the LCD displays the new value for blue_on_time correctly (eg 845 for 14:05 as set via the menu) it still fails to trip the case statement at the new time.

    Any ideas ?

  6. #6
    Join Date
    May 2013
    Location
    australia
    Posts
    2,645


    Did you find this post helpful? Yes | No

    Default Re: Stumped with word variable

    it might be easier to use a PCF8563 rtc chip with built in alarm and interrupt output
    I use one of these on my wireless remote rain guage its a good thing. works at 3v too

    i'd need to see the full code to see whats wrong with your project

  7. #7
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,612


    Did you find this post helpful? Yes | No

    Default Re: Stumped with word variable

    Hi,
    I have NO idea what's going on with this Illegal Character error. The only thing I can think of is, as I've said before, some kind of hidden character that makes the compiler hick up. I copy/pasted all of the sections in the previous post into MCS, resulting in the following:
    Code:
    Blue_On_Time_H var byte
    Blue_on_Time_M var byte
    Blue_Off_Time_H var byte
    Blue_off_Time_M var byte
    
    White_On_Time_H var byte
    White_on_Time_M var byte
    White_Off_Time_H var byte
    White_off_Time_M var byte
    
    data    14      'Blue ON time hours
    Data    00      'Blue ON time minutes
    data    15      'Blue OFF time hours
    Data    00      'Blue OFF time minutes
    Data    14      'Whites ON time hours
    data    01      'Whites ON time minutes
    data    14      'Whites OFF time hours
    Data    20      'Whites OFF time minutes
        
    write 10,white_on_time_h              'Whites ON time hours
    write 11,white_on_time_m              'Whites ON time minutes
    write 12,white_off_time_h             'Whites OFF time hours
    write 13,white_off_time_m             'Whites OFF time minutes
    write 14,blue_on_time_h             'Whites ON time hours
    write 15,blue_on_time_m             'Whites ON time minutes
    write 16,blue_off_time_h            'Whites OFF time hours
    write 17,blue_off_time_m            'Whites OFF time minutes
    
    Read 10,white_on_time_h              'Whites ON time hours
    Read 11,white_on_time_m              'Whites ON time minutes
    read 12,white_off_time_h             'Whites OFF time hours
    read 13,white_off_time_m             'Whites OFF time minutes
    read 14,blue_on_time_h             'blue ON time hours
    read 15,blue_on_time_m             'blue ON time minutes
    read 16,blue_off_time_h            'blue OFF time hours
    read 17,blue_off_time_m            'blue OFF time minutes
    
    END
    Needles to say it compiles just fine for the 12F683, 16F877, 18F8620 and any other device I try with onboard EEPROM. I've tried this with both PBP3.0.7.4 and with PBP2.60. My MPBLAB installation is v8.88 containing MPASM v5.47.

    /Henrik.

  8. #8
    Join Date
    Oct 2009
    Posts
    583


    Did you find this post helpful? Yes | No

    Default Re: Stumped with word variable

    Quote Originally Posted by richard View Post
    it might be easier to use a PCF8563 rtc chip with built in alarm and interrupt output
    I use one of these on my wireless remote rain guage its a good thing. works at 3v too

    i'd need to see the full code to see whats wrong with your project
    I have a DS1307 RTC chip, but for some reason in the original project this gave me a lot of issues as the time would randomly revert to 10:10:10 and thus screw up the timings. I'll have a look at the 8563 chip, but really wanted to steer away from external chips in case the same issue happens again

Similar Threads

  1. When variable may not fits into WORD limitations
    By CuriousOne in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 16th July 2013, 09:26
  2. How to isolate 10 bits from word variable?
    By rcbandwidth123 in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 14th April 2008, 20:18
  3. adding new word variable ?
    By iugmoh in forum General
    Replies: 4
    Last Post: - 21st February 2008, 00:26
  4. WORD vs BYTE variable lengths
    By bartman in forum General
    Replies: 0
    Last Post: - 28th November 2005, 21:16
  5. word variable to 25lc640
    By TONIGALEA in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 6th July 2004, 19:59

Members who have read this thread : 0

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