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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Грызет канифоль
Аватара пользователя
Сообщения: 293
Зарегистрирован: Пн дек 24, 2007 07:09:09

Сообщение VenomXP »

Доброго времени суток всем котам... Решил тут сделать себе термометр на ATtiny2313 и DS18B20 (не путать с DS1820)... Вобщем собрал, написал прошивку, зашил...

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

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

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

Да и еще в схеме указанно и в программе AT90s2313 а у меня стоит в плате ATtiny2313... Это не имеет значения так как они одинаковые.
Вложения
shem.PNG
Схема
(39.46 КБ) 431 скачивание
2.c
Исходный код прошивки на CVAVR
(2.61 КБ) 393 скачивания
Контактная информация:
Реклама
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Сообщение BerZerK-ku »

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

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

if (temperature<0) temperature=temperature^0xFFFF+1;
Реклама
Электрический кот
Аватара пользователя
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Сообщение Igor_67 »

Это не имеет значения так как они одинаковые.
НЕТ!
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

Я вот так делал:

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

if (temp>0x5dc){temp=0x10000-temp;flag_minus=1;};
Иначе кракозяблы....
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Реклама
Эиком - электронные компоненты и радиодетали
Грызет канифоль
Аватара пользователя
Сообщения: 293
Зарегистрирован: Пн дек 24, 2007 07:09:09

Сообщение VenomXP »

Вот функция которую я использую скажите что и где нужно поменять а то у мну не получаица :cry:

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

void read_temp()
{ 
     temperature=ds18b20_temperature(0);
    
        if(temperature>1000)
		 {
			temperature=4096-temperature;
			temperature=-temperature;
		 }
		if (temperature!=-9999) 
		hex_to_dec();   
           
    
}
Контактная информация:
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение 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
                            };
                 } 
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Реклама
Грызет канифоль
Аватара пользователя
Сообщения: 293
Зарегистрирован: Пн дек 24, 2007 07:09:09

Сообщение VenomXP »

Спасибо проблема решилась... :))

Можно закрывать тему.
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»