Юрий123 Опубликовано 7 января, 2018 Поделиться Опубликовано 7 января, 2018 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 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 7 января, 2018 Поделиться Опубликовано 7 января, 2018 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 прога че делает???? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
Юрий123 Опубликовано 7 января, 2018 Поделиться Опубликовано 7 января, 2018 Простите, если не совсем грамотно, неделю назад начал изучать архитектуру PIC . Если регистр не равен 28 то прога выполняется заново по переходу goto loop1, но светодиод не поджигается. если нужно могу сбросить проект в Протеусе 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
IMXO Опубликовано 7 января, 2018 Поделиться Опубликовано 7 января, 2018 читайте как оформлять код http://pic24.ru/doku.php/osa/articles/mpasm_formatting повторяю у вас нет проверки на равенство 28! , к тому же убили начальное значение в регистре movfw 0x23 xorlw 0x28 btfss status,z goto label_1 неравно goto labtl_2 равно исправляйте 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Юрий123 Опубликовано 7 января, 2018 Поделиться Опубликовано 7 января, 2018 Код пока сырой. Ваше предложение грамотней конечно.Позже я исправлю.Но на данный момент удалил проверку на число 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 ..................... .......................... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 7 января, 2018 Поделиться Опубликовано 7 января, 2018 этой командой вы ловите ЧМЗ 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Юрий123 Опубликовано 7 января, 2018 Поделиться Опубликовано 7 января, 2018 Вообщем получается так что установка или сброс любого бита регистра защёлки PORTA командой bcf или bsf при условии что выводы настроены на вход, информация одновременно защёлкивается со входов PORTA.2; PORTA.4; PORTA.5 Почему так происходит и почему именно эти биты а не все например мне неизвестно. Бред. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 7 января, 2018 Поделиться Опубликовано 7 января, 2018 18 минут назад, Юрий123 сказал: Почему так происходит читаем раздел 9.10 руководства пользователя у вас по дефолту портв4=0 , коммутацию вы осуществляете изменением направления порта трисв4 =0/1 портв4 у вас подтянут к +пит , когда вы устанавливаете портв5=1 , читается фактическое состояние портав в регистр записывается портв4=1 при работе трисом имеете на выходе4 лог1 в ДШ на датчик есть рекомендованный код для ПИК ds18b20-rus(3).pdf 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Юрий123 Опубликовано 8 января, 2018 Поделиться Опубликовано 8 января, 2018 Ясно, значит в пиках это такая особенность. Блин пол дня потратил. А другие биты 0, 1 почему не защёлкиваются их ведь к плюсу подлючил. А как скопировать содержимое регистра 23h в 24h, что то команд подходящих не нашол ? А всё, разобрался 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Bugrim Опубликовано 9 января, 2018 Поделиться Опубликовано 9 января, 2018 Доброго времени суток! Помогите, вероятно что то с настройками, при отладке в MPLABX, XC8, в Proteuse PIC16F886 не хочет воспринимать данные EEPROM, определенные в программе через процедуру __EEPROM_DATA(). При этом, из среды MPLABX, в окошке EEPROM, данные изменены, в Proteuse, данные EEPROM, все равны FF. Если запустить Proteus отдельно, то данные EEPROM отображаются корректно, т.е. записанные через __EEPROM_DATA(). Для моделирования использую COF файл. Это доставляет ряд неудобств, хотелось бы непосредственно из MPLABX полноценно отлаживать программу. За ранее спасибо. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 9 января, 2018 Поделиться Опубликовано 9 января, 2018 Протез - не железо. По этому, почему он так себя ведёт - одному только Богу разработчику известно. Отлаживайте в железе и проблем не будет. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Bugrim Опубликовано 9 января, 2018 Поделиться Опубликовано 9 января, 2018 Для железа программа СИЛЬНО сырая. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 9 января, 2018 Поделиться Опубликовано 9 января, 2018 1 час назад, Bugrim сказал: Это доставляет ряд неудобств каких? после компиляции в мрлабе нажать запуск симуляции в протезе???? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Bugrim Опубликовано 9 января, 2018 Поделиться Опубликовано 9 января, 2018 На глаз код выглядит по другому, точки останова (которые криво работают, по крайней мере на моей версии протеуса), просмотр/задание значений переменных и т.д. в MPLABе мне более по душе. Можно и 15 минут назад, IMXO сказал: нажать запуск симуляции в протезе???? Поэтому всего лишь "неудобств", а не проблем. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 9 января, 2018 Поделиться Опубликовано 9 января, 2018 ну не знаю, попытки подружить протез с мплабом оставил когда мплаб был 8.34, протез досихпор 7.10 , о кривизне точек останова в протезе впервые слышу... это вообще в чем выражается? КМК в протезе как раз точки останова дают более наглядную информацию особенно при настройке отладке системных таймеров 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Bugrim Опубликовано 9 января, 2018 Поделиться Опубликовано 9 января, 2018 (изменено) точку останова убрал, а программа все равно там останавливается, приходится регулярно Resetом, который в Debug пользоваться. Протеус 8.1. Ну ничего прорвемся. Изменено 9 января, 2018 пользователем Bugrim опечатка 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 9 января, 2018 Поделиться Опубликовано 9 января, 2018 а так это вы ее не убрали... у точки останова "три состояния" , включена(отметка:красный круг), выключена(отметка:красная окружность), удалена (метка отсудствует) единственно есть проблемы когда метка стояла на команде которую удалили и/или заменили другими командами, метка уже не показывается , но работает, тут как обычно ПКМ и снимаем все точки останова, ставим по новой 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Bugrim Опубликовано 9 января, 2018 Поделиться Опубликовано 9 января, 2018 55 минут назад, IMXO сказал: когда метка стояла на команде которую удалили именно это "неудобство". 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Vovka Опубликовано 10 января, 2018 Поделиться Опубликовано 10 января, 2018 А я отлаживаю в Visual C++ 0 На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие Ссылка на комментарий Поделиться на другие сайты Поделиться
isor port Опубликовано 13 февраля, 2018 Поделиться Опубликовано 13 февраля, 2018 Кто сталкивался с проблемой, когда при внутрисхемной отладки не работают порты. 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; 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 14 февраля, 2018 Поделиться Опубликовано 14 февраля, 2018 Перенёс все посты, связанные с FreeRTOS в тему FreeRTOS 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
GDK Опубликовано 2 марта, 2018 Поделиться Опубликовано 2 марта, 2018 (изменено) Здравствуйте. Есть ли в MPLABX, XC8 встроенные библиотеки для преобразования чисел. PIC16LF1823. Я собираюсь на трёхзначный семисегментный экранчик выводить целые значения от 0 до 512. Стоит ли для этого велосипед творить или есть готовые решения? Изменено 2 марта, 2018 пользователем GDK 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 2 марта, 2018 Поделиться Опубликовано 2 марта, 2018 Преобразование каких чисел ? Что и во что нужно преобразовать ? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 2 марта, 2018 Поделиться Опубликовано 2 марта, 2018 3 часа назад, GDK сказал: Стоит ли для этого велосипед творить или есть готовые решения? http://we.easyelectronics.ru/Soft/preobrazuem-v-stroku-chast-1-celye-chisla.html 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
GDK Опубликовано 3 марта, 2018 Поделиться Опубликовано 3 марта, 2018 (изменено) Напр. значение в переменной val - 000 0001 0011 1011 (315 decimal). Из неё нужно получить в переменных : val1 - 0000 0011 (3); val2 - 0000 0001 (1); val3 - 0000 0101(5). @IMXO , спасибо. Я это находил вчера, но почему то пощёлкал, что может с 16 битными числами работать... , а с восьмибитными? Изменено 3 марта, 2018 пользователем GDK 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.