AVR Thermometer using AT90S2313 microcontroller Using Atmega

Thermometer

Introduction
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.

Thermometer

Circuit
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 software for download the hex code, thermo.hexto the 2313 chip, can get from ATMEL FTP website here ATMELAVR ISP.
Software
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.
main()
{
while (1)
      {
       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
{
    char i;
    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 */
    }
}

Read more: AVR Thermometer using AT90S2313 microcontroller

Leave a Comment

Your email address will not be published. Required fields are marked *