Всем здравствуйте! Прошу помочь в создании термореле на микроконтроллере - задача сделать включение и отключение нагревателя в подвале по температуре 3 градуса вкл и 4 градуса выкл. Датчик температуры ds18b20. Сам написал программу на си и на асм для pic16f630, не работает. Написал программку для ардуино - работает, но иногда выскакивают неадекватные значения температуры - почему - хз (сейчас все устройство стоит - более-менее работает). Схема на мощном тиристоре - тут все ок, не работает именно микроконтроллер. Версию на си прикладываю. Версию на асм приложу завтра. Делал давно, решил возобновить - разобраться - вот верные файлы: асм
Сам написал программу на си и на асм для pic16f630, не работает
Если так , то выкладывай свой проект в МПЛАБ. За СИ не скажу , а вот АСМ скопирован у кого то. ( может у Карабельникова). Почему нет ни одного коментария ? Программа на АСМ только общается (может быть) с датчиком и больше ни чего. Что в ней должно работать? Студент ???
Скорее "начинающий самоделкин" с начальным опытом адуринки. Только вот ПИК от АВР солидно отличается. Посему опыт, полученный при работе с ардуино не сильно поможет. (Другое дело от ассемблера с АВР/ПИК к ардуиновому Си - это получше).
Заголовок сообщения: Re: Прошу помощи в программировании Pic16f630 - термореле
Добавлено: Пн ноя 30, 2020 15:22:30
Модератор
Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4613 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Этих термостатов в интернете - пруд пруди. И с исходниками, и без, и всяких разных модификаций, ... Но нет же, нужно изобретать очередной велосипед с костылями
Каждый имеет право на собственную разработку (пусть и не всегда удачную и/или совершенную). Или для учебы/закрепления пройденного материала или для собственного удовольствия. То, что подобного материала в избытке - наоборот позволяет выбрать лучшие решения для компоновки конкретного проекта.
Я не про разработку говорю, а про кучу примеров на любых языках. Разрабатывать, конечно же, лучше самому. Но грешить на программу, примеров которой тьма в интернете, и идти на форум с просьбой помочь в ней разобраться - извращенство. Ищем примеры, смотрим, сравниваем, ищем ошибки, поправляем, .... Или чукча - не читатель ? Ну или ТС - тупо лентяй, "сделайте всё за меня, а я буду заниматься своими делами" ...
Согласен с тем, что вопросы задавать надо "чуток основательнее" их подготовив. Мне вот без схемки, сопровождающей задачу не слишком удобно... Подождемс реакции вопрошавшего...
Ребята, благодарю за ответы! Я не студент - просто как-то затронула тема программирования МК - втянулся, посмотрел, почитал, поизучал асм, сделал термометр в квартиру на pic16f676 c динамическим индикатором, потом купил ардуинок - поизучал си - понял, что си облегчает жизнь, особенно на ардуинках:) Ну в общем не специалист - так, поверхностно нахватался:) Занимаюсь ради интереса. Про выложенный код асм - да, вспомнил - я начал писать программу, но столкнулся с трудностью - как сделать условие больше >CONST< меньше на асм и не дописал - решил делать на си - но не заработало и я бросил. Замечание про "__delay_us(750); заменить на Код: __delay_ms(750);" верно, но по факту работает и с задержной в 750 микросекунд. Я тут тоже времени не терял - нашел у себя в закромах МК PIC16F628A и решил для него писать код на асм - т.к. на асм меньше вероятность допустить неявных ошибок. На сегодня код такой -
Это проект в MPLAB v3.65 Комментарии, написанные на кириллице превращаются в знаки вопроса - теперь стараюсь писать на латинице. Пока код примитивный - считывание двухбайтного числа с DS18B20 - затем отбрасывание полубайтов знака и дробной части и склейка с переворотом восьмибитного значения с левым битом знака и проверка на наличие знака минус - это вкл, далее проверка 6,5,4,3 бита на наличие 1 - это выкл. Проверяю в протеусе - пока работает так: когда температура ниже нуля - 5-я нога порта В включает нагрузку/нагреватель (высокий уровень), а когда температура выше 8 градусов - выключает (гистерезис такой в 8 градусов). Но мне нужно вкл 4 градуса выкл 6 градусов. Для этого написал такой кусок кода: ;movf Temp,0 ;W=temp ;bcf STATUS,0 ;bcf STATUS,1 ;bcf STATUS,2 ;SUBWF T4,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 ;movf Temp,0 ;W=temp ;bcf STATUS,0 ;bcf STATUS,1 ;bcf STATUS,2 ;ADDWF T6,0 ;slozenie temp i 6 ;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 vikl Где T4 = b'00000100' А Т6 = 255 - 6 = 249 b'11111001' Но этот код пока не работает - вот разбираюсь, почему. Файл в протеусе:
Про уже готовые проекты - можно взять готовый или проще купить в радиомагазине готовое устройство - для меня дело в интересе - хочу сделать максимально простую схему без дисплеев, индикаторов, кнопок и другого усложнения - значение температуры срабатывания зашивается и хранится в самом МК.
LIST p=16F628A __CONFIG b'11111100011000' #define _XTAL_FREQ 40000000 ;это зачем PCL equ 02h TRISA equ 85h TRISB equ 06h PORTA equ 05h PORTB equ 86h STATUS equ 03h Не следует переписывать регистры ОН, нужно подключать файл - include p16f628A.inc
STATUS,5 - нужно применять однозначные имена флагов C,Z,RP и т.д. Почему MPLAB v3.65 ? Его уже и скачать негде. Что за набор файлов в папке проекта? Чем он запускается ?
PORTDQ equ PORTA TRISDQ equ TRISA Зачем эта двойная кодировка ?
T4 equ b'00000100'; 0x04 T6 equ b'11111001'; 0xF9 Это что ?
Пока не наведёте порядок в тексте программы, ни чего не заработает. И не надо свистеть что прогу писал сам. То что написал сам , оно и не работает.
Это некоторая разница мплаб Х (там свой порядок нумерации версий) и старый-добрый мплаб 8.92 на котором большая часть старых проектов выполнена. На старых ПК с ХР уже мплаб Х поставить весьма затруднительно... Просто сейчас начинающие уже ориентируются на современную базу (не ведая совершенно о существовании более старого)... Пы.Сы. При работе с минусовыми значениями нельзя просто отбрасывать дробную часть. Необходимо сначала В ПОЛНОМ ФОРМАТЕ, полученном при преобразовании, перевести значение в положительную величину("дополнение до 2х"), а уж только затем заниматься "обрезанием".
Последний раз редактировалось BOB51 Ср дек 02, 2020 10:38:12, всего редактировалось 1 раз.
Заголовок сообщения: Re: Прошу помощи в программировании Pic16f630 - термореле
Добавлено: Ср дек 02, 2020 10:36:47
Модератор
Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4613 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
otest писал(а):
Даже здесь без внимания написано
В чём невнимательность ? Забыл символ "X" написать ? Возможно, что человек вообще не знает о существовании обычного MPLAB'а, и для него MPLAB X - просто MPLAB
Заголовок сообщения: Re: Прошу помощи в программировании Pic16f630 - термореле
Добавлено: Ср дек 02, 2020 11:12:06
Модератор
Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4613 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Ну, мы сейчас не о программе глаголим. Зачем делать подобные сравнения ? Обвинять человека в невнимательности лишь потому, что он MPLAB X назвал MPLAB'ом - не красиво. MPLAB X - это и есть MPLAB. И будет им всегда. Не вижу ничего в этом оскорбительного в адрес Микрочипа. Тем более :
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения