Temperature Recorder. Part 2
The PIC software is written in assembler and based on earlier projects using I2C interfaces. The EEPROM, PIC and external connector all share the same I2C bus and the PIC will not use it unless the thermistor is fitted. The EEPROM address keeps incrementing in this case so that breaks in the data can be seen.
When the temperature measurement is not being made the PIC goes to sleep. It is woken once a second (using an external crystal oscillator and internal counter) to check if it is time to make a measurement. The sampling interval is stored in a fixed location in the external EEPROM and is read at power up.
The thermistor and a resistor form a potential divider that is measured by one of the ADC channels on the PIC. This is measured four times and the four results are added together. This gives a slightly better measurement since the average of four readings is likely to be closer to the true value than a single measurement alone due to the noise present in the circuit.
The ADC measurement is stored directly rather than being converted to a temperature first. To save space and maintain accuracy the change from the previous measurement is stored in 1 byte when possible, otherwise 2 bytes are used. If the value has changed from last time by between –112 and +112 then the amount of the change is stored. If the value has changed more than this then two bytes are stored with the first byte having flag bits to indicate this.
The PIC is a 12F683 device and runs at 4 MHz using the internal oscillator. The I2C interfaces run at nearly 100 kHz using bit-banging (programmed control of the I/O lines) and not a PIC SSP interface.
The complete information for this project is available for download. This includes the library functions for the I2C interface as well as the circuit diagram, layout diagram and various C programs. This project is included in the library of PIC code that is available for download.
To reset the device there is a program that wipes the entire EEPROM (to 0xff) and writes a 32 byte header with the time and the sampling interval. The PIC will use the sampling interval to decide when to make a measurement and the start time is used by the program that extracts the data.
To read the data from the PIC there is software that dumps the entire EEPROM contents and extracts the start time, step size and raw data. The data is converted to date, time, measurement value and temperature for each data point in the EEPROM.
The circuit diagram is very simple with only the ADC interface (one resistor), I2C interface (2 resistors), EEPROM IC, ICSP (socket, 1 diode and 1 resistor), oscillator (crystal and 2 capacitors).
Circuit Layout version 1
This simple PCB layout diagram shows the placement of the components on the stripboard. The view is from the top of the PCB, the same as in the photograph.
Circuit Layout version 2
This PCB layout diagram shows the components and the tracks on the custom PCB. The view of this PCB is from the side with the tracks although some of the components are mounted on the other side.
None of the parts for this project are difficult to find although the surface mount components are less common than the standard ones.
The image below shows an example of the results that can be obtained with this device.
The temperature logger was placed next to a household thermostat for a period of about 10 days in the winter at the start of 2007. On the plot are shown the measured temperature and the thermostat settings (an "intelligent" thermostat that aims to reach the target temperature at the specified time). The measured data clearly matches the thermostat setting for the time that the heating is active and during the day and night that it is inactive the temperature drops rapidly.
Inside a huge PCB factory: https://www.youtube.com/watch?v=_XCznQFV-Mw
News on theme: