Термометр на PIC и роль конденсаторов в обвязке кварца?

Обсуждаются темы не относящиеся к журналу "РАДИО"

Re: Термометр на PIC и роль конденсаторов в обвязке кварца?

Сообщение vovavova » 19 фев 2018, 14:54

Здравствуйте!
Как и предполагалось, ошибка была у меня. Не знаю, что я сделал не так в прошлый раз, но почему-то глюканул IC-Prog. На выходных еще раз перешил МК той же самой прошивкой, что и была, и уже на этот раз получил сообщение "Успешно проверено!". Аллилуйя! :P Все выходные тестил - ВСЕ РАБОТАЕТ! И минус появился, и смещение минуса тоже есть. Отлично все работает! Sergey7 Вам 100 000 благодарностей и низкий поклон! Чтобы я без Вас делал? :roll:
Изображение
Плюсовые температуры...
Изображение
Sergey7 писал(а):Все-таки, vovavova, удалось мне Вас немного заинтересовать разработкой программ, а это главное!

Совершенно верно! Я стал немного глубже изучать код. Не все, конечно, понимаю, но... тем не менее... Спасибо Вам за разъяснения!
Хотел бы Вас еще попросить провести маленький ЛИКБЕЗ по коду. Вот, например, я понял почему на индикаторе время от времени появляются черточки - как бы сброс. Это связано, оказывается, с чтением датчика и еще какими-то операциями проверки контрольной суммы, вроде как. Если возникает ошибка, то выполняется перезапуск программы в начало на метку Start...
Код: Выделить всё
btfss      Status,2   ; Проверка ответа датчика
goto      Start      ; Ошибка - сброс   
...
...
...
decfsz   ReadNUM,1   ; Счетчик ошибок чтения
goto      ReadNEW      ; Ошибка чтения, следующая попытка
goto      Start      ; Попытки исчерпаны, сброс

И так далее.
Один момент не совсем понятен с регистром W: часто встречал такую комбинацию...
Код: Выделить всё
movf      TempPortA,0   ; Временный регистр
movwf   PortA
...
...
...
movf      TempLOW,0
movwf   TempLOW

То есть, зачем-то сначала Вы заносите значение переменной в регистр W, и тут же обратно - из W в переменную. Зачем???
И еще... у Вас в конце листинга кода стоит, почему-то, аж целых три раза END...
Код: Выделить всё
end
end
end

Это так нужно??? Я убрал два и проверил в Proteus'e - ничего не изменилось.

Ну, а это для Вас лично подарок от меня... Я изменил кое-что в коде и теперь на индикатор вместо черточек на старте выводится аббревиатура "СПС." Что значит - СПАСИБО!!!
Изображение
vovavova
 
Сообщения: 253
Зарегистрирован: 20 сен 2012, 22:15

Re: Термометр на PIC и роль конденсаторов в обвязке кварца?

Сообщение Sergey7 » 19 фев 2018, 18:57

Спасибо, vovavova, за высокую оценку, был рад Вам помочь!
Действительно, перезапуск программы, если нет ошибок, должен происходить только если при обращении к датчику (ПП TestDS) он не ответит или если при чтении ошибка CRC будет происходить 8 раз подряд, количество попыток чтения указано выше в программе, в строке 233. При желании можно увеличить кол-во попыток или при этом выводить какой-нибудь код ошибки, а потом перезапускать.

vovavova писал(а):Один момент не совсем понятен с регистром W: часто встречал такую комбинацию...
movf      TempPortA,0   ; Временный регистр
movwf   PortA

В программе обработки прерывания от таймера 0, для управления индикатором, я использовал промежуточный регистр TempPortA в связи с тем, что для управления включением разрядов использовались команды установки отдельных бит порта А BCF и BSF. Дело в том, что эти операции МК отрабатывает по принципу чтение-модификация-запись и если их сразу применить к PortA, то произойдет ошибка, об этом есть предупреждение в инструкции на МК. Можно было применить и другое решение, но тогда мне это показалось наиболее простым и компактным.
vovavova писал(а):Один момент не совсем понятен с регистром W: часто встречал такую комбинацию...
movf      TempLOW,0
movwf   TempLOW
То есть, зачем-то сначала Вы заносите значение переменной в регистр W, и тут же обратно - из W в переменную. Зачем???

В данном случае Вы правы, эти строки лишние. При отладке в этом регистре появлялось неожиданное содержимое, которого нет в ПП TABLE, обращение к которой происходит дальше, поэтому в этом месте программы я использовал регистр TempLOW_2 для того, чтобы в Протеусе наблюдать в пошаговом режиме за состоянием этих регистров в ОЗУ, в одном получалось значение до вызова ПП, в другом после, так и понял ошибку. Можно обе эти строки удалить, они ничего не дают.
Насчет END когда-то в книжке было написано, мол не вредно и три раза написать, так что не жалко, это ведь команда компилятору остановиться, а не часть программы.
Моя программа не очень хороша для изучения,поскольку я тогда не использовал стандартные описания (имена) бит, заменив их просто номерами, да и не использовал удобные команды замены для компилятора #define, команды if, else, макросы...

Успехов Вам в освоении нового мира МК!
Sergey7
 
Сообщения: 236
Зарегистрирован: 24 фев 2010, 20:32

Re: Термометр на PIC и роль конденсаторов в обвязке кварца?

Сообщение vovavova » 20 фев 2018, 13:19

Спасибо Вам и всем участникам обсуждения! Вопрос исчерпан полностью, и если нет никаких вопросов, то эту тему можно считать закрытой. :)
vovavova
 
Сообщения: 253
Зарегистрирован: 20 сен 2012, 22:15

Пред.

Вернуться в Всё остальное

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

cron