Собрал печатную плату, по следующей схеме:
Спойлер

Написал код:
Спойлер
Код: Выделить всё
#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
void Display(char Rank, char Number, char Point)
{
switch(Rank)
{
case 0:
PORTB = 0b00000000;
break;
case 1:
PORTB = 0b00000001;
break;
case 2:
PORTB = 0b01000000;
break;
case 3:
PORTB = 0b10000000;
break;
}
switch(Number)
{
case 0:
PORTD = 0b00010100;
break;
case 1:
PORTD = 0b01110111;
break;
case 2:
PORTD = 0b01001100;
break;
case 3:
PORTD = 0b01000101;
break;
case 4:
PORTD = 0b00100111;
break;
case 5:
PORTD = 0b10000101;
break;
case 6:
PORTD = 0b10000100;
break;
case 7:
PORTD = 0b01010111;
break;
case 8:
PORTD = 0b00000100;
break;
case 9:
PORTD = 0b00000101;
break;
}
if(Point == 1)
PORTD &= 0b11111011;
_delay_ms(1);
}
void Complex_Display(int Number, char Point1, char Point2, char Point3)
{
int Number1, Number2, Number3;
Number1 = (char) (Number / 100);
Number2 = (char) (Number - Number1*100)/10;
Number3 = (char) (Number - Number1*100 - Number2*10)/1;
Display(3, Number1, Point1);
Display(2, Number2, Point2);
Display(1, Number3, Point3);
}
int main(void)
{
int data = 0; //+++
int Real_Temperature = 0; //+++
//PD5 - A, PD7 - B, PD3 - C, PD1 - D, PD0 - E, PD6 - F, PD4 - G, PD2 - DP;
DDRD = 0xFF;
PORTD = 0x00;
//PB7 - 0 разряд, PB6 - 1 разряд, PB0 - 2 разряд;
DDRB = 0b11000001;
PORTB = 0b00001110;
SFIOR = 0x00; //+++
ADCSRA = 0x85; //+++
while(1)
{
//Первый режим
while(1)
{
ADMUX = 0x40; //+++
ADCSRA |= 0x40; //+++
data = ADCW; //+++
Real_Temperature = data*0.0048828*170; //+++
Real_Temperature = Real_Temperature; //+++
for(int x = 0; x < 100; x++)
Complex_Display(Real_Temperature, 0, 0, 0);
if(!((1 << PINB1)&PINB))
{
while(!((1 << PINB1)&PINB)){}
break;
}
}
//Второй режим
while(1)
{
ADMUX = 0x42; //+++
ADCSRA |= 0x40; //+++
data = ADCW; //+++
Real_Temperature = data*0.0048828*200; //+++
Real_Temperature = Real_Temperature; //+++
for(int x = 0; x < 100; x++)
Complex_Display(Real_Temperature, 0, 0, 0);
if(!((1 << PINB1)&PINB))
{
while(!((1 << PINB1)&PINB)){}
break;
}
}
}
}
Как видно, обе части отвечающих за измерение температуры построены абсолютно одинаково, как аппаратно, так и программно.
Но значения меряют по разному. Если подышать на термопары, то термопара подключённая к PC0 покажет изменения в температуре, а термопара подключённая к PC2 никак не отреагирует. В теплой воде PC0 показывает температуру примерно на 7 выше, чем PC2. Температуру пара в чайнике показывают одну и туже. Это не просто разница в чувствительности, разница между PC0 и PC2 не стабильно 7 градусов.
*Термопары одинаковые. Менял местами, ничего не изменилось.
В чем может быть проблема?





