Добрый всем вечер. Похоже начинает сказываться возраст. Дело вот в чем. Есть контроллер, есть OLED-индикатор и есть терморезисторы, которые подключены к АЦП контроллера. Пытаюсь вывести на экран значения температуры. Для этого в Протеусе устанавливаю в свойствах терморезистора по очереди температуры 0, 50 и 100 гр. Цельсия. Вижу соответствующие значения 219, 294, 369. Отсюда получается функция Т = (Х * 6667) / 10000 - 146. Записываю эту функцию в текст программы но полаю ерунду. Когда использую переменные с параметром Float, то все нормально. Что в моих рассуждениях - ошибка? Забыл прицепить проект.
Dim Temp_r As Word ' òåìïåðàòóðà ðàäèàòîðà Dim Temp_v As Word ' òåìïåðàòóðà âîçäóõà
А должно быть что то типа LongWord (4 байта), а тут Word (2 байта). Отсюда и чехарда. Откройте в винде калькулятор (стандартный). Выберите режим "Программист" (ALT+3). Там с слева внизу есть выбор количества байт. Поставить 2 и попробуйте посчитать значения.(будет чехарда), затем смените на 4 байта. И снова посчитайте. Успехов Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
Сообщение отредактировал
DAlexV - Чт, 18.04.2019, 12:16
Вообще в протоне есть 4 байтовый тип это - dword. Но на мой взгляд это не в этом дело. Ацп измеряет в формате 10 битовом. Т.е. байтовый тип переменной здесь не прокатит, а вот word, или dword, или sword, или sdword вполне могли бы. Но не получается у меня. Заменил тип переменой на dword- ничего не изменилось. Хотя нет, изменил команду вывода с Print at 3,1, Dec1 Temp_v на Print at 3,1, Dec Temp_v и все стало показывать правильно. Кто то сможет это объяснить. И еще, изменил переменные Temp_v и Temp_r на тип dword, а переменные Ud_5 и Ud_7 оставил как word. и все стало также считать правильно. Видимо здесь дело вот в чем. После получения результата АЦП я это значение умножаю на 6667! И вот это произведение выходит за пределы этого типа. Поэтому то вот эти вторые переменные должны иметь тип - dword. Спасибо DAlexV.
Сообщение отредактировал
vladh - Чт, 18.04.2019, 13:06