Не могу завести PIC12f6x
Не могу завести PIC12f6x
Всем привет!
Я делаю интервалометр для фотоаппарата. Прошивку писал в MPLAB, отлаживал в ISIS, всё работало. Решил, наконец, реализовать в железе и был сильно удивлён результатом. Контроллеры (перепробовал 3 штуки - 2 675х и 629) не запускаются. Даже прошивка, выставляющая нули\единицы на ногах мк не работает как надо. Что бы я ни зашивал, результат один и тот же - на GP5 - 0, на GP4 -2.5 В (и медленно скатывается к нулю), на остальных ногах - вообще тишина. Прогамматор - PICKIT 2, шьюсь из MPLAB (софт, который шёл с программатором жалуется на отсутствие конфигурационного слова в *.hex), компилятор - HI TECH C. Схема - простая до безобразия - сам мк и источник питания. Питаю от 3-х батареек AAA.
И ещё. Никак не пойму, почему если выставить 1 на какой либо ноге, осцилограф в ISIS рисует на ней не прямую, а кривую, стремящуюся к нулю?
Заранее благодарю!
Я делаю интервалометр для фотоаппарата. Прошивку писал в MPLAB, отлаживал в ISIS, всё работало. Решил, наконец, реализовать в железе и был сильно удивлён результатом. Контроллеры (перепробовал 3 штуки - 2 675х и 629) не запускаются. Даже прошивка, выставляющая нули\единицы на ногах мк не работает как надо. Что бы я ни зашивал, результат один и тот же - на GP5 - 0, на GP4 -2.5 В (и медленно скатывается к нулю), на остальных ногах - вообще тишина. Прогамматор - PICKIT 2, шьюсь из MPLAB (софт, который шёл с программатором жалуется на отсутствие конфигурационного слова в *.hex), компилятор - HI TECH C. Схема - простая до безобразия - сам мк и источник питания. Питаю от 3-х батареек AAA.
И ещё. Никак не пойму, почему если выставить 1 на какой либо ноге, осцилограф в ISIS рисует на ней не прямую, а кривую, стремящуюся к нулю?
Заранее благодарю!
Re: Не могу завести PIC12f6x
На счет протеуса - проект в студию.
На счет железа - в конфиге определяется тактовый генератор , практически сердце контроллера.
Как он будет работать если не сконфигурирован ?
Еще одна распространенная ошибка - забывают о MCLR ...
На счет железа - в конфиге определяется тактовый генератор , практически сердце контроллера.
Как он будет работать если не сконфигурирован ?
Еще одна распространенная ошибка - забывают о MCLR ...
Re: Не могу завести PIC12f6x
Добавил проект на протеусе и воркспейс из мплаба в аттач. Конфигурационые биты я задавал в мплабе и рассчитывал что они попадут в прошивку. В них, собственно, и задействован внутренний генератор, декларируется использование MCLR как порта итп. Может их где-то ещё нужно задавать? Ведь по какой-то причине PICKit 2 Programmer их не видит и выставляет по умолчанию 01FF, хотя в мплабе значение совсем другое
- Вложения
-
- proteus_projects.rar
- (12.68 КБ) 112 скачиваний
-
- project one.rar
- (53.29 КБ) 99 скачиваний
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Не могу завести PIC12f6x
1. __CONFIG( WDTDIS & MCLRDIS & INTIO & BORDIS);
2. выражение if (T0IF) неправильное, потому что флаг может взвестись независимо от того, замаскировано прерывание или нет. правильно if (T0IF && T0IE) - собственно, все это касается и других видов прерывания.
3.INTCON = 0b11111000; - мне это ничего не говорит - перепишите по флагам отдельно, нет никакого желания нырять в даташит. В заголовочном файле все это есть.
4. Скользкий момент - прерывание по изменению уровня сигнала на входах.
Обработка неправильная - вначале нужно прочитать или записать инфу в GPIO, а затем только сбросить GPIF, иначе Вы никогда не выйдете из прерывания.
2. выражение if (T0IF) неправильное, потому что флаг может взвестись независимо от того, замаскировано прерывание или нет. правильно if (T0IF && T0IE) - собственно, все это касается и других видов прерывания.
3.INTCON = 0b11111000; - мне это ничего не говорит - перепишите по флагам отдельно, нет никакого желания нырять в даташит. В заголовочном файле все это есть.
4. Скользкий момент - прерывание по изменению уровня сигнала на входах.
Обработка неправильная - вначале нужно прочитать или записать инфу в GPIO, а затем только сбросить GPIF, иначе Вы никогда не выйдете из прерывания.
Re: Не могу завести PIC12f6x
Переписал, теперь код выглядит так:
Выкинул всё что было можно, не работает. Или работает, но совсем не так как нужно: напряжение на ногах есть, но выводятся явно не единички. Пока ковырялся в даташитах и с МПЛАБом куча странных вещей обнаружилась. К примеру, если выставить конфигурационные биты в настройках, а не в коде, то при сборке проекта МПЛАБ их сбрасывает у меня на глазах %). Кроме того сейчас мплаб думает что конфигурационное слово - 3194, а пик кит программер, прочитав то что насобирал мплаб, решил что слово - 0194. И да, не очень понимаю почему флаги конфигурационного слова объедняются оператором &, а не |.
Код: Выделить всё
#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. И да, не очень понимаю почему флаги конфигурационного слова объедняются оператором &, а не |.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Не могу завести PIC12f6x
как должно работать ? Алгоритм .
я за несколько лет ни разу не пользовался оболочкой пиккита, прошиваю из мплаба.
Весь проект, пожалуйста - и где что не работает - по этому куску сложно судить, что не так.
я за несколько лет ни разу не пользовался оболочкой пиккита, прошиваю из мплаба.
Весь проект, пожалуйста - и где что не работает - по этому куску сложно судить, что не так.
Re: Не могу завести PIC12f6x
Это не кусок, это весь код, который я оставил. Я ожидал получить единицы на ногах GP0-GP5 как доказательство того, что контроллер работает как надо, но этого не произошло. Шеллом из комплекта я и сам бы не стал бы пользоваться, если бы всё работало как надо. Просто тыкаюсь уже, пробую всё подряд, ибо не представляю что я делаю не так
- Вложения
-
- project_one.rar
- (42.36 КБ) 97 скачиваний
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Не могу завести PIC12f6x
А что у Вас может работать ? Вы, когда писали, хотя-бы подумали что пишете.Выкинул всё что было можно, не работает.
Наразрешали кучу прерваний, а обработчика нет вообще.
А Вы сядьте и почитайте литературу. Будет намного полезнее.Просто тыкаюсь уже, пробую всё подряд
Тут метод тыка не прокатывает.
-
TripleKill
- Вымогатель припоя
- Сообщения: 671
- Зарегистрирован: Вт июн 29, 2010 12:31:49
Re: Не могу завести PIC12f6x
Может, схемку покажете, как чего подключено? Только не в протеусе, а в реальности.
В протеусе не нужно подключать кварц или вообще какую-либо частотозадающую цепь.
Я не знаю, может в 12-ых есть встроенный тактовый генератор, но если нет, то подключили ли вы внешний?
В протеусе не нужно подключать кварц или вообще какую-либо частотозадающую цепь.
Я не знаю, может в 12-ых есть встроенный тактовый генератор, но если нет, то подключили ли вы внешний?
Re: Не могу завести PIC12f6x
Аlex писал(а):А что у Вас может работать ? Вы, когда писали, хотя-бы подумали что пишете.
Наразрешали кучу прерваний, а обработчика нет вообще.
Работать вот прямой сейчас должен вывод единиц на ноги. Я прекрасно понимаю чего хочу. Обработчик прерываний я выкинул, как и весь остальной код, когда искал косяк. В симуляторе всё работало прекрасно. Сейчас цель - заставить работать железо, когда я этого добьюсь, код вернётся на место.
TripleKill писал(а):Может, схемку покажете, как чего подключено?
Схема - тривиальнейшая. + 4.5В к VDD, 0В - к VSS. Микросхема и блок из 3х батарей AAA. И да, конденсатор ещё стабилизирующий.
TripleKill писал(а):Я не знаю, может в 12-ых есть встроенный тактовый генератор, но если нет, то подключили ли вы внешний?
Внутренний генератор есть, именно его я и задействовал.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Не могу завести PIC12f6x
Давайте угадаю - Вы забыли обнулить ANSEL и у Вас первые 4 ноги идут как аналоговые.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Не могу завести PIC12f6x
Я вижу что Вы его выкинули. По этому и говорю что его нет. А прерывания кто зпрещать будет ? Контроллер сам, чисто интелектуально, должен догадаться ?Ge_die писал(а):Обработчик прерываний я выкинул, как и весь остальной код
Вы досих пор даже не сказали какой у Вас чип. Возможно, действительно, забыли АЦП выключить.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Не могу завести PIC12f6x
Аlex, там по заголовочному видно, 12F675. Я запретил прерывания и прошелся в мплаб сим - действительно не работает из-за ANSEL . Странно, что эту ошибку проглотил протеус, впрочем, я его не запускал.
И совет ТС - уйти от версий про для хайтека, перейти на старые добрые std.
В про версии 2+2 не всегда равно 4.
И совет ТС - уйти от версий про для хайтека, перейти на старые добрые std.
В про версии 2+2 не всегда равно 4.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Не могу завести PIC12f6x
Тогда да, ANSEL виновен.Аlex, там по заголовочному видно, 12F675.
Re: Не могу завести PIC12f6x
Так что модель я указал, хотя конечно да, надо было по-человечески написать. Итого: у меня два 12f675 и один 12f629. Сегодня купил ещё один 12f675, чтобы проверить, не покалечил ли я старые микросхемы. На нём баги воспроизвелись. Спасибо что сказали про ANSEL, я про него не знал. Однако обнуление регистра (как и отдельных битов в нём) не помогло. Флаги прерываний тоже сбросил - никакой разницы. 12f629 тоже глючит. Больше всего обескураживает то, что напряжение разное получается от запуска к запуску. Как правило везде единицы кроме MCLR. Иногда единицы бывают только на GP0 и GP5. Бывает и по-другому. Хотя программу я переписал и выводить она должна нули (кроме GP0, конечно. он помечен как входной). А PRO версию я не использую (если мы конечно об одном и том же говорим). Вот интересно, может я питаю его криво? Влияют ли всплески при включении на работу? Стабилизирующий кондёр у меня на 470 мкф, может быть напряжение при включении слишком плавно нарастает?Ge_die писал(а):Контроллеры (перепробовал 3 штуки - 2 675х и 629) не запускаются.
- КРАМ
- Друг Кота
- Сообщения: 25154
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Не могу завести PIC12f6x
Конденсатор не стабилизирующий, а блокировочный. Уменьшите его до 10 мкФ, но параллельно поставьте 0,1 мкФ КЕРАМИКУ. Покажите живую схему устройства. Приведите принципиальную схему, включая источник питания. Обозначьте на схеме номинал питающего напряжения.
И покажите текущий используемый код.
Иначе мы пытаемся поймать черную кошку в темной комнате...
И покажите текущий используемый код.
Иначе мы пытаемся поймать черную кошку в темной комнате...
Re: Не могу завести PIC12f6x
В общем всем большое спасибо, девайс заработал, хоть и не без некоторых странностей. По всей видимости, дело было в том, что MPLAB прошивал невалидный OSCCAL (я галку в настройках линкера поставил, чтобы он калибровал генератор). Перекалибровал в PIC Kit Programmer'e и контроллер запустился. Правда на GP5 выводится единичка, хоть я и не просил контроллер об этом, но тут я и сам разберусь. Да и не использую я эту ножку