질문게시판 > 답변2 : AVRstudio로 돌려봤습니다.

TODAY787 TOTAL2,325,657
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | 답변2 : AVRstudio로 돌려봤습니다.

페이지 정보

작성자 master 작성일2018-03-15 15:22 조회5,961회 댓글1건

본문

	

 

// DateTime : 2018-03-15 오후 3:25:01
// by Ok-Hyun Park
#include <stdio.h>
//
int unpackit(int *dst,unsigned char *src,int n);
//
unsigned char tr_R_Data[]={ // 59개 헥사값
  0xaf,0x09,0x00,0x80,0x68,0x16,0xb2,0x81,0x5a,0x09,
  0xcd,0x08,0x00,0x80,0x8c,0xa3,0xbb,0xd8,0xf3,0x1b,
  0x91,0x32,0x53,0x70,0x81,0x12,0x09,0xa7,0x09,0x27,
  0x1b,0x8a,0x00,0x80,0x2e,0xbe,0x80,0x4b,0xc8,0xc3,
  0xb9,0xb1,0x80,0xd8,0xb8,0xc8,0xdd,0xf2,0x05,0x1b,
  0x9b,0x2a,0x32,0x80,0x6b,0x83,0xc4,0xd5,0xe0
};
int rArray_R[40];
//
static unsigned char *outftp;
static int           ftpn=0;
//
int unpack(int i){
  unsigned int j;
  if(!(ftpn&1)){ /*on an even boundary*/
    switch(i){
      case 1:
        j=(*outftp&0xf0)>>4/*pull from high nibble first*/
        if(j>7)j|=0xfff0;    //-0.07mm~0.07mm 는 nibble 로 표현
        break;
      case 2:
        j=*outftp++;        /*pull a whole byte*/
        if(j>127)j|=0xff00//j>0x81 //차이가 127보다크냐?-1.26mm~1.27mm 는 bytes로 표현?
        break;
      case 4:
        j=*outftp++;              /*pull first low byte*/
        j|=((int)(*outftp++))<<8/*or in high byte*/
        break;
    }
  }
  else/*starting in the middle of the byte*/
    j=((*outftp++)&0x0f); /*pull from low nibble first*/
    switch(i){
      case 1:
        if(j>7)j|=0xfff0/*extend sign*/
        break;
      case 2:
        j<<=4;                /*shift up a nibble*/
        j|=(*outftp&0xf0)>>4/*and grab low nibble from high nibble*/
        if(j>127)j|=0xff00;   /*extend sign*/
        break;
      case 4:
        j<<=4;                            /*shift what we have up to be nibble 3*/
        j|=(*outftp&0xf0)>>4;             /*add in nibble 4 to get low byte complete*/
        j|=((int)(*outftp++ & 0x0f))<<12/*add in nibble 1*/
        j|=(*outftp&0xf0)<<4;             /*add in nibble 2*/
        break;
    }
  }
  ftpn+=i;
  #ifdef NOT_80x86
    if(i==4)swab((char*)j,(char*)j,2); /*put into Z8002 order*/
  #endif
  return((int)j);
}
//
int unpackit(int *dst,unsigned char *src,int n){
  int state=16,size=4;
  int i,dr=0,d2r=0,dr1=0,x;
  outftp=srcftpn=0;
  for(i=0i<ni++){
AGAIN:
    x=unpack(size);
    switch(state){
      case 16:
        if(x==0x8000){ state=8size=2goto AGAIN; }
        dst[i]=x;            //rArray에 저장
        if(i)dr1=x-dst[i-1];
        else dr1=x;
        break;
      case 8:
        if((x&0xff)==0x80){ state4size=1goto AGAIN; }
        if((x&0xff)==0x81){ state=16size=4goto AGAIN; }
        dr=x;
        if(i)dst[i]=dst[i-1]+dr;
        else dst[i]=dr;
        dr1=drbreak;
      case 4:
        if((x&0x0f)==0x8){ state=8size=2goto AGAIN; }
        d2r=xdr=dr1+d2rdst[i]=dst[i-1]+drdr1=drbreak;
    }
  }
  return((ftpn+1)>>1);
}
//
int main(void){
  while(1){
    unpackit(rArray_R,tr_R_Data,59);
  }
  return 0;
}

 

e2db14983f07ec33f37ec8eda71e62b5_1521094515_938.png
 

 

이 데이터는 아래의 숫자가 패킹(packing)이 된것입니다.

 2479, 2583,  2605, 2527, 2394, 2253, 2137, 2044, 1975, 1935,

 1922, 1939, 1989, 2072, 2184, 2322, 2471, 2599, 2645, 2579,

 2517, 2450, 2379, 2318, 2247, 2168, 2086, 2014, 1958, 1923,

 1909, 1914, 1941, 1983, 2033, 2089, 2140, 2200, 2277, 2371

총 40개의 숫자가 전송됩니다 (정확히는 반지름에 관한 데이터이고 2479->2.479cm 입니다.)

 

문제는 이 코드를 실행하면 2605-> 2527 과 같이 감소하는 데이터 값이 튀는 현상이 발생합니다. 이를 해결하기위한 방법에 조언좀 부탁드리겠습니다. 

//

에러난다는 원소가 3번째 2605가 맞나요?

AVRstudio 에서는 에러 안납니다.

 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 1

조회수 5,961

몽규님의 댓글

몽규 작성일

컴파일러 문제였군요.. 감사합니다!

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
질문 질문드립니다. 이호 18-04-06 6447
답변 답변글 답변 : 아두이노 시리얼 입력으로 FND 구동댓글[2] master 18-04-06 9795
질문 블루투스 신호 세기를 측정하려면 어떻게 해야하나요?? 노동 18-04-04 6995
답변 답변글 답변 : 블루투스 신호 세기를 측정하려면 어떻게 해야하나요?? master 18-04-04 8971
질문 아두이노 우노 및 ESP8266 와이파이 모듈 관련 질문 exia 18-04-04 6593
답변 답변글 답변 : 아두이노 우노 및 ESP8266 와이파이 모듈 관련 질문 이미지 master 18-04-04 5869
질문 AVR 4 질문요~ 비공개 18-04-04 5832
답변 답변글 답변 : AVR 4 질문요~ master 18-04-04 6152
질문 AVR atmaga128댓글[1] 첨부파일 비공개 18-04-03 7363
답변 답변글 답변 : AVR atmaga128 1개의 파일로 합침댓글[4] master 18-04-03 15190
답변 답변글 답변 : AVR atmaga128 소스코드 정리 master 18-04-03 6410
답변 답변글 답변 : 답변 : AVR atmaga128 소스코드 정리댓글[3] 첨부파일 턴업 18-04-04 11605
질문 웜기어 추가질문 드립니다!댓글[1] 까스활명 18-04-02 7622
질문 DMA 송수신 관련 질문 드립니다. 몽규 18-04-02 6942
답변 답변글 답변 : DMA 송수신 관련 질문 드립니다. master 18-04-02 6063
답변 답변글 답변2 : DMA 송수신 관련 질문 드립니다.댓글[1] master 18-04-02 6923
질문 웜기어를사용 한 스텝모터 제어댓글[3] 비공개 18-04-01 12786
답변 답변글 답변 : 웜기어를 사용 한 DC모터 이미지 master 18-04-02 7077
질문 왕초보가 질문 하나 또 드립니다댓글[1] Songyoun 18-03-31 7019
질문 자이로가속도 센서 제어댓글[2] 빠박이빠박 18-03-31 9054
질문 PWM관련 질문 드립니다 Songyoun 18-03-29 6252
답변 답변글 답변 : PWM 디지털제어 = 전력제어 master 18-03-29 5856
질문 ATmega128 USART 통신 관련해서 질문드립니다.댓글[1] 27315co 18-03-28 8655
답변 답변글 답변 : ATmega128 USART 통신 관련해서 질문드립니다.댓글[1] master 18-03-28 7732
질문 아두이노 프로그램 시리얼모니터에 나타내는건데요 cimi 18-03-28 5986
답변 답변글 답변 : 소스코드 실행 결과를 적어주세요 master 18-03-28 6128
질문 아두이노 아키텍처 질문댓글[1] 뭘보노옹 18-03-27 8841
질문 밑에 질문 관련 다시 올립니다. exia 18-03-27 6441
답변 답변글 답변 : 소스코드 오류 몇개 수정했습니다.댓글[1] master 18-03-27 6660
질문 아두이노 우노 dht11 센서 두개 동작 질문드립니다. exia 18-03-27 5734
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기