Терморегулятор на PIC16F676 - Страница 3 - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 3 из 3«123
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Терморегулятор на PIC16F676 (Динамическая индикация)
Терморегулятор на PIC16F676
mikhail09p Дата: Вс, 15.08.2010, 09:48  |                                                                                                                Сообщение # 31
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 495
Репутация: 10   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Мне для положительных температур и надо. Тогда часть кода будет выглядеть так?

TERMO_Convert:

OWrite DQ, 1, [$CC,$44] ' Послать датчику DS18B20 команду старта измерения температуры
Repeat ' Начать внутренний цикл
DelayMS 25 ' Ждать окончания преобразования пока не придет бит,
ORead DQ, 4, [C] ' сигнализирующий об окончании преобразования
Until C > 0 ' Выйти из цикла если от DS18B20 поступил бит конца преобразования.
OWrite DQ, 1, [$CC,$BE] ' Послать команду чтения из ОЗУ датчика DS18B20 значения температуры
ORead DQ, 2, [R_Temp.LowByte, R_Temp.HighByte] ' Прочитать значение температуры и записать полученные два байта данных в переменную R_Temp типа Dword, младщий байт в R_Temp.LowByte и старший байт в R_Temp.HighByte
Temp = R_Temp
TempС = Temp /16

'Процедура перетворення температури
'******************************************************************************************************
TempC = Temp_read >> 4
Float1 = Temp_read.LowByte & $0F
Float0 = LookUpL Float1, [0,1,1,2,2,3,4,4,5,6,6,7,7,8,9,9]
TemperC = (TempC * 10) + Float0

vyvod: 'Потом выводим на дисплей.

DigitDisp = TemperC Dig 0 'Третя цифра
GoSub LOOK
CifraX = Cifra

DigitDisp = TemperC Dig 1 ' Друга цифра
GoSub LOOK
CifraX = Cifra

DigitDisp = TemperC Dig 2 'Перша цифра
GoSub LOOK
CifraX = Cifra
Return

LOOK:
Cifra = LookUpL s,[%0000,%0001,%0010,%0011,%0100,%0101,%0110,%0111,%1000,%1001]
Cifra << 2
PORTC=Cifra
Return

Нужна ли конструкция Temp = R_Temp ?
И для чего CifraX = Cifra ?

Сообщение отредактировал mikhail09p - Вс, 15.08.2010, 09:50
ЯНДЕКС Дата: 15.08.2010
ivan_fd Дата: Вс, 15.08.2010, 13:15  |                                                                                                                Сообщение # 32
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Quote (Dmitry)
Ничего не надо маскировать, просто сдинуть вправо на 4 бита и все.

Да можно и так. Код не мой, нашел гдето, вот и прокоментировал.

Зачем R_temp типа Dword, если значение температуры занимает 16 бит (2 байта), хватит и word.

Quote (mikhail09p)

Temp = R_Temp
TempС = Temp /16

Это что такое? Не нужно этого!!

Quote (mikhail09p)
И для чего CifraX = Cifra ?

CifraX - вместо X ставится цифры.

Вот как это у меня

Code
************** Присвоение значений отображаемым цифрам***************
valtemp:
DigitDisp = TemperC Dig 0 'Третя цифра
GoSub LOOK
Cifra1 = cifra

DigitDisp = TemperC Dig 1 'Друга цифра
GoSub LOOK
Cifra2 = cifra + 128

DigitDisp = TemperC Dig 2 'Перша цифра
GoSub LOOK
Cifra3 = cifra

If Sign = "-" Then
Cifra4 = %01000000 ; Знак мінус
Else
Cifra4 = %01100011 ; Знак C
EndIf

Return
LOOK:
; таблица для индикаторов с общим катодом
cifra = LookUpL DigitDisp,[63,6,91,79,102,109,125,7,127,111]
Return ; возврат

Значение Cifra1,2.... передается в PORT. Но это все зависит от того как у Вас организован вывод на дисплей.


Меня все время преследуют умные мысли...но я быстрее!!!
Сообщение отредактировал ivan_fd - Вс, 15.08.2010, 13:15
mikhail09p Дата: Вс, 15.08.2010, 13:40  |                                                                                                                Сообщение # 33
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 495
Репутация: 10   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

У меня же вот вывод в порт
LOOK:
Cifra = LookUpL s,[%0000,%0001,%0010,%0011,%0100,%0101,%0110,%0111,%1000,%1001]
Cifra << 2
PORTC=Cifra
Return

Или так нельзя?

ivan_fd Дата: Вс, 15.08.2010, 15:49  |                                                                                                                Сообщение # 34
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Ну если Вы используете дешифратор, то почему нельзя, можно.

P.S: Вы на индикаторы что то уже выводите, или это только теория?


Меня все время преследуют умные мысли...но я быстрее!!!
Сообщение отредактировал ivan_fd - Вс, 15.08.2010, 15:56
mikhail09p Дата: Вс, 15.08.2010, 19:54  |                                                                                                                Сообщение # 35
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 495
Репутация: 10   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Quote (ivan_fd)
P.S: Вы на индикаторы что то уже выводите, или это только теория?

К сожалению, теория. Практика немного откладывается - операция картошка.
holiday

Форум Picbasic.ru » Программирование МК » Proton PicBasic » Терморегулятор на PIC16F676 (Динамическая индикация)
Страница 3 из 3«123
Поиск: