atmega와 통신을 하는데요
byte배열을 서로 주고받고하는데
배열이 짧을땐 문제없이 되는데
배열 길이가 길어지면 정상적인 값이 나오다가 다시 받으면 이상한 값이 나오고 그럽니다
버퍼 길이가 문제인건지 버퍼를 하나쓰는데 수신 값이 겹쳐서 그러는것인지 잘 모르겠습니다
고수님의 조언 부탁드리겠습니다.
bluetoothchat 예제를 토대로 만들었으며
블루투스 통신하는부분은 건드리지 않았습니다..
도와주시면 감사하겠습니다....좋은 밤 되세요.
서버와의 패킷 통신 하듯이 해보세요 패킷의 길이 정보도 같이 담아서 길이 만큼 모두 들어왔을때만 처리하게 된다면 어느정도는 처리할수 있을거 같은데요 저도 블루투스 통신 패킷으로 처리하니 유실 안되고 잘 되던데요~~~
저는 하드웨어만 해서 어플은 모르는데요,
님 크리스탈이 뭔지좀 알려주세요.
그리고 데이터시트를 보시면 크리스탈에 따른 오차가 있을겁니다.
저도 밑에 질문 올렸지만 AVR과 SSP 블루투스로 통신 너무나 잘되는데, 저는 어플 문제가 있어서 ㅠㅠ
저는 통신시 길게 들어오면 이상한 값이 들어와서 크리스탈을 7.3728MHz사용합니다.
9,600bps같은 표준속도로 통신시 쉽게 사용하는 16MHz, 8MHz 이런거 사용하면 안됩니다(오차율 0.2%).
짧은거야 상관없지만...
그리고 예전에 전광판 시계만들때 GPS위성정보 NMEA프로토콜을 받아야 하는데 그것도 길잖아요.
날짜정보는 한참 뒤에 따라오는데 항상 날짜만 깨져서 그때는 14.7456MHz 사용했습니다.
이런크리스탈 사용하면 오차율 0%입니다.
대신 저런 크리스탈 쓰면 AVR에서 1초계산하기 빡시겠죠.뭐 그래도 다 가능하긴 하지만요.
1초계산하기 번거로우면 그래서 있는게 TOSC핀이나 TCLK같은 타이머에 외부 클럭 인가하는핀이 있는겁니다.
그리고 저도 어플만드는데 설정메뉴 바로가게 하는것좀 필요한데..
아래 질문 저도 도움좀 ㅠㅠ




데이터 받을때 수신 함수 한번 호출로 상대가 보낸 데이터를 다 받았다고 단언하지 마세요. 데이터는 늘 띄엄띄엄 오게됩니다. 그래서 꼭 받은 데이터는 버퍼에 누적해서 약속된 프로토콜에 따라 패킷을 파싱하는 작업이 있어야합니다.
100byte를 보내도 통신환경에 따라 수신함수 한번 호출로 다받아 질수도 있고 때로는 36, 16, 38, 10 이런식으로 쪼개진 데이터를 받으며 수신함수가 리턴할 경우도 비일비재합니다. 예제는 그야말로 예제일뿐입니다. 즉 뼈대만 있죠. 쓸만한 프로그램으로 만들려면 살을 붙여줘야합니다.