AVR Thermometer using AT90S2313 microcontroller
I bought the LED module from BanMor’ last week, just 30Baht. The moduleprovide a prewired multiplex of 4-digit common anode LED, that’s great.See the soldering pad of these signal in the 1st picture below. I thought,my friend gave me the AT90S2313 chip, and with a simple homemade ISP cableand a free software AVR ISP downloader, so we don’t need the device programmer.Also I got the DS1820 from my friend. So I spent my freetime weekend puttingthem together, “the AVR Thermometer”. The 2nd picture shows a samplecircuit using universal PCB, see the upper right, it was 10-pin headerfor STK200 compatible downloader. Of course the LED module was designedfor CLOCK display, so you may interested in writing C program for bothClock and Temperature display after built this project.
The circuit diagram is straight forward, similar to 89C2051Clock Circuit. PORTB sinks forward current of each LED segmentthrough a 220 Ohms resistor. The common anode pin for each digit is controlledby PORTD, i.e., PD2-PD5. The PNP transistor can be any types of small signaltransistor. S1-S4 are optional keypad. Also PD6 is optional output. Allof LEDs are driven with sink current.
The temperature sensor chip, DS1820 is connected to PD1 with a 4.7kpull-up resistor. The example of circuit uses only one sensor, you maytie multiple sensors on the same line and modify the program to read itwith the help of internal chip ID.
J3 is AVR ISP/STK200 compatible downloader. See the pin designationand build the cable from Experimentingthe AT90S8535 with CodeVisionAVR C Compiler
The source porgram was written in C language and compiled with AVR CodeVisionC compiler. Actually my first try used the AT90S8535, then I moved theC code from 8535 to 2313 with a bit modification.
The program was foreground and background running, or interrupt driven.The background task is forever loop scanning 4-digit LED.
scanLED(); // run background task forever
The function scan display was borrowed from 89C2051 Clock controller.(Actuallyno need any modifications if we use a preprocessor to define such I/O port.)
#define segment PORTB
#define LED_digit PORTD
void scanLED() /* scan 4-digit LED and 4-key switch, if key pressedkey = 0-3
else key = -1 */
// adapted from 89C2051 project if needs scan key, find onebit input port
digit = 0x20;
key = -1;
for( i = 0; i < 4; i++) /* 4-DIGITscanning */
LED_digit = ~digit; /* send complement[digit] */
segment = ~heat[i]; /* send complement[segment] */
delay_ms(1); /* delay a while */
segment = 0xff; /* off LED */
// if ((PORTD & 0x10)== 0) /* if key pressed P3.4 became low */
// key =i; /* save key position to key variable*/
digit>>=1; /* next digit */
for-loop statement provides 4-cycle scanning from digit0 to digit3.First we activate digit control line by sending complement of digit variable.Follow with segment data from heat[i] array. The delay 1ms provides enoughtime for electron to jump back to ground state converting to electromagneticradiation. Then turn off before changing digit. The digit data is thenshifted to the right one bit. Similarly for the next digit.
For more detail: AVR Thermometer using AT90S2313 microcontroller
Leave a Comment
You must be logged in to post a comment.