PIC16F877 MCP23016 и I2C - ниид хелп

May 22, 2006 4 Replies

■ Послано в RU.EMBEDDED ■ Также послано в RU.RADIO.SAMOPAY ■ Также послано в TALKS.ASM ■ Также послано в RU.ASM.CHAINIK ■ Также послано в SU.HARDW.SCHEMES ■ Также послано в SU.HARDW.OTHER ■ Также послано в PC.CODING


Yo All!



Есть контроллер и 2 расширителя портов. Связаны по i2c. Резисторами линни подтянуты Пытаюсь реализовать запись/чтение, но ни чего не получается. Применяю схему из книги Майкла Предко, схожую с той, что в дукументации по контроллеру. Hе приходит бита подтверждения от адресуемого устройства. Что делать? Кда смотреть, что читать? Вот кусочек прошивки. Отладко на PICSTART (MPLAB IDE).


───────═════ Hачало файла iic.asm list p=16f877

include "p16f877.inc" errorlevel -302 ;suppress "not in bank 0" message #define BAUD D'100' ; Desired Baud Rate in kbps


#define FOSC D'4000' ; Oscillator Clock in kHz


;----------------------------------------------------------------------- ;Macros to select the register bank ;Many bank changes can be optimized when only one STATUS bit changes


Bank0 MACRO ;macro to select data RAM bank 0 bcf STATUS,RP0 bcf STATUS,RP1 ENDM


Bank1 MACRO ;macro to select data RAM bank 1 bsf STATUS,RP0 bcf STATUS,RP1 ENDM


Bank2 MACRO ;macro to select data RAM bank 2 bcf STATUS,RP0 bsf STATUS,RP1 ENDM


Bank3 MACRO ;macro to select data RAM bank 3 bsf STATUS,RP0 bsf STATUS,RP1 ENDM ;------------------------------------------------------------------------ Main ;1 Указываем направление линий SDA, SCL на вход Bank1 MOVLW B'00011000' MOVWF TRISC


;2 Разрешаем режим I2C модуля SSP Bank0 BSF SSPCON, SSPEN


BSF SSPCON, SSPM3 BCF SSPCON, SSPM2 BCF SSPCON, SSPM1 BCF SSPCON, SSPM0


; без номера добавляю RCEN Bank1 ; Configure Baud Rate ; BANKSEL SSPADD bsf SSPSTAT,7 movlw (FOSC / (4 * BAUD)) - 1 ; Calculates SSPADD Setting for movwf SSPADD ; desired Baud rate and sets up SSPADD


; BSF SSPCON2, RCEN


;3 Стартовые условия Bank1 BSF SSPCON2, SEN ; Этот бит должен перидически ;опрашиваться до сброса ;POS3 ; BTFSC SSPCON2, SEN ; GOTO POS3


; BANKSEL PIR1 ; BANK 0 Bank0 btfss PIR1,SSPIF ; Check if done with I2C operation goto $-1 ; I2C module is not ready yet bcf PIR1,SSPIF


;4 Загружаем адрес устройства, к которому нужен доступ Bank0 MOVLW b'0100000' MOVWF SSPBUF Bank1 BSF SSPSTAT, 2 ; бит R/-W -> 1 - задаётся операция чтения ; дальше он опрашивается до сброса - окончания чтения POS4 BTFSC SSPSTAT, 2 GOTO POS4


;5 Бит ACK принимающего усторойства должен контролироваться ; считыванием бита ACKDT (bit 5) в регистере SSPCON2 POS5 BTFSS SSPCON2, ACKDT GOTO POS5


HЕ ПРИХОДИТ ПОДТВЕРЖДАЮЩЕГО БИТА ОТ АДРЕСАТА

;6 адресс считываемого устройства -> SSPBUF Bank0 MOVLW B'00000000' MOVWF SSPBUF


;7 Если передаётся вторичный адрес, проверяем бит ACK ;Проверяем бит ACKDT в SSPCON2 Bank1 POS7 BTFSC SSPCON2, ACKDT GOTO POS7


;8 Можно инициировать новые стартовые условия bsf SSPCON2, SEN ;и дальше он обрабатывается до сброса POS8 BTFSC SSPCON2, SEN GOTO POS8


;9 для подтверждения или нет контроллером надо установить ;устанавливатся бит ACKEN Bank0 POS9 BSF SSPCON, ACKEN


;10 Бит RCEN регистра SSPCON2 должен инициировать операцию ;приёма байта данных Bank1 bsf SSPCON2, RCEN POS10 BTFSC SSPSTAT, BF ; опрашивается до приёма данных GOTO POS10


;11 (9) и (10) повторяются до приёма всех данных ;GOTO POS9


;12 условия остановки инициируются установкой бита PEN ;регистра SSPCON2 в дальнейшем этот бит опрашивается до сброса BSF SSPCON2, PEN POS12 BTFSC SSPCON2, PEN GOTO POS9


GOTO Main


END


───────═════ Конец файла iic.asm

ЗАРАHЕЕ БЛАГОДАРЕH.


WBR, Serg. ... WinNT Uptime: 1 day(s), 3 hour(s), 55 min.

В RU.HARDWARE.SEX забыл.

Использовать симулятор с целью убедиться в том, что выходные сигналы генерируются (не)правильно. Или в том, что входные сигналы воспринимаются (на)правильно.

Yo Kirill!

24 Мая 2006 года ты писал(а) к мне: "Re: PIC16F877 MCP23016 и I2C - ниид хелп"

KF> Использовать симулятор с целью убедиться в том, что выходные сигналы KF> генерируются (не)правильно. Или в том, что входные сигналы KF> воспринимаются (на)правильно.

В кратце не опишешь каким образом? Из меню IDE?

WBR, Serg. ... WinNT Uptime: 1 day(s), 0 hour(s), 8 min.

Выбрать пункт меню "Отладка", в выпадающем подмюеню пункт "Найсти все ошибки". В открывшемся диалоговом окне будут отображены найденные в программе ошибки. Для исправления ошибок следует нажать кнопку "Исправить опшибки" и закрыть окно. После исправления оибок программа должна работать без ошшибок,.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required