Jump to content
NebsteR

Pic. Общие Вопросы

Recommended Posts

15 минут назад, IMXO сказал:

по комнате сам летает ?

Хуже.

 

 

Вот код. Симулирую в Протеусе. Опрашиваю датчик температуры DS18B20. Остановился на том что прога считывает код семейства  (для данного датчика 0x28h)

после первого прохода всё работает хорошо , считанный код 0x28h помещается в регистр 0x23. Далее я проверяю этот код на соответствия, и если датчик подключён и он отправляет этот код то я включаю светодиод -  bsf PORTA, 5.

Но вот после этого прога и перестаёт работать. Именно после этой команды, и даже если bcf PORTA, 5  написать , то тоже. Вообщем PORTA 4 перестаёт выводить сигналы на датчик хотя команды посылаются.

Там после этой команды из за которой не работает стоят знаки  вопроса. Сломал весь мозг нет больше идей из за чего так.

;///////////////////////////////////////////////////////////////////////////////////////

list p=16f676,n=25,c=200,b=10
#include 16f676.INC
__config B'11111110010100'

                bcf STATUS, RP0   ;Bank 0  
                bcf PORTA, 4
                   bcf PORTA, 5
                  ; bcf PORTC, 5
                bsf STATUS, RP0   ;Bank 1
                   bcf TRISA, 5   ;port output
                  ; bcf TRISC, 5   ;port output
                bcf ANSEL, 3      ;Digital I/O
                bcf ANSEL, 5
                bsf TRISA, 4      ;Line set "1" port input

;///////////////////////////////////////////////////////////////////////////////////////
                
loop1          
                call wire_res     ;Отправить команду сброса

                movlw H'33'       ;Отправить команду 0x33h
                call wire_write   ;Отправить команду 0x33h
                call wire_read    ;принять данные в регистр 0x23h
                             

                  movlw H'D7'     ;0xD7h если DS18B20(0x28h); 0xEFh если DS1820(0x10h)
                  addwf H'23', 1
                  btfss STATUS, C
                  goto loopds
                  goto loop1
loopds            incf H'23'
                  btfss STATUS, Z
                  goto loop1
                  bcf STATUS, RP0   ;Bank 0  

              bsf PORTA, 5                                           ;? ? ? ? ? ? ? ? ?

                  bsf STATUS, RP0   ;Bank 1


                  

                  goto loop1
;///////////////////////////////////////////////////////////////////////////////////////

wire_res        bcf TRISA, 4       ;Line set "0" port output
                movlw H'A6'        ;Delay 500us
                movwf 22h
loop2           decfsz 22h, 01h   
                goto loop2
                bsf TRISA, 4       ;Line set "1" port input
                movlw H'A6'        ;Delay 500us
                movwf 22h
loop3           decfsz 22h, 01h   
                goto loop3                                
                return


wire_write        
                movwf 20h
                movlw H'08'
                movwf 21h
loop4           rrf H'20',1
                btfss STATUS, C
                goto set_wire_0
                goto set_wire_1
loop5           decfsz 21h, 01h
                goto loop4
                return

set_wire_1      bcf TRISA, 4       ;Line set "0" port output
                movlw H'02'        ;Delay 8us
                movwf 22h
loop6           decfsz 22h, 01h   
                goto loop6
                bsf TRISA, 4       ;Line set "1"  port input
                movlw H'17'        ;Delay 72us
                movwf 22h
loop7           decfsz 22h, 01h   
                goto loop7                                  
                goto loop5         ;send wire one
set_wire_0      bcf TRISA, 4       ;Line set "0"  port output
                movlw H'19'        ;Delay 80us
                movwf 22h
loop8           decfsz 22h, 01h   
                goto loop8
                nop                ;send wire zero
                bsf TRISA, 4       ;Line set "1" port input
                movlw H'02'        ;Delay 8us
                movwf 22h
loop9           decfsz 22h, 01h   
                goto loop9
                goto loop5


wire_read       clrf H'23'
                movlw H'08'
                movwf 21h
loop13          bcf TRISA, 4       ;Line set "0" port output
                nop
                nop
                bsf TRISA, 4       ;Line set "1" port input
                nop
                nop
                bcf STATUS, RP0    ;Bank 0
                btfss PORTA,4
                goto write_0
                goto write_1               
loop12          bsf STATUS, RP0    ;Bank 1
                movlw H'14'        ;Delay
                movwf 22h
loop10          decfsz 22h, 01h   
                goto loop10
                decfsz 21h, 01h
                goto loop13
                return
                
write_1         rrf H'23'
                bsf H'23', 7
                goto loop12

                
write_0         rrf H'23'
                bcf H'23', 7
                goto loop12

end

Share this post


Link to post
Share on other sites
4 минуты назад, Юрий123 сказал:

                  movlw H'D7'     ;0xD7h если DS18B20(0x28h); 0xEFh если DS1820(0x10h)
                  addwf H'23', 1
                  btfss STATUS, C
                  goto loopds
                  goto loop1

че за х... написана?

0xd7+0x28 = 0xff - где тут кери?

и кто надоумил так делать проверку? использовать сложение для сравнения чисел???

для этого есть команда xor  и бит зеро

а если регистр 23 ваапче не равен ни 0х28 ни 0х10 прога че делает????

Share this post


Link to post
Share on other sites

Простите, если не совсем грамотно, неделю назад начал изучать архитектуру PIC . Если регистр не равен 28 то  прога выполняется заново  по переходу goto loop1, но светодиод не поджигается.

если нужно могу сбросить проект в Протеусе

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

Системы телеметрии находят все более широкое применение во многих отраслях на промышленных и коммунальных объектах. Требования, предъявляемые к условиям эксплуатации приборов телеметрии и, как следствие, источников питания для них, могут быть довольно жесткими. Fanso предоставляет широкую линейку продукции, рассчитанной на различные условия эксплуатации, что позволяет подобрать батарейку для каждого конкретного применения, в том числе и для устройств телеметрии.

Подробнее

читайте как оформлять код http://pic24.ru/doku.php/osa/articles/mpasm_formatting

повторяю у вас нет проверки на равенство 28! , к тому же убили начальное значение в регистре

movfw 0x23
xorlw 0x28
btfss status,z
goto label_1 неравно
goto labtl_2 равно

исправляйте

Share this post


Link to post
Share on other sites

Код пока сырой. Ваше предложение грамотней конечно.Позже я исправлю.Но на данный момент  удалил проверку на число 28h вообще, чтоб не мешало.

Сейчаст прога постоянно опрашивает датчик и отсылает его код семейства в регистр 0x23 .     Но из за этой команды  - bsf PORTA, 5  он опрашивается только один раз.  ПОтом импульсы на датчик не поступают хотя команды посылаются.

код остался таким:

................

.................

loop1          
                call wire_res     ;Отправить команду сброса

                movlw H'33'       ;Отправить команду 0x33h
                call wire_write   ;Отправить команду 0x33h
                call wire_read    ;принять данные в регистр 0x23h                               

                  bcf STATUS, RP0   ;Bank 0  

              bsf PORTA, 5                                           ;? ? ? ? ? ? ? ? ?

                 bsf STATUS, RP0   ;Bank 1


            

                  goto loop1

.....................

..........................

Share this post


Link to post
Share on other sites
                     

Приглашаем на вебинар Решения для построения ультразвуковых счетчиков жидкостей и газов на базе MSP430

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

Подробнее...

Вообщем получается так что  установка или сброс любого бита регистра защёлки PORTA  командой bcf или bsf  при условии что выводы настроены на вход, информация одновременно защёлкивается  со входов PORTA.2;   PORTA.4;  PORTA.5

Почему так происходит и почему именно эти биты а не все например мне неизвестно. Бред.

Share this post


Link to post
Share on other sites
18 минут назад, Юрий123 сказал:

Почему так происходит

читаем раздел 9.10 руководства пользователя

у вас по дефолту портв4=0 , коммутацию вы осуществляете изменением направления порта трисв4 =0/1

портв4 у вас подтянут к +пит , когда вы устанавливаете портв5=1 , читается фактическое состояние портав в регистр записывается

портв4=1

при работе трисом имеете на выходе4 лог1

в ДШ на датчик есть рекомендованный код для ПИК

ds18b20-rus(3).pdf

Share this post


Link to post
Share on other sites

Ясно, значит в пиках это такая особенность. Блин пол дня потратил. А другие биты 0, 1 почему не защёлкиваются их ведь к плюсу подлючил. А как скопировать содержимое регистра 23h в 24h, что то команд подходящих не нашол ?

А всё, разобрался

Share this post


Link to post
Share on other sites

Доброго времени суток!

Помогите, вероятно что то с настройками, при отладке в MPLABX, XC8, в Proteuse PIC16F886 не хочет воспринимать данные EEPROM, определенные в программе через процедуру __EEPROM_DATA(). При этом, из среды MPLABX, в окошке EEPROM, данные изменены, в Proteuse, данные  EEPROM, все равны FF. Если запустить Proteus отдельно, то данные EEPROM отображаются корректно, т.е. записанные через __EEPROM_DATA(). Для моделирования использую COF  файл.  Это доставляет ряд неудобств, хотелось бы непосредственно из MPLABX полноценно отлаживать программу. 

За ранее спасибо.

Share this post


Link to post
Share on other sites

Протез - не железо. По этому, почему он так себя ведёт - одному только Богу разработчику известно.
Отлаживайте в железе и проблем не будет.

Share this post


Link to post
Share on other sites
1 час назад, Bugrim сказал:

Это доставляет ряд неудобств

каких? после компиляции в мрлабе нажать запуск симуляции в протезе????

Share this post


Link to post
Share on other sites

На глаз код выглядит по другому,  точки останова (которые криво работают, по крайней мере на моей версии протеуса),  просмотр/задание значений переменных и т.д. в MPLABе мне более по душе. Можно и 

15 минут назад, IMXO сказал:

нажать запуск симуляции в протезе????

Поэтому всего лишь "неудобств", а не проблем.

 

Share this post


Link to post
Share on other sites

ну не знаю, попытки подружить протез с мплабом оставил когда мплаб был 8.34, протез досихпор 7.10 , о кривизне точек останова в протезе впервые слышу... это вообще в чем выражается? КМК в протезе как раз точки останова дают более наглядную информацию особенно при настройке отладке системных таймеров

Share this post


Link to post
Share on other sites

точку останова убрал, а программа все равно там останавливается, приходится регулярно Resetом, который в  Debug пользоваться. Протеус 8.1.

Ну ничего прорвемся.

Edited by Bugrim
опечатка

Share this post


Link to post
Share on other sites

а так это вы ее не убрали...

у точки останова "три состояния" , включена(отметка:красный круг), выключена(отметка:красная окружность), удалена (метка отсудствует)

единственно есть проблемы когда метка стояла на команде которую удалили  и/или заменили другими командами, метка уже не показывается , но работает, тут как обычно ПКМ и снимаем все точки останова, ставим по новой

Share this post


Link to post
Share on other sites
55 минут назад, IMXO сказал:

когда метка стояла на команде которую удалили 

именно это "неудобство".

Share this post


Link to post
Share on other sites

Кто сталкивался с проблемой, когда при внутрисхемной отладки не работают порты. MPLAB-X3.65+PicKit3клон+pic18f4550 не работает при отладке RE0-2 хоть тресни, при пошаговом выполнении LATE не меняет регистр порта. когда просто шьешь - работает. ЧЯДНТ??? И как с этим жить...

#pragma config FOSC = XTPLL_XT  //HSPLL_HS
#pragma config PLLDIV = 1
#pragma config CPUDIV = OSC4_PLL6    //24Mgz-OSC3_PLL4 | 16Mhz-OSC4_PLL6
#pragma config USBDIV = 2
#pragma config WDT = OFF //,WDTPS=128
#pragma config PWRT = ON
#pragma config LVP = OFF
#pragma config VREGEN   = ON        //USB Voltage Regulator
#pragma config STVREN   = ON
                        
#pragma config DEBUG = ON //OFF
#pragma config PBADEN = OFF
#pragma config ICPRT = ON //OFF     //Dedicated In-Circuit Debug/Programming Port (ICPORT) Enable bit
#pragma config XINST = OFF
#pragma config CCP2MX = OFF

    ADCON1 = 0x0A;  //откл АЦП от E
    CMCON = 0x07;   //откл компаратора от E
    LATE  = 0b10000000;   
    PORTE = 0b10000000;
    TRISE = 0b11111000;

Share this post


Link to post
Share on other sites

Здравствуйте.

Есть ли в MPLABX,  XC8  встроенные библиотеки для преобразования чисел.  PIC16LF1823.  Я собираюсь на трёхзначный семисегментный экранчик выводить целые значения от 0 до 512.   Стоит ли для этого велосипед творить или есть готовые решения?

Edited by GDK

Share this post


Link to post
Share on other sites

Преобразование каких чисел ? Что и во что нужно преобразовать ?

Share this post


Link to post
Share on other sites

Напр. значение в переменной val - 000 0001  0011 1011 (315 decimal).

  Из неё нужно получить в переменных :

val1 - 0000 0011 (3);

val2 -  0000 0001 (1); 

val3 - 0000 0101(5).

@IMXO , спасибо. Я это находил вчера, но почему то пощёлкал, что может с 16 битными числами работать... , а с восьмибитными?

Edited by GDK

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Reptile
      Доброго времени суток. Пытаюсь восстановить работоспособность колонок Top Device TDE 261/2.1. Колонки не раз ремонтировалась по части УНЧ, при очередном ремонте по ошибке (одинаковые разъемы) с трансформатора было подано переменное питающее напряжение на входы (разъем AUX/MP3) аудиопроцессора PT2313L  (3,10,14 ноги - AGND, R_IN2 L_IN2). В результате чего выгорел сам аудиопроцессор PT2313L. PT2313L был заменен. Но колонка по прежнему не запускается. Как я понял, не запускается сам PT2313L, на его аудиовыходах (ноги 24, 25) сигнала нет. Передняя панель работает: индикация, кнопки, енкодер. Имеется подозрение, что вместе с процессором выгорели линии DATA и/или CLK на MCU, так как MCU и PT2313L соединены по этим линиям напрямую друг с другом. В МК и всей этой цифровой штуке не очень шарю, не знаю, как грамотно проверить работоспособность этой цифровой части, поэтому прошу помощи - Возможно ли какими-либо способами восстановить колонку или уже всё... 
      Из приборов, к сожалению, только мультиметр, осциллограф отсутствует.
      Ниже немного измерений.
      Напряжения на линиях: STD-BY-ждущий режим (в скобках рабочий режим):
      DATA - 2.31В (1.9В).
      CLK - 0.125В (0.135В).
      Сопротивление между выводами:
      CLK_MCU-DATA_MCU - 47 Ом. 
      CLK_MCU/DATA_MCU-GND - около 0.22 Ом и там и там. Звонится в обе стороны.
      Питание MCU 5В, (4.6В STD-BY-ждущий режим, 4.0В рабочий режим и со временем также почему-то может падать до 3.6В)
      MCU - не известен, нет маркировки. 18 Выводов, DIP.
      Ноги MCU, которые удалось опознать:
      1 - DATA
      18 - CLK
      3 - GND (?)
      5 - GND (?)
      ? - они соединены вместе
      14 - VCC
      17 - not used (n/a)
      15, 16 - OSC
      ET6202 - управление индикатором, Control LED drive circuit
      Фото плат (под сполером) и даташиты прилагаются.
      Схемы данных колонок не имеется. Все что удалось найти это схема чуть более старшей модели TDE280/2.1, с данными колонками она мало что общего имеет, лишь общий принцип, узлы довольно сильно отличаются, но прикреплю на всякий, для общей информации.
      PT2313L
      ET6202
      TDE280
       
    • By Илья Говжеев
      Поделитесь опытом , кто уже пробывал из arduino сделать программатор pic? 

    • By Терентенко Андрей
      Добрый день! Имею следующую ситуацию : на базе  PIC16f676  создал приблуду для "управления нештатной магнитолой с руля", а именно  сигнал с руля это 4,8в и в зависимости от нажатой кнопки падает дискретной до 0.8в мк с помощью АЦП отслеживает  на магнитолу паралельно кнопкам кинул оптрони которыми управляет МК. Питание от LM с фильтрующими конденсаторами. При тестових прогонах всё работало как надо (программно реализовано защиту от дребезга аж на 0.1 сек в поисках решений) и в машине  и от штатного БП . Но заметил закономерность сейчас на улице - 2 и при первом запуске минут 5, МК "шумит" несоотвецтвует нажатия на руле кнопке  на магнитоле ! Сигнал с руля смотрел стабильный без дребезга , притом когда тестил вынес магнитолу подключил всё работало гуд но пока устанавливал закручивал она остыла и начинались эти тацы . Кто что подскажет? МК или ЛМ могут так реагировать на температуру ? Прошу прощения у модераторов за повторение теми (может в этом разделе будет актуальней)
    • By Splav
      Речь пойдет о таймере цикличного включения вентиляции гаража.
      Стояла задача обеспечить принудительную вентиляцию гаража.
      Оставлять включенным вентилятор круглые сутки - неоправданно.
      Включать его периодически вручную... Неудобно и лишено смысла.
      Поэтому было решено включать его на определенное время через разные интервалы времени, в зависимости от субъективного восприятия наличия сырости в гараже.
      Вменяемых вариантов в продаже я не нашел.
      Можно, конечно, приобрести на Али программируемый суточный таймер или что-то подобное...
      Да, можно, но мне кажется, что собрать из подручных деталей тоже можно, ну и мозги потренировать.
      За основу был выбран PIC12F675, потому что он у меня был.
      По уму здесь должен стоять PIC12F629, он дешевле, в нем нет АЦП, который в конструкции не используется и отключен.
      Итак.
      Время работы выбрано фиксированным и неизменным - 1 час.
      Время простоя - в зависимости от режима.
      1 час - 2 часа - 3 часа.
      (Изначально я планировал другие задержки: 2-3-5 часов. На практике в моих гаражных условиях эти интервалы оказались слишком большими)
      Индикация осуществляется всего 1 светодиодом.
      Переключение режимов и управление - всего 1 кнопкой.
      Схема:

      Коротко о работе:
      Кнопка.
      Опрос кнопки 10 раз в секунду. Антидребезг и подавление помех 0,3с - 3 опроса подряд кнопка нажата.
      Короткое нажатие на кнопку(от 0,3 до 2 с) - переключение режимов по кругу. 1 - 2 - 3 - OFF - 1 - 2 -  ....
      Длинное нажатие на кнопку (дольше 2 с) - смена состояния реле.
      Если оно было включено - выключается.
      Если было выключено - включается. Интервалы работы реле при этом соответствуют режиму.
      В режиме OFF длинное нажатие ничего не меняет.
      Переключение режима или смена состояния реле происходят при отпускании кнопки.
      Светодиод.
      Индикация режимов светодиодом:
      1 - 1 раз в 2 секунды загорается, если реле не включено. Проблеск света.
            1 раз в 2 секунды гаснет, если реле включено. Проблеск тени.
      2 - 1 раз в секунду загорается, если реле не включено.
            1 раз в секунду гаснет, если реле включено.
      3 - 2 раза в секунду загорается, если реле не включено.
            2 раза в секунду гаснет, если реле включено.
      OFF - загорается раз в 5 секунд. Контроль того, что МК не завис.
      Режимы работы.
      Время работы циклического таймера по режимам:
      1 - 1 час работы / 3 часов отдых. 6/24
      2 - 1 час работы / 2 часа отдых.  8/24
      3 - 1 час работы / 1 часа отдых.  12/24
      Работа.
      При отключении питания, пока не разрядились конденсаторы фильтра, МК отключает все выходы, сохраняет текущие данные в память, ждет 15 сек в таком состоянии и возобновляет работу, если отключение было кратковременным и емкостей фильтра питания хватило.
      Если отключение питания было длительным то, при возобновлении питания, загружает сохраненные данные из памяти и продолжает работу.
      При первом включении, после программирования МК, устройство работает в 1-ом режиме.
      Программа писалась в MPLab X IDE v4.05.
      Прошивка:fan_cycle_timer.hex

      Плата для устройства не разрабатывалась. Все было собрано на макетке.
      В блоке питания использован стандартный трансформатор для монтажа на плату ТПК 2х9V с 2-мя вторичными обмотками на 9В.
      Использовал только одну из них. Вторая - не подключена, в "воздухе"
      Реле - HLS-14F1D-DC12V-C. С обмотка на 12В, и одной группой переключающих контактов на 10А/240VAC.
      Устройство собрано в корпусе щитка для автоматов на 8 модулей. Производитель VIKO.
      Закреплена плата на щиток через резьбовые дистанционные втулки с резьбой М3.
      В качестве вентилятора - вытяжной вентилятор диаметром 125мм ВЕНТС 125С
      Устройство на данный момент отработало в гараже все лето, температура воздуха в тени доходила до 32 градусов.
      Перегревов элементов и зависаний контроллера пока не было.
       
      Несколько фото для общего представления о конструкции.

×
×
  • Create New...