Порты PIC16C505
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Cioma 08 января 2003 г. 03:22

Задача: реализовать интерфейс PIC16C505 с iButton (TouchMemory) и I2C EEPROM. Пин МК, к которому идёт DQ от TM используется как "псевдовывод с открытым коллектором" (TRIS=1, PORT=0). Вывод подтянут к Vcc. Соответственно для приёма инфы и передаци лог.1 ничего не меняется, а для передачи лог.0 делаем TRIS=0. Аналогично реализована SDA для EEPROM. SCL всегда настроена на выход. И DQ, и SDA, и SCL подключены к одному порту. Можно ли как-нибудь обойти ограничение порта МК не используя зеркала портов? Ведь, как известно, данный МК не умеет читать выходную защёлку порта, а читает всегда значения непосредственно на пинах порта, что вызывает известные проблемы с BSF/BCF PORTx. Например, если я дёргаю ногой SCL, то при этом в вых. защёлку ног SDA и DQ может записаться лог.1, в то время, как требуется наличие там лог.0. Для обхода данного ограничения я использую зеркала портов. Но при этом чтобы сформировать импульс на SCL (например) надо как минимум 6 комманд:

bsf I2C_mirror,SCL_pin
movf I2C_mirror,W
movwf I2C_port

bcf I2C_mirror,SCL_pin
movf I2C_mirror,W
movwf I2C_port

В таких условиях невозможно реализоваль макс. скорость обмена с EEPROM (400 кбит/с), т.к. частота МК - 4 МГц. Можно ли как-либо напрямую дёргать ногами порта, чтобы и при этом в вых. защёлках (PORT) других пинов этого порта инфа не менялась.


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru