Jump to content
Speed Fighter

Простейшая клавиатура для микроконтроллера PIC18 с индикацией

Recommended Posts

Здарова, инженеры. 

Не подсобите студню с заданием? 

Задание, если кому интересно:

Цитата

Разработать программу для управления устройством на базе PIC18, включающим две кнопки и единичный индикатор на светодиоде, подключенный непосредственно к микроконтроллеру. Кнопка 1 включает светодиод (выдача низкого уровня на вывод микроконтроллера), кнопка 2 - выключает. Срабатывание кнопок по отпусканию, предусмотреть обработку дребезга.

Я подчитнул некоторую теорию, про индикацию, матричную клавиатуру и её опрос. Но вот возникли след. вопросы/трудности:

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

2. Можно ли где-то посмотреть пример реализации таких клавиатур именно на PIC18? (Уж очень у меня не хватает практики по программированию устройств, всегда на уровне любителя работал на крестах и ему подобных языках для решения мелких проблем и забав)

3. Можно ли где-то смоделировать моё творение, т.е. посмотреть работоспособность? (MPLAB, proteus, xlinx)

4. На чем в данном случае рациональнее "кодить" - язык ассемблера или сишка?

Есть некоторый алгоритм для обработки дребезка контактов:

https://pp.userapi.com/c840123/v840123038/23a0/IjXofwjEmuc.jpg

Есть некоторая схемка, которую я в инете откопал:

https://pp.userapi.com/c840123/v840123038/23a7/-rD4tgCfvLs.jpg

Так же нашел небольшой код на просторах интернета (увы, он для AVR) :

Скрытый текст

#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRD = 0x00; // Порт D вход
PORTD = 0xFF; // Подключаем подтягивающие резисторы
DDRB = 0xFF; // Порт B выход
PORTB = 0x00; // Лог. 0 на выходе
while(1)
{
while ((PIND&(1 << PD0)) == 1){} // Ждем пока на выводе PDO лог. 1
_delay_ms(200); // Задержка 200мс
if ((PINB&(1 << PB0)) == 0) // Если на выводе PB0 лог. 0
{
PORTB |= (1 << PB0); // Лог. 1 на выводе PB0
}
else
{
PORTB &= ~(1 << PB0); // Лог. 0 на выводе PB0
}
while ((PIND&(1 << PD0)) == 0){} // Ждем пока на выводе PDO лог. 0
_delay_ms(200); // Задержка 200мс
}
}

 

Благодарю за каждый пендель в нужном направлении, тема-то хорошая. :)

 

Share this post


Link to post
Share on other sites

1. а куда вы ее еще можете подключить?

2. каких клавиатур??? две кнопки = два входа МК ,  половина тем в соответствующем разделе = жевание как нажать кнопку

3. мплаб, протез

4. знаете архитектуру - без разницы, на сях быстрее

5. алгоритм овно...

6. что мешает переделать для пик? 

Share this post


Link to post
Share on other sites
22 минуты назад, Speed Fighter сказал:

пендель в нужном направлении

это раздел Работа - там

 

23 минуты назад, Speed Fighter сказал:

инженеры

все сделают

 

22 минуты назад, Speed Fighter сказал:

студню

, который просрал лекции ...

Share this post


Link to post
Share on other sites

Импульсный источник питания - расчет за 10 минут в eDesignSuite

Как ориентироваться в огромном количестве существующих вариантов, чтобы выбрать наиболее подходящий для конкретного случая. «Ручной» перебор всех вариантов может оказаться весьма трудоемким процессом, а полученный результат – далеко не оптимальным. Специализированное программное обеспечение, позволяет уменьшить количество рутинных операций при проектировании.

Подробнее

@KRAB , да не, ошибка, я все лекции посетил. Проблема лишь в том, что мне тяжело усваивать материал без практического примера (я не говорю о том, что мне нужно именно ЭТО в качестве примера). Мне, например, в универе информатику преподавали (С++), так я тупо сам учил, так как я не воспринимал код, написанный с бумажки мелом на мокрой доске. А когда сам взял, прочитал статью, вырезку из книжки с примером, сам что-то сделал - то тут вот уже понимание пришло. 

Share this post


Link to post
Share on other sites
                     

Как упростить выбор ИП для промышленного применения?

Компания Mean Well выпускает широкий перечень встраиваемых источников питания с креплением на шасси, имеющих, на первый взгляд, схожие характеристики. Статья расскажет о ключевых особенностях выпускаемых семейств и упростит выбор источника питания для промышленного применения.

Подробнее

1 час назад, Speed Fighter сказал:

2. Можно ли где-то посмотреть пример реализации таких клавиатур именно на PIC18?

это примерно тоже самое, как просить азбуку для  6го класса

все примеры для чайников описаны на  пик16

Share this post


Link to post
Share on other sites
                     

Преимущества новых высоковольтных SOI-драйверов Infineon

При производстве драйверов силовых транзисторов компания Infineon использует различные технологии: JI, SOI, CT. Драйверы, выполненные с применением технологии SOI, имеют целый ряд преимуществ по сравнению с классическими JI-драйверами. В статье рассматриваются эти преимущества на примере новых семейств драйверов 650 В 2ED210x и 2ED218x.

Подробнее

Решение:

Скрытый текст

;программа для управления устройством на базе PIC18,
;включающая две кнопки и единичный индикатор на светодиоде,
;подключенный непосредственно к микроконтроллеру.
;Кнопка 1 включает светодиод
;(выдача низкого уровня на вывод микроконтроллера),
;кнопка 2 - выключает.
;Срабатывание кнопок по отпусканию,
;предусмотрена обработка дребезга.

;кнопка 1 - RA1
;кнопка 2 - RA0
;катод светодиода - RB7, анод светодиода к +5в

#include <p18f1230.inc>    ;подключаем файл определений мк

reg1    equ 0x00    ;регистр для временнОй задержки
reg2    equ 0x01    ;регистр для временнОй задержки
button    equ 0x02    ;состояние кнопок
            ;бит 0 - текущее состояние кнопки 2
            ;бит 1 - текущее состояние кнопки 1
            ;бит 2 - предыдущее состояние кнопки 2
            ;бит 3 - предыдущее состояние кнопки 1

org    0    ;начальный адрес программы
    clrf    INTCON    ;запрет всех прерываний
;инициализируем порты
    clrf    PORTA    ; Initialize PORTA by clearing output data latches
    clrf    LATA    ; Alternate method to clear output data latches
    movlw    03h    ; Configure A/D
    movwf    ADCON1    ; for digital inputs
    movlw    00h    ; Configure comparators
    movwf    CMCON    ; for digital input
    movlw    0FFh    ; Value used to initialize data direction
    movwf    TRISA    ; Set RA<7..0> as inputs
    bsf    PORTB,7
    bcf    TRISB,7    ; Set RB7 as outputs
;
;Основной цикл
;
loop
;задержка 10мсек при тактовой 4МГц
;рассчитано по http://www.labkit.ru/userfiles/file/soft/profit/Pause_ver1.2.rar
;delay = 10'000 machine cycles
    movlw    .251
    movwf    reg1
    movlw    .13
    movwf    reg2
wr    decfsz    reg1, F
    goto    wr
    decfsz    reg2, F
    goto    wr
    nop
    nop
;считываем кнопки
    rlcf    button    ;предыдущее состояние сдвигаем в биты 3,2
    rlcf    button
    movlw    0x0C    ;оставляем биты 3,2
    andwf    button,f
    movf    PORTA,w    ;текущее состояние кнопок
    andlw    0x03    ;оставляем биты 1,0
    iorwf    button,f;заносим в память
;проверяем состояние кнопок
    movlw    0x07    ;маска для кнопки 1
    cpfseq    button    ;если равно, то включаем светодиод
    goto    not_1
    bcf    PORTB,7
    goto    loop
not_1
    movlw    0x0B    ;маска для кнопки 2
    cpfseq    button    ;если равно, то выключаем светодиод
    goto    loop
    bsf    PORTB,7

    goto    loop
end

 

1,5 часа работы. Рассчёт 450р/ч.
 

cxema.JPG

Edited by солар

Я не раздаю удочки. Я продаю рыбу.

Share this post


Link to post
Share on other sites
10 часов назад, солар сказал:

Решение:

контрольный вАпрос препода "Почему это не будет работать в железе" и два бала студню :)

Share this post


Link to post
Share on other sites

Задание

В 10.05.2017 в 22:43, Speed Fighter сказал:

Разработать программу

, а не собрать в железе (ах уж эти банальные преподские вопросы про резистор в цепи светодиода... Хорошо, пусть питается от 3в... Хорошо, поставим резистор. Посчитать? Не вопрос. (Uпит - сколько_там_падает_по_даташиту)/сколько_там_ток_по_даташиту).

Шар на стороне препода. :)

Edited by солар

Я не раздаю удочки. Я продаю рыбу.

Share this post


Link to post
Share on other sites

мне кажется  в коде или в железе чего-то не хватает или нет?

Share this post


Link to post
Share on other sites

Походу студень ушел с отметкой в зачетке, а препод говорит сам с собой. :)


Я не раздаю удочки. Я продаю рыбу.

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • так К145ИК1901 и есть часы. Когда-то даже наборы для сборки на их основе выпускались. Или Вам нужны другие часы, на других комплектующих? Тогда зачес Вы выложили схему на ИК1901?
    • Немного подправил-причесал.
    • С чтения. Хотя бы https://radioland.getbb.ru/viewtopic.php?f=35&t=3406  А если не хотя бы, а как следует - то с серьёзных книг, постичь их вам будет легче как профессионалу в электронике.  Я вам могу объяснить, что начинать надо не с ламп, потому что лампы, кроме выпендрёжных, сравнительно дёшевы, что главное - это выходной трансформатор... Но тем самым в 100500й раз повторю хорошо известные аксиомы. Проще посидеть несколько вечерков и разобраться. А уже потом задавать вопросы в форумах по частным моментах, в которых возникли трудности.  Удачи!
    • Ну расскажи, какие же преимущества он дает? А затем расскажи, что же мешает сделать плавное управление лампой накаливания.
    • Ну если сильно не гнуть пальцы то вполне можно и прилично дешевле. Вот чего бы не стал брать бывшие советские. Технологии сейчас шагнули очень далеко и даже не очень дорогие полочники звучат вполне достойно. Ну да соглашусь что все нужно слушать и не брать совсем уж дешевые. Ну вот например https://www.pult.ru/product/akusticheskie-sistemy--akustika-/polochnaya-akustika/?currentTag=&kol=45&sort=catalog_PRICE_6&method=asc&prop[price][min]=8000&prop[price][max]=20000&min_price=8000&max_price=20000
    • Что то знакомое:    Это целая наука, в двух словах описать нельзя, читайте про построение УМ и их свойства... читать долго... параллельно с этим нужна практическая деятельность, просто читать бесполезно.
    • Дим , фазировку ДГС не попутай. Если спутаешь фазировку обмоток ДГС , то при нагрузке стаб.плеча , на другом будет значительный прирост напряжения. А полуобмотки ДГС должны быть сфазированы ВСТРЕЧНО-ПАРАЛЛЕЛЬНО. Мотаются на колечке сразу обе , а потом фазируются. П.С.  ДГС , напомню = рассчётная деталька.
  • Similar Content

    • By 42mg mdma
      Взялся за ремонт механической клавиатуры Corsair K63. После замены пары переключателей сделал пробное включение. Работает подсветка, но на нажатия не реагирует, так-же заметил что нагревается регулятор ax1117 a-33 17471. Пришёл сюда за советом и помощью!
    • By Misereli
      Здравствуйте.
      Хочу сделать свою клавиатуру на микроконтроллере Atmel (например, ATmega8).
      Знаю несколько видов схем: матричная клавиатура и резистивная.
      Реализация матричной клавиатуры требует использования большого количества ног на микроконтроллере .
      Реализация резистивной (в зависимости от напряжения, АЦП определяет какая нажата кнопка) не позволит зажимать сразу несколько клавиш. 

      На форумах "клаводелов" нашел интересную плату (satan gh60), на основе которой собирают клавиатуру. Она работает на atmega32u4, на плате распаяно множество резисторов. Несколько нажатий поддерживает.


      Если кто-то поделится мыслями как она работает, буду очень благодарен, т.к. самому мозгов не хватает 
      Об использовании специализированных МК прошу не упоминать, интересно сделать на ATmega.
       
    • By BonTens86
      Доброго времени суток господа!) Вопрос к знатокам, начал изучать С++, писать начал на PIC16F628A, по мере изучения столкнулся с несколькими проблемами, первая это нужна помощь с подключением тактовой кнопки к PIC, суть проблемы в том, что при нажатии кнопки светодиод загорается, если нажать еще раз, то ничего не происходит.... Вопрос в том, как сделать выключение на эту же кнопку???? 
      unsigned char CheckButton(void) { unsigned char result=0; unsigned int butcount=0; while(!RB2) { if(butcount < 10000) { butcount++; } else { result = 1; break; } } return result; } void kkk2 (void) { if(CheckButton ()) { RB3 = 1; { //__delay_ms(100); } return; } }  
    • By Arseniy Popov
      Добрый день! Необходимо подобрать микроконтроллер, который будет получать команды по serial от esp8266 и димировать RGBW светодиод по следующему алгоритму: 
      https://docs.google.com/document/d/1FkPLiIgxleuDQn8pjihICQGRrMPXbwFzqCt6StQZjhU/edit?usp=sharing
      а также написать для него прошивку на си.
      Отвечать можете в телеграм arsenicum32 или сюда.
      Пишите цену / сроки, находитесь ли в МСК и/или в области.
    • By mihmig
      От трагически погибшей клавиатуры осталась вполне рабочая плата (см. вложение):

      При замыкании перемычкой контакта из левой группы с контактом из правой группы в компьютер попадают символы. Если же замыкать контакт на "землю" в компьютер логично уходят несколько символов (как будто нажали несколько клавиш).
      Понимаю, что бред, но можно ли как-то контактами ардуино имитировать замыкание контактов между собой а не на землю?

      Да, я понимаю, что есть ардуино леонардо, но хотелось бы решить задачу с помощью микро/нано, т.к. в дальнейшем можно встраивать в существующие клавиатуры.
       

×
×
  • Create New...