Свежие обсуждения
Микроконтроллеры

Помогите кнопку приделать к PIC!!

1 6

Я старый программист, под много-что писал и под контроллеры тоже, но сам никогда схем не делал, то есть далек от электроники. Но вот решил, что надо наконец самому что-то спаять и вот по статье "Мой первый проект на микроконтроллере" (http://yusoft.kulichki.com/russian/pic/first_r.htm) сделал мигалку диодами. Купил програматор, поскольку знаю, что собрать свой я не смогу без помощи и быстро. Купил десяток светодиодов, пяток резисторов, пару кондюков, пробно-монтажную дощечку, и все спаял!
Я в полном восторге, уже и так и эдак они у меня мигают и бегают и с таймерами и с прерываниями я разобрался, с програмированием у меня нет проблем, все проги сразу начинают работать и на симуляторах и на самом чипе, включая и проги которые опрашивают кнопки.
Но заткнулся я на следущем шаге, и как я не роюсь по интернету и не штудирую datasheets, howtos, не могу понять - НУ КАК ПРИДЕЛАТЬ К PIC-у ОДНУ КНОПКУ????? На схеме которую я собрал, есть только выходы, и во всех "учебных" статьях готовые простенькие схемы кнопок не содержат. Только имеют диоды.
Прочитал всю тему "Ликбез", но там видимо одни электронщики и их беспокоят проблемы порграмирования, а кнопки, видимо, умеют припаивать с закрытыми глазами. Нашел там один гиф (http://www.pic16.nm.ru/schema01.gif) - но так не работает у меня почему то.
Я пытаюсь приделать кнопку к выходу PORTA или PORTB. Пробовал и то и другое. Например мой PIC16F84A, нога 17 вход/выход RA0. На разных схемках которые я нахожу по интернету я вижу что одни инженеры подключают эту ногу через кнопку прямо к минусу(земле), другие к плюсу!! третие к плюсу через резистор 10К, на еще одной схеме два резистора, один к плюсу, другой к минусу!? Как это все понимать??
В каком месте даташита вообще сказано "на вход ноги надо дать столько то вольт"? Этого нигде нет!
Я все перепробовал.
Однажды она заработала! Правда, только если при этом держать плату в руке, то есть прикасаться к заминусованой окантовке. Тогда правильно опознавались нажатие и отпускание кнопок.
В этом наполовину работавшем конфиге я подключал один конец кнопки к RA0 а второй к плюсу, но не к самой батарейке (так вообще не работает кнопка), а к ноге стабилизирующего конденсатора на 104, которая как это не поразительно для меня, вообще то тоже проводком соединена прямо с плюсом.
Что-то я не понимаю, надо мне что-то учить, а что -- не пойму, то ли закон ома, то ли еще чего.
----
Заодно еще вопрос, не раз встречал расказы про подключение двух ледов так что их ноги подключены сразу к двум пинам на контроллере, и в зависимости из какой ноги в какую бежит ток, горят разные диоды. Я не очень понимаю (опять же я не электронщик) как менять полярность програмно? Переводить одну ногу в состояние чтения а другую в запись? То есть грубо говоря TRISB B'01' а для второго леда потом TRISB B'10'?
----
Поражает что я не могу решить такую простую проблему как подключение кнопки к ноге! ПОМОГИТЕ!

 

Взять вольтметр и измерить напряжение на RA0 при нажатой и отжатой кнопке. Посмотреть тризы в программе. Учить закон Ома.

 

pikachu: То есть грубо говоря TRISB B'01' а для второго леда потом TRISB B'10'?

Как может опытный программист, прочитав даташит на ПИК написать такое??? TRIS - это управляющий регистр порта, который определяет его конфигурацию: чем будет конкретный пин - входом (1) или выходом (0). Вам же надо пропИсывать 1 или 0 в сам ПОРТ(В) по адресу конкретного пина, к которым подключены с/д.

Или это очередной развод? Особенно подозрительно заполнен профиль.

 

Я старый программист, и не знаю слов любви.... (с)

 

-----
Взять вольтметр и измерить напряжение на RA0 при нажатой и отжатой кнопке. Посмотреть тризы в программе. Учить закон Ома.
----

Спасибо gan, вольтметр у меня есть, и я даже умею им пользоваться, отец еще в детстве научил, он то как раз был инжинером. На ногах порта В на которых висят леды 0 когда они не горят, 4.1 когда горят красные, 4.3 когда горят зеленые. На 17 ноге (RA0) которую использую для кнопки 0 при отжатой кнопке, а при нажатой я могу сделать сколько надо, например сейчас 4.5. Вопрос в том, сколько там должно быть! Я не знаю, и никто мне не говорит, видимо это супер-секретная информация.
Тризы (TRISA, TRISB доступ через команду TRIS или напрямую через банк 1) я могу проверять и перепроверять, но с ними все ОК, я же говорю, если взять плату в руки, то все работает как часы - то есть проблема, как мне кажется, конечно не стану утверждать на 100% - в электрической части.

 

Splav56, вы надо мной потешаетесь похоже! Но это нормально. Объясню. Я конечно понимаю что в порт пишут командой MOVF 6 или MOVF 5. Но речь сейчас не о том как засветить один диод одним выходом. Это понятно, 0 или 1. А как засветить 6 диодов тремя выводами. Или 20 диодив на пяти выходах. Схема опубликована на многих сайтах. Это возможно на мой взгляд только если у каждого порта есть не два (0, 1), а три положения, скажем 0, 4.5, и -4.5 вольта. Поскольку бит в порте нельзя установить в минус один, то первое что пришло мне в голову, что может когда ножка вывода порта стоит в состоянии чтения, а не записи, то может на ней обратное напряжение? Замеры это правда не подтверждают, но другой теории у меня нет.
Вроде те кто такую схему реализовывал, утверждают, что если один лед подключен к ногам (условно) 1 и 2 а другой к ногам 2 и 1, то есть грубо говоря задом наперед к ним же, то можно засветить один а можно другой, а можно ни одного. Если надо чтобы горели оба, то надо быстро мигать ими.
Я подумал так, если я напишу 10 01 или 00 (для соответствующих бит) то может оно и заработает, но что будет с остальными диодами которые одну из ног тоже имеют на ноге номер 1? Ведь утверждается что 13 ног чипа могут управлять 156 светодиодами таким образом.

Профиль я не заполнил потому, что после 10 попыток зарегистрироваться с профилем, я уже просто наобум попробовал выйти из браузера и запустить микрософт интернет експлорер, в нем регистрация прошла неожиданно, но искать как править профиль в 5 часов утра уже небыло сил, я вообще от отчаяния вам написал после суток неудач, а вы надо мной прикалываетесь.

 

pikachu: Вопрос в том, сколько там должно быть! Я не знаю, и никто мне не говорит, видимо это супер-секретная информация.

Ага, Микрочип засекретил в даташите на контроллер в разделе "Электрические характеристики". Там в начале раздела в верхней части страницы симпатическими чернилами проставлен гриф "...супер-секретная информация".

 

pikachu: А как засветить 6 диодов тремя выводами. Или 20 диодив на пяти выходах. Схема опубликована на многих сайтах.

Дайте-ка ссылочку, любопытно.

 

pikachu, что бы разговор был более конкретен, приведите схему с вашими кнопками и программу.

Про диоды... Что бы светодиод горел, но одном его выводе (который на схеме - сторона треугольника) должен быть + на другом -. Только так, в любых других комбинациях не горит. Можете условно считать, что еденица на выводе, это плюс, ноль - минус.

 

Я вот над вами не потешался когда вы на двацать страниц с трудом пытались создать проект в MPLAB и нарисовали десятки блок схем для софтины в тридцать слов. Я неуч в электричестве и признаю это, мне из электрических харектеристик не понятно "какой провод цеплять на ногу".
Сейчас кстати у меня все заработало, на свежую голову попробовал вариант gan'a (http://pro-radio.ru/user/uploads/36569.gif). Кнопка вешается на минус, но к самой ноге входа еще идет 1к резстор от плюса. Все работает, спасибо, но как это посчитано из исходных данных мне не ясно.

11.0 ELECTRICAL CHARACTERISTICS FOR PIC16C84
Absolute Maximum Ratings †
Ambient temperature under bias.......................-55°C to +125°C
Storage temperature ............................ -65°C to +150°C
Voltage on VDD with respect to VSS ............... -0.3 to +7.5V
Voltage on MCLR with respect to VSS (2) ................... -0.3 to +14V
Voltage on all other pins with respect to VSS ............ -0.6V to (VDD + 0.6V)
Total power dissipation (1) .....800 mW
Maximum current out of VSS pin ...............150 mA
Maximum current into VDD pin ................100 mA
Input clamp current, IIK (VI < 0 or VI > VDD)............± 20 mA
Output clamp current, IOK (VO < 0 or VO >VDD) ...........± 20 mA
Maximum output current sunk by any I/O pin.....25 mA
Maximum output current sourced by any I/O pin ..........20 mA
Maximum current sunk by PORTA ..................80 mA
Maximum current sourced by PORTA............50 mA
Maximum current sunk by PORTB...........150 mA
Maximum current sourced by PORTB..........100 mA
Note 1: Power dissipation is calculated as follows: Pdis = VDD x {IDD - å IOH} + å {(VDD-VOH) x IOH} + å(VOl x IOL)
Note 2: Voltage spikes below VSS at the MCLR pin, inducing currents greater than 80 mA, may cause latch-up. Thus,
a series resistor of 50-100W should be used when applying a “low” level to the MCLR pin rather than pulling
this pin directly to VSS.