안녕하세요?
첫번째 질문입니다.
232(485)를 이용한 통신문제.
1. 사용하는 Chip ; PIC16F886
2. 구성 ; 232(485)에 메인장비와 연결이 되어 통신을 하고 있습니다. 메인에서 PIC886에 1초에 한번씩 데이터를 보내라고 전송합니다.
3. PIC886에는 적외선 수신부와 송신부가 있어 센서로부터오는 신호를 PIC886에서 받아 메인으로 전달하는 기능입니다.
4. 질문의 요지는 센서로부터오는 신호는 정해진 시간이 아닌 불규칙하게 온다는 것이고 메인에서는 1초에 한번씩 데이터를 보내라는 신호를 보낸다는 것입니다.
5. PIC886에서 스캔하며 데이터 수신 및 메인으로의 전송을 하려면 어떤 방법을 쓰는것이 좋을지 조언부탁합니다.
6. 메인의 호출시간은 1초로 고정되어 있습니다.
고수님들의 지도 바랍니다.
메인은 주기성(1초)으로 데이타를 요구하고 센서는 비주기성으로 데이타를 준다면 중간 cpu(886)의 역활을 어떻게 할것인가?라는 것으로 이해했습니다.
결론은 cpu 886(옛날 cpu 같은데..)는 메인 동기(주기성)에 따라야 합니다.
왜냐하면,메인 입장에서는 혹 여러개의 886을 스켄하고 있다면? 주기적으로 886과 주고 받지 않으면, 통신 프로코콜이 매우 복잡해집니다.
주로 여러개의 886중 하나가 돌아가시거나,반응을 안하게 되면 메인 입장에서는 처리하는데 시간이 많이 걸립니다.
그래서 886입장에서는 데이타가 없거나 지난 데이타라도 그냥 메인이 스캔해 오면 올려야 하는 부담감이 있습니다.
메인,즉 전체 통신을 원활하게 해 주기 위해서,,
그럼 886입장에서는 센서가 비주기적으로 데이타를 전송해 오고, 비는 시간에 데이타를 저장(버퍼)하고 있다가.
메인이 주기적으로 스켄해 올때 즉각 메인이 전송해 줘야 합니다.
즉 주기성요구와 비주기성의 데이타의 취득 문제는 비주기성의 데이타에 달려 있지 주기성 스캔에 달려있지 않습니다.
그럼 비주기성 데이타를 꼭 실시간으로 요구할려면 886이 주 통신 주체가 되어서 메인에게 실시간으로 데이타를 전송하는 방법밖에 없습니다.
물론 비주기성내에 수많은 주기성을 가진다면 비주기성 데이타가 변경되기전에도 메인에서 스캔을 할 수 있으니깐 이런 방식도 가능은 하겠습니다만,
메인에서 주기성의 스캔 스피드를 올리면 통신 부하가 어마무시하게 올라갑니다. 결국 트레이드오프를 해야 합니다.
그리고 비주기성의 최소 스피드가 결정이 되었다면,그 최소 스피드내에서 주기성 데이타를 스캔해 가면 별 무리는 없겠네요?
이도 저도 아니고 혹 다른 방법은 886에서는 비주기성 데이타를 실시간으로 평균값을 버퍼에 두고 있다가
메인에서 주기성 요구가 있을때 보내줘도 됩니다.
여기서 평균방식은 여러가지가 있는데,적절한 평균방식으로 하시면 됩니다.(윈도우식으로 길게,짧게 평균내는 방식등등)
도움이 되실런지? 참고로 저도 아직도 884를 사용중입니다.(예전에 사용하던 것이라 버릴 수는 없고해서 ㅎㅎㅎ)