Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

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

Ср дек 02, 2020 11:26:34

Не советую меня учить что красиво , а что нет. У человека 2 руки и ими он пишет и программу и сообщения. У ТСа явный копипаст. Поэтому он даже не знает в чём написана программа. Если сильно нужно я могу найти эту прогу в инете. И попахивает от него студнем. Красиво прикидывается.

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

Ср дек 02, 2020 12:48:36

otest писал(а):Что за набор файлов в папке проекта? Чем он запускается ?
Это проект MPLAB X :)

Извините - это я правда не подумал про различие с Х и без Х т.к. в программе без Х я не работал. 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:
T4 equ b'00000100'; 0x04
T6 equ b'11111001'; 0xF9
Это что ?

Это моя задумка реализации условия больше/меньше
цифры 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:
STATUS,5 - нужно применять однозначные имена флагов C,Z,RP и т.д.

С 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 раз.

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

Ср дек 02, 2020 13:28:43

В шапке нужна строка include p16f628A.inc
Файл .INC сам всё присвоит. Читайте уроки АСМ.

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

Ср дек 02, 2020 16:48:45

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 раз.

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

Ср дек 02, 2020 17:00:36

profradio, пожалуйста, цитируйте правильно. Вы уже 2ой раз цитируете так, что якобы я писал, то, что я не писал!

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

Ср дек 02, 2020 17:45:46

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 KiB) Скачиваний: 209

температура задается двумя десятичными цифрами .4 - нижний порог включения 4 градуса и по формулуле 256-6=250 - верхний порог выключения 6 градусов - задумка рабочая.

Удалось отладить и понять ошибки с помощью дебагера - отличная штука!

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

Чт дек 03, 2020 07:04:25

Причесал код - выкинул лишний флаг 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

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

Вт дек 08, 2020 09:17:50

Думал дело уже в шоколаде - но нет, танцы с бубнами продолжаются! Купил уже второй датчик 18В20 - не могу понять почему не работает. Может быть МК не исправный. В протеусе все работает. На макетке нет.
Макетка
Изображение
Посмотрел осциллографом
Изображение
Длительность сигналов совпадает с программируемой
Изображение
Что там считывается не разглядеть, правда, но на выходе МК всегда нули.
Последний код:
Термостат.txt
(5.51 KiB) Скачиваний: 225

Задержка стоит 800 микросекунд.

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

Вт дек 08, 2020 10:40:11

Датчик без буквы 1820 .

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

Вт дек 08, 2020 11:14:52

Датчик без буквы 1820 .

Не понял?
Придумал тест МК - убрать датчик и прочитать при подключенном резисторе к земле и к шине питания - должны прочитаться все нули либо все единицы - читаются только нули.
Кажется понял - в данном МК нужно инициализировать PORTA на вход выставляя значение 111 в регистре CMCON
movlw .7
movwf CMCON
Да, верно - температуру измеряет.

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

Вт дек 08, 2020 15:20:37

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

Датчик без буквы 1820 .

Не понял?

Датчики DS1820 с буквами (B, S) и без оных не являются абсолютно идентичными.
Нужно уточнять по даташиту.

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

Вт дек 08, 2020 15:27:04

profradio, еще возможно стоит отключить АЦП записав 0 в ANSEL: https://radiokot.ru/forum/viewtopic.php ... 1#p3936791
Посмотрите в ДШ вашего МК сами, сейчас некогда.

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

Вт дек 08, 2020 15:59:44

В 630 нет АЦП.

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

Вт дек 08, 2020 16:13:39

Тогда не надо )

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

Вт дек 08, 2020 18:35:18

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

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

Вт дек 08, 2020 19:08:14

В pic16f628A тоже нет АЦП, так что CMCON достаточно. Ну а протеус... это ж симуляция. Там не вся периферия может симулироваться или могут быть неточности, нельзя ему на 100% доверять. Хотя для отладки логики кода средство хорошее.

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

Ср дек 09, 2020 06:54:58

Шайтан-контроллер работает!
Все как задумано.
Последний код и прошивка с коротким кодом:
Термостат.txt
(4.85 KiB) Скачиваний: 204

Termostat4.X.production.hex
(842 байт) Скачиваний: 272

Сделал вывод значения температуры в двоичном коде на порт В для наглядности, а вывод термостата на первую ногу МК - RA2. ВКЛ при 4 градусах, ВЫКЛ при 5 градусах.
Фото макетки с разной температурой:
-1 градус (зеленый светодиод - знак минус) ВКЛ:
Изображение
Плюс 4 градуса ВКЛ
Изображение
Плюс пять градусов ВЫКЛ
Изображение
Теперь вот задумался - тут есть нехороший момент - т.к. я беру только целую часть значения температуры - то при значении 4.99 градуса будет вкл, а при значении 5.0 градусов выкл - может постоянно переключатся туда-сюда - это не хорошо. Думаю самый простой вариант делать 3 градуса вкл (а по факту 3,93 при 12 битной разрядности) а выкл 5 градусов - по факту 5.0.

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

Ср дек 09, 2020 15:18:28

В первом приближении это называется "гистерезис"

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

Пн дек 14, 2020 05:40:33

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