파워서플라이로 모듈 사용시 주의사항

임베디드 2014. 8. 2. 12:41

 매번 파워서플라이를 만지면서도 아차 하는 실수로 모듈 하나가 타버리는 실수를 해버렸습니다. 파워서플라이를 옮기던 중 눈금이 돌아가 있던 듯 한데 수치를 보지 않고 그냥 모듈에 연결해 버린것이 화근이었던 듯 합니다.




 이렇게 모듈이 타버려 두 번 다시 사용할 수 없는 상황이 되어버린다면 정말 마음아프지 않을 수 없습니다. 특히 고가격의 모듈이라면 스트레스가 상당할 겁니다.


 임베디드 분야를 공부하시는 분들이라면 매우 기본적인 상식이기도 하지만 순간의 실수로 비싼 모듈을 망가뜨릴 위험이 있습니다. 원숭이도 나무에서 떨어질 때가 있듯이 말이지요. 파워서플라이를 사용할 때 마다 다음과 같은 수칙을 확인하고 사용하도록 합시다.


 1. 파워서플라이를 켜기 전 가급적이면 모듈과 분리시킨 후 키도록 합니다.

 2. 모듈에 파워서플라이를 연결하기 전, 파워서플라이가 해당 모듈의 정격전압에 맞는지 확인합니다.

 3. 모듈에서 이상이 발생시 즉시 파워서플라이로부터 모듈을 떼어내 버립니다.

 4. 파워서플라이를 사용 후 반드시 전원을 끄도록 합니다.

300x250

[Tiva] I2CMasterSlaveAddrSet()

임베디드/TI 2014. 8. 1. 21:02

I2CMasterSlaveAddrSet(uint32_t ui32Base, uint8_t ui8SlaveAddr, bool bReceive)


 이 함수는 MCU가 I2C 통신을 개시하기 전에 통신할 Slave의 주소값을 설정한 후 통신을 개시할 때 쓰는 함수이다.


uint32_t ui32Base

첫 번째 인자는 I2C 통신을 하게 될 Master 의 Base Address이다.


uint8_t ui8SlaveAddr

두 번째 인자는 I2C 통신시 전달할 Slave의 Address이다. 이 때 Slave의 Address값은 7bit값이어야 한다.

시중에 있는 I2C 통신의 DataSheet에서 설정되어 있는 주소는 일반적으로 8비트로 구성되어있는데

이는 해당 8비트 주소의 오른쪽 끝부분이 R/S를 설정하는 부분이기 때문이다.

DataSheet에 설정된 Address를 사용할 경우 실제 Slave의 Address를 오른쪽으로 비트이동을 하면 된다. 간단하게 ui8SlaveAddr / 2를 하면 쉽게 적용할 수 있다.


bool bReceive

세 번째 인자는 I2C 통신시 Slave에게 하고자 하는 R/S를 설정합니다.

true - R(Slave로부터 데이터를 읽어옵니다.)

false - S(Slave에 값을 저장합니다.)



다음은 해당 함수를 적용한 소스코드와 결과이다.


ROM_I2CMasterSlaveAddrSet(I2C0_BASE, 0xE0 / 2, false);

ROM_I2CMasterDataPut(I2C0_BASE, 0x7E);

ROM_I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND);


while (ROM_I2CMasterBusy(I2C0_BASE)) {


}




① : SLAVE의 ADDRESS 주소

② : R/S

③ : SLAVE의 ACK

④ : R의 경우 = Master가 Slave로부터 전달되는 값을 읽음

S의 경우 = Master가 Slave에게 값을 전달함

⑤ : Master의 ACK


300x250

[Tiva] TM4C의 I2C 통신 파형 보는 방법

임베디드/TI 2014. 7. 28. 21:50

 I2C 통신을 처음 입문하는 분들은 종종 파형의 원리를 깨닫지 못해 많이 해메는 경우가 많습니다. 코드 상으로는 감이 오지 않는 I2C 통신을 오실로스코프를 통해 파형을 확인해보면 그 원리를 쉽게 알 수 있습니다.




 위 사진은 오실로스코프에 찍은 I2C 통신중인 파형이고 노란색은 SDA, 파란색은 SCL입니다. 아래는 I2C 회로를 설계하는데 참고할 수 있는 데이터시트의 파형입니다.


 위 사진의 파형을 쉽게 구분할 수 있게 7단계로 나누었고 그에 대한 각각의 부분은 다음과 같이 설명할 수 있습니다.


① : START

SCL이 HIGH 상태일 때 SDA가 HIGH에서  LOW로 변하는 것으로 I2C 통신을 개시합니다.


② : Slave address

Master가 통신하기 원하는 Salve address 주소를 전송합니다. 1번째부터 7번째 SCL의 edge 클록에서의 7비트가 Slave Address 주소입니다.


③ : R/S

Master가 Salve 에서 할 동작을 설정합니다. HIGH일 때는 Slave로부터 데이터를 전달받고 LOW일 때는 Slave에 데이터를 전송합니다.


④ : ACK

Slave가 Master에게 데이터를 제대로 전송하였음을 확인하는 신호입니다. Slave가 데이터를 완벽히 수신하였을 때 SDA의 값을 LOW로 끌어내려 SCL에 edge 클록이 들어올 때 까지 고정시키다가 값이 제대로 전달되면 SDA를 놓아줍니다다.


⑤ : DATA

R/S에서 설정 대로 데이터를 보내거나 받는다. 데이터 값은 8비트입니다.


⑥ : ACK

Master가 Slave에게 보내는 ACK 신호입니다.


⑦ : STOP

SCL이 HIGH 상태일 때 SDA가 LOW에서 HIGH로 변하는 것으로 I2C 통신을 종료합니다.


300x250