Nu har jag färdiställt ett litet projekt med en Temperaturlogger. Den betår av dessa delar
Atmega8
Max232
LM335z - tempgivare
7805 -spännings regulator.
Den fungerar på så sätt att den mäter temperaturen via sonden(krympslangad lm335z), atmegan skickar via Max232(som omvandlar till rätt spänningsnivåer) till datorn. I datorn har jag installerat ett program som heter Bill Redirect http://www.billproduction.com/ som emulerar ett tangentbord och ger dom knapptryckningar som kommer in på comporten(9600baud). Efter detta har jag bara öppnat ett excel fönster, och sen plottas det automatiskt upp en snygg kurva.

Kod: Markera allt
#include <avr/io.h>
#define USART_BAUDRATE 9600
#define BAUD_PRESCALE (((4000000 / (USART_BAUDRATE * 16UL))) - 1)
void SendChar(char);
void SendString(char*);
int main (void)
{
int temp;
int btemp;
char dtemp[5];
int sec;
TCCR1B |=((1 << CS10)|(1 << CS11));
ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Set ADC prescalar to 128 - 125KHz sample rate @ 16MHz
ADMUX |= (1 << REFS0 | 1 << REFS1) ; // Set ADC reference to 2,56v(internal)
ADCSRA |= (1 << ADFR); // Set ADC to Free-Running Mode
ADCSRA |= (1 << ADEN); // Enable ADC
ADCSRA |= (1 << ADSC); // Start A2D Conversions
char ReceivedByte;
UCSRB |= (1 << RXEN) | (1 << TXEN); // Turn on the transmission and reception circuitry
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); // Use 8-bit character sizes
UBRRL = BAUD_PRESCALE; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register
UBRRH = (BAUD_PRESCALE >> 8); // Load upper 8-bits of the baud rate value into the high byte of the UBRR register
for (;;) // Loop forever
{
while(sec <= 20)
{
while(TCNT1 <= 31250)
{
}
TCNT1 = 0;
sec++;
}
btemp = ADCL + (ADCH<<8);
temp = (btemp-529)/2;
itoa(temp, dtemp,10);
SendString(dtemp);
SendString("{ENTER}");
TCNT1 = 0;
sec = 0;
}
}
void SendChar(char data)
{
while ((UCSRA & (1 << UDRE)) == 0) {}; // Do nothing until UDR is ready for more data to be written to it
UDR = data; // Send data to the computer
}
void SendString(char* StringPtr)
{
while (*StringPtr)
{
SendChar(*StringPtr);
StringPtr++;
}
}

Här har jag testat den på en batteriladdare.
//Alexander