Hi Chris,
That's quite a bit of code to go thru but one thing I noticed is code like this (which you have 3 sets of):Here you're making the calculation volts/10 no less than 6 times even though the result will be the same each time. It would be more efficient from a speed and program memory point to do the calculation one time and using the result of that calculation.Code:'----------------------------VOLTAGE------------------------------- if (volts/10 < TripVoltsLow1) OR (volts/10 < TripVoltsLow2) OR (volts/10 < TripVoltsLow3) then HIGH OUT1 'ON ELSE LOW OUT1 'OFF ENDIF IF (VOLTS/10 > TRIPVOLTSHIGH1) OR (VOLTS/10 > TRIPVOLTSHIGH2) OR (VOLTS/10 > TRIPVOLTSHIGH3) THEN HIGH OUT1 'ON ELSE LOW OUT1 'OFF ENDIF
More, HIGH/LOW are convenient commands but if have your TRIS-registers set correctly (and I think you have) you might as well do OUT1 = 1 or OUT1 = 0 etc, that's also more efficient both in execution time and program space.
The display routine (or part of it):Here you are storing the string VOLTAGE: in program memory 5 times. It would be more effecient to first print out VOLTAGE: and then, depending on the value of Volts, print the rest. I also think that it can be optimzed quite a bit by using the modulo operator ( // ) instead of printing the individual digits like that but I'm not sure if you're achieving anything special by doing it the way you are. If Volts are in units of 0.1 volts (ie 1234 is 123.4V) then you could simply doCode:LCDout $fe, 1 ' XXXXXXXXXXXXXXXXXXXX <-- 20 DIGITS 'Voltage Display If Volts = 0 then Lcdout $fe, LINE1, "VOLTAGE: 0.0 V" endif if (Volts > 0) AND (Volts < 10) then Lcdout $fe, LINE1, "VOLTAGE: 0.",DEC Volts," V" endif if (Volts > 9) AND (Volts < 100) then Lcdout $fe, LINE1, "VOLTAGE: ",DEC Volts DIG 1,".",DEC Volts DIG 0," V" endif if (Volts > 99) AND (Volts < 1000) then Lcdout $fe, LINE1, "VOLTAGE: ",DEC Volts DIG 2,DEC Volts DIG 1,".",DEC Volts DIG 0," V" endif if Volts > 1000 then Lcdout $fe, LINE1, "VOLTAGE: ",DEC Volts DIG 3,DEC Volts DIG 2,DEC Volts DIG 1,".",DEC Volts DIG 0," V" endifWell, that's a couple of ideas you might look into.Code:LCDOUT $FE, 1 LCDOUT $FE, LINE1, "Voltage: ", DEC3 Volts/10, ".", DEC Volts//10
/Henrik.




Bookmarks