Помогите понять как отобразить в атмеге отрицательное число
Помогите понять как отобразить в атмеге отрицательное число
Помогите понять как отобразить в атмеге отрицательное число на 7-мисегментнике. Обычные числа то понятно. Проблемка такая. Подключаю ds18b20 и температура флоат. Процедура разложения интеджер. Плюсовые показывает а минусовые не показывает. Постоянно 0 горит. Подскажите советом кто знает. Если надо выложу пример процедурки...
- Реклама
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Помогите понять как отобразить в атмеге отрицательное чи
Код: Выделить всё
if(temperatura < 0)
{
temperatura= -temperatura;
}
//далее отображаем температуру.Docendo discimus
Re: Помогите понять как отобразить в атмеге отрицательное чи
void Display2(int Number2) //Ô-öèÿ äëÿ ðàçëîæåíèÿ äåñÿòè÷íîãî öèñëà/**/
{
unsigned char Num6, Num7, Num8,Num9, Num10;
Num6=0;
Num7=0;
Num8=0;
Num9=0;
Num10=0;
while (Number2 >= 10000) //10000
{
Number2 -= 10000;
Num6++;
}
while (Number2 >= 1000) //1000
{
Number2 -= 1000;
Num7++;
}
while (Number2 >= 100) //100
{
Number2 -= 100;
Num8++;
}
while (Number2 >= 10) //10
{
Number2 -= 10;
Num9++;
}
Num10 = Number2; //îñòàòîê
Disp6 = Dig[Num6];
Disp7 = Dig[Num7];
Disp8 = Dig[Num8];
Disp9 = Dig[Num9];
Disp10 = Dig[Num10];
};
так работает на положительное число.
ds18b20_select(&rom_code[0][0]);
w1_write(0x44);
ds18b20_read_spd(&rom_code[0][0]);
resolution=(__ds18b20_scratch_pad.conf_register>>5) & 3;
w1_init();
t1= (*((int *) &__ds18b20_scratch_pad.temp_lsb) & ((int) bit_mask[resolution]))*0.0625;
t1 float
как используя свой код например вывести отрицательное?
как его правильно разложить? поставить минус это и так понятно.
{
unsigned char Num6, Num7, Num8,Num9, Num10;
Num6=0;
Num7=0;
Num8=0;
Num9=0;
Num10=0;
while (Number2 >= 10000) //10000
{
Number2 -= 10000;
Num6++;
}
while (Number2 >= 1000) //1000
{
Number2 -= 1000;
Num7++;
}
while (Number2 >= 100) //100
{
Number2 -= 100;
Num8++;
}
while (Number2 >= 10) //10
{
Number2 -= 10;
Num9++;
}
Num10 = Number2; //îñòàòîê
Disp6 = Dig[Num6];
Disp7 = Dig[Num7];
Disp8 = Dig[Num8];
Disp9 = Dig[Num9];
Disp10 = Dig[Num10];
};
так работает на положительное число.
ds18b20_select(&rom_code[0][0]);
w1_write(0x44);
ds18b20_read_spd(&rom_code[0][0]);
resolution=(__ds18b20_scratch_pad.conf_register>>5) & 3;
w1_init();
t1= (*((int *) &__ds18b20_scratch_pad.temp_lsb) & ((int) bit_mask[resolution]))*0.0625;
t1 float
как используя свой код например вывести отрицательное?
как его правильно разложить? поставить минус это и так понятно.
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Помогите понять как отобразить в атмеге отрицательное чи
Приведенный мной кусок не ставит минус, а отрицательное число делает положительным. 
Docendo discimus
Re: Помогите понять как отобразить в атмеге отрицательное чи
вот блин)) точно. Надо математику за 6 клас почитать ))) Ща попробую и отпишусь! СПС!
- Реклама
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Помогите понять как отобразить в атмеге отрицательное чи
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: Помогите понять как отобразить в атмеге отрицательное чи
спасибо. читаю. Неплохо былобы гдето почитать как выводить флоат числа с запятой на сегментник......
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Помогите понять как отобразить в атмеге отрицательное чи
если вы все еще не смирились с тем фактом, что float - это в 99% случаев совершенно лишнее в программах для микроконтроллеров, то читайте до конца - в конце специально для floatофилов есть примерmiwutka07 писал(а):спасибо. читаю. Неплохо былобы гдето почитать как выводить флоат числа с запятой на сегментник......
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: Помогите понять как отобразить в атмеге отрицательное чи
Вродь у меня этот же принцып и использован
От флоатов пришлось уходить делением и сложением и вычитанием ))) когда измерял перемменное напряжение
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Помогите понять как отобразить в атмеге отрицательное чи
Библиотечные функции работы с DS18B20 возвращают float. Так что хочешь не хочешь, а работать с ними. Нет, если не хочешь, то пишешь сам. 
Docendo discimus
Re: Помогите понять как отобразить в атмеге отрицательное чи
сижу вкуриваю те процедурки по ссылке. Очень полезные. Правда надо на бумаге всё просчитать чтоб понять и запомнить 
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Помогите понять как отобразить в атмеге отрицательное чи
для ленивых, но умныххитрых, есть иной выход - найти библиотеки, котрые без float-ов обходятсяpyzhman писал(а):Библиотечные функции работы с DS18B20 возвращают float. Так что хочешь не хочешь, а работать с ними. Нет, если не хочешь, то пишешь сам.
битва с дураками проиграна, победители торжествуют. слава победителям!
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Помогите понять как отобразить в атмеге отрицательное чи
Вот и именно, что "как-то". Вы сами не знаете что хотите, по этому не понимаете как это "что-то" сделать.miwutka07 писал(а): Но хочеться отображать както числа с запятой
Что-бы вывести число с точкой нужно, как минимум, определиться где эта точка будет находиться, т.е. сделать её фиксированной. А дальше всё просто. Умножаем float-переменную на 10 в степени равной месту разряда точки справа, приводим её к целому числу и выводим на индикатор, установив в нужном месте точку.
Re: Помогите понять как отобразить в атмеге отрицательное чи
опять этот злой модер отвечает с критикой мне))) Ведь ответил же так как надо... И зачем только критику свою приписывать...??? Не нравиться - сдай права модера. За объяснение про числа с точкой спасибо.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Помогите понять как отобразить в атмеге отрицательное чи
Это не критика, это воспитательные меры 
Re: Помогите понять как отобразить в атмеге отрицательное чи
Блягодаря воспитательным работам мозг начинает работать быстрее и лучше )))
Re: Помогите понять как отобразить в атмеге отрицательное чи
Вот что Си с мозгом делает
Предполагаю, так же коротко можно и на Си сделать, если не использовать флоат.
Его как-то на байты можно разложить, или без него обойтись? На ассемблере вот как выглядит:Библиотечные функции работы с DS18B20 возвращают float
Код: Выделить всё
ld XL,Z+ ; Читаем младший
ld XH,Z ; и старший байты температуры
bst XH,7 ; в T признак знака (0 - положительная темп.)
brtc ct2 ; Если отрицательная - инвертируем значение
com XH
neg XL
ct2:
; Работаем дальше. Если T стоит, выводим минусRe: Помогите понять как отобразить в атмеге отрицательное чи
вот так лучше:
Код: Выделить всё
ld XL,Z+ ; Читаем младший
ld XH,Z ; и старший байты температуры
bst XH,7 ; в T признак знака (0 - положительная темп.)
brtc ct2 ; Если отрицательная - инвертируем значение
neg XL
brcc pc+2
inc XH
neg XH
ct2:Re: Помогите понять как отобразить в атмеге отрицательное чи
Не врубился, что это даст?


