Sie sind auf Seite 1von 10

10/2/13

Digital Thermometer Using C# and ATmega16 Microcontroller - CodeProject


10,118,810 members (52,152 online) Sign in

home

articles

quick answers

discussions

features

community

help

Search for articles, questions, tips

Articles Desktop Development Desktop Gadgets General

Next

Article Browse Code Stats Revisions (23) Alternatives Comments & Discussions (83)

Digital Thermometer Using C# and ATmega16 Microcontroller


By HiteshSharma , 1 Jul 2013
4.90 (81 votes)
Like 43 0 Tw eet 6

About Article
Hardware interfacing through serial port using C# Type Article CPOL 28 Jul 2009 216,038 4,258 202 times

Sign Up to vote

Licence First Posted

Download source - 260 KB

Views Downloads Bookmarked

WinXP Win2003 Vista C#1.0 C#2.0 C#3.0 , +

Top News
Tim Cook slams Android, citing low usage
Get the Insider News free each morning.

Related Videos

Introduction
We all have thermometers in our homes but what when it comes to seeing it digitally on your computer or to keep a record of it in your computer, it is very difficult. To provide such an ease, I have created a piece of hardware to detect temperature and to interface it with the computer so that the temperature can be shown or recorded there. Note : This application requires some hardware to send relevant data to the application through a serial port. Without such a device, it won't work.

Contents
Procedural Steps Hardware Details Software Details Configuring Serial Port Receiving Data Sampling Data Creating Graphics Displaying Data

Related Articles
Matrix Multiplication in C# Creating animations with Dundas Chart for ASP.NET Smarter Data Labels with Dundas Chart SmartLabels Understanding Chart Areas with Dundas Chart for .NET A Formatted Text Box Using screensavers inside the Windows Media Player Making Sense of Geographic Data with Dundas Map and AJAX

Procedural Steps
Temperature Sensor ----> Atmega16 microcontroller ------> computer Serial Port
www.codeproject.com/Articles/38459/Digital-Thermometer-Using-Csharp-and-ATmega16

1/10

10/2/13

Digital Thermometer Using C# and ATmega16 Microcontroller - CodeProject

(LM35)

(sender)

(receiver)

Here what I try to explain is that a temperature sensor LM35 detects the temperature and passes a corresponding scaled voltage to the microcontroller which converts it into digital data. This digital data is our temperature reading which is then transmitted to our application via serial port on our computer, using Asynchronous Serial Transmission between the microcontroller and the computer.

Handling connection notification between a desktop machine and Windows CE based devices Create data-driven applications with the Hera Application Framework Towards the self-documenting database: extended properties Accessibility audit vs. accessibility testing Digital Signatures and PDF Documents Color Scale Filter WMP Power Hour APP Merge Landscape and Portrait PDFs using ASP.NET How to conduct an SMS survey using a cell phone connected SMS gateway and MS Access Using Barcodes in Documents Best Practices How to Retrieve EMC Centera Cluster/Pool Capabilities Embedding IronPython in WPF Using C# "Hey! Is That My Car? How to Sharpen a QuickBird Satellite Image Using DotImage"

This is the temperature sensor.

Integrate your SharePoint environment into the open standards-based WebSphere Portal platform using the Visual Studio IDE

This is our atmega16 microcontroller which creates a digital temperature reading and transfers it to the computer. It's an 8-bit microcontroller with a 16KB flash memory enough for long programs. For programming my microcontroller, I used the AVR Studio 4 platform and the C language. The code for the microcontroller just includes reading the sensor continuously and transmitting that data to our C# application through a serial port. The code for the microcontroller is as follows:
Collapse | Copy Code

# i n c l u d e < a v r / i o . h > # i n c l u d e < a v r / i n t e r r u p t . h > # d e f i n eF O S C1 2 0 0 0 0 0 0 / /C l o c kS p e e d # d e f i n eF _ C P U1 2 0 0 0 0 0 0 u l # d e f i n eB A U D9 6 0 0 # d e f i n eM Y U B R R( F O S C / 1 6 ) / B A U D1 / / # i n c l u d e < u t i l / d e l a y . h > / / i n i t i a l i s eU S A R T v o i dU S A R T _ I n i t (u n s i g n e di n tu b r r ) { / / S e tb a u dr a t e U B R R H=( u n s i g n e dc h a r ) ( u b r r > > 8 ) ; U B R R L=( u n s i g n e dc h a r ) u b r r ; / / E n a b l er e c e i v e ra n dt r a n s m i t t e r U C S R B=( 1 < < R X E N ) | ( 1 < < T X E N ) ; / / S e tf r a m ef o r m a t :8 d a t a ,2 s t o pb i t ,N Op a r i t y U C S R C=( 1 < < U R S E L ) | ( 1 < < U S B S ) | ( 3 < < U C S Z 0 ) ; } / / I n i t i a l i s eAt oDc o n v e r t e r v o i dA D C _ I n i t ( ) {

www.codeproject.com/Articles/38459/Digital-Thermometer-Using-Csharp-and-ATmega16

2/10

10/2/13
/ / e n a b l ea d c A D C S R A| =( 1 < < A D E N ) ; / / e n a b l ei n t e r r u p t s A D C S R A| =( 1 < < A D I E ) ;

Digital Thermometer Using C# and ATmega16 Microcontroller - CodeProject

/ / s e tr e f e r e n c es e l e c t i o nt oV c c ; / / l e f ta d j u s tr e s u l t / / s e tv o l t a g es e l e c t i o nt ob i t7o fp o r t A A D M U X| =( 1 < < R E F S 0 )|( 1 < < A D L A R )|( 1 < < M U X 2 )|( 1 < < M U X 1 )|( 1 < < M U X 0 ) ; / / s e tp r e s c a l a rt o1 2 8 A D C S R A| =( 1 < < A D P S 0 )|( 1 < < A D P S 1 )|( 1 < < A D P S 2 ) ; / /|( 1 < < A D A T E ) ; } / / T r a n s m i tD a t a v o i dU S A R T _ T r a n s m i t (u n s i g n e dc h a rd a t a) { / *W a i tf o re m p t yt r a n s m i tb u f f e r* / w h i l e(! (U C S R A&( 1 < < U D R E ) )) ; / *P u td a t ai n t ob u f f e r ,s e n d st h ed a t a* / U D R=d a t a ; } / / I n t e r r u p tAt oDc o n v e r t e rr e a d i n g I S R ( A D C _ v e c t ) { u n s i g n e dc h a rc ; / / v a r i a b l ecs t o r e sd a t af r o mA D C Hr e g i s t e r c = A D C H ; U S A R T _ T r a n s m i t ( c ) ; / / n e x ts t a t e m e n ts t a r t san e wA D Cc o n v e r s i o n A D C S R A| =( 1 < < A D S C ) ; } i n tm a i n (v o i d) { U S A R T _ I n i t(M Y U B R R) ; A D C _ I n i t ( ) ; s e i ( ) ; / / s t a r ta na d cc o n v e r s i o n A D C S R A| =( 1 < < A D S C ) ; w h i l e ( 1 ) ; }

Monitoring More Than One Sensor at a Time


Note : If you are new to microcontrollers and this is one of your first projects, then I suggest you to implement the above code only and work with one sensor. If you think you can, then nothing's better than that and go ahead. This thing was demanded by a person (I guess Mr. Joel), that's why I am adding it here. This shows how you can monitor up to 8 temperature sensors and pass their data to your computer. In the ADMUX register of the Atmega16 microcontroller, bits MUX4.....MUX0 (5 bits) control data from which pin of PORT A (out of 8 pins) will be used for digital conversion so that it could be transmitted to the computer. Here our basic idea is that after each conversion, we will keep on changing the pin from which the reading is to be taken. This way we will read through PIN0 to PIN7 (all 8 one by one) and then again back to PIN0. Below I show what value of MUX4....MUX0 bits in the ADMUX register selects the channel (PIN of PORT A). MUX4....MUX0 00000 00001 00010 00011 00100 00101 00110 00111 PORTA PIN which will be read PIN 0 PIN 1 PIN 2 PIN 3 PIN 4 PIN 5 PIN 6 PIN 7

www.codeproject.com/Articles/38459/Digital-Thermometer-Using-Csharp-and-ATmega16

3/10

10/2/13

Digital Thermometer Using C# and ATmega16 Microcontroller - CodeProject


Now to implement it properly in code, we have the idea that as soon as a conversion completes and Interrupt Service Routine (ISR) is called, we will change the PIN for the next conversion. Here is how to do this:
Collapse | Copy Code

I S R ( A D C _ V e c t ) { / / c o d ef o rr e a d i n ga n dt r a n s m i t t i n gc o n v e r s i o n(s h o w na b o v ea sw e l l ) u n s i g n e dc h a rc ; c = A D C H ; U S A R T _ T r a n s m i t ( c ) ; / / N o wr e a dt h ev a l u eo fM U X 4 , M U X 3 ,M U X 2 ,M U X 1&M U X 0b i t so fA D M U Xr e g i s t e r / / a n di n c r e m e n ti tb yo n ei fl e s st h a n8e l s em a k ei t0 . u n s i g n e dc h a rd ; d=A D M U X&0 x 1 F ; i f ( d<7 ) {d=d+1 ; A D M U X| =d ; } e l s e {A D M U X| =0 ; } / / N o ws t a r tan e wc o n v e r s i o nw h i c hw i l lr e a dt h en e x tP I Nn o w A D C S R A| =( 1 < < A D S C ) ; }

Schematic
The temperature sensor is connected to the microcontroller only. Many people out here demanded for a schematic, so here I am adding the connection diagrams. Hope this serves the purpose. Below is the connection diagram of the Atmega16 microcontroller with sensor LM35 (on the right). To the left in the image is the Crystal Oscillator required in case someone wants a higher operating frequency than the internal 1MHz of the microcontroller (it serves the purpose). In case you are satisfied with internal frequency, then don't add this Crystal oscillator.

Now comes the point of how to connect the hardware to the computer through a serial port. For this, you should know that the computer serial port adds at around 10v whereas a microcontroller operates at around 5v. So for effective communication, we need a level converter (which may convert the ongoing voltages as per the devices on both sides). IC MAX232 serves this purpose, it's a general purpose cheaply available IC with just a simple connection as shown below:

www.codeproject.com/Articles/38459/Digital-Thermometer-Using-Csharp-and-ATmega16

4/10

10/2/13

Digital Thermometer Using C# and ATmega16 Microcontroller - CodeProject

So this was the hardware detailing. Now I will discuss some software part.

Software Details
In this section, I will discuss the code of my application which is used to get temperature readings from the serial port and display it. By now, the data is available on our computer's Serial Port, all we now need is an application to retrieve it, which is done here.

Configuring the Serial Port


Now what comes first is configuring the Serial Port, i.e., fix the Baud Rate, set Parity, number of Data Bits to be received in a single packet of data, and number of Stop Bits to be used. First of all, we create a global S y s t e m . I O . P o r t s . S e r i a l P o r tobject p o r tin our class definition, which is then initialized in the L o a devent of the Form. And also a few variables which hold the values to be set for the properties of the p o r tobject.

p o r t n a m e holds the name of the serial port. In my computer, it was COM4. v o l t a g eholds the reference voltage, which is actually the Vcc voltage of the microcontroller board and is set

manually in this application. 4.65 volts here. p a r i t yholds the type of parity to be used in serial communication between the computer and the microcontroller, i.e., Even Parity, Odd Parity, or No Parity. I have not used any parity. B a u d R a t e holds the value of Baud Rate of the serial communication. I settled for a Baud Rate of 9600 bps. S t o p B i t s holds the number of stop bits to be used. The possible values are 1, 2, or none. I have used 2 stop bits. And finally the d a t a b i t svariable which defines how many data bits are to be received during communication. It's always a good choice to use 8 data bits, as it's a standard byte size, so it becomes easier to manipulate it.
Collapse | Copy Code

p u b l i cp a r t i a lc l a s sT h e r m o m e t e r:F o r m { p u b l i cT h e r m o m e t e r ( ) { I n i t i a l i z e C o m p o n e n t ( ) ; } S y s t e m . I O . P o r t s . S e r i a l P o r tp o r t ; s t a t i cp u b l i cd o u b l ev o l t a g e ; s t a t i cp u b l i cs t r i n gp o r t n a m e ; s t a t i cp u b l i cP a r i t yp a r i t y ; s t a t i cp u b l i ci n tB a u d R a t e ; s t a t i cp u b l i cS t o p B i t ss t o p b i t s ; p u b l i ci n td a t a b i t s ; p r i v a t ev o i dF o r m 1 _ L o a d ( o b j e c ts e n d e r ,E v e n t A r g se ) { p o r t n a m e=" C O M 4 " ; p a r i t y=P a r i t y . N o n e ; B a u d R a t e=9 6 0 0 ; s t o p b i t s=S t o p B i t s . T w o ; d a t a b i t s=8 ; p o r t=n e wS y s t e m . I O . P o r t s . S e r i a l P o r t ( p o r t n a m e ) ; p o r t . P a r i t y=p a r i t y ; p o r t . B a u d R a t e=B a u d R a t e ; p o r t . S t o p B i t s=s t o p b i t s ; p o r t . D a t a B i t s=d a t a b i t s ;

www.codeproject.com/Articles/38459/Digital-Thermometer-Using-Csharp-and-ATmega16

5/10

10/2/13
}

Digital Thermometer Using C# and ATmega16 Microcontroller - CodeProject


p o r t . D a t a R e c e i v e d+ =n e wS e r i a l D a t a R e c e i v e d E v e n t H a n d l e r ( p o r t _ D a t a R e c e i v e d ) ; p o r t . O p e n ( ) ;

These were the serial port settings. The same communication settings are used in the microcontroller so that communication can take place effectively.

Receiving Data
After the Serial Port is opened by calling the p o r t . o p e n ( )method, the serial port is ready for receiving the data arriving at it.

D a t a R e c e i v e d : To receive data at the application, we need to handle the D a t a R e c e i v e devent of the S e r i a l P o r tclass. p o r t . R e a dmethod reads data from the COM4 serial port and writes it into a single variable b y t earray b t .
Collapse | Copy Code

v o i dp o r t _ D a t a R e c e i v e d ( o b j e c ts e n d e r ,S e r i a l D a t a R e c e i v e d E v e n t A r g se ) { / /r e a do n eb y t ed a t ai n t ob t p o r t . R e a d ( b t , 0 , 1 ) ; / /a l lt h ec o d et os a m p l ed a t a }

Sampling Data
The basic idea behind sampling data is that as the readings are received continuously, we take 100 values and calculate their average value so that a much fairer temperature reading is available. This gives us a single temperature reading to display. To carry out this calculation, a global d o u b l evariable s u mand an i n tvariable c o u n tare created.

s u madds up subsequent temperature readings and c o u n tcounts up the number of readings to see whether they
have reached 100 or not. This code comes under the D a t a R e c e i v e devent only ahead of the above code:
Collapse | Copy Code

/ /t h ec a l c u l a t i o no nt h er i g h th a n ds i d ec a l c u l a t e s / /t h et e m p e r a t u r ef r o mt h er e a dv a l u e s u m+ =C o n v e r t . T o D o u b l e ( b t [ 0 ] )* v o l t a g e * 1 0 0 / 2 5 5 ; / / t h i sc o u n t st o1 0 0 c o u n t + + ;

Now as soon as the count reaches 100, the calculated s u mvalue is averaged by dividing it by 1 0 0 . This sampled value is then stored in a d o u b l et e m pvariable, s u mand c o u n tare again set to 0 value.
Collapse | Copy Code

/ /s i n g l et e m p e r a t u r er e a d i n g t e m p=s u m/1 0 0 ; s u m=0 ; c o u n t=0 ;

Now that we have a temperature reading with us, the next task is to calculate the angle of the arm so that the calculated t e m pcould be displayed on the round meter image. The angle will be stored in a variable a n g l e . Now before calculating a n g l e , simply have a look at the round meter. The angle between certain values doesn't vary uniformly, that is between 20 - 30, the angle is less as compared to between 30 - 40 and 40 - 50 (see the above image). So before calculating the angle, this needs to be taken care of. By some analysis, I found some angles beginning from the 50 value on the meter as being a 0 degree value.

Creating Graphics
Basically creating graphics like this means that whenever a temperature value is obtained, the arm should not just get set to that reading on the meter but it should move there by subsequent rotation (as in some analog meter where the arm moves from an initial value to an final value). To achieve this a method named A n i m a t eis created which animates the arm from an initial reading to a final reading. The method takes C u r r e n t a n g l eand F i n a l A n g l eas arguments. This method increases the value of the variable C u r r e n t a n g l eby 1 in each step and keeps on calling itself recursively until the value reaches the F i n a l A n g l evalue. At each step, the f o r m 1 . P a i n tevent is raised through code to render the value onto screen.
Collapse | Copy Code

p r i v a t ev o i dA n i m a t e ( d o u b l eC u r r e n t a n g l e ,d o u b l eF i n a l A n g l e )

www.codeproject.com/Articles/38459/Digital-Thermometer-Using-Csharp-and-ATmega16

6/10

10/2/13
{

Digital Thermometer Using C# and ATmega16 Microcontroller - CodeProject


/ /i fF i n a la n g l ei sn e g a t i v et h e nm a k ei tp o s i t i v e i f( F i n a l A n g l e<0 ) F i n a l A n g l e+ =3 6 0 ; / /i ff i n a la n g l ei sg r e a t e rt h a n3 6 0d e g r e et h e nr e d u c ei t i f( C u r r e n t a n g l e> =3 6 0 ) { C u r r e n t a n g l e=C u r r e n t a n g l e-3 6 0 ; } / /i fc u r r e n ta n g l ei sn o tw i t h i n+ 0 . 5a n d0 . 5o f / /t h ef i n a la n g l ev a l u et h e ne x e c u t ei fb l o c k i f( ! ( C u r r e n t a n g l e>F i n a l A n g l e 0 . 5& &C u r r e n t a n g l e<F i n a l A n g l e+0 . 5 ) ) { i f( C u r r e n t a n g l e>F i n a l A n g l e ) { / / d e c r e m e n tC u r r e n t a n g l e C u r r e n t a n g l e=1 ; } e l s e { / / e l s eI n c r e m e n tC u r r e n ta n g l e C u r r e n t a n g l e+ =1 ; } F o r m 1 _ P a i n t ( t h i s ,n e wP a i n t E v e n t A r g s ( s u r f a c e ,D r a w i n g R e c t a n g l e ) ) ; A n i m a t e ( C u r r e n t a n g l e ,F i n a l A n g l e ) ;

Now with this, our code to create animations is over. Next comes creating graphics on the screen.

Displaying Data
For creating a meter on the screen, it is necessary that there should be no flickering of the screen as the graphics are created, so ensure that we use Buffered Graphics. For this, a B u f f e r e d G r a p h i c sobject b u f fis created and is initialized in the L o a devent of the form. Also a S y s t e m . D r a w i n g . G r a p h i c sobject s u r f a c eis created which just represents the graphics surface at which the images are drawn.
Collapse | Copy Code

/ /c r e a t eb u f f e r e dg r a p h i c so b j e c tf o ra r e ao ft h ef o r mb yu s i n gt h i s . B o u n d s b u f f=B u f f e r e d G r a p h i c s M a n a g e r . C u r r e n t . A l l o c a t e ( t h i s . C r e a t e G r a p h i c s ( ) , t h i s . B o u n d s ) ; s u r f a c e=b u f f . G r a p h i c s ; / / e n s u r eh i g hq u a l i t yg r a p h i c st ou s e r s s u r f a c e . P i x e l O f f s e t M o d e=P i x e l O f f s e t M o d e . H i g h Q u a l i t y ; s u r f a c e . S m o o t h i n g M o d e=S m o o t h i n g M o d e . H i g h Q u a l i t y ;

Now moving onto the final P a i n tevent of the form. Here first of all, we hold the images of the round meter and the meter arm in the I m a g eclass objects i m gand h a n d . After this, the meter is drawn on the Form. The arm is rotated to the calculated angle and is drawn on the screen. The temperature is drawn on the screen by calling the D r a w S t r i n gmethod. All of the code is written in a t r y-c a t c hblock and an I n v a l i d O p e r a t i o n E x c e p t i o nis caught which ensures that if in some case graphics fails to render on the screen, then nothing causes the application to crash.
Collapse | Copy Code

p r i v a t ev o i dF o r m 1 _ P a i n t ( o b j e c ts e n d e r ,P a i n t E v e n t A r g se ) { t r y { I m a g ei m g=n e wB i t m a p ( P r o p e r t i e s . R e s o u r c e s . s p e e d o m e t e r ,t h i s . S i z e ) ; I m a g eh a n d=n e wB i t m a p ( P r o p e r t i e s . R e s o u r c e s . M i n u t e H a n d ) s u r f a c e . D r a w I m a g e U n s c a l e d ( i m g ,n e wP o i n t ( 0 ,0 ) ) ; s u r f a c e . T r a n s l a t e T r a n s f o r m ( t h i s . W i d t h/2 f ,t h i s . H e i g h t/2 f ) ; s u r f a c e . R o t a t e T r a n s f o r m ( ( f l o a t ) C u r r e n t A n g l e ) ; s u r f a c e . D r a w I m a g e ( h a n d ,n e wP o i n t ( 1 0 ,t h i s . H e i g h t/2+4 0 ) ) ; s t r i n gs t r i n g t e m p=d i s p l a y t e m p . T o S t r i n g ( ) ; s t r i n g t e m p=s t r i n g t e m p . L e n g t h>5? s t r i n g t e m p . R e m o v e ( 5 ,s t r i n g t e m p . L e n g t h-5 ):s t r i n g t e m p ; F o n tf n t=n e wF o n t ( " A r i a l " ,2 0 ) ; S i z e Fs i z=s u r f a c e . M e a s u r e S t r i n g ( s t r i n g t e m p ,f n t ) ; s u r f a c e . R e s e t T r a n s f o r m ( ) ; L i n e a r G r a d i e n t B r u s hg d=n e wL i n e a r G r a d i e n t B r u s h ( n e wP o i n t ( 0 , ( i n t ) s i z . H e i g h t+2 0 ) , n e wP o i n t ( ( i n t ) s i z . W i d t h , 0 ) ,C o l o r . R e d ,C o l o r . L a v e n d e r ) ; s u r f a c e . D r a w S t r i n g ( s t r i n g t e m p ,f n t ,g d ,n e wP o i n t F ( D r a w i n g R e c t a n g l e . W i d t h/2s i z . W i d t h/2 ,7 0 ) ) ; s u r f a c e . D r a w E l l i p s e ( P e n s . L i g h t G r a y ,D r a w i n g R e c t a n g l e ) ; s u r f a c e . S a v e ( ) ; b u f f . R e n d e r ( ) ;

www.codeproject.com/Articles/38459/Digital-Thermometer-Using-Csharp-and-ATmega16

7/10

10/2/13

Digital Thermometer Using C# and ATmega16 Microcontroller - CodeProject


} c a t c h ( I n v a l i d O p e r a t i o n E x c e p t i o n ) { / / c o d et oh a n d l ee x c e p t i o n }

This finishes the coding part of the application. Another interesting project which I have is to switch 230 - 250 volt A.C. home appliances from computer through a C# application. A pure software application which I also plan to write here is the Isolated Storage. Copy or cut your files and folders and paste it in the GUI provided by this application, and then just delete them from your computer. It will store your data in the Isolated Storage area on the hard disk and it will be visible to you through this application only. Copy it from this application and paste it back to your file system. No data will be lost. I plan to write it here as well soon....

Conclusion
With this, I have provided the idea for hardware interfacing through serial port using C# applications. Anyone like me who likes developing hardware for personal use would have enjoyed reading this article. This is the second time I am writing this article as it wasn't liked much earlier due to lack of explanation. I hope things are better this time up.

License
This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

HiteshSharma
India I am a siebel developer by profession and a C#, ASP.Net, Javascript, C, C++ developer by Hobby. I code mostly for fun and usually code to create utilities and applications to enhance, improve and ease out my work while working on my computer. I try to make my computer a better place to code. I work on electronics as well and like to create hardware which may integrate with my computer. Now a days i code mostly for web and spend more and more of my time on javascript. visit my blog at: http://msphitesh.blogspot.in Follow on
Google

Article Top

Comments and Discussions


You must Sign In to use this message board. Search this forum Profile popups Spacing Relaxed Noise Very High Layout Normal Per page 10 Go Update

www.codeproject.com/Articles/38459/Digital-Thermometer-Using-Csharp-and-ATmega16

8/10

10/2/13

Digital Thermometer Using C# and ATmega16 Microcontroller - CodeProject


First Prev Next

error while running... Re: error while running... My vote of 5 Nice one My vote of 5 My vote of 5 negative thermometer [modified] compliments sir My vote of 5 My vote of 5
Last Visit: 31-Dec-99 18:00 General News Last Update: 1-Oct-13 16:11 Suggestion Question Bug Answer

patodi HiteshSharma dpalash Member 8807328 Abinash Bishoyi P1119r1m unbeliever1 benbas JF2015 thatraja Refresh Joke Rant

16-Jul-13 23:14 22-Aug-13 20:34 1-Jul-13 0:44 10-Apr-12 6:53 30-Mar-12 1:38 5-Nov-11 7:23 24-Aug-11 0:58 24-Jul-11 6:25 20-Jan-11 2:03 9-Dec-10 19:27 1 2 3 4 5 6 7 8 9 Next Admin

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile Web01 | 2.6.1309030.1 | Last Updated 1 Jul 2013

Layout: fixed | fluid

Article Copyright 2009 by HiteshSharma Everything else Copyright CodeProject, 1999-2013 Terms of Use

www.codeproject.com/Articles/38459/Digital-Thermometer-Using-Csharp-and-ATmega16

9/10

10/2/13

Digital Thermometer Using C# and ATmega16 Microcontroller - CodeProject

www.codeproject.com/Articles/38459/Digital-Thermometer-Using-Csharp-and-ATmega16

10/10