Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 1
Регистрация: 03.05.2012
Сообщений: 49

Pic16f628 + DS18B20

15.04.2017, 14:42. Показов 931. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток !
Мне надо сделать управление вентиляторами при определённых температурах, вот примерно такой код на MikroC pro PIC
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int lsb,mbs,j;
unsigned temp;
 
void main() {
TRISB = 0;//Порт В на выход
TRISA = 255;//Порт А на вход
CMCON = 7;//Отключаем компаратор для коректной работы входов PORTA
PORTB = 0;
    while(1){
    Ow_Reset(&PORTA,1);
    Ow_Write(&PORTA,1,0xCC);
    Ow_Write(&PORTA,1,0x44);
    Delay_us(120);
 
    Ow_Reset(&PORTA,1);
    Ow_Write(&PORTA,1,0xCC);
    Ow_Write(&PORTA,1,0xBE);
 
    lsb = Ow_Read(&PORTA,1);//Получить LSB температуры младшие байты
    mbs = Ow_Read(&PORTA,1);//Получить MSB температуры старшие байты
 
    if(mbs >= 3)RB7_bit = 1;//48 градусов
      else RB7_bit = 0;
    if(mbs >= 4)RB6_bit = 1;//64 градусов
      else RB6_bit = 0;
    if(mbs >= 5)RB5_bit = 1;//80 градусов
      else RB5_bit = 0;
    if(mbs >= 6)RB4_bit = 1;//96 градусов
      else RB4_bit = 0;
 
     Delay_ms(100);
   }
}
Но здесь у меня определяет температуру по старшему байту с датчика, это 48,64,80,96 а хотелось бы чтобы можно было
задать конкретную температуру например 40 или 48 градусов, пробывал так написать:
C
1
2
3
mbs <<= 8;
    mbs += lsb;
    PORTB = mbs;
не получается, может кто подскажет как это сделать ???
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.04.2017, 14:42
Ответы с готовыми решениями:

Программатор для PIC16F628
Добрый день, уважаемые участники форума. С тех пор, как начал изучать контроллеры, собирал устройства на AVR-контроллерах. Недавно...

Среда компиляции для МК PIC16F628
Пробовал компилировать данным компилятором ошибок не возникало и после пере прошивки микроконтроллера hex файлом,полученным вышеописанным...

PIC16F628. Как реализовать ЦАП?
Мне нужно запрограммировать pic16f728a так что бы одна его нога давала напряжение в виде ступенек от 0 до 5 вольт, я знаю как сделать что...

2
Почетный модератор
 Аватар для Humanoid
11557 / 4352 / 452
Регистрация: 12.06.2008
Сообщений: 12,454
16.04.2017, 18:54
Если нужны только целые числа, то можно сдвинуть на 4 бита... т.е. в mbs содержаться 8 старших бит от значения, а в lsb - 8 младших бит. Но что бы получить температуру, нужно значение разделить на 16 (сдвинуть вправо на 4 бита).
Действия таковы:
C
1
2
3
mbs <<= 4;  // 8 бит данных сдвигаются влево: 0000 xxxx xxxx 0000 (на место младших 4 бит потом запишем данные из lsb)
lsb >>= 4; // 8 бит данных сдвигаются вправо и остаются только 4 бита... 0000 0000 0000 xxxx (потерявшиеся 4 бита - это дробная часть, которую мы будем игнорировать)
mbs |= lsb; // теперь в mbs хранится значение температуры: 0000 xxxx xxxx xxxx (биты 0-3 - это от lsb, а биты 4-11 - от mbs)
Но это будет работать только при плюсовой температуре... для минусовой надо старшие биты выставлять:
C
1
2
if ((mbs >> 11) & 1)  // если старший бит значения температуры = 1 (отрицательное число)
    mbs |= 0xF000;    // то надо забить единицами старшие биты 16-битного int, что бы PIC понимал, что это именно отрицательное число
Так же тут идёт округление до меньшего целого значения температуры. Что бы округлять до ближайшего (например 35.6 что бы превратилось в 36 градусов), нужно перед сдвигом lsb увеличить этот lsb на 0.5 градуса.
C
1
lsb += 0x8;
0
0 / 0 / 1
Регистрация: 03.05.2012
Сообщений: 49
17.04.2017, 10:10  [ТС]
Большое Спасибо все получилось !!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.04.2017, 10:10
Помогаю со студенческими работами здесь

Автомат подачи звонков на PIC16F628
Собрал данное устройство (http://rodyomostir.com.ua/691-shkolnyj- ... onkov.html). Не работает коммутатор (сигнал на выходе триггера не...

PIC16F628 не хочет спать, как усыпить?
Пытаюсь разобраться с режимом sleep. Для примера имеется вот такая простенькая программка: include P16F628.INC org 0000h bsf...

PIC16F628. Для чего команды movlw, movwf?
Вот лабораторная работа LIST P=16F628 #INCLUDE &quot;P16F628.INC&quot; __CONFIG _CP_OFF &amp; _WDT_OFF &amp; _BODEN_OFF &amp;...

Вывод слова на LCD 1602 в МК PIC16F628 с помощью C++
добрый вечер буду очень благодарен за помощь имеется в наличии pic 16f628,lcd 1602+ponyprog Задача состоит в том, чтобы при каждом...

Поиск заголовочных файлов для компиляции под pic16f628/16f84/12f675
Собственно нужна помощь в КОМПИЛЯЦИИ. пишу для души. pic16f628/16f84/12f675 сейчас знания = 0 (полный сумбур) давно давно писал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru