Доброго времени суток! Всю жизнь работал исключительно с AVR, но тут возникла необходимость использовать в девайсе супермаленький и низкопотребляющий PIC10F200, и тут возникли некоторые сложности, которые не могу решить без Вашей помощи... Сначала, при входе в sleep режим, мне никак не удавалось вывести его из него... Потом на одном из форумов я прочитал что этот контроллер при выходе из sleep переходит к выполнению команды по нулевому адресу, вместо того чтобы выполнять команду, следующую на командой sleep. Учитывая что команда sleep была одной из первых в моем коде, то не удивительно что устройство не работало (фактически программа инициализировала порты, уходила в sleep режим и так по замкнутому кругу). Переписал программу таким образом, чтобы уход в sleep был после выполнения нужных мне действий...но тут другой баг вылез... Пишу я на Си в HI-TECH PICC Программный код:
На вход GP3 микроконтроллера постоянно поступают импульсы. В ответ на первые два из них он должен мигнуть светодиодом подвешенным на ногу GP1, а на следующие два импульса - ничего не делать. И так по замкнутому кругу... Но, вместо этого он мигает диодом на каждый приходящий импульс без пропуска! Возникает впечатление, что при сбросе счетчика команд после выхода из sleep, значение переменной imp_count также сбрасывается в ноль. Может ли такое быть? или проблема в чем то другом? В общем если кто то знает в чем проблема, прошу поделиться...
Биты конфигурации выставляю так: MCLR отключен (GP3 работает как вход) WDT отключен Работа от внутреннего генератора (4Мгц)
Отправлено: 15.03.12 21:55. Заголовок: Думаю, что Вам лучше..
Думаю, что Вам лучше обратиться на microchip.su, там много специалистов. Не сильно правда воспитанных, потопчут, может и помогут. Здесь начинающие в основном. А тут такой редкий пик.
Отправлено: 16.03.12 17:51. Заголовок: MAZ пишет : А тут т..
MAZ пишет :
цитата:
А тут такой редкий пик.
так чисто для интереса, а что по такому простому функционалу в пиках есть разница, редкий не редкий? A-l-e-x-u-s я еще никогда не работал со слип режимом, но в обычном режиме постоянного опроса, и не на хайтек си могу чего набросать...
Я из тех, кого MAZ называет начинающими. Сразу скажу, что работал с МК из этой серии с 12F629. Могу попробовать пропустить твою задачу через симуляторы - так работаю. Там такой компонент 10F200 есть только в перечне. Полноценно пробовать могу только с 12 f629, они похожи, сравни внутренности. Совет из своего малого опыта работы с 12F серией на Си: используй короткие форматы переменных (лучше BYTE); если можешь, избавься от delay функции ( чем её заменить, подумай - я просто счетчиками обошелся) - жрет память и ведет себя странно с этой серией. Кстати, после компиляции - нет ли переполнения памяти? Если примешь мою помощь (только р12), то придется для меня уточнить задачу - трудно "въезжаю"в чужое. Какая частота импульсов? Это устройство - фотобарьер подсчета клиентов? Когда должен "проснуться" МК? По WD, по сбросу или прерыванию? По логике поставленной задачи - частота входных импульсов не высокая, если можно увидеть вспышку светодиода после четвертого импульса. И будить, наверное нужно входными импульсами же? Или я неправ? С уважением.
Пост N: 325
Зарегистрирован: 25.09.09
Откуда: г.Саратов
Рейтинг:
1
Отправлено: 18.03.12 08:57. Заголовок: Для p12f629 могу поя..
Для p12f629 могу пояснить: порядок пробуждения зависит от состояния бита GIF. Если он сброшен (в нуле), то после пробуждения выполняется команда, следующая за записью Sleep и далее по программе. Если указанный бит установлен в единицу, то выполняется команда из буфера, затем переходим к вектору 04h и вполняем, что там есть. Написал программку для него по твоему алгоритму (как его понял),на Си - но без Делей. Правда Sleep не ставил, у тебя - другое. Этот ПИК позволяет, твой не знаю. У p10f200 вектора прерывания нет, не должно быть и таких вопросов. Там есть только вектор сброса (Reset Vector). И только два рг. пользовательских - не разгонишься . После пробуждения попадаем туда - на этот вектор. Посмотри по ДАТЕ, состояние регистров по сбросу. От этого и танцуй, мне кажется. В этом мой ответ начинающего. В никуда, думается.
Все зависит от импульса. У Вас действия начинаются с нарастающим фронтом импульса и весь цикл while(1) может проскочить несколько раз ,если импульс будет длинным. Я бы сделал так :
Все даты в формате GMT
3 час. Хитов сегодня: 8
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет