AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
07.11.2013, 14:51
|
|
Временная регистрация
Регистрация: 04.02.2013
Сообщений: 78
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Датчик температуры DS1820
Всем добрый день!!!
Написал программу для ATMega8 с выводом температуры на LCD. При измерении температуры +24 град на индикаторе +26,5. При измерении температуры +9 на индикаторе +10,5 град. Почему такая ошибка. где я напортачил
Начал выводить код частоты в протеусе и получилось не соответствие даташиту
-0,5 град - FFFE (должно быть FFFF)
-25 град - FFCD (должно быть FFCE)
-55 град - FF91 (должно быть FF92)
При положительной температуре коды соответствуют.
|
|
|
|
07.11.2013, 16:50
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: Датчик температуры DS1820
Delay_ms(1000); смотрю помогло.
wtemp : word;
попробуйте заменить на
wtemp : integer;
насчет преобразования двух байтов принятых с датчика - так думаю, не получится
Цитата:
|
четыре младших разряда нулевого байта содержат дробную часть результата;
четыре старших разряда нулевого байта содержат четыре младших разряда целой части результата;
три младших разряда первого байта содержат оставшиеся три разряда целой части;
остальные разряды первого байта указывают на знак температуры (+ или -);
|
float температуру на си приблизительно так получают:
Код:
|
............................
uint32_t GetTemperature() {
uint32_t result = 0;
if (Reset(sensor) != 0) {
inError();
} else {
ScratchPad_t scratchpad;
WriteByte(sensor, SKIP_ROM); // Skip ROM
WriteByte(sensor, READ_SCRATCHPAD); // Read Scrachpad
scratchpad.LSB = ReadByte(sensor);
scratchpad.MSB = ReadByte(sensor);
Reset(sensor); // terminate read as we only want temperature
result = ((scratchpad.MSB ‹‹ 8) | scratchpad.LSB);
}
return result;
}
...........
// temperature is store as 7.4 fixed point format (assuming 12 bit conversion)
void displayTemperature(Serial& s) {
DoConversion();
uint32_t temp = GetTemperature();
float f = (temp & 0x0F) * 0.0625; // calculate .4 part
f += (temp ›› 4); // add 7.0 part to it
s.printf("Temp is %2.1fC\n\r", f); // display in 2.1 format
} |
Последний раз редактировалось oleg110592; 07.11.2013 в 17:56.
|
|
|
|
09.11.2013, 11:40
|
|
Временная регистрация
Регистрация: 04.02.2013
Сообщений: 78
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Датчик температуры DS1820
наверное дело в спиртовых термометрах. домашний термометр показывает на 2 град больше цифрового. уличный, на 1-1,5 градуса меньше цифрового. я поставил два термометра на улице и оказалось, что домашний показывает температуру на 3 град больше уличного. наверное их делали китайцы. Вопрос про компилятор: На паскале наверное никто не работает и примеры все на СИ. Какой лучше выбрать СИ компилятор CVAVR или mikroC. Лично Ваше мнение.
|
|
|
|
09.11.2013, 11:52
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: Датчик температуры DS1820
формулу можно добить и на паскале, компилятор - лучше сразу IAR, если бесплатно - GCC (есть в составе новой AVR Studio 6, громоздкая штука).
|
|
|
|
09.11.2013, 16:56
|
|
Временная регистрация
Регистрация: 04.02.2013
Сообщений: 78
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Датчик температуры DS1820
А примеры, уроки, книги для IAR есть? Просто не хочется опять одному сидеть на компиляторе. Меня в общем то устраивает и mikropascal (cи не знаю), но все сидят на СИ. Наверное придется тоже переходить.
|
|
|
|
09.11.2013, 18:43
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Датчик температуры DS1820
Сообщение от ua3rad
|
А примеры, уроки, книги для IAR есть?
|
В комплекте к AtmelStudio идут примеры для GCC, для ИАРа тоже есть application notes, но где они лежат сейчас - это вопрос, потому как для АВР atmel сейчас продвигает GCC, а Иар у них уже не основной компилятор.
Сообщение от ua3rad
|
Наверное придется тоже переходить.
|
Си - стандарт для программирования МК, лучше на него и ориентироваться.
|
|
|
|
09.11.2013, 19:34
|
|
Временная регистрация
Регистрация: 04.02.2013
Сообщений: 78
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Датчик температуры DS1820
Большое спасибо
|
|
|
|
09.11.2013, 22:04
|
|
Временная регистрация
Регистрация: 04.02.2013
Сообщений: 78
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Датчик температуры DS1820
oleg110592, как считать серийный номер датчика. Хочу подключить два DS18S20
|
|
|
|
09.11.2013, 22:37
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: Датчик температуры DS1820
http://chipenable.ru/index.php/progr...0-chast-2.html
не пользовался, когда надо два было - на разные пины порта подключал
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:08.
|
|