Прошу помощи в программировании Pic16f630 - термореле

Поклонники продукции Microchip Technology Inc тусуются тут.
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение otest »

Не советую меня учить что красиво , а что нет. У человека 2 руки и ими он пишет и программу и сообщения. У ТСа явный копипаст. Поэтому он даже не знает в чём написана программа. Если сильно нужно я могу найти эту прогу в инете. И попахивает от него студнем. Красиво прикидывается.
Реклама
profradio
Встал на лапы
Сообщения: 105
Зарегистрирован: Чт фев 11, 2016 16:59:20
Откуда: Иркутск

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение profradio »

[uquote="Аlex",url="/forum/viewtopic.php?p=3934447#p3934447"]
otest писал(а):Что за набор файлов в папке проекта? Чем он запускается ?
Это проект MPLAB X :)[/uquote]
Извините - это я правда не подумал про различие с Х и без Х т.к. в программе без Х я не работал. MPLAB X.
NStorm писал(а):Не по факту, а в протеусе.
Не только, на окне уже год висит термометр на 18B20 - работает без сбоев - там та же программа и 750 микросекунд. На макетке тоже работает. Может в даташите ошибка?
NStorm писал(а):PORTDQ equ PORTA
TRISDQ equ TRISA
Я не сам, конечно, из головы выдумывал код - а по шпаргалкам и подсказкам в интернете - но не ctrl V+ctrl C, а все вдумчиво и руками написано - где-то встретил что если присваивать имя порту и номеру порта - то потом проще менять код для разных МК, например pic16f676 PORTC, pic16f628А PORTB, и также с ножкой вывода.
Про отрицательные значения в термометре написан такой код:
Opredelenie_Znaka
clrf Ind_Znak;0
movf Temp,0
btfss Temp,7
return
incf Ind_Znak,1
comf Temp,0
addlw .1
return
Но мне он тут не нужен, т.к. если от датчика получено отрицательное значение - то программа ветвится по goto на включение ножки 5 и далее на начало программы.

Добавлено after 11 minutes 9 seconds:
[uquote="otest",url="/forum/viewtopic.php?p=3934441#p3934441"]T4 equ b'00000100'; 0x04
T6 equ b'11111001'; 0xF9
Это что ?[/uquote]
Это моя задумка реализации условия больше/меньше
цифры 4 и 249 записываются в 2 регистра общего назначения.
Если из чисел от 0 до 3-х вычесть число 4 - тобудет займ в регистре STATUS - так мы отследим, что число температуры находится от 0 до 4.
Далее т.к. в 8-битном регистре максимальное число это 255
То если прибавить число 249 и число больше 6 (от 7 до 255) то в регистре STATUS можно отследить перенос теми же флагами, что и с займом.

Нашел ошибки в своем коде - вот исправленный вариант - но пока еще не работает:
bcf STATUS,C
bcf STATUS,DC
bcf STATUS,Z
MOVF T4,0
SUBWF Temp,0 ;vichitanie is Temp-4=?
BTFSC STATUS,Z ; 0?
goto VKL ; esli 0 to vkl
BTFSC STATUS,DC ;proveriaem zaim desyatok
goto VKL ;bil zaim to vkl
BTFSC STATUS,C ;proveriaem zaim edinic
goto VKL ;bil zaim to vkl
MOVF Temp,0 ;W=temp
bcf STATUS,C
bcf STATUS,DC
bcf STATUS,Z
ADDWF T6,0 ;slozenie temp i 6
BTFSC STATUS,Z ; 0?
goto VIKL ; esli 0 to vikl
BTFSC STATUS,DC ;proveriaem zaim desyatok
goto VIKL ;bil zaim to vikl
BTFSC STATUS,C ;proveriaem zaim edinic
goto VIKL ;bil zaim to vkl

Где, Temp - значение температуры от датчика

Добавлено after 48 minutes 19 seconds:
[uquote="otest",url="/forum/viewtopic.php?p=3934441#p3934441"]STATUS,5 - нужно применять однозначные имена флагов C,Z,RP и т.д.[/uquote]
С DC и Z - флаги переноса/заема, десятичного переноса/заема и нулевого результата, 0, 1 и 2
RP5 и RP6 флаги выбора банка 0,1,2,3 (у pic16f628 4 банка)
Имеете ввиду в шапке присваивать значения:
С equ 0
DC equ 1
Z equ 2
RP0 equ 5
RP1 equ 6 и дальше использовать имена для наглядности?
Последний раз редактировалось profradio Ср дек 02, 2020 13:35:21, всего редактировалось 1 раз.
Реклама
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение otest »

В шапке нужна строка include p16f628A.inc
Файл .INC сам всё присвоит. Читайте уроки АСМ.
profradio
Встал на лапы
Сообщения: 105
Зарегистрирован: Чт фев 11, 2016 16:59:20
Откуда: Иркутск

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение profradio »

3-й вариант правки кода:
bcf STATUS,0
bcf STATUS,1
bcf STATUS,2
movlw .4
SUBWF Temp,0 ;vichitanie is W-4=?
BTFSC STATUS,2 ; 0?
goto VKL ; esli 0 to vkl
BTFSC STATUS,1 ;proveriaem zaim desyatok
goto VKL ;bil zaim to vkl
BTFSC STATUS,0 ;proveriaem zaim edinic
goto VKL ;bil zaim to vkl
bcf STATUS,0
bcf STATUS,1
bcf STATUS,2
movlw .249 ;slozenie temp i 249
BTFSC STATUS,2 ; 0?
goto VIKL ; esli 0 to vikl
BTFSC STATUS,1 ;proveriaem zaim desyatok
goto VIKL ;bil zaim to vikl
BTFSC STATUS,0 ;proveriaem zaim edinic
goto VIKL ;bil zaim to vkl
otest писал(а):T4 equ b'00000100';
T6 equ b'11111001';
Это что ?
Были правы - фигню написал:)
Но код все еще не работает - почему если из 7 вычесть 4 - в аккумуляторе W сохраняется 3 - все верно, но 0(С) и 1(DC) бит регистра STATUS равны 1?
Последний раз редактировалось profradio Ср дек 02, 2020 17:13:16, всего редактировалось 1 раз.
Реклама
Эиком - электронные компоненты и радиодетали
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение NStorm »

profradio, пожалуйста, цитируйте правильно. Вы уже 2ой раз цитируете так, что якобы я писал, то, что я не писал!
Реклама
profradio
Встал на лапы
Сообщения: 105
Зарегистрирован: Чт фев 11, 2016 16:59:20
Откуда: Иркутск

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение profradio »

NStorm писал(а):цитируйте правильно
Исправил!
Про
profradio писал(а):0(С) и 1(DC) бит регистра STATUS равны 1
Отвечу сам - тут инверсное значение при операции вычитания.
Код 4 вариант:
movlw .4
bcf STATUS,0
bcf STATUS,1
bcf STATUS,2
SUBWF Temp,0 ;vichitanie is W-4=?
BTFSC STATUS,2 ; 0?
goto VKL ; esli 0 to vkl
BTFSS STATUS,1 ;proveriaem zaim desyatok
goto VKL ;bil zaim to vkl
BTFSS STATUS,0 ;proveriaem zaim edinic
goto VKL ;bil zaim to vkl
bcf STATUS,0
bcf STATUS,1
bcf STATUS,2
movlw .249 ;slozenie temp i 249
BTFSC STATUS,2 ; 0?
goto VIKL ; esli 0 to vikl
BTFSC STATUS,1 ;proveriaem zaim desyatok
goto VIKL ;bil zaim to vikl
BTFSC STATUS,0 ;proveriaem zaim edinic
goto VIKL ;bil zaim to vkl
Уже работает наполовину - при снижении вниз по температуре - включается на 4 градусах и ниже. ВВерх не работает выключение.

Добавлено after 28 minutes 43 seconds:
Все, работает! - вот заезженный мной кусок кода рабочий вариант (пропустил сложение во второй части):
movlw .4
bcf STATUS,0
bcf STATUS,1
bcf STATUS,2
SUBWF Temp,0 ;vichitanie is W-4=?
BTFSC STATUS,2 ; 0?
goto VKL ; esli 0 to vkl
BTFSS STATUS,1 ;proveriaem zaim desyatok
goto VKL ;bil zaim to vkl
BTFSS STATUS,0 ;proveriaem zaim edinic
goto VKL ;bil zaim to vkl
bcf STATUS,0
bcf STATUS,1
bcf STATUS,2
movlw .250 ;slozenie temp i 250
ADDWF Temp,0
BTFSC STATUS,2 ; 0?
goto VIKL ; esli 0 to vikl
BTFSC STATUS,1 ;proveriaem zaim desyatok
goto VIKL ;bil zaim to vikl
BTFSC STATUS,0 ;proveriaem zaim edinic
goto VIKL ;bil zaim to vkl
goto begin
Код асм рабочий:
termostat4-6.txt
(6.68 КБ) 252 скачивания
температура задается двумя десятичными цифрами .4 - нижний порог включения 4 градуса и по формулуле 256-6=250 - верхний порог выключения 6 градусов - задумка рабочая.

Удалось отладить и понять ошибки с помощью дебагера - отличная штука!
Реклама
profradio
Встал на лапы
Сообщения: 105
Зарегистрирован: Чт фев 11, 2016 16:59:20
Откуда: Иркутск

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение profradio »

Причесал код - выкинул лишний флаг DC - он как-то непонятно расписан в документации - оказывается, это займ между полубайтами
и лишнюю проверку флага Z при сложении - т.к. 250+6 поднимает флаг С - осталось 13 строчек:
movlw .4
bcf STATUS,C
bcf STATUS,Z
SUBWF Temp,0 ;vichitanie is Temp-4=?
BTFSC STATUS,Z ; 0?
goto VKL ; esli 0 to vkl
BTFSS STATUS,C ;proveriaem zaim edinic
goto VKL ;bil zaim to vkl
bcf STATUS,C
movlw .250 ;slozenie temp i 250
ADDWF Temp,0
BTFSC STATUS,C ;proveriaem zaim edinic
goto VIKL ;ne bil zaim to vikl

А если нижний порог вычислять по формуле t + 1 = 5 в моем случае - то код можно сократить до 10 строчек:

movlw .5
bcf STATUS,C
SUBWF Temp,0 ;vichitanie is Temp-5=?
BTFSS STATUS,C ;proveriaem zaim edinic
goto VKL ;bil zaim to vkl
bcf STATUS,C
movlw .250 ;slozenie temp i 250
ADDWF Temp,0
BTFSC STATUS,C ;proveriaem zaim edinic
goto VIKL ;ne bil zaim to vikl

А если не делать гистерезис (вернее он будет в 1 градус 4вкл и до 5выкл и наоборот) - то можно код сократить по одному порогу (допустим как у меня - 4 градуса) до 6 строчек:

movlw .5
bcf STATUS,C
SUBWF Temp,0 ;vichitanie is Temp-5=?
BTFSS STATUS,C ;proveriaem zaim edinic
goto VKL ;bil zaim to vkl
goto VIKL ;ne bil zaim to vikl
profradio
Встал на лапы
Сообщения: 105
Зарегистрирован: Чт фев 11, 2016 16:59:20
Откуда: Иркутск

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение profradio »

Думал дело уже в шоколаде - но нет, танцы с бубнами продолжаются! Купил уже второй датчик 18В20 - не могу понять почему не работает. Может быть МК не исправный. В протеусе все работает. На макетке нет.
Макетка
Изображение
Посмотрел осциллографом
Изображение
Длительность сигналов совпадает с программируемой
Изображение
Что там считывается не разглядеть, правда, но на выходе МК всегда нули.
Последний код:
Термостат.txt
(5.51 КБ) 270 скачиваний
Задержка стоит 800 микросекунд.
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение otest »

Датчик без буквы 1820 .
profradio
Встал на лапы
Сообщения: 105
Зарегистрирован: Чт фев 11, 2016 16:59:20
Откуда: Иркутск

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение profradio »

[uquote="otest",url="/forum/viewtopic.php?p=3938385#p3938385"]Датчик без буквы 1820 .[/uquote]
Не понял?
Придумал тест МК - убрать датчик и прочитать при подключенном резисторе к земле и к шине питания - должны прочитаться все нули либо все единицы - читаются только нули.
Кажется понял - в данном МК нужно инициализировать PORTA на вход выставляя значение 111 в регистре CMCON
movlw .7
movwf CMCON
Да, верно - температуру измеряет.
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение Zhuk72 »

Запись 0х07 в CMCON отключает компаратор.
Вернее отключает выводы порта от компаратора, если мне не изменяет мой склероз.

[uquote="profradio",url="/forum/viewtopic.php?p=3938409#p3938409"][uquote="otest",url="/forum/viewtopic.php?p=3938385#p3938385"]Датчик без буквы 1820 .[/uquote]
Не понял?[/uquote]
Датчики DS1820 с буквами (B, S) и без оных не являются абсолютно идентичными.
Нужно уточнять по даташиту.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение NStorm »

profradio, еще возможно стоит отключить АЦП записав 0 в ANSEL: https://radiokot.ru/forum/viewtopic.php ... 1#p3936791
Посмотрите в ДШ вашего МК сами, сейчас некогда.
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение otest »

В 630 нет АЦП.
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение NStorm »

Тогда не надо )
profradio
Встал на лапы
Сообщения: 105
Зарегистрирован: Чт фев 11, 2016 16:59:20
Откуда: Иркутск

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение profradio »

Спасибо за советы! Датчики у меня DS18B20. Я сейчас программирую pic16f628A - такой сейчас нашел у себя. Тему назвал 630 т.к думал делать на нем, но он куда-то задевался. У 630 не нужно было Настраивать CMCON - работало и так. Я тут разобрался почему работает с задержкой 750микросекунд на измерение температуры- на самом деле не работает, сначала выдаётся значение температуры по умолчанию 85 градусов, а далее измерение температуры датчик продолжает и при последующих опросах выдаётся измеренное значение как-бы с запаздыванием. После настройки CMCON Макетка стала измерять температуру (сделал вывод двоичного кода на порт В) при пересчете получается вполне достоверное значение 27 градусов. Завтра доразбираюсь с включением по температуре. Про АЦП почитаю в даташите. В Протеусе схема почему- то работает и без настраивания CMCON - сбивает с толку.
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение NStorm »

В pic16f628A тоже нет АЦП, так что CMCON достаточно. Ну а протеус... это ж симуляция. Там не вся периферия может симулироваться или могут быть неточности, нельзя ему на 100% доверять. Хотя для отладки логики кода средство хорошее.
profradio
Встал на лапы
Сообщения: 105
Зарегистрирован: Чт фев 11, 2016 16:59:20
Откуда: Иркутск

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение profradio »

Шайтан-контроллер работает!
Все как задумано.
Последний код и прошивка с коротким кодом:
Термостат.txt
(4.85 КБ) 245 скачиваний
Termostat4.X.production.hex
(842 байт) 316 скачиваний
Сделал вывод значения температуры в двоичном коде на порт В для наглядности, а вывод термостата на первую ногу МК - RA2. ВКЛ при 4 градусах, ВЫКЛ при 5 градусах.
Фото макетки с разной температурой:
-1 градус (зеленый светодиод - знак минус) ВКЛ:
Изображение
Плюс 4 градуса ВКЛ
Изображение
Плюс пять градусов ВЫКЛ
Изображение
Теперь вот задумался - тут есть нехороший момент - т.к. я беру только целую часть значения температуры - то при значении 4.99 градуса будет вкл, а при значении 5.0 градусов выкл - может постоянно переключатся туда-сюда - это не хорошо. Думаю самый простой вариант делать 3 градуса вкл (а по факту 3,93 при 12 битной разрядности) а выкл 5 градусов - по факту 5.0.
Аватара пользователя
shindax
Потрогал лапой паяльник
Сообщения: 378
Зарегистрирован: Сб сен 19, 2009 07:02:19

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение shindax »

В первом приближении это называется "гистерезис"
profradio
Встал на лапы
Сообщения: 105
Зарегистрирован: Чт фев 11, 2016 16:59:20
Откуда: Иркутск

Re: Прошу помощи в программировании Pic16f630 - термореле

Сообщение profradio »

Проект можно считать законченным - собрана плата на скорую руку
Изображение Изображение
Все уместилось в сетевую коробочку
Изображение
Работает исправно.
Ответить

Вернуться в «PIC»