컨트롤러"읽기

E

elpintas

Guest
안녕 모두,

난 (C18)를 전 마이크로 칩에서 예를 들어 제 기능을 수행하는 응용 프로그램을 사용하여 메모를 991거야 프로그래밍, 내가 읽을 수 내 기억에 내가 25MHz의에서 간단한 프로그램에서 작동 쓰기 24LC1025 바이트 EEPROM이 사용하고있습니다.
하지만 내가 바이트를 읽을 수는 있지만 난 바이트 스택을 쓸 수없습니다 tcpip 내 현재 코드에서이 기능을 추가하려고합니다.난, 25MHz의에 대한 0x3D이며, 대한 tcpip 내가 0x67이 41.6Mhz 스택 SSP2ADD에서 diference 두 프로그램에서 동일한 설정했다.그리고 비트 레이트 100kHz, 또한, 난 4.7K 풀다운 SCL과 SDA는 최대의 저항했다.
만약 내가 400kHz와 같은 다른 비트 레이트로 작업을해야 나도 모르겠어요.

이러한 MSSP 모듈의 제 설정이있습니다 :

/ / 여기에 외장 메모리에 설치 가능한 I2C입니다
DDRDbits.RD6 = 1; / / 구성 SCL2
/ /로 입력
DDRDbits.RD5 = 1; / / 구성 SDA2
/ /로 입력

/ / OpenI2C (마스터, SLEW_ON);
SSP2STAT = 0x80으로; / / 비활성화 SMBus는 &
/ / 슬루율 제어
SSP2CON1 = 0x28; / / MSSP 마스터 활성화
SSP2ADD = 0x67; / /해야
/ / 100kHz에 대한
SSP2CON2 = 0x00; / / 지우기 MSSP Conrol 비트

이러한 쓰기 내 위치와 기능을 읽습니다 :

숯불 ByteWriteI2C 서명 (서명 숯불 ControlByte, 서명 HighAdd 숯불, 숯불 LowAdd 서명, 서명 숯불 데이터)
(
IdleI2C2 (); / / 모듈을 위해 유휴 상태입니다
StartI2C2 (); / / 시작 조건을 시작
반면 (SSP2CON2bits.SEN); / / 시작 조건 때까지 기다릴 끝났습니다
WriteI2C2 (ControlByte); / / 0해야 1 바이트 - 읽기 / 쓰기 비트 쓰기
IdleI2C2 (); / / 모듈을 위해 유휴 상태입니다
WriteI2C2 (HighAdd); / / EEPROM은 바이트 주소를 써주세요
IdleI2C2 (); / / 모듈을 위해 유휴 상태입니다
WriteI2C2 (LowAdd); / / EEPROM은 바이트 주소를 써주세요
IdleI2C2 (); / / 모듈을 위해 유휴 상태입니다
WriteI2C2 (데이터); / / 데이터를 EEPROM은 바이트 쓰기
IdleI2C2 (); / / 모듈을 위해 유휴 상태입니다
StopI2C2 (); / / 정지 상태를 보내려면
반면 (SSPCON2bits.PEN); / / 중지 상태 때까지 기다릴 끝났습니다
완료주기 동안 쓰기 위해 (EEAckPolling2 (ControlByte)); / / 잠깐 만요
수익 (0); 아무 오류와 함께 / / 반환
)

숯불 ByteReadI2C 서명 (서명 숯불 ControlByte, 서명 HighAdd 숯불, 숯불 LowAdd 서명, 서명 숯불 * 데이터, 서명 숯불 길이)
(
IdleI2C2 (); / / 모듈을 위해 유휴 상태입니다
StartI2C2 (); / / 시작 조건을 시작
반면 (SSP2CON2bits.SEN); / / 시작 조건 때까지 기다릴 끝났습니다
WriteI2C2 (ControlByte); / / 1 바이트 쓰기
IdleI2C2 (); / / 모듈을 위해 유휴 상태입니다
WriteI2C2 (HighAdd); / / EEPROM은 한마디 주소를 쓰세요
IdleI2C2 (); / / 모듈을 위해 유휴 상태입니다
반면 (SSP2CON2bits.RSEN); / / 다시 시작할 때까지 대기 - 상태가 이상합니다
WriteI2C2 (LowAdd); / / EEPROM은 한마디 주소를 쓰세요
IdleI2C2 (); / / 모듈을 위해 유휴 상태입니다
RestartI2C2 (); / / I2C 버스 상태를 다시 생성
반면 (SSP2CON2bits.RSEN); / / 다시 시작할 때까지 대기 - 상태가 이상합니다
WriteI2C2 (ControlByte | 0x01); / / 1은 읽기해야 1 바이트 - 읽기 / 쓰기 비트 쓰길
IdleI2C2 (); / / 모듈을 위해 유휴 상태입니다
getsI2C2 (데이터, 길이); / / 여러 바이트 읽기
NotAckI2C (); / / 상태는 ACK를 보낼
반면 (SSP2CON2bits.ACKEN); / / ACK는 시퀀스 때까지 기다릴 끝났습니다
StopI2C2 (); / / 정지 상태를 보내려면
반면 (SSP2CON2bits.PEN); / / 중지 상태 때까지 기다릴 끝났습니다
수익 (0); 아무 오류와 함께 / / 반환
)

제가 쓸려고 프로그램 코드를 아래에 굵은 라인을 중지

숯불 WriteI2C2 서명 (서명 숯불 data_out)
(
SSP2BUF = data_out; / / 쓰기 단일 바이트 SSP2BUF에
만약 (SSP2CON1bits.WCOL) / / 테스트하는 경우 충돌이 발생 쓰기
WCOL 비트가 설정된 경우 반환 (-1); / / 마이너스로 돌아가기 #
그 밖의
(

쓰기주기까지하면서 (SSP2STATbits.BF); / / 잠깐 완료

IdleI2C2 (); / / 모듈을 위해 유휴 상태입니다
만약 (SSP2CON2bits.ACKSTAT) / ACK는 조건으로받은 / 테스트
반환 (-2);
다른 수익 (0); / / 비트를 반환하는 경우 WCOL 음수가 아닌 설정되지 않습니다 #
)
)

누구 좀 도와 주시겠어요?

 

Welcome to EDABoard.com

Sponsor

Back
Top