컴퓨터와의 통신에 USB를 사용하려고합니다. 여러 개의 마이크로 컨트롤러가있는 경우 마이크로 컨트롤러 중 하나만 컴퓨터에 직접 연결합니다. 다른 마이크로 컨트롤러는 기본 마이크로 컨트롤러에서 명령을 가져와야합니다.
선택한 커뮤니케이션은 여러 가지 요소에 따라 다릅니다.
- 필요한 대역폭 (16MHz로 실행한다고 가정)
- 복잡성 (배선 및 코딩)
- 양방향 또는 마스터-슬레이브
거의 모든 옵션에는 AVR 마이크로 컨트롤러가 내장되어 있습니다. 추가 하드웨어가 필요한 내장 옵션보다 합리적으로 선호하는 옵션이 없습니다. 지원 기능이 내장되어 있기 때문에 소프트웨어 복잡성은 모두 비슷합니다. 즉, 레지스터를 사용하여 포트를 구성하고 다른 레지스터에 전송할 데이터를 넣은 다음 다른 레지스터에 비트를 설정하여 전송을 트리거한다는 점입니다. 수신 된 모든 데이터가 다른 레지스터에 있으며 인터럽트가 트리거되어 처리 할 수 있습니다. 어떤 옵션을 선택하든, 유일한 차이점은 레지스터 위치의 변경과 구성 레지스터의 일부 변경입니다.
USART 루프에는 다음 기능이 있습니다.
- CLK / 16의 최대 전송 속도 = 약 90KB / s의 전송 속도 인 1MHz (16MHz 클럭에서)
- 완전 양방향 통신 (마스터 또는 슬레이브 지정 없음)
- 각 마이크로 컨트롤러 쌍 사이에 별도의 전선이 필요합니다. Atmega32u4는 기본적으로 2 개의 USART 포트를 지원하여 실제로 네트워크에 연결할 수있는 마이크로 컨트롤러의 수를 제한합니다 (또는 그렇지 않으면 긴 마이크로 컨트롤러 문자열로 연결됩니다. 방법)
참고 : RS232는 10V가 필요하므로 전압 레벨을 얻기 위해 드라이버가 필요하다는 점을 제외하면 RS232 통신에 사용됩니다. 마이크로 컨트롤러 간의 통신에는 유용하지 않습니다 (전압 수준 만 변경됨).
RS485 :
- 기본적으로 USART 포트를 다른 모드에서 사용합니다. 대역폭의 이점이 없으며 배선을 약간 단순화 할뿐만 아니라 복잡하게 만듭니다. 권장하지 않습니다.
2 선식 인터페이스 :
이를 I2C라고도합니다. 이것은 모든 장치가 동일한 두 와이어를 공유한다는 것을 의미합니다.
두 전선 모두에 풀업 저항이 필요합니다
풀업 저항의 값이 제한되어 있고 장치 수가 증가하고 와이어 길이가 증가함에 따라 커패시턴스가 증가하기 때문에 느립니다. 이 AVR 마이크로 컨트롤러의 경우 속도는 최대 400kHz이며 USART보다 느립니다 (그러나이 속도는 커패시턴스 제한에 따라 다릅니다). 그 이유는 디바이스가 데이터 와이어를 낮게 구동하지만 와이어가 다시 하이 플로팅되도록하여 (풀업 저항) 반대의 전환이 이루어지기 때문입니다.
모든 통신이 동일한 제한된 대역폭을 공유한다고 생각하면 속도가 더 느려집니다. 모든 통신은 동일한 제한된 대역폭을 공유하기 때문에 데이터가 전송되기 전에 네트워크가 유휴 상태가 될 때까지 데이터를 기다려야하는 통신이 지연 될 수 있습니다. 다른 데이터가 지속적으로 전송되는 경우 데이터 전송이 차단 될 수도 있습니다.
마스터가 슬레이브를 처리 한 다음 명령 / 요청을 보내면 슬레이브는 나중에 응답하는 마스터 슬레이브 프로토콜에 의존합니다. 한 번에 하나의 장치 만 통신 할 수 있으므로 슬레이브는 마스터가 완료 될 때까지 기다려야합니다.
모든 장치는 마스터 및 / 또는 슬레이브로 작동 할 수 있으므로 상당히 유연합니다.
SPI
이것이 마이크로 컨트롤러 간의 일반적인 통신에 권장 / 사용할 내용입니다.
최대 CLK / 2 = 8MHz (16MHz CLK의 경우)까지 고속이므로 가장 빠른 방법입니다. 이것은 시계 전용 와이어로 인해 달성 할 수 있습니다.
MOSI, MISO 데이터 및 SCK 클럭 와이어는 전체 네트워크에서 공유되므로 배선이 더 간단합니다.
마스터-슬레이브 형식이지만 모든 장치는 마스터 및 / 또는 슬레이브 일 수 있습니다. 그러나 네트워크 내에서 공유 배선의 경우 슬레이브 선택 합병증으로 인해 2 선 인터페이스와 달리 계층 적 방식으로 만 사용해야합니다. IE. 모든 장치를 트리로 구성하는 경우 장치는 하위 장치에만 마스터하고 상위 장치에는 슬레이브 만 있어야합니다. 즉, 슬레이브 모드에서 장치는 항상 동일한 마스터를 갖습니다. 또한이 작업을 올바르게 수행하려면 업스트림 마스터에 MISO / MOSI / SCK에 저항을 추가해야 장치가 다운 스트림으로 통신하는 경우 (슬레이브로 선택하지 않은 경우) 통신이 다른 부분의 통신에 영향을 미치지 않습니다. 네트워크 (저항을 사용하여 수행 할 수있는 레벨 수는 제한되어 있습니다. 두 SPI 포트를 모두 사용하는 더 나은 솔루션은 아래를 참조하십시오).
AVR 마이크로 컨트롤러는 MOSI 신호가 슬레이브 선택 될 때 자동으로 3 상태로 설정하고 슬레이브 모드 (마스터에있는 경우)로 전환 할 수 있습니다.
계층 적 네트워크가 필요할 수 있지만 대부분의 네트워크는 트리와 같은 방식으로 구성 될 수 있으므로 일반적으로 중요한 제한은 아닙니다.
각 AVR 마이크로 컨트롤러가 두 개의 개별 SPI 포트를 지원하므로 각 장치가 두 개의 서로 다른 네트워크에서 서로 다른 위치를 가질 수 있기 때문에 위의 사항을 약간 완화 할 수 있습니다.
이것을 말했지만, 트리 / 계층 (2 이상)에서 많은 수준이 필요한 경우 저항을 사용하는 위의 솔루션이 너무 어려워 작동하지 않습니다. 이 경우 트리의 각 계층간에 SPI 네트워크를 변경해야합니다. 이는 각 장치가 한 SPI 네트워크의 자식 장치와 다른 SPI 네트워크의 부모 장치에 연결됨을 의미합니다. 그것은 하나의 연결 트리 만 가지고 있음을 의미하지만, 장치는 자식과 부모 중 하나와 동시에 통신 할 수 있고 저항이 없기 때문에 항상 올바른 값을 선택하기가 어렵다는 장점이 있습니다 .
별도의 MOSI 및 MISO 와이어가 있기 때문에 마스터와 슬레이브가 동시에 통신 할 수있어 속도가 2 배 증가 할 수 있습니다. 각 추가 슬레이브에 대해 슬레이브 선택에 추가 핀이 필요하지만 큰 부담은 아닙니다. 10 개의 서로 다른 슬레이브라도 10 개의 추가 핀만 있으면 일반 AVR 마이크로 컨트롤러에 쉽게 수용 할 수 있습니다.
지정한 AVR 마이크로 컨트롤러가 CAN을 지원하지 않습니다. 다른 좋은 옵션이 있기 때문에 어쨌든 중요하지 않을 것입니다.
권장 사항은 SPI 입니다. 빠르기 때문에 배선이 너무 복잡하지 않으며 풀업 저항이 불필요합니다. 드문 경우이지만 SPI가 귀하의 요구를 완전히 충족시키지 못하는 경우 (아마도 더 복잡한 네트워크에서) 여러 옵션을 사용할 수 있습니다 (예 : 두 개의 와이어 인터페이스와 함께 두 개의 SPI 포트 사용 및 일부 마이크로 컨트롤러 쌍 사용). USART 루프 사용!)
귀하의 경우 SPI를 사용한다는 것은 당연히 컴퓨터에 USB로 연결된 마이크로 컨트롤러가 마스터가 될 수 있으며 컴퓨터에서 각 슬레이브 장치로 관련 명령을 전달할 수 있음을 의미합니다. 또한 각 슬레이브에서 업데이트 / 측정을 읽고이를 컴퓨터로 보낼 수 있습니다.
8MHz 및 0.5m 와이어 길이에서 문제가되지 않을 것이라고 생각합니다. 그러나 만약 그렇다면, 커패시턴스 (접지선과 신호선이 너무 가까워지고 다른 도체 사이의 연결에주의)와 신호 종단에 더주의하십시오. 문제가 지속되는 경우에는 클럭 속도를 줄일 수 있지만 필요하다고 생각하지는 않습니다.