이렇게 하이는 하이끼리 로우는 로우끼리 연결 했습니다.
문제는 모두 캔버스에 연결 했을때 동작이 원할하지 않다는 겁니다.
두개의 AVR끼리 서로 주고 받는 통신이나 한 AVR에서 한방향으로만 주는 통신 (ex1--->ex2, ex3)은 잘되는데
ex2-->ex3 로의 통신이 안됩니다.
프로그램상의 문제인줄 알았으나 ex1의 캔선을 뽑거나 리셋버튼을 누르면서 ex2-->ex3의 통신을 하면 별 문제없이 작동합니다.
하드웨어상의 문제인거 같은데 리셋순서나 중요한점을 알려주셨으면 감사 하겠습니다.
엄청 간단한 문제. CAN이 MULTI- MASTER이기는 하지만 동시에 둘 이상의 NODE에서 송신을 하는 경우에는 당연히 BUS에서 데이터의 CORRUPTION이 발생하게 됩니다. 끝.
글쎄요 각 고유한 장치 ID가 다르며 내적으로 처리순서가 규정 돼 있을텐데요 프로토클과 부품레퍼런스를 정확하게 독파하시는게 해결의 첩경일 거라는...
시리얼로 통신을 1대1로 하는 것 하고 1대 N으로 하는 것은 차이가 많이 납니다.
위에 문제는 마스터와 슬레이브 개념을 전혀 모르고 통신을 하신것 같군요,
시리얼에 연결은 1대1과 같습니다. RXD->TXD 로 크로스로 연결을 하고 GND는 공통으로 같이 연결 하면 됩니다.
하지만 1대N은 마스터를 기준으로 다른것은 슬레이브로 해서 슬레이브는 RXD는 RXD로 TXD는 TXD로 같이 선을
연결 해야 합니다. 그러면, 하드웨어는 제대로 되었구요.
그 다음에 마스터에서 슬레이브들을 제어를 해야 합니다. 아니면, 슬레이브 데이터들이 중복이 되어 데이터가 엉망이
됩니다.
예). 마스터 -> 슬레이브(2개)
1번 ID 슬레이브에 데이터를 요청을 하고 데이터가 들어 올때까지 기다립니다. 다 들어 왔다고 하면
2번 ID 슬레이브에 데이터를 요청 하고 데이터가 들어 올때까지 기다합니다. 다 들어 왔다고 하면
1번 ID 슬레이블를 CALL
위와 같이 슬레이브 데이터가 중첩을 안 일으키기 위해서 슬레이브 들을 제어 해 주어야 합니다.
무조건 슬레이브가 데이터가 발생이 되었다고 마스터에 데이터를 올리면 안 됩니다.
다른 슬레이브도 데이터를 올리 테니 데이터는 중복이 되어 엉망이 되어 버립니다.
여러개의 보드를 시리얼 통신을 할려면 꼭 데이터 중첩이 안 되게 해결 방안을 생각 하고 제작을 하십시요.