Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: неадекватная работа PIC16F886....
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
rx3apf
Столкнулся с загадочным поведением PIC16F886 - устройство переделывалось с заменой камня в SOIC на SSOP, и как-то уж очень долго стартовало. Грешил на обвязку часового кварца, но картина оказалась еще более загадочной. Итак, простейший код:
CODE
__CONFIG _CONFIG1, _INTOSC & _WDT_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF

__CONFIG _CONFIG2, _WRT_OFF & _BOR21V


org 0

banksel 0
clrf INTCON

banksel TRISB
bcf TRISB,7

banksel 0
clrf PORTB

goto $


На прототипе, где стоял камень в SOIC, работает как и должно (а чего бы и не работать ?) - сразу бит порта в 0 (у него там была внешняя притяжка). На новом устройстве, где в SSOP - молчит секунд десять (на всякий случай - на сбросе уже давно гарантированно "1"), потом переходит в "0", затем несколько коротких импульсов в "1", и лишь затем встает в цикл. Ладно, вдруг (чем черт не шутит) - перепаиваю камень. Ура - работает. Но радость была недолгой, пока плата была еще горячей после перепайки, работало, остыла до комнатной температуры - картина стала прежней, десять секунд до старта, и загадочные "иголки". Я в полном недоумении... Да, советы "смени флюс" - не принимаются.
Smen
Так, а где настройки-то?
rx3apf
Где-где... В CODEBOXе. Там одна настойка, седьмого бита порта B. На нем и смотрю.
Smen
Цитата(rx3apf @ Dec 16 2013, 11:01) *
В CODEBOXе.
В кодебоксе я вижу только слова конфигурации настраиваются.
А я говорю про SFR.
Не поленитесь их принудительно настроить, а не оставлять "по дефолту".
rx3apf
О каких регистрах идет речь ? Меня в данном случае интересует только и исключительно настройка одной линии одного порта (PORTB). TRISB настроил, PORTB настроил (Вы что, не пролистали CODEBOX ?). Что еще нужно ? И почему то, что без проблем работает на процессоре в SOIC, не работает в SSOP ? Поскольку я уже не первый раз сталкиваюсь с несоответствием поведения описанному в даташите, то явному браку уже не удивляюсь...
ViKo
Помнится, у PIC-ов с буквой A на конце и без буквы была разная начинка, ревизия, компараторов добавили или нечто подобное. Еще технологические нормы менялись, отчего он становился более быстрым, и легче воспринимал помехи. :-) Поэтому стоит пройтись по настройкам всех его периферийных устройств, чтобы убедиться, что ничто не мешает работе портов. Но, мне кажется, важнее проверить качество питания. Может, там помехи? И тактовую частоту вывести наружу, если можно.
A. Fig Lee
Цитата(rx3apf @ Dec 16 2013, 02:01) *
Где-где... В CODEBOXе. Там одна настойка, седьмого бита порта B. На нем и смотрю.

Я чето не понял, а что программа делать должна?
Переход в конце по current счетчику?
Скакать по кругу до начала?
rx3apf
Программа должна настроить порт на вывод и встать в пустой цикл. Никаких конфликтов периферии в такой конфигурации нет, камни однотипные, разница в корпусировке (ну и в партии кристаллов, разумеется). Питание - батарейное (3.6), пробовал внешнее (PICKIT2).

На всякий случай запаял и MCLR прямо на VCC, контролирую тактовую - появляется секунд через десять после подачи питания.

Следующий этап будет, когда получу камни из другой партии, но это, увы (а продукцию давно надо было отгружать !), будет не слишком быстро. А пока я уверен, что моя коллекция "трофеев" (а там есть и Microchip, и AD, и TI, и FTDI) пополнилась еще одним образчиком sad.gif
dinam
Если уже нет никаких идей, а чудес к сожалению не бывает, то я бы попробовал следующее.
1. Ткнулся бы осциллографом в питание и посмотрел на предмет всяких загадочных пульсаций.
2. Проверил тестером подтягивающие резисторы если они есть.
3. Проверил цоколевку корпусов, желательно из разных мест(рисунков, таблиц). Вдруг SOIC и SSOP разводка разная.
4. Я так понимаю плату переразводили, значит плату ещё раз проверьте.
5. Проверьте уровни 0 и 1 на всех входах/выходах они должны иметь четкие уровни.
6. Попробовать вывести сигнал на другие порты.
A. Fig Lee
RB7 задействован в программаторе, там резисторы то стоят? Может изза программатора не получается, а ДИП отдельно программировался?
Smen
Цитата(rx3apf @ Dec 16 2013, 14:53) *
О каких регистрах идет речь ?
Речь о всех регистрах SFR.
В приведённом примере (не знаю, как в реальной программе) они все оставлены "в дефолте".
Я же Вам предлагаю настроить их явно-принудительно.
После того, как пару раз неработающие камни ожили от такой операции, я всегда так поступаю.
Помимо этого, не всегда настройки SFR "по дефолту" соответствуют требуемым (это уже надо конкретно с каждым чипом разбираться).
Ну, и разумеется, коли переразводили плату, как говорил дедушка Ленин: "Контакты, контакты, и ещё раз, контакты".
rx3apf
Еще раз - _какие_ регистры ? Все используемые мной регистры (PORTB, TRISB) настроены, это видно в примере. Да хоть бы и не настроены - не работает тактовый генератор (кстати, с EXTRC картина та же, если что). И программатор отключался - это тоже ничего не меняет.

Цитата(dinam @ Dec 17 2013, 06:34) *
1. Ткнулся бы осциллографом в питание и посмотрел на предмет всяких загадочных пульсаций.

Нет.
Цитата
2. Проверил тестером подтягивающие резисторы если они есть.

Есть. Поэтому до настройки портов я вижу (когда смотрю скопом) питание, а когда логическим пробником (низкоимпедансным) - вижу Z-состояние.
Цитата
3. Проверил цоколевку корпусов, желательно из разных мест(рисунков, таблиц). Вдруг SOIC и SSOP разводка разная.

Ага. А через десять секунд микросхема сама меняет себе разводку и запускается ?
Цитата
4. Я так понимаю плату переразводили, значит плату ещё раз проверьте.

"Земля" есть, "питание" есть, "сброс" на месте. Все. Для выполнения того кода, что я привел, больше ничего не надо.
Цитата
5. Проверьте уровни 0 и 1 на всех входах/выходах они должны иметь четкие уровни.
6. Попробовать вывести сигнал на другие порты.

Еще раз - тактовый генератор не запускается, код не выполняется. Да, на других портах я пробовал еще раньше, когда еще не понял, что проблемы именно в запуске.
ViKo
Может, питание включается слишком резко? Да еще с дребезгом?
dinam
Ещё подкину идей.
Тогда может дело в кварце? Номиналы конденсаторов (резисторов) в обвязке кварца соответствуют требованиям кварца? Неудачная разводка или дефект конкретной платы. Попробуйте перейти на внутренний генератор. Errarta на PIC ничего не говорит по этому поводу?
ViKo
Цитата(dinam @ Dec 17 2013, 11:45) *
Попробуйте перейти на внутренний генератор.

Он и работает от внутреннего генератора. См. CONFIG.
rx3apf
Цитата(ViKo @ Dec 17 2013, 12:33) *
Может, питание включается слишком резко? Да еще с дребезгом?

Нет. Ни дребезга, ни излишней скорости нарастания тоже нет. И, потом, полежав 10 секунд, все равно ведь запускается.

Ладно, гадать больше просто не о чем, жду кристаллов из другой партии. Нарывался я уже и у Microchip на такое (правда, в прошлый раз это были не микроконтроллеры).
ViKo
Цитата(rx3apf @ Dec 17 2013, 11:55) *
Нет. Ни дребезга, ни излишней скорости нарастания тоже нет. И, потом, полежав 10 секунд, все равно ведь запускается.

Как это нет? rolleyes.gif Чем же вы включаете батарейное питание? Схему посмотреть бы.
PIC пробегает по всей своей (пустой) программной памяти, потом доходит до начала программы и начинает работать... Может, супервизор на сброс, или этот... BOD задействовать?
rx3apf
Джампером. А там есть конденсаторы. Включал PICKITом - все точно так же.

Цитата(ViKo @ Dec 17 2013, 13:01) *
PIC пробегает по всей своей (пустой) программной памяти, потом доходит до начала программы и начинает работать... Может, супервизор на сброс, или этот... BOD задействовать?

Это прямо не PIC, а стелс какой-то - "пробежать" по памяти, и при этом при отсутствии генерации на контрольном выходе генератора. Ладно, хватит гадать. Пока прикрываю.
rx3apf
Все ж моя вина оказалась - недосмотрел, и получилось, что ставился бит LVP. А там (RB3/PGM), как назло, была "1" извне. И ведь в чем подлость - я уже там делал коротыш на "землю" (подозревая именно LVP), но тогда и проблема незапуска выглядела иначе. Так что "трофей" не состоялся. Ну и ладно, зато одной головной болью меньше...
Smen
Цитата(rx3apf @ Dec 17 2013, 19:20) *
ставился бит LVP
А я говорил: "Настраивать надо". rolleyes.gif
С ПИКами у меня ни разу проблем по вине чипа не возникало. Только по собственной невнимательности/дурости.
Если у кого ещё непонятки возникнут, в аттаче небольшая тестовая програмка:
Примерно через 2.66ms, после включения, на RC0 (pin11) появляется высокий уровень, и примерно через 1,02ms выдаёт короткие отрицательные импульсы, свидетельствующие о работе генератора.
Выход TX меняет Z на высокий уровень примерно на 1,62ms, а передачу начинает на 67,2ms (байт 00110011, скорость 15 625Bps), с периодом примерно 65,5ms.
Ограничения:
Задействованы на выход: RB1(22), RB4(25), RB5(26), RB6(27), RB7(28), RC2(13).

rx3apf
Работая последнее время практически только с AVR, успело забыться, что у PIC "1" соответствует активированному фьюзу. "Настраивать" не надо было, но вот явно указать - да.

С PICами у меня была одна история - "забывчивость" одного слова программной памяти, содержимое искажалось через неделю-две после программирования. Но дело давнее (середина 90-х), один экземпляр F84 (или даже C84) из партии.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.