Страница 1 из 1
Не могу завести PIC12f6x
Добавлено: Пн авг 29, 2011 23:05:56
Ge_die
Всем привет!
Я делаю интервалометр для фотоаппарата. Прошивку писал в MPLAB, отлаживал в ISIS, всё работало. Решил, наконец, реализовать в железе и был сильно удивлён результатом. Контроллеры (перепробовал 3 штуки - 2 675х и 629) не запускаются. Даже прошивка, выставляющая нули\единицы на ногах мк не работает как надо. Что бы я ни зашивал, результат один и тот же - на GP5 - 0, на GP4 -2.5 В (и медленно скатывается к нулю), на остальных ногах - вообще тишина. Прогамматор - PICKIT 2, шьюсь из MPLAB (софт, который шёл с программатором жалуется на отсутствие конфигурационного слова в *.hex), компилятор - HI TECH C. Схема - простая до безобразия - сам мк и источник питания. Питаю от 3-х батареек AAA.
И ещё. Никак не пойму, почему если выставить 1 на какой либо ноге, осцилограф в ISIS рисует на ней не прямую, а кривую, стремящуюся к нулю?
Заранее благодарю!
Re: Не могу завести PIC12f6x
Добавлено: Пн авг 29, 2011 23:18:03
dosikus
На счет протеуса - проект в студию.
На счет железа - в конфиге определяется тактовый генератор , практически сердце контроллера.
Как он будет работать если не сконфигурирован ?
Еще одна распространенная ошибка - забывают о MCLR ...
Re: Не могу завести PIC12f6x
Добавлено: Вт авг 30, 2011 07:57:24
Ge_die
Добавил проект на протеусе и воркспейс из мплаба в аттач. Конфигурационые биты я задавал в мплабе и рассчитывал что они попадут в прошивку. В них, собственно, и задействован внутренний генератор, декларируется использование MCLR как порта итп. Может их где-то ещё нужно задавать? Ведь по какой-то причине PICKit 2 Programmer их не видит и выставляет по умолчанию 01FF, хотя в мплабе значение совсем другое
Re: Не могу завести PIC12f6x
Добавлено: Вт авг 30, 2011 08:18:31
urry
1. __CONFIG( WDTDIS & MCLRDIS & INTIO & BORDIS);
2. выражение if (T0IF) неправильное, потому что флаг может взвестись независимо от того, замаскировано прерывание или нет. правильно if (T0IF && T0IE) - собственно, все это касается и других видов прерывания.
3.INTCON = 0b11111000; - мне это ничего не говорит - перепишите по флагам отдельно, нет никакого желания нырять в даташит. В заголовочном файле все это есть.
4. Скользкий момент - прерывание по изменению уровня сигнала на входах.
Обработка неправильная - вначале нужно прочитать или записать инфу в GPIO, а затем только сбросить GPIF, иначе Вы никогда не выйдете из прерывания.
Re: Не могу завести PIC12f6x
Добавлено: Ср авг 31, 2011 19:20:36
Ge_die
Переписал, теперь код выглядит так:
Код: Выделить всё
#include <htc.h>
__CONFIG(WDTE_OFF & MCLRE_OFF & FOSC_INTRCIO & BOREN_OFF);
int main()
{
GPIF = 0;
period = halfMinuteInterval;
counter = period;
CMCON=7;
GPIF = 0;
INTF = 0;
T0IF = 0;
GPIE = 1;
INTE = 1;
T0IE = 1;
PEIE = 1;
GIE = 1;
TRISIO = 0b00000001;
IOCB = 0b00000001;
WPU = 0b00000001;
OPTION_REG = 0b00000101;
while(1)
{
GP0 = 1;
GP1 = 1;
GP2 = 1;
GP3 = 1;
GP4 = 1;
GP5 = 1;
}
}
Выкинул всё что было можно, не работает. Или работает, но совсем не так как нужно: напряжение на ногах есть, но выводятся явно не единички. Пока ковырялся в даташитах и с МПЛАБом куча странных вещей обнаружилась. К примеру, если выставить конфигурационные биты в настройках, а не в коде, то при сборке проекта МПЛАБ их сбрасывает у меня на глазах %). Кроме того сейчас мплаб думает что конфигурационное слово - 3194, а пик кит программер, прочитав то что насобирал мплаб, решил что слово - 0194. И да, не очень понимаю почему флаги конфигурационного слова объедняются оператором &, а не |.
Re: Не могу завести PIC12f6x
Добавлено: Ср авг 31, 2011 19:47:22
urry
как должно работать ? Алгоритм .
я за несколько лет ни разу не пользовался оболочкой пиккита, прошиваю из мплаба.
Весь проект, пожалуйста - и где что не работает - по этому куску сложно судить, что не так.
Re: Не могу завести PIC12f6x
Добавлено: Ср авг 31, 2011 20:45:14
Ge_die
Это не кусок, это весь код, который я оставил. Я ожидал получить единицы на ногах GP0-GP5 как доказательство того, что контроллер работает как надо, но этого не произошло. Шеллом из комплекта я и сам бы не стал бы пользоваться, если бы всё работало как надо. Просто тыкаюсь уже, пробую всё подряд, ибо не представляю что я делаю не так
Re: Не могу завести PIC12f6x
Добавлено: Ср авг 31, 2011 20:46:15
Аlex
Выкинул всё что было можно, не работает.
А что у Вас может работать ? Вы, когда писали, хотя-бы подумали что пишете.
Наразрешали кучу прерваний, а обработчика нет вообще.
Просто тыкаюсь уже, пробую всё подряд
А Вы сядьте и почитайте литературу. Будет намного полезнее.
Тут метод тыка не прокатывает.
Re: Не могу завести PIC12f6x
Добавлено: Ср авг 31, 2011 21:12:16
TripleKill
Может, схемку покажете, как чего подключено? Только не в протеусе, а в реальности.
В протеусе не нужно подключать кварц или вообще какую-либо частотозадающую цепь.
Я не знаю, может в 12-ых есть встроенный тактовый генератор, но если нет, то подключили ли вы внешний?
Re: Не могу завести PIC12f6x
Добавлено: Ср авг 31, 2011 21:28:01
Ge_die
Аlex писал(а):А что у Вас может работать ? Вы, когда писали, хотя-бы подумали что пишете.
Наразрешали кучу прерваний, а обработчика нет вообще.
Работать вот прямой сейчас должен вывод единиц на ноги. Я прекрасно понимаю чего хочу. Обработчик прерываний я выкинул, как и весь остальной код, когда искал косяк. В симуляторе всё работало прекрасно. Сейчас цель - заставить работать железо, когда я этого добьюсь, код вернётся на место.
TripleKill писал(а):Может, схемку покажете, как чего подключено?
Схема - тривиальнейшая. + 4.5В к VDD, 0В - к VSS. Микросхема и блок из 3х батарей AAA. И да, конденсатор ещё стабилизирующий.
TripleKill писал(а):Я не знаю, может в 12-ых есть встроенный тактовый генератор, но если нет, то подключили ли вы внешний?
Внутренний генератор есть, именно его я и задействовал.
Re: Не могу завести PIC12f6x
Добавлено: Ср авг 31, 2011 21:54:40
urry
Давайте угадаю - Вы забыли обнулить ANSEL и у Вас первые 4 ноги идут как аналоговые.
Re: Не могу завести PIC12f6x
Добавлено: Чт сен 01, 2011 09:47:52
Аlex
Ge_die писал(а):Обработчик прерываний я выкинул, как и весь остальной код
Я вижу что Вы его выкинули. По этому и говорю что его нет. А прерывания кто
зпрещать будет ? Контроллер сам, чисто интелектуально, должен догадаться ?
Вы досих пор даже не сказали какой у Вас чип. Возможно, действительно, забыли АЦП выключить.
Re: Не могу завести PIC12f6x
Добавлено: Чт сен 01, 2011 10:04:45
urry
Аlex, там по заголовочному видно, 12F675. Я запретил прерывания и прошелся в мплаб сим - действительно не работает из-за ANSEL . Странно, что эту ошибку проглотил протеус, впрочем, я его не запускал.
И совет ТС - уйти от версий про для хайтека, перейти на старые добрые std.
В про версии 2+2 не всегда равно 4.
Re: Не могу завести PIC12f6x
Добавлено: Чт сен 01, 2011 10:09:48
Аlex
Аlex, там по заголовочному видно, 12F675.
Тогда да,
ANSEL виновен.

Re: Не могу завести PIC12f6x
Добавлено: Чт сен 01, 2011 23:28:50
Ge_die
Ge_die писал(а):Контроллеры (перепробовал 3 штуки - 2 675х и 629) не запускаются.
Так что модель я указал, хотя конечно да, надо было по-человечески написать. Итого: у меня два 12f675 и один 12f629. Сегодня купил ещё один 12f675, чтобы проверить, не покалечил ли я старые микросхемы. На нём баги воспроизвелись. Спасибо что сказали про ANSEL, я про него не знал. Однако обнуление регистра (как и отдельных битов в нём) не помогло. Флаги прерываний тоже сбросил - никакой разницы. 12f629 тоже глючит. Больше всего обескураживает то, что напряжение разное получается от запуска к запуску. Как правило везде единицы кроме MCLR. Иногда единицы бывают только на GP0 и GP5. Бывает и по-другому. Хотя программу я переписал и выводить она должна нули (кроме GP0, конечно. он помечен как входной). А PRO версию я не использую (если мы конечно об одном и том же говорим). Вот интересно, может я питаю его криво? Влияют ли всплески при включении на работу? Стабилизирующий кондёр у меня на 470 мкф, может быть напряжение при включении слишком плавно нарастает?
Re: Не могу завести PIC12f6x
Добавлено: Пт сен 02, 2011 07:21:55
КРАМ
Конденсатор не стабилизирующий, а блокировочный. Уменьшите его до 10 мкФ, но параллельно поставьте 0,1 мкФ КЕРАМИКУ. Покажите живую схему устройства. Приведите принципиальную схему, включая источник питания. Обозначьте на схеме номинал питающего напряжения.
И покажите текущий используемый код.
Иначе мы пытаемся поймать черную кошку в темной комнате...
Re: Не могу завести PIC12f6x
Добавлено: Вс сен 04, 2011 13:12:40
Ge_die
В общем всем большое спасибо, девайс заработал, хоть и не без некоторых странностей. По всей видимости, дело было в том, что MPLAB прошивал невалидный OSCCAL (я галку в настройках линкера поставил, чтобы он калибровал генератор). Перекалибровал в PIC Kit Programmer'e и контроллер запустился. Правда на GP5 выводится единичка, хоть я и не просил контроллер об этом, но тут я и сам разберусь. Да и не использую я эту ножку