==========================================================================================

제어

=======================================================================================


=관계연산자/논리연산자

연산 => 결과

A=3 => A

A;

3;


A<5 => 참(1)

1;



#include <stdio.h>

int main()
{
  
int iNum1=10;
  
int iNum2=12;
  
int iResult1, iResult2, iResult3, iResult4,iResult5,iResult6;


  iResult1
=(iNum1==iNum2);
  iResult2
=(iNum1<=iNum2);
  iResult3
=(iNum1>iNum2);
  iResult4
=(iNum1==10 && iNum2==12);
  iResult5
=(iNum1<12 || iNum2>12);
  iResult6
=(!iNum1);  

  printf(
"iResult1 : %d\n",iResult1);
  printf(
"iResult2 : %d\n",iResult2);  
  printf(
"iResult3 : %d\n",iResult3);  
  printf(
"iResult4 : %d\n",iResult4);
  printf(
"iResult5 : %d\n",iResult5);
  printf(
"iResult6 : %d\n",iResult6);

  
return 0;
}




=콤마연산자 => 사용안함

#include <stdio.h>

int main()
{
  
int iNum1=1, iNum2=2;
  printf(
"Hello "), printf("world\n");
  iNum1++, iNum2++;
  printf(
"%d ",iNum1),printf("%d",iNum2),printf("\n");

  
return 0 ;
}





=연산자 우선순위와 결합방향 => ()사용


=1byte 진법 변환

2진수

8진수

10진수

16진수


=데이터 표현

c: 2진법사용 불가

0x : 16진수

0 :8진수


=정수와 실수의 표현방식


#include <stdio.h>

int main()
{
  
float fNum;
  
unsigned char * ucP;

  ucP 
= (unsigned char *)&fNum;

  *ucP 
= 0x00;
  ucP++;
  *ucP 
= 0x00;
  ucP++;
  *ucP 
= 0x00;
  ucP++;  
  *ucP 
= 0x3E;

  printf(
"%f\n",fNum);  

  
return 0;
}





=실수의 오차


#include <stdio.h>

int main()
{
  
int iCnt;
  
float fNum=0.0;

  
for(iCnt=0;iCnt<100;iCnt++)
    fNum+
=0.1;

  printf(
"0.1을 100번 더한 결과 : %f \n",fNum);

  
return 0;
}





#include <stdio.h>

int main()
{
  
int iCnt;
  
double fNum=0.0// 자리수 늘려 오차 줄인다

  for(iCnt=0;iCnt<100;iCnt++)
    fNum+
=0.1;

  printf(
"0.1을 100번 더한 결과 : %f \n",fNum);

  
return 0;
}






=비트연산자

& : AND

| : OR

^ : XOR  - 10 ^ 7 => 1010 ^ 0111 => 1101 (두비트 같으면 0/ 다르면 1)

~(틸드) : 반전

<< : 왼쪽으로 이동

>> : 오른쪽으로 이동


#include <stdio.h>
int main()
{
  
int iNum1;
  
int iNum2;

  iNum1 
= 15&&9//논리연산자 참&&참 => 참 [1]
  iNum2 = 15&9// 비트연산자 1111 & 1001 => 1001 [9]

  printf("iNum1 : [%d]  iNum2: [%d]\n",iNum1,iNum2);

  
return 0;
}







#include <stdio.h>
int main()
{
  
int iNum1;
  
int iNum2;

  iNum1 
= 15&&9//논리연산자 참&&참 => 참 [1]
  iNum2 = 15&9// 비트연산자 1111 & 1001 => 1001 [9]

  printf("iNum1 : [%d]  iNum2: [%d]\n",iNum1,iNum2);

  iNum1 
= ~1// 0001 => FFFE [-2]
  printf("iNum1 : [%d]\n",iNum1);
  
return 0;
}






=비트연산자

 >> (shift)

1001 >>1(칸)

=> 0100

iNum=iNum>>1;


int iNum = -1;

iNum = iNum >> 3

=>부호비트 빈자리는 1로 채워짐


unsigned int iNum = 0xFFFFFFFF

=>부호 없으므로 0으로 채워짐



=REPORT


#include <stdio.h>


int main()
{
  
int iNum1 = 15;
  
int iNum2 = 20;
  
int iResult1=0;
  
int iResult2=0;
  
int iResult3=0;

  printf(
"iNum1 : [%d]\n", iNum1);
  iResult1 
= iNum1 & iNum2;
  printf(
"iNum1 & iNum2 : [%d] \n",iResult1);
  iResult1 
= iNum1 | iNum2;
  printf(
"iNum1 | iNum2 : [%d] \n",iResult1);

  iResult1 
= iNum1 ^ iNum2;
  printf(
"iNum1 ^ iNum2 : [%d] \n",iResult1);

  iResult1 
= ~iNum1;
  printf(
"~iNum1 : [%d] \n",iResult1);

  iResult1 
= iNum1<<1;
  iResult2 
= iNum1<<2;
  iResult3 
= iNum1<<3;
  printf(
"iNum1<<1 : [%d] \n",iResult1);
  printf(
"iNum1<<2 : [%d] \n",iResult2);
  printf(
"iNum1<<3 : [%d] \n",iResult3);

  printf(
"iNum1>>2 : [%d] \n",iNum1>>2);  
  printf(
"iNum1>>3 : [%d] \n",iNum1>>3);  

  iNum1 
= -16;
  printf(
"iNum1 : [%d]\n", iNum1);

  printf(
"iNum1>>2 : [%d] \n",iNum1>>2);  
  printf(
"iNum1>>3 : [%d] \n",iNum1>>3);  

  printf(
"음수/양수변환 - 변환할 숫자을 입력하시오: ");

  scanf(
"%d",&iNum1);

  iResult1
= (~iNum1)+1;

  printf(
"변환 : [%d] \n",iResult1);

  printf(
"비트 연산자 이용한 곱셈/나눗셈\n");
  printf(
"3 x 8 / 4 : [%d]\n",(3<<3)>>2);  

  
return 0;
}




==========================================================================================

회로

=======================================================================================

=====================================================================================


=Altium

-c컴파일



-ORCAD에서 작성한 파일 불러오기

.DSN파일



=====================================================================================



==통신

= UART( Universal Asynchronous Receiver and Transmitter) : 범용비동기식직렬통신

= USART(Universal Synchronous and Asynchronous serial Receiver and Transmitter)

====> 노이즈 문제

=============> RS232, RS422, RS485



= Line Transceiver

-Uart 출력신호 : 보통 TTL(DC5V) 신호레벨

( TTL 신호는 Noise에 약하고 토신거리에 제약을 받음)

-TTL신호를 입력 받아 Noise에 강하고 멀리 갈 수 있게 해주는 Interface IC를 사용 => Line Driver/Receiver

-대표적인 Line Driver/Receiver : RS232C, RS422, RS485




                                                                (FULL)                 무전기(HALF)

                                                                선박항해정보            에어콘제어

                                                                (VDR)                  (RS485+TCP/IP)

                                                                

=RS232C




2 3 5                                          2 3 7


수신 : -3V이하이면 1, +3ㅍ이상이면 0 ( 선이저항 => 오면서 강도 약해짐)

송신 : -12V이하이면 1, +12V 이상이면 0

-UART LOW -> 232 HIGH


-Unbalanced Signal -noise -> Shielded Cable 반드시 사용


=RS422

-Full Duplex

-Differential Cabling Method

-UTP(Unshielded Twisted Pair)Cable/ STP(Shielded Twisted Pair)Cable 사용(배)

-GROUND 따로있음 : Balanced Signal

-두가닥 레벨의 차이로 0,1구분 하므로 noise 같이 받으므로 노이즈에 강하다

*UTP 꼬임수가 다름(거리별로)


-MULTI DROP MODE

 MASTER가 BROADCASTING 하다가 슬레이브 개별로 통신해야할 경우 사용


=RS485

-ECHO MODE          / NON ECHO MODE    : 내가 쏜 데이터 수신 가능하면 ECHO MODE

 (RX항상 연결)         (RX <->TX)

 보낸데이터 확인가능

==================================================================================


=USB  to Serial

IC두개

RS485

RS232


USB -> UART -> RS232

소자1: USB -> UART  : CP210X, FT231...

소자2: UART -> RS232 : MAX232



-TTL 레벨 - 5V


***************

RS232 :15m 이내

RS422 : 1.5k

RS485

***************
















=Adapter




=엑츄에이터

전기에너지 => 역학에너지 : 모터, 솔레노이드벨브...



'2015 스마트 콘트롤러 > 업무일지' 카테고리의 다른 글

20150223  (0) 2015.02.23
20150217_회로_ATMEGA_ARM_ALTIUM회로  (0) 2015.02.17
20150213  (0) 2015.02.14
20150212  (0) 2015.02.12
20150211  (0) 2015.02.11
Posted by ahj333
,