Я совершенно новичок в мире микроконтроллеров 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;
}
}
}
Любая помощь будет принята с благодарностью. Спасибо!
источник
Ответы:
Во-первых, вам всегда нужны последовательные резисторы со светодиодами, когда они работают от источника напряжения (например, от батареи, источника постоянного тока и т. Д.).
Это связано с тем, что светодиоды имеют нелинейную кривую IV, которая выглядит как высокое сопротивление до порогового напряжения Затем светодиод очень резко поднимается, поэтому при очень незначительном изменении напряжения ток сильно меняется, что делает практически невозможным установить постоянное значение тока таким образом.
Используя резисторы серий правильного значения, вы гарантируете, что ток не может возрасти настолько, чтобы повредить светодиод.
Для расчета значения резистора необходимо знать прямое напряжение светодиода (Vf), затем вычесть Vf из напряжения питания и разделить на требуемый ток, например, для источника питания 5 В, 2 В Vf и 15 мА:
(5 В - 2 В) / 0,020 А = 200 Ом (подойдет стандартное значение 220 Ом - если у вас его нет, тогда стремитесь к чему-то от 150 Ом до 600 Ом для диапазона от 20 мА до 5 мА).
Предполагается, что типичный светодиод 5 мм или 3 мм максимальный рабочий ток 20 мА.
Хотя в вашей схеме написано «3 x 1,5 В батареи в серии», батареи выглядят так, как будто они действительно подключены параллельно. Подтвердите, что батареи должны быть подключены друг к другу, как показано на рисунке ниже:
Вам нужны развязывающие конденсаторы между микроконтроллером Vdd и землей. Я не буду вдаваться в подробности (поиск здесь, есть много хороших ответов на эту тему), но они в основном предназначены для обеспечения микроконтроллера локальным запасом энергии с низким импедансом для высокочастотного тока, на который блок питания не может быстро реагировать достаточно.
В идеале вы должны поместить один из них (керамика 100 нФ или 1 мкФ достаточно стандартно) на контакты питания и заземления как можно ближе к контактам.
Убедитесь, что вы используете внутренний генератор, если у вас нет кристалла. Ваш код не показывает настройки битов конфигурации, если вы не указали их, вам нужно добавить их, чтобы убедиться, что микроконтроллер настроен правильно. Руководство CCS должно рассказать вам, как это сделать. Также в битах конфигурации убедитесь, что сторожевой таймер выключен, иначе ваш микро будет постоянно перезагружаться (если вы регулярно не вызываете команду очистки WDT)
Убедитесь, что светодиоды установлены правильно.
Убедитесь, что у вас высокий контакт MCLR, в противном случае ваш PIC будет удерживаться в режиме сброса (если вы не выключите MCLR в битах конфигурации). Обычно это делается с резистором Vdd, значение около 10 кОм. Таблица данных будет иметь пример этого в разделе сброса. (спасибо ajs410 за упоминание этого)
источник
Я очень рекомендую книгу О'Рейли «Проектирование встраиваемых систем» Джона Катсулиса для тех, кто на вашей должности. Есть глава "Электроника 101", которая довольно быстро выведет вас на функциональную скорость, а другая - на практическую конструкцию.
источник
Не превышайте 5 В, ваш PIC может обжечься выше 5 В уровня напряжения. Вы можете использовать батареи 9 В или адаптер переменного / постоянного тока с линейным регулятором напряжения, таким как LM7805, для создания 5 В для вашей цепи. Как подключить:
http://stuff.nekhbet.ro/2006/06/18/how-to-build-a-5v-regulator-using-78l05-7805.html
Как и большинство из сказанного: не забудьте снабдить вывод MCLR последовательным резистором. Вы можете использовать подтягивающую конфигурацию для сброса вашего PIC. Вот ссылка на схему: http://www.mcuexamples.com/push-buttons-and-switch-debouncing-with-PIC.php
Всегда используйте последовательный резистор перед светодиодом. Это избавит светодиод от перегорания и уменьшит энергопотребление. Для светодиодов 3,3 В 220 или 330 Ом вполне подойдет.
источник
Функция кнопки проста. Когда мы нажимаем кнопку, два контакта соединяются вместе, и соединение устанавливается. Тем не менее, не все так просто. Проблема заключается в природе напряжения в электрическом измерении и в несовершенстве механических контактов. То есть до того, как контакт установлен или оборван, существует короткий период времени, когда может возникнуть вибрация (колебание) в результате неравномерности механических контактов или в результате различной скорости нажатия кнопки (это зависит от на человека, который нажимает кнопку). Термин, данный этому феномену, называется ПЕРЕКЛЮЧЕНИЕМ (КОНТАКТОМ) РАЗБОРА. Если это пропустить при написании программы, может произойти ошибка или программа может выдать более одного выходного импульса за одно нажатие кнопки. Чтобы избежать этого, мы можем ввести небольшую задержку при обнаружении замыкания контакта. Это гарантирует, что нажатие кнопки интерпретируется как один импульс. Задержка отмены производится в программном обеспечении, и длина задержки зависит от кнопки и назначения кнопки. Проблема может быть частично решена путем добавления конденсатора через кнопку, но хорошо продуманная программа - гораздо лучший ответ. Программу можно настраивать до тех пор, пока ложное обнаружение не будет полностью устранено. На рисунке ниже показано, что на самом деле происходит при нажатии кнопки. Программу можно настраивать до тех пор, пока ложное обнаружение не будет полностью устранено. На рисунке ниже показано, что на самом деле происходит при нажатии кнопки. Программу можно настраивать до тех пор, пока ложное обнаружение не будет полностью устранено. На рисунке ниже показано, что на самом деле происходит при нажатии кнопки.
Узнайте больше: http://romux.com/tutorials/pic-tutorial/push-buttons#ixzz43cAbVcWR
источник
В дополнение к тому, что написали другие: не назначайте отдельным выводам PIC, как, например, «PORTB.RB0 = 1;». Вместо этого измените бит в переменной байтового размера, а затем запишите эту переменную в порт.
Вы также можете
источник