Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 19.06.2009, 11:39  
R-a-v-e-n
Частый гость
 
Регистрация: 08.05.2005
Сообщений: 13
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
R-a-v-e-n на пути к лучшему
По умолчанию Будет ли работать в железе (PCF8574)

Господа, возникла проблема. Использую расширитель порта PCF8574. С его помощью хочу реализовать матричную клавиатуру 4 на 4. Младший ниббл посылает сигнал, старший - принимает. Одновременное нажатие не планируется.
Ситуация такая: в присутствии резисторов R8..R11 при нажатии кнопки протеус ругается про логическое "столкновение" уровней (см. лог и желтые уровни на схеме) и код клавиши не распознается, оно и понятно: я подаю на порт одно значение, а при нажатой клавише оно получается другим... Когда убираю эти резисторы, протеус ругается про уровни (только в логе), но код клавиши распознается.

Прикладываю фрагмент схемы и внутреннее устройство PCF8574 из даташита.



Если "в реале" все сделать (БЕЗ РЕЗИСТОРОВ), не выгорит ли порт?

P.S. Или проще (частный случай): если на вывод 0 порта подать "0", а на вывод 4 подать "1" (т.е. записать в порт 0bxxx1xxx0) и соединить их между собой, не выгорит ли порт? Если это неправильно, то как правильно реализовать матричную клаву на этой девайсе?
Реклама:
R-a-v-e-n вне форума  
Непрочитано 19.06.2009, 11:56  
Vov123
Вид на жительство
 
Регистрация: 03.06.2007
Сообщений: 368
Сказал спасибо: 3
Сказали Спасибо 59 раз(а) в 52 сообщении(ях)
Vov123 на пути к лучшему
По умолчанию

Может надо попробовать поставить диоды?

Прикрепленный файл: 942470.rar
Vov123 вне форума  
Непрочитано 19.06.2009, 12:41  
R-a-v-e-n
Частый гость
 
Регистрация: 08.05.2005
Сообщений: 13
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
R-a-v-e-n на пути к лучшему
По умолчанию

Насколько я знаю, диоды нужны для защиты порта и правильного распознавания одновременно нажатых клавиш... Я делаю МИДИ-клавиатуру, там 64 нотных клавиши (они защищены диодами) и 16 управляющих кнопок. На фрагменте - управляющая клавиатура, там клавиши будут нажиматься по одной. Так что, думаю, дело не в диодах... На всякий случай попробовал поставить их в протеусе... Выдал кучу предупреждений, и в конце ошибку...
R-a-v-e-n вне форума  
Непрочитано 19.06.2009, 12:45  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Подпробуй вместе PULLUP поставить обыкновеные резисторы,тока в свойствах цифровые.
CERGEI1982 вне форума  
Непрочитано 19.06.2009, 13:10  
Vov123
Вид на жительство
 
Регистрация: 03.06.2007
Сообщений: 368
Сказал спасибо: 3
Сказали Спасибо 59 раз(а) в 52 сообщении(ях)
Vov123 на пути к лучшему
По умолчанию

Жаль конечно,что мой проектик не посмотрели.
В нем можно разместить 70 кнопочек.
В вашем случае надо использовать не расширитель порта,а параллельный порт,например PCA9554.
В нем вы должны настроить младшие разряды на выход,а старшие на вход.
Расширители работают либо все выводы на выход,либо все на вход.
Vov123 вне форума  
Непрочитано 19.06.2009, 13:57  
R-a-v-e-n
Частый гость
 
Регистрация: 08.05.2005
Сообщений: 13
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
R-a-v-e-n на пути к лучшему
По умолчанию

Сообщение от Vov123
Жаль конечно,что мой проектик не посмотрели.
Как не посмотрел? посмотрел! )) Просто 8574 уже прикупил... На предупреждения протеуса обратил внимание уже после покупки.
Сообщение от Vov123
Расширители работают либо все выводы на выход,либо все на вход.
Фишка-то в том, что их нельзя конфигурить... Когда пишем в порт - значит он на выход, если читаем - значит он на вход...
Заметил такую хитрость: протеус перестает ругаться, если кнопку нажимать чуть позже после выставления уровней в порте. Т.е. наступает какой-то момент, когда порт "перестает" быть выходом. И ждет дальнейших указаний: либо будем менять уровни "извне" и потом читать состояние порта; либо изменять их "изнутри" путем записи в порт.
P.S. А вопрос бы все-таки о том, будет ли такая штука работать в реале:
Сообщение от R-a-v-e-n
P.S. Или проще (частный случай): если на вывод 0 порта подать "0", а на вывод 4 подать "1" (т.е. записать в порт 0bxxx1xxx0) и соединить их между собой, не выгорит ли порт?
R-a-v-e-n вне форума  
Непрочитано 19.06.2009, 14:31  
Vov123
Вид на жительство
 
Регистрация: 03.06.2007
Сообщений: 368
Сказал спасибо: 3
Сказали Спасибо 59 раз(а) в 52 сообщении(ях)
Vov123 на пути к лучшему
По умолчанию

Сообщение от R-a-v-e-n
А вопрос бы все-таки о том, будет ли такая штука работать в реале:
Я думаю скоро это мы узнаем,от вас.

Сообщение от R-a-v-e-n
P.S. Или проще (частный случай): если на вывод 0 порта подать "0", а на вывод 4 подать "1" (т.е. записать в порт 0bxxx1xxx0) и соединить их между собой, не выгорит ли порт?
Извините за шутку,это как в анекдоте про сверхскорость-высунуть задницу из окна 5 этажа и выбежать посмотреть на улицу как она мигнёт.
Так и вы,сначала хотите послать туда сигнал,а потом думая что он будет там жить своей жизнью его прочитать.
Ещё раз извините,если оскорбил.
Vov123 вне форума  
Непрочитано 19.06.2009, 15:51  
R-a-v-e-n
Частый гость
 
Регистрация: 08.05.2005
Сообщений: 13
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
R-a-v-e-n на пути к лучшему
По умолчанию

Нет, за оскорбление я это не принял... но задумался насчет задницы... )) В чем-то Вы правы... Но! Разве чтение состояния порта как-то влияет на само состояние? Если я выставил какое-то состояние, то оно так и будет существовать "своей жизнью" пока я его не сменю. А если учесть, что выводы порта при подаче на них "1" подтягиваются в VCC внутренним pull-up'ом, то не исключено, что эта бадяга будет работать(т.е. можно его этот вывод "перетянуть" на землю). В-общем, спасибо за советы (особенно за совет по переходу на 9554 (благо, у них распиновки совпадают!)), теперь можно спокойно палить порт. ))) И случае летального исхода заменить 8574 на 9554, немного изменив прошивку.
P.S. Хотя в инете видел буржуйские статьи (даже библиотеки СИшные) по подключению матриц к сабжевому девайсу. Но они меня не впечатлили...
R-a-v-e-n вне форума  
Непрочитано 19.06.2009, 17:43  
56yura
Прохожий
 
Регистрация: 12.04.2005
Сообщений: 4
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
56yura на пути к лучшему
По умолчанию Будет ли работать в железе (PCF8574)

Писал как-то на асме программу управления воротами с клавиатурой на пцф8574. В Протеусе всё работает идеально.
В реальности проверял, работает!
Код на асме вот:

;f=14.318MHz
list p=16F876A
#include ‹p16F876A.inc›
#include ‹makros.inc›
#include ‹flags.inc›

GLOBAL keyb_ini, key_scan, key_code
EXTERN start_u, stop_u, bit_in, bit_out, ms5, send, resive
EXTERN flag2, tmp

k_dat UDATA
key_stolb RES 1 ;прочитанные столбцы
key_str RES 1 ;прочитанные строки
key_code RES 1 ;код нажатой клавиши
cnt_init RES 1 ;счетчик ошибок инициализации клавиатуры.
;************************************************* *************
; Подготовка клавиатуры к работе
;************************************************* *************
k_board CODE
keyb_ini
bcf INTCON,GIE ;чтоб прерывания не мешали
call start_u ;Передаем условие начала
movlw kbAddr_W ;Передаем адрес модуля для записи(kbAddr_W)
INI1
clrf cnt_init
call send
xorlw .1
btfss STATUS,Z
goto yes_KB
incf cnt_init, F
movlw .20
subwf cnt_init, W
btfsc STATUS,C
goto INI1
bsf no_kb
return
yes_KB
movlw 0F0h
call send ;Передаем один байт в PCF8574 клавиатуры
call stop_u ;Передаем условие завершения передачи
return
; ---------------------------------------------------------
; Сканирование клавиатуры по I2C шине ---------------------
; ---------------------------------------------------------
key_scan
call start_u ;|При прерывании от модуля клавиатуры
movlw kbAddr_R ;|прочитаем состояние столбцов
call send ;|клавиатуры (P4-P7) PCF8574
call resive ;|
movwf key_stolb ;|ЗАПОМНИМ состояние столбцов в key_stolb
call stop_u ;|

call start_u ;|Далее пошлем "0" на строки и "1" на столбцы
movlw kbAddr_W ;|чтобы вычислить строку нажатой кнопки.
call send ;|
movlw 0Fh ;|
call send ;|
call stop_u ;|

call start_u ;|прочитаем состояние строк
movlw kbAddr_R ;|клавиатуры (P0-P3) PCF8574
call send ;|
call resive ;|
movwf key_str ;|ЗАПОМНИМ состояние строк а key_str
call stop_u ;|
;======= Подготовим расширитель в начальное состояние
key_1
call start_u ;Передаем условие начала
movlw kbAddr_W ;Передаем адрес модуля для записи(kbAddr_W)
call send
movlw 0F0h
call send ;Передаем один байт данных в PCF8574 клавиатуры
call stop_u ;Передаем условие завершения

call start_u ;Передаем условие начала
movlw kbAddr_R ;Передаем адрес модуля для записи(kbAddr_W)
call send
call resive
movwf tmp
call stop_u ;Передаем условие завершения
movlw 0F0h ;Отсюда выходим ТОЛЬКО когда кнопки отпущены.
xorwf tmp
btfss STATUS, Z
goto key_1
;просканировали, надобно расшифровать результат...
;======= Расшифруем строки
clrf key_code
btfss key_str,3 ;3 бит PCF =0,тогда 1 2 3 A ;код =0
goto add_next
btfss key_str,2 ;2 бит PCF =0,тогда 4 5 6 B ;код =4
goto add_4
btfss key_str,1 ;1 бит PCF =0,тогда 7 8 9 C ;код =8
goto add_8
btfss key_str,0 ;0 бит PCF =0,тогда * 0 # D ;код =12
goto add_12
movlw .127 ;сюда приходим, если ошибка.
movwf key_code
goto _err ;идем прямо в конец подпрограммы

add_4 movlw .4
movwf key_code
goto add_next
add_8 movlw .8
movwf key_code
goto add_next
add_12 movlw .12
movwf key_code

;======= Расшифруем столбцы
add_next
btfss key_stolb,7 ;7 бит PCF =0,тогда 1 4 7 * ;код =код+0
goto key_end
btfss key_stolb,6 ;6 бит PCF =0,тогда 2 5 8 0 ;код =код+1
goto add_1
btfss key_stolb,5 ;5 бит PCF =0,тогда 3 6 9 # ;код =код+2
goto add_2
btfss key_stolb,4 ;4 бит PCF =0,тогда A B C D ;код =код+3
goto add_3
movlw .128 ;сюда приходим, если ошибка.
addwf key_code,f
goto _err ;идем прямо в конец подпрограммы

add_1 movlw .1
addwf key_code
goto key_end
add_2 movlw .2
addwf key_code
goto key_end
add_3 movlw .3
addwf key_code

key_end
bcf STATUS, C
movlw .15
subwf key_code,w
btfsc STATUS, C
goto _err
table_read tab_key, key_code
movwf key_code
bsf KB ;и установим флажек
return
_err
bcf KB ;и снимем флажек
movlw h'FF'
movwf key_code
return
tab_key
addwf PCL, f
retlw .1 ;0
retlw .2 ;1
retlw .3 ;2
retlw A'A' ;3
retlw .4 ;4
retlw .5 ;5
retlw .6 ;6
retlw A'B' ;7
retlw .7 ;8
retlw .8 ;9
retlw .9 ;10
retlw A'C' ;11
retlw A'#' ;12
retlw .10 ;13
retlw A'*' ;14
retlw A'D' ;15
end
‹center›
-- Прилагается рисунок: --
‹IFRAME src = "nuke/users_images/19062009/7522569.gif" frameborder="0" name="fr4744837" scrolling="yes" width="470" height="350" align="bottom"›[img]nuke/users_images/19062009/7522569.gif[/img]
‹font color=red›Рисунок не умещается на странице и поэтому сжат!‹/font›
Для того, чтобы просмотреть его полностью, щелкните здесь.

‹/IFRAME›
‹/center›
56yura вне форума  
Непрочитано 19.06.2009, 21:06  
R-a-v-e-n
Частый гость
 
Регистрация: 08.05.2005
Сообщений: 13
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
R-a-v-e-n на пути к лучшему
По умолчанию

Большое спасибо! Сдается мне, что это код для PICа... Давно я их не программил... Ну да ладно, понял одно: принцип вроде тот же, что и у меня: подать, и тут же считать:
Сообщение от 56yura
call start_u ;|Далее пошлем "0" на строки и "1" на столбцы
movlw kbAddr_W ;|чтобы вычислить строку нажатой кнопки.
call send ;|
movlw 0Fh ;|
call send ;|
call stop_u ;|

call start_u ;|прочитаем состояние строк
movlw kbAddr_R ;|клавиатуры (P0-P3) PCF8574
call send ;|
Значит, должно работать. Завтра попробую развести плату и проверить. Хотя ее еще нарисовать надо... )
R-a-v-e-n вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверяем efald "в железе"... PacinkSN Электроника - это просто 61 22.07.2010 18:12
Зарядное устройство КОС 511 =будет ли заряжать АА=2500-2700 Patcak-1 Источники питания и свет 5 24.12.2008 17:20
Что будет, если подключить транс на 220 вольт к 110? Superki Источники питания и свет 4 24.08.2008 23:49
Нужна схема устройства, которая от света будет пищать. KJuise Автоматика и аппаратура связи 3 09.02.2008 06:43
Реально ли такое (речь будет идти об АЧХ, ФЧХ): Romix Электроника - это просто 13 13.07.2007 13:22


Часовой пояс GMT +4, время: 16:00.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot