Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Что то не клеится с форматом переменных
Что то не клеится с форматом переменных
vladh Дата: Ср, 17.04.2019, 19:49  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 288
Репутация: 9   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Online

Добрый всем вечер. Похоже начинает сказываться возраст. Дело вот в чем. Есть контроллер, есть OLED-индикатор и есть терморезисторы, которые подключены к АЦП контроллера. Пытаюсь вывести на экран значения температуры. Для этого в Протеусе устанавливаю в свойствах терморезистора по очереди температуры 0, 50 и 100 гр. Цельсия.  Вижу соответствующие значения 219, 294, 369. Отсюда получается функция Т = (Х * 6667) / 10000 - 146. Записываю эту функцию в текст программы но полаю ерунду. Когда использую переменные с параметром Float, то все нормально. Что в моих рассуждениях - ошибка?
Забыл прицепить проект.
Прикрепления: 2446221.rar(100.1 Kb)

Сообщение отредактировал vladh - Чт, 18.04.2019, 04:30
ЯНДЕКС Дата: 17.04.2019
DAlexV Дата: Чт, 18.04.2019, 12:13  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 704
Репутация: 26   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

vladh, добрый. Все банально просто.
Цитата
Dim Temp_r As Word         ' òåìïåðàòóðà ðàäèàòîðà
Dim Temp_v As Word         ' òåìïåðàòóðà âîçäóõà


А должно быть что то типа LongWord (4 байта), а тут Word (2 байта). Отсюда и чехарда. Откройте в винде калькулятор (стандартный). Выберите режим "Программист" (ALT+3). Там с слева внизу есть выбор количества байт. Поставить 2 и попробуйте посчитать значения.(будет чехарда), затем смените на 4 байта. И снова посчитайте.
Успехов  wink


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM(Keil&TS)+C#(VS).Старею :)
Сообщение отредактировал DAlexV - Чт, 18.04.2019, 12:16
vladh Дата: Чт, 18.04.2019, 12:44  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 288
Репутация: 9   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Online

Цитата DAlexV ()
А должно быть что то типа LongWord...


Вообще в протоне есть 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
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Что то не клеится с форматом переменных
  • Страница 1 из 1
  • 1
Поиск: