Как подключить микроконтроллер PIC?

8

Я совершенно новичок в мире микроконтроллеров PIC и электротехники, поэтому, пожалуйста, будьте спокойны :)

В любом случае, мне удалось запрограммировать мой PIC 16f627 на включение трех светодиодов при нажатии кнопки (кнопки триггера) и запуск последовательности выключения (в основном, каждый светодиод переключается один за другим с задержкой в ​​5 секунд), когда нажимается другая кнопка. нажата (кнопка сброса). Я тестировал это на программаторе Velmeman K8048 PIC / экспериментальной плате. PIN RA0 и RA2 являются входами для кнопок запуска и сброса соответственно, в то время как контакты RB0, RB1 и RB2 являются выходными контактами для светодиодов.

Работа с экспериментальной платой - это здорово, но я хочу перенести это на реальную схему. Проблема в том, что я понятия не имею, с чего начать. Я купил 3 светодиода (3,3 Вольт каждый), несколько кнопок и провод, и я построил следующую схему:

схема

(извините за ужасную схему)

В схеме, которую я построил, я сначала проверил, будут ли светодиоды работать с 3 1,5 В батареями АА, и они работают нормально, поэтому я решил, что резисторы не нужны.

Это не работает, однако, и я полностью потерян. Для справки, вот мой код для PIC. Это написано на C, используя MikroC. Он работает на экспериментальной доске, поэтому я не думаю, что это проблема

void main() {
    TRISB.RB0 = 0;
    TRISB.RB1 = 0;
    TRISB.RB2 = 0;
    PORTB.RB0 = 0;
    PORTB.RB1 = 0;
    PORTB.RB2 = 0;
    CMCON = 0x07;
    TRISA = 255;

    for(;;){
            if(PORTA.RA0 == 1 && PORTB.RB0 == 1 && PORTB.RB1 == 1 && PORTB.RB2 == 1){
                         delay_ms(5000);
                         PORTB.RB0 = 0;
                         delay_ms(5000);
                         PORTB.RB1 = 0;
                         delay_ms(5000);
                         PORTB.RB2 = 0;
            }
            if(PORTA.RA2 == 1){
                         PORTB.RB0 = 1;
                         PORTB.RB1 = 1;
                         PORTB.RB2 = 1;
            }
    }
}

Любая помощь будет принята с благодарностью. Спасибо!

Шахмир Навид
источник
3
Пожалуйста, пожалуйста, используйте Fritzing . Это бесплатно, выполняет 90% работы за вас и помогает легче читать ваши принципиальные схемы ..
Игнасио Васкес-Абрамс
1
Пожалуйста, прочитайте electronics.stackexchange.com/a/28255/4512 .
Олин Латроп
7
Я думаю, что иметь учетную запись на 10 дней, и это первый вопрос Shahmeer's является оправданием для "дерьма, как это на нас". Безусловно, подход Игнасио к хорошему обращению с большей вероятностью получит положительный ответ, чем ругает нового парня ... если только ваша цель не состоит в том, чтобы не допустить суеты вокруг новых людей.
ajs410
5
@ ajs410 - мы все знаем, что это любимая мозоль Олина, и хотя я не всегда согласен с его формулировкой, я согласен с его принципом. Тот факт, что ОП приносит свои извинения за ужасную (его собственные слова) «схему», означает, что он хорошо знает, что все не в порядке. Тогда почему он до сих пор публикует эту вещь? Для меня это не должно быть создано EDA, я думаю, что я предпочел бы видеть рисунок карандашом и карандашом.
Стивенвх
2
Он новый, как и многие другие новые участники здесь (включая меня). Дайте ему отдохнуть. Shahmeer, дай Фритзингу попробовать. Это приятно и просто в использовании, и поможет вам лучше объяснить ваш вопрос. С другой стороны, я категорически против выбора слов Игнасио.
capcom

Ответы:

11
  1. Во-первых, вам всегда нужны последовательные резисторы со светодиодами, когда они работают от источника напряжения (например, от батареи, источника постоянного тока и т. Д.).
    Это связано с тем, что светодиоды имеют нелинейную кривую IV, которая выглядит как высокое сопротивление до порогового напряжения Затем светодиод очень резко поднимается, поэтому при очень незначительном изменении напряжения ток сильно меняется, что делает практически невозможным установить постоянное значение тока таким образом.
    Используя резисторы серий правильного значения, вы гарантируете, что ток не может возрасти настолько, чтобы повредить светодиод.
    Для расчета значения резистора необходимо знать прямое напряжение светодиода (Vf), затем вычесть Vf из напряжения питания и разделить на требуемый ток, например, для источника питания 5 В, 2 В Vf и 15 мА:

    (5 В - 2 В) / 0,020 А = 200 Ом (подойдет стандартное значение 220 Ом - если у вас его нет, тогда стремитесь к чему-то от 150 Ом до 600 Ом для диапазона от 20 мА до 5 мА).
    Предполагается, что типичный светодиод 5 мм или 3 мм максимальный рабочий ток 20 мА.

  2. Хотя в вашей схеме написано «3 x 1,5 В батареи в серии», батареи выглядят так, как будто они действительно подключены параллельно. Подтвердите, что батареи должны быть подключены друг к другу, как показано на рисунке ниже:

    Параллельное и последовательное соединение

  3. Вам нужны развязывающие конденсаторы между микроконтроллером Vdd и землей. Я не буду вдаваться в подробности (поиск здесь, есть много хороших ответов на эту тему), но они в основном предназначены для обеспечения микроконтроллера локальным запасом энергии с низким импедансом для высокочастотного тока, на который блок питания не может быстро реагировать достаточно.
    В идеале вы должны поместить один из них (керамика 100 нФ или 1 мкФ достаточно стандартно) на контакты питания и заземления как можно ближе к контактам.

  4. Убедитесь, что вы используете внутренний генератор, если у вас нет кристалла. Ваш код не показывает настройки битов конфигурации, если вы не указали их, вам нужно добавить их, чтобы убедиться, что микроконтроллер настроен правильно. Руководство CCS должно рассказать вам, как это сделать. Также в битах конфигурации убедитесь, что сторожевой таймер выключен, иначе ваш микро будет постоянно перезагружаться (если вы регулярно не вызываете команду очистки WDT)

  5. Убедитесь, что светодиоды установлены правильно.

  6. Убедитесь, что у вас высокий контакт MCLR, в противном случае ваш PIC будет удерживаться в режиме сброса (если вы не выключите MCLR в битах конфигурации). Обычно это делается с резистором Vdd, значение около 10 кОм. Таблица данных будет иметь пример этого в разделе сброса. (спасибо ajs410 за упоминание этого)

Оли Глейзер
источник
Большое спасибо за комментарии, они были действительно полезны. Однако, если не считать того, должен ли я подключить PIC каким-либо другим способом или перечисленные вами дополнения - все, что мне нужно?
Шахмир Навид
2
Еще одна вещь: вам, вероятно, понадобятся резисторы с понижением напряжения на контактах кнопок, чтобы убедиться, что на контакте низкий логический уровень, когда кнопка не нажата (если только у вас нет внутренних понижений, но я думаю, что на PIC будут доступны только подтягивания). Трудно быть уверенным в вещах с такой схемой, как она (например, нестандартные символы, без номеров / имен выводов и т. д.). Я бы заполучил некоторые программы для захвата печатных плат / схем (например, Eagle [популярный / бесплатный для некоммерческого], Kicad [популярный / бесплатный], Diptrace [дешевый], Altium [££££ 's и т. д.) и используйте его в будущем.
Оли Глейзер
1
6. Не забудьте подтягивающий резистор на выводе MCLR. Или установите бит конфигурации, который использует внутреннее подтягивание, если доступно.
ajs410
2

Я очень рекомендую книгу О'Рейли «Проектирование встраиваемых систем» Джона Катсулиса для тех, кто на вашей должности. Есть глава "Электроника 101", которая довольно быстро выведет вас на функциональную скорость, а другая - на практическую конструкцию.

Скотт Сейдман
источник
2
  1. Не превышайте 5 В, ваш PIC может обжечься выше 5 В уровня напряжения. Вы можете использовать батареи 9 В или адаптер переменного / постоянного тока с линейным регулятором напряжения, таким как LM7805, для создания 5 В для вашей цепи. Как подключить:

    http://stuff.nekhbet.ro/2006/06/18/how-to-build-a-5v-regulator-using-78l05-7805.html

  2. Как и большинство из сказанного: не забудьте снабдить вывод MCLR последовательным резистором. Вы можете использовать подтягивающую конфигурацию для сброса вашего PIC. Вот ссылка на схему: http://www.mcuexamples.com/push-buttons-and-switch-debouncing-with-PIC.php

  3. Всегда используйте последовательный резистор перед светодиодом. Это избавит светодиод от перегорания и уменьшит энергопотребление. Для светодиодов 3,3 В 220 или 330 Ом вполне подойдет.

Молотки
источник
2

Функция кнопки проста. Когда мы нажимаем кнопку, два контакта соединяются вместе, и соединение устанавливается. Тем не менее, не все так просто. Проблема заключается в природе напряжения в электрическом измерении и в несовершенстве механических контактов. То есть до того, как контакт установлен или оборван, существует короткий период времени, когда может возникнуть вибрация (колебание) в результате неравномерности механических контактов или в результате различной скорости нажатия кнопки (это зависит от на человека, который нажимает кнопку). Термин, данный этому феномену, называется ПЕРЕКЛЮЧЕНИЕМ (КОНТАКТОМ) РАЗБОРА. Если это пропустить при написании программы, может произойти ошибка или программа может выдать более одного выходного импульса за одно нажатие кнопки. Чтобы избежать этого, мы можем ввести небольшую задержку при обнаружении замыкания контакта. Это гарантирует, что нажатие кнопки интерпретируется как один импульс. Задержка отмены производится в программном обеспечении, и длина задержки зависит от кнопки и назначения кнопки. Проблема может быть частично решена путем добавления конденсатора через кнопку, но хорошо продуманная программа - гораздо лучший ответ. Программу можно настраивать до тех пор, пока ложное обнаружение не будет полностью устранено. На рисунке ниже показано, что на самом деле происходит при нажатии кнопки. Программу можно настраивать до тех пор, пока ложное обнаружение не будет полностью устранено. На рисунке ниже показано, что на самом деле происходит при нажатии кнопки. Программу можно настраивать до тех пор, пока ложное обнаружение не будет полностью устранено. На рисунке ниже показано, что на самом деле происходит при нажатии кнопки.

Узнайте больше: http://romux.com/tutorials/pic-tutorial/push-buttons#ixzz43cAbVcWR

Джон
источник
1

В дополнение к тому, что написали другие: не назначайте отдельным выводам PIC, как, например, «PORTB.RB0 = 1;». Вместо этого измените бит в переменной байтового размера, а затем запишите эту переменную в порт.

Вы также можете

  • поверь мне на слово,
  • читать по вопросу "чтение-изменение-запись", или
  • страдать от последствий
Воутер ван Оойен
источник