I2C Start/Stop I2C는 SCL, SDA 두 라인으로만 구성된 간단한 버스이고, 여러개의 디바이스가 동시에 연결될 수 있다. 연결된 디바이스 중에 전송을 주관하는 것은 마스터(master), 마스터의 요청에 따라 데이터를 주고 받는 것을 슬레이브(slave)라고 한다. I2C에는 마스터가 여러개 연결(multi-master)될 수 도 있는데, 이런 상황에서는 마스터간에 서로 버스를 차지하기 위한 일종의 경쟁 상황이 발생 할 수 있다. 이런 상황을 적절히 중재하는 방법을 아비트레이션(arbitration)이라고 하며, 이 때문에 마스터가, 여럿인 상황에서도 안전하게 전송이 이루어질 수 있다. 일단 마스터가 하나이고 슬레이브가 여럿인 시스템이 있다면 버스상에 아무런 데이터 전송이 업는 상태에서는 ..
I2C 오픈 콜렉터 (Open Collector) 오픈 드레인 (Open Drain) I2C 버스는 두 라인에 여러 개의 디바이스를 달 수 있다. 로직 디바이스의 출력단에는 내부의 트랜지스터가 출력 전류의 소스(source) 또는 싱크(sink)로 동작하도록 되어있다. 내부 회로를 보면 보통 트랜지스터 하나가 다른 트랜지스터를 머리에 이고 있는 모습을 하고 있어서, 이를 보통 토템폴(totem pole)구조라 한다. 이런 구조 외에 또 하나 자주 쓰이는 것이 오픈 콜렉터, 오픈 드레인 출력단이다. 오픈 콜렉터나 오픈 드레인이나 모두 같은 개념이며, 단지 로직회로가 TTL(트렌지스터를 사용)이냐 CMOS(CMOS FET 트렌지스터를 사용)이냐에 따라 구분된다. 오픈 콜렉터 구조는 위의 그림에 나타난대로 로..
[I2C 개념 정리] I2C(Inter-Integrated Cicuit)는 1980년대 필립스사가 개발한 디바이스 간의 저속 데이터 전송을 위한 버스 표준이다. AVR에서는 Tow wire라는 이름을 사용하고 있는데, 내용상 I2C와 동일하다.I2C라고 표기를 했는데, 실제로 2는 윗첨자를 올려써야하며, 자승(square)를 의미한다. 즉 읽을때 '아이 스쿼어 씨'라고 읽는다. I2C는 전형적인 버스구조로 multi-master, multi-slave를 지원하고, 하나의 버스에 최대 128개의 디바이스가 연결될 수 있다.버스는 매우 느린 편으로, 현재 5MHz 정도까지 표준이 나와있다고 하는데, 보통 100k를 저속, 400k를 고속이라고 하며,대부분 이 정도의 속도만 지원한다. AVR도 최고 속도는 4..
C++ 기초 🔔 예) 🔔 예) 관계연산자 실행 결과 🔔 예) 정수 값을 2진수로 출력하는 방법 실행 결과 🔔 예) 레퍼런스 사용시 이런경우에는 100 을넣기 위해 4byte의 메모리 공간을 생성한다. 실행 결과 🔔 예) 서로다른 type 의 변수에 레퍼런스를 사용하면 새로운 4byte 메모리 공간을 생성하여 A의 아스키코드 65를 넣는다. 실행 결과 🔔 예) 레퍼런스를 이용한 해결 실행 결과 🔔 예) sqrt()와 pow() 함수의 사용 double sqrt_2 = sqrt(2.0); 2를 인자로 넘겨주면, 2의 제곱근을 반환한다. double pow_12_2 = pow((double)12, 2); 12의 2승, 즉 12의 제곱을 반환한다. 실행 결과 함수의 오버로딩 📌 오버로딩(Overloading)이..
최근의 소프트웨어 개발 환경은 "객체지향(Object Oriented)"의 바람을 타고 있다. 객체지향 프로그래밍, 객체지향 모델링, 객체지향 방법론 등 소프트웨어와 관련된 여러 기술들이 객체지향과 음으로 양으로 관련을 맺고 있다. 앞으로 몇 개월간 객체지향과 관련된 여러 기술들을 차례로 연재함으로써 객체지향의 체계를 정리해 보고자 한다. 앞으로 연재되는 모든 글은 아래 나열된 서적들과 컴퓨터 잡지 및 인터넷 상의 자료들을 재정리한 것임을 밝혀둔다. Grady Booch, Object-Oriented Analysis And Design With Applications, Addison Wesley, 1994 Ivar Jacobson, Object-Oriented Software Engineering, Ad..
비트 연산으로 변환 배열의 값은 float형으로 5.05 를 나타낸다. TCP/IP 통신을이용해 데이터를 수신하니 리틀엔디언 효과로 자리 변환이 일어났다. 위와 같은 이유로 아래와같이 배열을 역순으로 비트연산 하였다. iii 는 unsigned long type 이고, ii 는 float type 이다. 0xFF 는 부호가 없는 정수일경우 없어도 무방하지만 부호가있는 정수는 0xFF를 and연산해주어야 한다.(부호확장 방지) 빨간 박스의 코드와 같이 가져온값은 float로 꼭 변환하여 사용해야 한다. union 사용 union 구조체로 선언하면 동일한 값이 자동으로 들어간다. unsigned char일경우 부호가 없기 때문에 부호확장시 전부 0을 채워넣는다. 그래서 &0xFF가 필요 없다. 결과