Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Стандартная клавиатура (Для ПИК676)
Стандартная клавиатура
mikhail09p Дата: Вт, 27.07.2010, 20:16  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Стандартный оператор INKEY не работает на этом ПИКе, да и одну линию некуда подключить...
Может, кто знает, как сделать врукопашную опрос кнопок? А то я ещё только учусь и не очень понимаю...
ЯНДЕКС Дата: 27.07.2010
vladh5916 Дата: Вт, 27.07.2010, 20:48  |                                                                                                                Сообщение # 2
Группа: Удаленные
Ранг: 
Сообщений:
Репутация:   ±
Замечания:   ±
На сайте с

Статус:

А у меня работает. И в живую, и в Протеусе. Уважаемый mikhail09p, выложите свой пример на обозрение и надеюсь мы Вам поможем.
Сообщение отредактировал vladh5916 - Вт, 27.07.2010, 20:57
mikhail09p Дата: Вт, 27.07.2010, 21:32  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Я имею ввиду, что в ПИК676 мало портов. Какой выход? Или я чего-то не допонимаю?
Пример у меня - кодовый замок, где нужно опрашивать клаву.
Прикрепления: Zamok_676.rar (39.9 Kb)
vladh5916 Дата: Ср, 28.07.2010, 09:13  |                                                                                                                Сообщение # 4
Группа: Удаленные
Ранг: 
Сообщений:
Репутация:   ±
Замечания:   ±
На сайте с

Статус:

Quote (mikhail09p)
Я имею ввиду, что в ПИК676 мало портов. Какой выход?

1. Портов хватает, а вот разрядов в имеющихся портах маловато. Поэтому возьмите контроллер с большим числом ножек.
2. Когда Вы отправляете кому- то код программы или схему для консультации, делайте хотя бы краткое описание того, что Вы хотели бы получить. Тем более в Вашем случае Вы высылаете код - очень черновой вариант, в котором например присутствует оператор Print ну и некоторое другое. Разбираться в этом коде все равно что подбирать код в Вашем замке biggrin
3. И тем не менее оператор Inkey у Вас работает. Когда Вы симулируете некоторую программу в Протеусе, то в свойствах контроллера загружайте не hex файл, а bas. И тогда Вы сможете включать в программе точки останова, с помощью которых контролировать ход выполнения программы. Я Вам отсылаю назад Вашу схему с программой несколько подправленных мной. Если нажать на кнопку "2", то выполнение программы остановится на точке выбранной мной и можно увидеть в списке переменных измененную переменную Key.
Прикрепления: Zamok_676.zip (51.2 Kb)
ivan_fd Дата: Ср, 28.07.2010, 15:37  |                                                                                                                Сообщение # 5
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Посмотрите в примерах Протона, пример Keypad.bas. Это как раз врукопашную! biggrin
mikhail09p Дата: Ср, 28.07.2010, 20:15  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Quote (vladh5916)
Поэтому возьмите контроллер с большим числом ножек.

Спасибо за дельный совет, но я ж написал: надо под 676!

ivan_fd, Зачем загадки, я ж прошу помощи...

vladh Дата: Ср, 28.07.2010, 23:21  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 258
Репутация: 11   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Quote (mikhail09p)
Спасибо за дельный совет, но я ж написал: надо под 676! ivan_fd, Зачем загадки, я ж прошу помощи...

А какой помощи Вы хотите. Может быть денег на которые этот замок можно было бы приобрести? cool Люди Вам дают действительные советы, причем исходя из Вашего скудного описания, а Вы при этом высказываете обиду. Я подозреваю, что в таком "разрезе", Вам советы давать неприятно.
brown Дата: Ср, 28.07.2010, 23:28  |                                                                                                                Сообщение # 8
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

ivan_fd, Вам правильно подсказывает где нужно искать примеры нужного вам кода.
Правда в протоне не нашел, а вот в РВР есть пример 16 кнопок (4*4 матрица). У вас телефонная клава 4*3, с возможной оговоркой. Попробуйте адаптировать подпрограму для ваших нужд.
Code
' PicBasic Pro program to display key number on LCD

' Define LOADER_USED to allow use of the boot loader.
' This will not affect normal program operation.
Define    LOADER_USED    1

' Define LCD connections
Define  LCD_DREG        PORTD
Define  LCD_DBIT        4
Define  LCD_RSREG       PORTE
Define  LCD_RSBIT       0
Define  LCD_EREG        PORTE
Define  LCD_EBIT        1

' Define program variables
col     var     byte            ' Keypad column
row     var     byte            ' Keypad row
key     var     byte            ' Key value

         OPTION_REG.7 = 0        ' Enable PORTB pullups

         ADCON1 = 7              ' Make PORTA and PORTE digital
         Low PORTE.2             ' LCD R/W low (write)

         Pause 100               ' Wait for LCD to start

         Lcdout $fe, 1, "Press any key"  ' Display sign on message

loop:   Gosub getkey            ' Get a key from the keypad
         Lcdout $fe, 1, #key     ' Display ASCII key number
         Goto loop               ' Do it forever

' Subroutine to get a key from keypad
getkey:
         Pause 50                ' Debounce

getkeyu:
         ' Wait for all keys up
         PORTB = 0               ' All output pins low
         TRISB = $f0             ' Bottom 4 pins out, top 4 pins in
         If ((PORTB >> 4) != $f) Then getkeyu    ' If any keys down, loop

         Pause 50                ' Debounce

getkeyp:
         ' Wait for keypress
         For col = 0 to 3        ' 4 columns in keypad
                 PORTB = 0       ' All output pins low
                 TRISB = (dcd col) ^ $ff ' Set one column pin to output
                 row = PORTB >> 4        ' Read row
                 If row != $f Then gotkey        ' If any keydown, exit
         Next col

         Goto getkeyp            ' No keys down, go look again

gotkey: ' Change row and column to key number 1 - 16
         key = (col * 4) + (ncd (row ^ $f))
         Return                  ' Subroutine over

         End


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
terrarus Дата: Чт, 29.07.2010, 08:45  |                                                                                                                Сообщение # 9
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 17   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

Quote (mikhail09p)
Поэтому возьмите контроллер с большим числом ножек.
Спасибо за дельный совет, но я ж написал: надо под 676!
ivan_fd, Зачем загадки, я ж прошу помощи...

Ну Вот, умный человек дает дельный совет, а вы как младенец: ''ХОЧУ...'' (а может быть лучше на транзисторе П4Б и диодах Д7Ж ?)
В PIC 16f676 порт С имеет всего 6 выводов RC0...RC5, а для InKey нужно в сокращенном варианте 7, а в полном 8.
Этот оператор предназначен для работы с матричными клавиатурами размерами 4 х 4 или 3 х 4 клавиши.
И переопределить порт можно только целиком, а не кусочками взять из любого порта столкь выводов сколько хочется.
Если все же "ХОЧУ 676", тогда откажитесь от оператора InKey и пишите тогда на ассемблере.... Или другой вариант - тоже откажитесь от InKey и используйте структуру. типа ...
If PORTC.0 = 0 THEN knopka0 = 1: .....
If PORTC.1 = 0 THEN knopka1 = 1: .....
If PORTC.2 = 0 THEN knopka2 = 1: .....
If PORTC.3 = 0 THEN knopka3 = 1: .....
If PORTC.4 = 0 THEN knopka4 = 1: .....
If PORTC.5 = 0 THEN knopka5 = 1: .....
If PORTA.0 = 0 THEN knopka6 = 1: .....
If PORTA.1 = 0 THEN knopka7 = 1: .....
If PORTA.2 = 0 THEN knopka8 = 1: .....
If PORTA.3 = 0 THEN knopka9 = 1: .....

А InKey описана на http://www.terrarus.ucoz.ru/proton_....ey.html


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Сообщение отредактировал terrarus - Чт, 29.07.2010, 09:08
mikhail09p Дата: Чт, 29.07.2010, 12:12  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Ребята, не надо обижатся, я, наверное, не так понял!
Просто взять другой контроллер не так легко, как вы понимаете.

Большое спасибо за помощь, попробую написать опрос кнопок так, как вы посоветовали. smile

ivan_fd Дата: Чт, 29.07.2010, 14:29  |                                                                                                                Сообщение # 11
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Quote (brown)
Правда в протоне не нашел, а вот в РВР есть пример 16 кнопок (4*4 матрица).

smile Этот пример у меня как раз в папке Samples Протона.

Quote (mikhail09p)
ivan_fd, Зачем загадки, я ж прошу помощи...

Какие загадки, я вам дал рабочий пример.

Удачи!

ЯНДЕКС Дата: 29.07.2010
mikhail09p Дата: Вс, 01.08.2010, 21:24  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Подскажите, пожалуйста, как заставить работать ПИК676 от внутреннего генератора.
Прикрепления: Zam_676.rar (24.6 Kb)
brown Дата: Вс, 01.08.2010, 22:15  |                                                                                                                Сообщение # 13
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Такой режим включается битами конфигурации, что вы и делали.
Попробуйте вот такую строку:
CONFIG CPD_OFF, CP_OFF, BODEN, MCLRE_OFF, PWRTE_OFF, WDT_OFF, INTRC_OSC_NOCLKOUT


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
mikhail09p Дата: Вс, 01.08.2010, 22:45  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

brown, прокоментируйте CPD_OFF и INTRC_OSC_NOCLKOUT, пожалуйста.
И надо ли устанавливать биты FOSC0-FOSC2 ?

А Ваша строка работает, спосибо, буду дальше писать.

Сообщение отредактировал mikhail09p - Вс, 01.08.2010, 22:52
brown Дата: Пн, 02.08.2010, 00:18  |                                                                                                                Сообщение # 15
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Эту строку выдал мне плагин для протона, который генерит CONFIG.
CPD_OFF - защита от считывания памяти данных выкл.
INTRC_OSC_NOCLKOUT - устанавливает биты FOSC0-FOSC2 .


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Стандартная клавиатура (Для ПИК676)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: