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

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

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

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

Схема

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

В схеме, которую я построил, я сначала проверил, будут ли светодиоды работать с 3 батареями AA 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;
            }
    }
}

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

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

Ответы (5)

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

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

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

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

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

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

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

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

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

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

  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 Ом.

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

Подробнее: http://romux.com/tutorials/pic-tutorial/push-buttons#ixzz43cAbVcWR

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

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

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