Страница 1 из 1

ATtiny2313 баг программы

Добавлено: Пн дек 15, 2008 01:28:58
VenomXP
Доброго времени суток всем котам... Решил тут сделать себе термометр на ATtiny2313 и DS18B20 (не путать с DS1820)... Вобщем собрал, написал прошивку, зашил...

И тут начались чудеса...

В общем посидел разобрался чуток и вот какая проблема...

Продолжительную температуру выводит корректно, а кот когда уходим за пределы нуля в отрицательную сторону тут он начинает развлекаца.... Вобщем выводит не весть понять что...

Да и еще в схеме указанно и в программе AT90s2313 а у меня стоит в плате ATtiny2313... Это не имеет значения так как они одинаковые.

Добавлено: Пн дек 15, 2008 09:13:48
BerZerK-ku
Вы просто неправильно переводите значения. Температура считывается в дополнительном коде. Положительное значение совпадает с прямым кодом. Для получения модуля отрицательного числа все разряды инвертируются, а к результату добавляется единица.

Код: Выделить всё

if (temperature<0) temperature=temperature^0xFFFF+1;

Добавлено: Пн дек 15, 2008 09:15:47
Igor_67
Это не имеет значения так как они одинаковые.
НЕТ!

Добавлено: Пн дек 15, 2008 13:00:00
Goodefine
Я вот так делал:

Код: Выделить всё

if (temp>0x5dc){temp=0x10000-temp;flag_minus=1;};
Иначе кракозяблы....

Добавлено: Пн дек 15, 2008 16:30:32
VenomXP
Вот функция которую я использую скажите что и где нужно поменять а то у мну не получаица :cry:

Код: Выделить всё

void read_temp()
{ 
     temperature=ds18b20_temperature(0);
    
        if(temperature>1000)
		 {
			temperature=4096-temperature;
			temperature=-temperature;
		 }
		if (temperature!=-9999) 
		hex_to_dec();   
           
    
}

Добавлено: Пн дек 15, 2008 21:22:35
Goodefine
Можно примерно так:

Код: Выделить всё

void read_temp()
                 {
     temp=ds18b20_temperature(0);
    if (temp>0x5dc){temp=0x10000-temp;flag_minus=1;};

    if (flag_minus){
                      //отображаем на индикаторе минус отдельно, затем значение
                      //температуры из переменной temp
                       flag_minus=0;
                       }
                     else {
                           //отображаем temp
                            };
                 } 

Добавлено: Пн дек 15, 2008 22:01:33
VenomXP
Спасибо проблема решилась... :))

Можно закрывать тему.