2013-11-25 2 views
4

8 Beaglebone Black (Ubuntu 실행)과 i2c를 사용하여 제어하려고하는 4 자리 7 세그먼트 표시가 있습니다.Python i2c write_bus_data 사용법

SSD는 Byvac BV4614와 전체 데이터 시트 is available here입니다.

Beaglebone의 P9_19 및 P9_20 핀을 사용하여 올바르게 회로를 배선했습니다. 나는 풀업 저항기를 포함하고 안전성을 높이기 위해 i2c logic converter을 사용하고 있습니다.

i2cdetect (올바른 0x31 임)를 사용하여 장치를 확인했으며 장치의 전원을 켜고 i2c 모드로 전환했습니다.

그러나 Python SMBbus를 사용하여 장치에 데이터를 읽거나 쓰는 방법을 이해하지 못합니다. SSD를 매뉴얼이 그 명령에 따라 다른 바이트이어서하는 수이고,이 장치가 사용

형식 명령으로 구성했다. I2C 프로토콜을 사용하여 장치에 쓰는 방법 은 일관된 형식을 따릅니다. 일반적으로 S-Addr은 시작 조건 다음에 장치 주소 (0x62)가옵니다. 명령은 표에 주어진 명령 중 하나 인 입니다. 데이터는 하나 이상의 바이트이며 Stop 이 중지 조건입니다.

(7 비트 주소 지정 장치는 0x31에 있습니다.)

그래서 예를 들어 나는 수동 내가

명령 5 할 필요가 말한다 자리 하나에 번호를 표시하기 위해 SSD를 얻기 위해 원하는 경우 - 이름 : 자리에 숫자를 보내기 - 형식 : < S-을 요지 > <5> < 자리 > < 바이트 > < 정지 > 내 질문은

, 나는 COM 것을 어떻게 쓰는가 명령은 파이썬을 사용합니까? 내가 원하는

import smbus 
b = smbus.SMBus(1) 
b.write_byte_data(0x31, 0x35, 0x30, 0x38) 

이 의미하는 나는 이런 식으로 뭔가를 찾고 있어요 생각한다 "장치 0x31로 회신, 숫자 0 (0x30에)에 명령 5 (0x35)를 보낼 수를 표시 8 (0x38로)"하지만, wrrite_byte_data는 해당 개수의 인수를 허용하지 않습니다. 또한 write_i2c_block_data()를 사용하여 더 많은 희망을 보였지만 다시 올바르게 함수를 사용하는 방법을 찾지 못했습니다.

나는 여기 BCK 문제에 직면하고 있다고 생각하지만 어떤 도움을 주시면 감사하겠습니다.

편집 확인은, I는

b.write_block_data (0x31로 회신 5 [8 0x38로]) 시도

8 자리 3

B에 나타날 수있게

. write_block_data (0x31, 5, [2])

숫자 2에 2를 표시합니다. 아직 숫자 1이나 4에 아무 것도 배치하는 방법을 아직 찾지 못했습니다.

b.write_block_data (0x31로 회신, 4, [44]) # 단지 임의의 물건을 들어 지금

밝기가 증가하고 SSD가 응답한다.

그래서 나는

편집을 점점 더 가까이하고 안되게 쉬웠다 결국

해결하고있다.

b.write_i2c_block_data(0x31, 5, [0, 8]) # write number 8 to digit 0 
b.write_i2c_block_data(0x31, 5, [4, 5]) # write number 5 to digit 4 etc etc 

http://www.raspberry-projects.com/pi/programming-in-python/i2c-programming-in-python/using-the-i2c-interface-2에 따르면 함수 write_block_data은 매우 좋지 않다.

write_block_data (INT 요지 숯불에 cmd 긴 발스 [])

가 장치에 32 바이트까지 적는다. 이 함수는 valls 배열 앞에 vals 배열의 길이를 나타내는 초기 바이트 을 추가합니다. 대신 write_i2c_block_data를 사용하십시오!

+0

단지 의견 : 숫자는 0-3 범위 내에 있어야합니다. –

답변