Здравствуйте!
Написал прошивку под ДХО для перезаливки в заводском изделии на PIC 12F1501.
Моя статья о прошивке с подробными объяснениями по коду:
https://www.drive2.ru/l/555692353118011533/.
Моя статья статья по схемотехнике изделия, с раскладкой и пояснениями
https://www.drive2.ru/b/551733561502207078/?from=blog.
Проект в Proteus и MPLAB доступен по ссылке
https://yadi.sk/d/10rDeTqMPHodqgПри симуляции в Proteus, какого то ляда,
при каждом новом включении PWM, удваивается частота NCO генератора(встроен в PIC контроллер). При этом настройки регистра отвечающие за частоту
NCO1CLK остаются при симуляции не изменным.
NCOx Output Pulse Width Select bits = 000 = 1 NCOx clock periods; NCOx Clock Source Select bits=01 = FOSC;И что самое интересное, физически регистры PWM и NCO, никак между собой не связаны. Разве что тактируются от FOSC.
Частота PWM при повторном включении не меняется. А частота NCO вслед за ним, удваивается, хотя ее никто не трогает.
Почему???
Его работа нужна для вольтодобавки, под полевик.
В железе никакого удвоения нет, частота стабильна. Схема заводская. Прошивка в первом релизе, бэтта версия на отладке, под собственные нужды. В машине работает нормально, по ходу устраняю мелкие недочеты. Пока обкатываю. Код сделаю красивее после отладки, пока там есть лишние артефакты.
Добавлено after 3 hours 14 minutes 44 seconds:На всякий случай ссылка на .coff+hex+lst file.
https://yadi.sk/d/GCPfW7VfNFwD1QПосле запуска проекта, сразу пойдет генерация NCO= 4кГц. Надо подождать 3 секунды, пойдет ШИМ, и тут же частота NCO удвоиться.
Проект тормозит, запускается не в реальном времени. Если лень ждать 3 сек ( в реалии наверное 10), надо в файле mcc.h в строчке
#define TIME_DRL_DELAY_START 3 //sec => delay time start in seconds Изменить 3 на 1.
Кнопки трогать не надо, они в железе связаны друг с другом, и дальний не включиться без отжатых габаритов. Для перезапуска ШИМ, нужно щелкать переключателем SW2 (Engine-start/stop) . Рассчитан на работу с задержкой.
И еще строчку
#define _XTAL_FREQ 500000UL заменить на
#define _XTAL_FREQ 16000000ULПо ошибке старую залил, но на суть вопроса, это ни как не влияет.