Ice bank control system for beverage dispenser
CROSS-REFERENCE TO RELATED APPLICATION 
    
    
     BACKGROUND OF THE INVENTION 
     This is a continuation-in-part application to parent application Ser. No. 07/115,935 filed Nov. 2, 1987, abandoned by the same inventors and having the same title. 
     This invention relates to an ice bank control system, and in particular to such a system for a beverage dispenser having a mechanical refrigeration system. 
     Ever since ice banks have been used to maintain a water bath at or near 32 degrees F. surrounding the ice bank, the control systems to maintain the ice bank, for the most part have been metal capsules filled with water. The freezing process caused expansion within the capsule thereby flexing a diaphragm and pushing a fluid in a capillary tube against a piston on the opposite end of the capillary tube to actuate a switch. These systems have been adequate over the years, however, being a mechanical type of system, they have problems of leakage, diaphragm wear, and general mechanical tolerances that sometimes make this type of control irregular in its operation. Since the water inside the capsule on these devices is enclosed, they all tend to overbuild an ice bank on the initial pull down, as the first ice crystal formation does not occur immediately, partially due to having a very slight pressure on the water in the capsule. After the initial pull down, the ice never completely melts within a capsule during normal operation and the temperature cycle becomes very consistent until wear or leakage in the system causes a change that generally builds a larger ice bank until complete failure, at which time, the water within the ice bank container completely freezes. To replace the control necessitates waiting for the ice to melt. In addition, when the ice bank container freezes completely, damage often occurs to the more expensive stainless steel water and syrup cooling coils, requiring replacement thereof. 
     SUMMARY OF THE INVENTION 
     The present invention encompasses more than just controlling the thickness of the ice bank; it also includes protection for the compressor. The present invention uses a solid state sensor that has proven to be very reliable to measure the temperature of the super cooled ice. This system can maintain a very consistent ice bank within the capacity of the compressor system. 
     The ice bank control system of this invention is for use in a mechanical refrigeration system of a beverage dispenser, and comprises a sensor (or probe) located in the ice water bath tank adjacent to the evaporator coil, a control circuit including a microprocessor located above the ice water bath tank, and a low cost relay for turning the compressor on and off. The sensor is an inexpensive solid state sensor, preferably a thermistor. The microprocessor is preferably a single chip microcomputer. The microprocessor is programmed to not only control the ice bank, but also to: (1) maintain the compressor off for a period of time, each time it is turned off, to allow high and low pressure equalization to reduce the risk of compressor motor burnup; (2) shut off the compressor to prevent an overfreeze whenever either a short circuit or an open circuit occurs in the solid state sensor; (3) control the agitator motor including keeping it off whenever the water temperature is above a certain temperature, such as 60 degrees F., to reduce the risk of burnup of the compressor motor; (4) prevent overbuild of the ice bank during the initial icebank buildup, which can prevent freeze up of the syrup and water lines; (5) reduce the number of calls required to repair a failure; and (6) provide a &#34;watchdog&#34; circuit that turns the compressor off in the event of an unusual spike or wave form. 
     It is an object of the present invention to overcome the above-mentioned problems in the prior art and to provide an improved ice bank control system. 
     It is a further object of this invention to provide an ice bank control system that is fail safe, that is, when it fails, it shuts off the compressor. 
     It is another object of the present invention to provide a closer control on the ice bank size. 
     It is a further object to provide an ice bank control system that does not require the presence of a tube of fluid extending into the ice bath. 
     It is another object of the invention to provide an ice bank control that controls the agitator. 
     It is another object of this invention to provide an ice bank control system using an inexpensive solid state sensor. 
     It is another object of this invention to provide an ice bank control system using a solid state sensor, a microprocessor and a relay. 
     It is a still further object of this invention to provide an ice bank control system that controls not only the ice bank but that also: (1) maintains the compressor off for a period of time, each time it is turned off, to allow high and low pressure equalization to reduce the risk of compressor motor burnup; (2) shuts off the compressor to prevent an overfreeze whenever either a short or an open circuit occurs in the solid state sensor; (3) controls the agitator motor including keeping it off whenever the water temperature is above a certain temperature, such as 40 degrees F., to reduce the risk of compressor motor burnup (4) prevents overbuild of the ice bank during the initial icebank buildup, which can prevent freeze up of the syrup and water lines; (5) when built in large quantities, is less expensive than previous systems while providing additional features such as protecting the compressor and reducing the number of failures and the number of calls required to repair a failure; and (6) includes a &#34;watchdog&#34; circuit that turns the compressor off in the event of an unusual spike or wave form. 
     It is another object of this invention to provide an ice bank control system using an inexpensive thermistor, the resistance of which is measured and then compared to a reference value previously stored in the microprocessor memory. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     The present invention will be more fully understood from the detailed description below when read in connection with the accompanying drawings wherein like reference numerals refer to like elements and wherein: 
     FIG. 1 is a partly-cross-sectional rear elevational view of a beverage dispenser using the ice bank control system of this invention; 
     FIG. 2 is a perspective view of the sensor, control housing and support bracket for the sensor; 
     FIG. 3 is a cross-sectional view through the sensor; 
     FIG. 4 is an electrical block diagram of the control circuit; 
     FIGS. 5A and 5B are an electrical schematic circuit diagram of the ice bank control circuit; and 
     FIGS. 6A-6J are a flow diagram of the software. 
    
    
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS 
     With reference now to the drawings, FIG. 1 shows a beverage dispenser 10 having a mechanical refrigeration system 12 including an ice water bath tank 14, evaporator coils 16 positioned in the tank 14 to build an ice bank 17, syrup cooling coils 18 water cooling coils 19, an agitator 20, an agitator motor 22, a compressor system including a compressor motor 24 and a control box 26 housing an ice bank control system 28. The ice bank control system 28 of the present invention can be used with any standard well-known refrigeration system. It is therefore, not necessary to describe in detail such known refrigeration system. 
     Referring to FIGS. 1-3, the ice bank control system 28 of this invention comprises a sensor 30 connected by an insulated and shielded electrical line 32 to the ice bank control system mounted above the water on a refrigeration deck 36. The sensor 30 is mounted in the ice water bath at the desired predetermined distance (usually one to two inches) from the evaporator coil 16, by a support bracket 38 connected to a coil. The distance depends upon the type and size of the particular dispenser, the amount of weight of ice the coils 16 are designed to carry, and the desired thickness of the ice bank. The bracket 38 can provide for adjusting the distance of the sensor 30 from the coil. The sensor 30 is preferably an inexpensive solid state sensor such as a highly repeatable thermistor sensing element 40 encased in a quantity of epoxy material 42 inside a watertight plastic (preferably Lexan) shell 44. 
     The sensor 30 is preferably placed at the desired location for the boundary between the ice and the water. In previous systems, the ice bank would vary in size from about one inch beyond the sensor to one inch short of the sensor. The present invention keeps the ice bank at essentially the same size all the time. When the compressor is on, the temperature at the sensor will continually drop, and while the compressor is off, the temperature at the sensor will continually increase. Various selected temperatures can be selected for the sensor to turn the compressor off and on, that is, for a second higher temperature, respectively. A preferred first temperature is 29.5° F. for all but the first pulldown cycle (which is 27° F.), and is preferably 31.5° F. for the second temperature. 
     This invention uses a probe containing one sensor. One sensor can be used to measure actual temperature and compare it to a reference temperature. This invention compares the sensor temperature with 31.9 degrees. When the sensor goes down to 27° during the first pulldown and 29.5 on all subsequent pulldowns the compressor will cycle off. When it rises to equal 31.5° it will cycle on. This works well because the first ice formation can occur at temperatures as low as 27° F. Therefore, 27° is used first to ensure ice formation. Once ice is developed however the sensor will be one half buried in ice and will be able to detect 29.5° F. When the sensor hits 31.5° F. it must then be just touching the water. 
     In one alternative embodiment, instead of going to 27° F. during the first pulldown to ensure ice formation, the unit senses several minutes at 32°. The reason is that once ice is formed, the bath temperature will hold steady at 32° F. for a long time before ice builds to encapsulate the sensor. 
     Another aspect of this invention is that inexpensive thermistors are used to minimize the cost of the unit. However, this presents the problem that individual thermistors vary from one to the next in their physical properties, such as their resistance at the same temperature. To solve this problem, each unit is separately calibrated in that the thermistor is placed in a water bath of known temperature, such as 32° F., and its resistance is measured and inputted to the memory of the microprocessor. Since the relationship between the temperature and the resistance of the thermistor is linear, this must be done at only one temperature. Then, during operation, the resistance of the thermistor is measured and compared to this value, which the microprocessor has been told is 32° F., for example. 
     With reference now to FIGS. 4 and 5A and 5B, the electric schematic of the ice bank control system 28 of the present invention will now be described. FIG. 4 shows in block diagram the ice bank control circuit 34 connected to the sensor 30. The ice bank control circuit 34 is connected to both the agitator motor 22 and to the compressor motor 24. FIGS. 5A and 5B are a more detailed electrical schematic diagram of the ice bank control circuit 34, which diagram has been divided up by dotted lines in the into seven separate sections A-G for ease of description. 
     Regarding section A, the power supply converts 24 VAC into 24 VDC to supply the relays and into regulated 5 VDC to supply the analog and digital logic circuits. MV1 is a varistor which protects the circuitry in the event more than 47 volts is applied. CE7 and CE8 provide a voltage drop for the AC voltage to the bridge rectifier. The output of the bridge is preregulated by R2 and DZ1 and filtered by CE5. This voltage is the input to RG1 which provides +5 VDC to all the analog and logic circuitry. D1 rectifies the AC input voltage to provide 24 VDC. R12 limits the current to the relays. 
     Regarding section B, I1 is a complete 8 bit single chip microcomputer 48 with 512 program steps and 32 bytes of RAM. It has an 8 bit counter and 12 input/output pins. L1, C3, and C4 provide a 4 MHZ resonator to the oscillator inputs of the microcomputer. J1, J2, J3, J4, J5, J6, and J7 are wire jumpers which are connected between I/0 pins on the microcomputer and ground. Some of the wires will be cut during calibration to one of 128 different patterns. 
     Regarding section C, the watchdog timer is a circuit that provides power on reset for the microcomputer and monitors the operation, forcing the microcomputer to reset if it detects the output pin not changing &#34;states&#34; for as long as eight seconds. C15, D5, and R15 differentiate the watchdog strobe output of the microcomputer 48, which is implemented with software and an output pin. This signal is buffered with one of the gates of I4 and is the input trigger for the 8 second retriggerable timer made up by D6, R14, and CE6. If the differentiator does not receive pulses, then the timer times out, and the output of the timer is the input gate signal to the gated oscillator made up of CE2, R3, and one of the gates of I4. When the gated oscillator starts to oscillate, the output resets the microcomputer 48 through R13, C7, and D4. The oscillator will continue to reset the microcomputer until the watchdog strobe output begins to trigger the timer. 
     Regarding section D, the compressor control circuit takes the logic level output of the microcomputer 48 and drives a normally open dry contact relay output. The microcomputer outputs a logic &#34;1&#34; to open the contacts and a logic &#34;0&#34; to close the contacts. Transistor Q3 and resistors R16 and R8 invert the logic output. CE3 filters the output of the inverter to keep the relay off during transients. Darlington transistor Q1 drives the coil of RL1. D2 protects the circuitry from the inductive switching transients. R17 and C16 provide damping for the contacts of the relay during switching. 
     Regarding section E, the agitator control circuit takes the logic level output of the microcomputer 48 and drives a normally closed dry contact relay output. The microcomputer outputs a logic &#34;1&#34; to open the contacts and a logic &#34;0&#34; to close the contacts. Darlington transistor Q4 and resistor R18 drive the coil of RL2. D7 protects the circuitry from the inductive switching transients. 
     Regarding section F, the precision oscillator changes the output wave form with changes in the resistance of the sensor input. The output wave form is analyzed by the microcomputer 48 to obtain temperature and component drift information. The circuit generates a wave form of which one part is proportional to the temperature, and one part is proportional to a reference. R7, R10, and R11 form a precision voltage divider with outputs of 1.67 VDC and 3.33 VDC. C2 and C6 filter the outputs of the divider which are input to two precision analog voltage comparators contained in I2. The comparators are connected in a circuit where if the voltage of the other inputs to the comparators are between 1.67 and 3.33 VDC the outputs of the comparator are logic &#34;1&#34; S. R1 and R4 are the pullups for the comparators. If the voltage of the other inputs become greater than 3.33 or less than 1.67, the output of one of the comparators will be &#34;0&#34;. The comparators outputs are the set and reset inputs for the &#34;nand latch&#34; made up of 2 gates of I4. When the voltage exceeds the boundaries set up by the voltage divider, the nand latch will change states. One output of the nand latch is input to the microcomputer 48. The other output drives switching transistor Q2 through resistor R9. The other input to the comparators is the voltage on capacitor CE4, which will be charging or discharging through R6 depending on the state of Q2. When CE4 is charging, Q2 will be off and the 5 VDC supply will charge CE4 through the &#34;short circuit resistor&#34; R19, the sensor resistance and R6. When the voltage on CE4 exceeds 3.33 VDC, the comparator output will cause the latch to change states, turning Q2 on and begin to discharge CE4 through R6 only. When the voltage on CE4 drops below 1.67 VDC, the comparator output will cause the state of the nand latch to change again. 
     Regarding section G, T1 is a negative temperature coefficient thermistor whose resistance changes with temperature in a repeatable manner. 
     We have documented the temperature gradient of the ice bank with a chart recorder by placing sensors on the evaporator coil and at 1/8 inch intervals up to 1.5 inches away from the coil. The chart clearly shows a temperature gradient through the ice bank 46 that, when operating normally, ranged from approximately 25 degrees F. to 32 degrees F. at the evaporator coil at the time the compressor 24 shut off. 
     By carefully studying the temperature gradient of the ice bank 46 during normal cycling, we discovered that a temperature pattern existed that could be duplicated using a very accurate temperature measurement system. We determined that a low cost thermistor having a consistent Beta curve where Beta is equal to the semi-conductor material and manufacturing process of the thermistor 40, coupled with a single chip microcomputer 48 and a relatively low cost relay RL1 can be employed to maintain the ice bank 17, with more consistency and with additional features over the previously used system. 
     The system of the present invention includes a low cost highly repeatable thermistor sensing element 40 coupled with a single chip microcomputer 48 to control temperature within 0.05 degrees F. over a very narrow temperature span extending from about 29.5 to about 31.845 degrees. 
     The thermistor 40 was selected because it maintained a Beta curve of plus or minus 1.2% at a temperature range near 32 degrees F., which variation is almost negligible over the narrow span at the near freezing temperature range within which we are operating. 
     Differences between actual thermistor Beta Curves and the ideal Beta curve for this thermistor appear as offsets, which are calibrated out by comparing the unit to the ideal at a fixed temperature. Correction is set digitally to avoid problems such as drift over the lifetime of adjustment potentiometers. 
     In most applications, thermistors are used by measuring voltage across a resistive divider and converting to digital values using a discrete or monolithic analog-to-digital converter. We use the thermistor as one component of a two resistor, one capacitor oscillator. The time of the low state of the oscillator is dependent only on the values of a fixed resistor 54 and the capacitor 56. The time of the high state of the oscillator is dependent on the values of the thermistor 40, the fixed resistor 54 and the capacitor 56. 
     
         ______________________________________                                    
Time Low =      K × RF × C                                    
Time High =     K × (RF + RT) × C                             
Where: RF =     Value of Fixed Resistor                                   
C =             Value of Capacitor                                        
RT =            Value of Thermistor                                       
                Resistance                                                
K =             Constant                                                  
______________________________________                                    
 
    
     By measuring the period of the High and Low states of the oscillator 52, we can calculate the resistance of the thermistor 40. 
     Solving for RT: 
     
         RT = [(RF × Time High)/Time Low]- RF 
    
     Since the value of the capacitor is not used in the calculation of the RT, the value of the capacitor and any temperature drift is not too critical. The temperature drift of the fixed resistor is specified to be negligible. 
     We took the normalized temperature resistance characteristic over a small range and selected coefficients for a second order polynomial approximation which is accurate to 0.01 degrees F. The microcomputer 48 measures the periods and computes the temperature. 
     The thermistor 40 is much like other temperature sensors in that they typically, in a single thermistor version, do not have a linear output that coincides with a linear temperature line. The resistance output is a curve which has to be compensated for in order to have accurate measurements. We have created a formula that is included in software for the microprocessor 48 to perform this function. 
     Since the microprocessor 48 has control of the relay (switch RL1 in FIG. 5D) that controls the compressor motor 24 and since it has the capability of sensing other temperatures and timing functions, we included in the software the following features to further enhance the capability of the icebank control system 28 of this invention: 
     (a) A 41/2minute timer (other time periods could be used) that ensures that the compressor 24 will stay off for 41/2minutes each time it is turned off to allow the high and low pressure sides of the compressor 24 to equalize prior to restarting, to keep the compressor motor from trying to start under a heavy load. This feature can substantially reduce compressor motor burnup. 
     (b) The microcomputer 48 with its software can sense that when the resistance goes to infinity, an open circuit has occurred meaning that a wire has been cut in the sensing circuit thereby causing the microprocessor 48 to shut the compressor 24 off to keep from freezing the water in the tank 14. 
     (c) The microprocessor 48 also senses that when the resistance goes to virtually zero that a short has occurred in the sensing system and again shuts the compressor 24 off to prevent an overfreeze. 
     (d) The microprocessor 48 also senses that when the compressor relay RL1 is closed and the water temperature is high, the microprocessor can control a second relay which controls the water circulation motor. By stopping the agitation of the water around the evaporator coil 16, it allows the ice formation to begin much quicker, thereby allowing the compressor pressure differential from increasing too much, which keeps the compressor motor from overheating and burning up. The software programs the microprocessor 48 to keep the agitator motor 22 off anytime the temperature is above approximately 40 degrees F. 
     (e) Factors such as atmospheric pressure, chemical or mineral content of water, and the amount of stirring in an ice bath can depress the initial freezing temperature to as low as 27.5 degrees F. Since this is below the normal cycling temperature needed to maintain the ice bank, the microprocessor 48 lowers its 29.5 degree F. lower cycle temperature to 27 degrees F. for the first cycle to ensure that the compressor does not turn off during the first ice formation until the ice bank 46 is built. 
     (f) When produced in large quantities, this system with all its extra benefits is a more accurate and cost effective solution to maintaining ice banks and protecting the compressor motor than other systems available on the market. 
     (g) The software includes a &#34;watchdog&#34; circuit 60. This feature shuts the microprocessor 48 down, which turns the compressor motor 24 off in the event of an unusual spike or wave form temporarily disrupts the operation of the microprocessor 48. The circuit continuously tries to restart the microprocessor until it sees the proper wave form. When the microprocessor begins to function again, the compressor motor 24 stays off for 41/2 minutes. 
     The software will be understood by one skilled in the art from the flow chart shown in FIG. 6 and from the following software description. 
     
         ______________________________________                                    
Floating Point Math Package:                                              
Sub. FSUB Subtracts a floating point number in floating                   
          point register A from a floating point number                   
          in floating point register B with the result                    
          going to B.                                                     
Sub. FADD Adds the two floating point numbers in                          
          registers A and B with the result going to B.                   
Sub. FMPY Multiplies the floating point numbers in                        
          registers A and B with the result going to B.                   
Sub. FDIV Divides the floating point number in B by the                   
          floating point number in A with the result                      
          going to B.                                                     
Sub. NEGA Negates the floating point number in A with                     
          the result staying in A.                                        
Sub. NORM NORM normalizes a floating point number in B                    
          so that its most significant bit in the                         
          mantissa is a 1.                                                
Sub. FSWAP                                                                
          FSWAP exchanges the contents of floating                        
          point registers A and B.                                        
Coke Ice Detector:                                                        
Sub. period                                                               
          Branches to code, pbody, in upper half of                       
          memory. This allows it to be called as a                        
          subroutine but not use much subroutine memory                   
          (lower 128 bytes).                                              
Sub. FIXA FIXA repairs the mantissa of floating point                     
          register A with regard to the counting scheme                   
          used by period, period counts within a 16 bit                   
          pseudoregister but the upper B bits has the                     
          value of 128 not 256 as with a normal 16 bit                    
          number. FIXA divides the upper 8 bits by 2,                     
          then adds 128 to the bottom 8 bits if the                       
          top 8 was not evenly divisible by 2.                            
Sub. movbw                                                                
          movbw moves a floating point number in                          
          floating register B to the floating point                       
          register whose number is in W at the onset of                   
          the CALL.                                                       
Sub. movwb                                                                
          movwb moves a floating point number whose                       
          file number is in W at the onset of the CALL                    
          to floating point register B.                                   
Sub. wdt  wdt prevents the constant re-initialization                     
          of the microprocessor by the watch dog                          
          hardware, during normal operation. It does                      
          this by toggling the wdog line whenever                         
          called. The resulting pulses keep capacitor                     
          CE3 discharged, thus preventing the connected                   
          section of IC2 from oscillating and resetting                   
          the 1654.                                                       
The MAIN Program:                                                         
beginning This clears all registers for startup.                          
(no label)                                                                
          This section does simple initialization then                    
          delays for 2.2 seconds or 4.5 minutes (test                     
          or normal modes).                                               
MAIN      This section takes 128 samples, calculates                      
          the resistance of each individually and keeps                   
          a running sum.                                                  
fixexp    fixexp averages the sum by correcting its                       
          exponent. In effect dividing by 128.                            
fahr      fahr calculates the temperature from the                        
          input resistance from the formula                               
          T = A + Br + Cr 2 where T is the                                
          temperature r is the resistance of the probe.                   
          A, B, and C are the constants 86.979, .0226819,                 
          and 17.9 E-9 which were derived from a                          
          2nd degree polynomial fitting the resistance                    
          curve between -5 and +5 degrees Celsius.                        
integrate integrate performs a simple integration                         
          process by applying both the new and previous                   
          temperatures in the formula, new = old -                        
          (old - new)/8. This process is skipped in                       
          test mode, immediately after reset or after                     
          41/2 min. delays.                                               
hitest    hitest first checks to see whether the                          
          temperature is below 40 degrees F. If it is,                    
          it turns on the stirrer motor. The high                         
          setpoint is then loaded.                                        
hiO       hiO checks the current temperature against                      
          the high setpoint. If it is less than the                       
          setpoint program flow continues at lotest.                      
          Otherwise the current temperature is compared                   
          to 150 degrees Fahrenheit. If the                               
          temperature is greater than 150, we restart                     
          by sitting in a loop and not allowing the                       
          watch dog timer to be pulsed. The program                       
          continues by going to MAIN.                                     
lotest    lotest loads the 1st low or low setpoints                       
          depending on whether we have previously                         
          passed below the 1st low setpoint.                              
loO       loO compares the low setpoint against the                       
          current temperature. If the current                             
          temperature is above the low setpoint then                      
          the program continues at with2. If the                          
          current temperature is less than the low                        
          [test] setpoint then the relay is turned or                     
          left on. The program continues by going to                      
          MAIN if in test mode.                                           
wait      The program waits for 4.5 minutes to prevent                    
          the compressor for immediately turning back                     
          on, then continues at MAIN.                                     
with2     The current temperature was above the [ test]                   
          setpoint, so the compressor relay is left in                    
          its current state. Program flow continues at                    
          MAIN.                                                           
pbody     pbody acts in two ways. When first called it                    
          synchronizes the program with the temperature                   
          period. When called again it returns the                        
          actual values of the high and low times.                        
______________________________________                                    
 
    
     The single chip microcomputer 48 is a General Instrument PIC 1654. Some notable characteristics of the microcomputer are: 
     A. 512 program steps 
     B. 32 bytes of RAM 
     C. All instructions execute in 2 or 4 microseconds 
     D. All subroutines must begin in the lower half of memory. 
     E. It has an eight bit clock counter. 
     F. When master clear is pulled low and then released high, the program counter is set to the last program location (511). 
     G. The architecture includes a two level stack. 
     The program consists of 1 main program routine, 6 subroutines, and 7 floating point math subroutines. 
     In the accompanying source code (Exhibit A), the main program with its 5 subroutines, the begin routine, and the floating point subroutines each have separate listings. Each listing has a separate set of line numbers starting with 1. 
     The accompanying source code (Exhibit A) is sequenced in the same order as this description. 
     1. Lines 25 through 61 contain the register definitions. 
     Lines 69 through 76 contain the address definitions of the floating point subroutines so that they can be called by the main routine and 5 subroutines of the 1st listing. 
     Lines 84 through 171 are definitions of constants used within the program. 
     2. Line 186 is the entry point of a routine to measure the high and low periods of the temperature waveform. Placing the entry point here allows the body of the code (in the upper half of memory) to be called as a subroutine. 
     3. Line 204 is the only entry point for subroutine FIXB. Lines 204 through 219 repairs the mantissa for floating point register A with regard to the counting scheme used by subroutine period. Period counts within a 16 bit pseudo-register, but the upper 8 bits has the value of 128 not 256 as with a normal 16 bit number. FIXB divides the upper 8 bits by 2, then adds 128 to the lower 8 bits if the top 8 bits was not evenly divisible by 2. 
     4. Line 228 is the only entry point to subroutine movbw. Lines 228 through 239 move the contents of floating point register B to the floating point register pointed to by W at the onset of the CALL subroutine. 
     5. Line 248 is the only entry point to subroutine movwb. Lines 248 through 259 moves a floating point number pointed to by W at the onset of the CALL subroutine to floating point register B. 
     6. Line 267 is the only entry point to subroutine wdt. Lines 267 through 281 prevent the constant re-initialization, of the microcomputer by the watch-dog hardware during normal operation. By toggling the state of the wdog line capacitor CE3 is kept discharged preventing IC2 from self oscillating and resetting the PIC 1654. 
     Lines 270 through 274 change the state of the wdog line from high to low. 
     Lines 276 through 280 change the state of the wdog line from low to high. 
     7. Line 291 (BEGIN) is the entry point of the main program. 
     Lines 291 through 295 initializes the flags so that the program remembers that this is the first operation and that no integration of temperature should occur. 
     Lines 303 through 326 turn off the compressor relay and delay for 41/2 minutes. If the test pin is held low the 41/2 minute delay is skipped. 
     Lines 334 through 339 initialize the temperature measurement loop. 
     Lines 341 through 359 get the counts for the high and low portions of the temperature waveform for 1 time through the loop. 
     Lines 361 through 373 calculate the sensor resistance from the high and low periods. 
     Lines 375 through 382 adds the calculated resistance to the sum of all resistances for 64 loops. 
     Lines 384 through 385 check to see if we have done all 64 loops. 
     Lines 393 and 394 divide the sum of all loops by 64 to get the average resistance. 
     Lines 407 through 462 convert the average resistance into the temperature in degrees Fahrenheit using the formula T=A+Br=Cr 2. T is the temperature and r is the resistance of the sensor. A, B, and C are the constants 86.979, 0.0226819, and 17.9 E-9, which were derived for a 2nd degree polynomial fitting the resistance curve between -5 and +5 degrees Celsius. 
     Lines 464 through 495 add a correction factor to the calculated temperature. A digital offset is read from I/O port RB and converted to the correction factor by multiplying by 0.055906, then subtracting 3.55. 
     Lines 506 through 528 do simple intergration to smooth out the data by applying the formula: 
     
         T=T(old)-[T(old)-T(new)]/8 
    
     The data is not integrated for the first measurement period after reset and after 41/2 minute delays. 
     Lines 537 through 662 comprise the setpoint tests. 
     Lines 537 through 552 compare the temperature to 40 degrees F. If above 40 degrees F. the stirrer motor is turned off. If at or below 40 degrees F. the stirrer motor is turned on. 
     Lines 554 through 595 compare the temperature to the high setpoint, 31.845 degrees F. If above the high setpoint, the temperature is compared to 150 degrees F. If above 150 degrees F. the program loops to itself at line 581 without toggling the watch dog timer. This restarts the microcomputer. If the sensor wires get severely pinched during installation or operation and the sensor wires short, then the temperature waveform will compute to a temperature above 150 degrees F. and the compressor will remain off. If below 150 degrees F. the compressor relay is turned on. Program flow continues at line 364 (MAIN). 
     Lines 597 through 662 compare the temperature to the low setpoint. If the first-time flag is set, indicating that the control has not previously cycled through the low setpoint temperature, then the low setpoint is set at 27.000 degrees F. otherwise it is set at 29.500 degrees F. If the temperature is above the low setpoint (between setpoints) no action is taken and program flow continues at line 364 (MAIN). If the temperature is below the low setpoint then the compressor relay is turned off and the first-time flag is cleared to show that we have indeed cycled. Program flow then continues at line 364 (MAIN). 
     8. Lines 670 (pbody) through 712 times the high and low periods of the temperature waveform. it is used twice successively, once to synchronize with the waveform and once to actually measure the periods. If the sensor cord has been cut during installation or operation and the sensor appears as an open or very large resistance the 16 bit pseudo counter will overflow in lines 678-681 and the program loops to itself at line 681 without toggling the watchdog timer. This restarts the microcomputer. 
     9. Line 721 is the restart vector which contains the first instruction executed after a restart. 
     10. Lines 35 (BEGIN) through 39 zero all of the registers. 
     Lines 1 through 278 perform the floating point mathematical operations of addition, subtraction, multiplication, and division. The mantissa is a 16 bit long 2&#39;s complement representation of a number between -1/32,768 and 1/32,768. The exponent is an 8 bit two&#39;s complement representation of a number between -128 and 128. This provides a working range of numbers from positive or negative 2.9×10 -39 to positive or negative 3.4×10 38 with an accuracy exceeding 4 significant decimal digits. 
     11. Lines 38 (FSUB) through 91 performs floating point subtraction and addition. If the routine is entered at line 3, the number in floating point register A is 2&#39;s complemented then added to the number in floating point register B, to perform subtraction. If the routine is entered at line 4, no negation takes place and the numbers are merely added. 
     12. Lines 114 (FMPY) through 156 perform floating point multiplication on registers A and B with the product going to B. 
     13. Lines 159 (FDIV) through 211 perform floating point division with the result of B/A going to B. 
     14. Lines 219 (NEGA) through 224 negate floating point register A with the result remaining in A. 
     15. Lines 234 (NORM) through 251 perform normalization on floating point register B. Normalization shifts a floating point number left until the most significant bit is a 1 to maximize the mathematical precision. The sign and magnitude of the number stay the same. Only the representation changes. 
     16. Lines 259 (FSWAP) through 277 exchange the contents of floating point registers A and B. 
     While the preferred embodiments of this invention have been described above in detail, it is to be understood that variations and modifications can be made therein without departing from the spirit and scope of the present invention. ##SPC1##