PIC는 우리의 친구 한국정보통신대학교 디지털미디어연구소
세미나 소개 대상: 회로 구성 및 프로그램에 대한 경험이 적은 사람 목적 : PIC에 대한 자신감 얻기!!! 일정 PIC로 LED 제어 2일째 : PIC와 PC간의 통신, 기본적인 센서 다루는 방법 알기 PIC와 PC를 시리얼로 통신하여 LED를 제어 PIC로 센서 값을 읽어서 PC로 전송 3~7일째 : 지금까지 배운 것들을 응용해서 새로운 것 만들기.
PIC 소개 PIC는 일종의 CPU PIC16F73 / PIC16F84 / PIC16F877 / PIC12F675 ALU / 메모리 / 제어모듈을 모두 포함 제어모듈 : UART통신, 모터제어, Analog-Digital Converter 등 마이크로 컴퓨터 혹은 마이크로 컨트롤러라고 불림. 흔히 마이컴이라 불리기도 . RISC 구조 (보통 35개 정도의 instruction을 갖고 있음) 어쩌구 저쩌구.. PIC16F73 / PIC16F84 / PIC16F877 / PIC12F675
PIC 소개 PIC16F73 적당히 다양한 기능과 적당한 수의 ADC 포트와 적당한 수의 IO핀 등을 제공한다. (28 pin) PWM 까지도 갖추고 있어 웬만한 건 다 가능하다. 연구실에서 가장 많이 사용 <PIC16F73> <L-Luminaria에서의 응용 예>
PIC 소개 oscillator 좌측 상단부터 1번 핀 동그란 마크가 있음 A Port / ADC Port B Port Master Clear A Port / ADC Port B Port Power VDD-5V VSS-GND oscillator UART PWM C Port
PIC 소개 PIC 1 Power CLOCK Oscillator VDD, VSS B Port A Port ADC C Port UART PWM
PIC 소개 Program memory: 4096x14 Data RAM: 192 Stack: 8 I/O: 22 Analog Pins: 5
PIC 소개 PIC16F84 우리 연구소에 널리 돌아다니는 PIC관련 서적인 <PIC16F84의 기초 + α>의 주인공. 현재 확인 결과 연구소에 존재하지 않는 것 같음 아래의 그림과 같이 아주 심플한 구조를 갖고 ..
PIC 소개 PIC16F877 <PIC16F877A> <SOTORO2007에서 응용 예> 스타크에서 울트라 같은 놈 (40 pin) 다양한 기능보다는 많은 포트가 필요할 때 사용되는 것 같음 (경험상). 커서 꽂아 놓기만 해도 뭔가 ‘있어 보이는’ 시각적 효과. 착시. <PIC16F877A> <SOTORO2007에서 응용 예>
PIC 소개 Program memory: 8192x14 Data RAM: 367 Stack: 8 I/O: 33 Analog Pins: 8 Data EEPROM: 256
PIC 소개 PIC12F675 적은 포트와 적은 기능을 갖추고 있음 (8 pin) <Nanobot에서 응용 예>
디버깅 Multimeter 주로 전압이나 저항을 재거나 Connectivity 테스트에 사용됨 위의 그림과 같이 파워 세이브를 위해 꺼져있는데 이 때 다시 동작시키기 위해서는 OFF로 돌렸다가 다시 원하는 위치로 돌리면 켜짐. 시가 40만원 상당
디버깅 Scopemeter 주로 전압의 파형(?)을 보기 위해 사용 이쯤만 되도 완전 신세계. 특히 통신이 있을 경우 필수품. 없으면 ? 시가 400만원 상당. 작다 ! 좋다 ! (1기 장선연 선배님 말씀)
책 PIC 관련 PIC용 C언어 관련 전자공학 관련 PIC16F84의 기초 + α http://mabook.com/isbn.php?isbn=8931531664 PIC용 C언어 관련 CCS-C 실전가이드: PIC 마이컴용 C언어 http://mabook.com/isbn.php?isbn=8987516032 전자공학 관련 Physical Computing: 전자회로 구성에 대한 쉬운 설명
참고 사이트 Microchip社 (PIC 제작사) http://www.microchip.com Datasheets http://www.alldatasheet.com 전자부품, 로봇부품, 기계부품 http://www.devicemart.co.kr http://www.comfile.co.kr http://www.sample.co.kr
1st Day: PIC로 LED 깜박거리게 하기
1st Day: 목차 회로구성 프로그래밍 생각해 볼 거리
1st Day: 회로 구성 머리 에너지: 7805 Output: LED(빛이 나오는 소자) Input: 없음 PIC 7805 PIC16F73 (PIC의 한 종류) OSC: PIC는 CPU므로 클럭이 필요 에너지: 7805 5V 이상의 전압을 5V로 바꿔 줌(12V 5V) 일반적인 PIC는 5V에서 동작 Output: LED(빛이 나오는 소자) Input: 없음 PIC 5V 12V 7805 Adaptor LED OSC
1st Day: 회로 구성 . . . . . Socket-12V Adapter가 꽂힌다. 7805-12v전압을 5v로 떨어뜨린다. . LED-Light Emissive Diode. . OSC-클럭을 발생시킨다. . PIC-마이크로 컨트롤러.
1st Day: 프로그래밍 A port를 ADC로 사용하지 않음 PIC 내부에 필요한 타이머를 Setting IO 포트인 B port를 Input용으로 사용할 것인지 Output용으로 사용할 것인지 setting LSB-0번 포트/MSB-7번 포트로 Map, 1-In / 0-Out Output으로 지정된 모든 B port에 대해 output signal을 High/Low 중 하나로 결정 1-High / 0-Low
1st Day: 프로그래밍(1) Header File #include <16F73.h> #device adc=8 #FUSES NOWDT //No Watch Dog Timer //다른 클럭 (ex_20Mhz) 주의해야 하는 옵션 #FUSES XT //Crystal osc <= 4mhz #FUSES NOPUT //No Power Up Timer #FUSES NOPROTECT //Code not protected from reading #FUSES BROWNOUT //Reset when brownout detected //클럭에 따라 값을 setting #use delay(clock=4000000) //1일째에는 사용되지 않지만 UART 통신에 관한 옵션 //232통신을 사용하고 Baud Rate이 9,600. Parity Bit을 사용하지 않고 C6, C7 pin을 각각 Tx, Rx핀으로 사용 #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)
1st Day: 프로그래밍(2) set_tris_b(0b00000000) output_b(0b11000000) PIC B ports의 Output / Input 기능 결정 0: Output ( 숫자 0은 ‘O’랑 비슷하니까 Output) 1: Input ( 숫자 1은 ‘I’ 랑 비슷하니까 Input) B7 ~ B0 Ex. set_tris_b(0b00000001) : B0 Pin Input 기능, 나머지 Pin Output 기능 output_b(0b11000000) PIC B ports의 출력의 High/Low 결정 1: High, 0: Out (Digital 이니까) Ex. output_b(0b11000000) : B7, B6 Pin High, 나머지 Pin Low
1st Day: 프로그래밍(3) delay_ms(500) 일정 시간 동안 프로그램 진행 지연 단위: [ms]
1st Day: 생각해 볼 문제 Delay 시간을 500ms, 200ms, 10ms로 바꾸면서 실험해보세요. 그리고 어떤 이상한 현상이 일어나면 왜 그런 현상이 일어나는지를 생각해보세요.
2nd Day: PIC와 PC 간의 통신 PIC로 센서 값 읽기
2nd Day: 목차 UART 통신 회로구성 프로그래밍 센서값 읽어오기 센서
UART 통신: 회로 구성 MAX232: PIC를 PC와 RS232 통신 할 수 있게 해주는 녀석 Output: LED, PC로 송신 Input: PC로부터 오는 값 (디지털) PIC LED 5V 12V 7805 Adaptor MAX232 OSC
UART 통신: 회로 구성 . . . . . . Socket-12V Adapter가 꽂힌다. 7805-12v전압을 5v로 떨어뜨린다. . LED-Light Emissive Diode. . OSC-클럭을 발생시킨다. Serial Cable을 통해 PC로 전송 PIC-마이크로 컨트롤러. . . MAX232-MAXIM社의 232Chip
UART 통신: 프로그래밍 Standard Input이 PIC의 Rx (Receive)pin으로 설정. 이 경우 UART로 연결된 PC의 키보드 Input을 읽어 온다. Standard Out이 PIC의 Tx (Transmit)pin으로 설정. 이 경우 UART로 연결된 PC로 문자가 전송된다.
UART 통신: 프로그래밍(2) getc() printf(“LED B7 On\n\r”) PC에서 오는 1byte data 수신하는 함수 8 bit character return PC에서 Data 수신 전까지 다음 줄로 안 넘어감(내부적으로 Loop 문) printf(“LED B7 On\n\r”) PC의 하이퍼터미널에 그대로 찍힘 보통 자신이 짠 PC와의 통신 프로그램에서는 ‘putc()’를 이용해서 1byte씩 보냄
센서 센서 뭔가를 측정해서 전기적으로 알려주는 녀석 뭔가?: 열, 빛, 연기, 습도, 바람 등 우리가 사용 할 센서: CDS(Cadmium Sulfide) 빛 감지 센서 밝으면 저항값 감소 어두우면 저항값 증가 CdS... 화학기호입니다. 황화 카드뮴 셀.. 이란 거죠.. Cd 가 카드뮴 S 가 황 이죠.. CdS 센서는 광에 쏘여지면 저항값이 감소하는 광도전효과(Photo conductive effect)를 이용한 반도체 포토센서 입니다. 광도전셀로서 CdS 말고도 CdSe(셀렌화 카드뮴), Cd(S.Se) 황화셀렌화 카드뮴등이 있으나 특별히 지정하지 않는한 CdS 셀로 총칭하고 있습니다.
센서: 회로 구성 Input: CDS(아날로그) Output: PC로 송신(센서 값) PIC CDS 7805 Adaptor 5V 12V 7805 Adaptor MAX232 OSC
센서: 회로 구성 . . . . . . . Socket-12V Adapter가 꽂힌다. 7805-12v전압을 5v로 떨어뜨린다. . LED-Light Emissive Diode. . CDS센서-조도센서 Serial Cable을 통해 PC로 전송 . PIC-마이크로 컨트롤러. . MAX232-MAXIM社의 232Chip . OSC-클럭을 발생시킨다.
센서: 프로그래밍 ADC로 설정된 포트 중 어느 곳에서 값을 읽어 올 것인지를 결정 Set_adc_channel() 함수로 지정된 ADC포트의 값을 읽어서 리턴한다.
센서: 프로그래밍(2) read_adc() PIC로 들어오는 아날로그 입력 값을 읽음 PIC 종류에 따라서 8bit or 16bit int return PIC16F73은 8bit ADC int: 8bit, long int: 16bit
기타 센서들 Tilt Sensor: 기울기 측정 IR 거리 센서 압력센서 온도센서 디지털 나침반 동작 감지 센서 버튼 등등…
Actuators LED 전구 솔레노이드 모터 스피커 펠티어소자 등등…
몇 가지 팁