반응형

//참고 링크


https://m.blog.naver.com/junyoung8934/220396820005


OrCAD 16.6 이용하여 전자캐드 기능사 실기 평가와 유사한 형태의 회로 설계 진행



아래와 같은 PCB 설계



- 진행 순서


1) PCB 설계의 환경 설정

'File' -> 'Open...' 선택



'*.brd' 파일의 경로 지정 및 '열기' 선택
 



'Setup' -> 'Design Parameters...' 선택



'Design' 탭 -> 'User Units:' -> 'Millimeter',

'Size' -> 'A4',

'Left X: ' -> '-80',

'Lower Y:' -> '-80',

'Apply' 선택
 



'Text' 탭 -> 'Justification:' -> 'Center',

'Parameter block:' -> '5',

'Text marker size:' -> '1.27',

'Setup Text Sizes' -> '...' 선택
 



'Add' 선택
 



아래와 같이 입력 -> 'OK' 선택
 



'Shapes' 탭 -> 'Edit dynamic shape parameters...' 선택
 



'Void controls' 탭 -> 'Artwork format:' -> 'Gerber RS274X' 선택
 



'Thermal relief connects' 탭 -> 'Thru pins:' -> 'Orthogonal',

'Minimum connects' -> '1',

'Use fixed thermal width of: 선택 -> '0.50' -> 'OK' 선택
 



'Setup' -> 'Grids...' 선택



'Grids On' 선택 -> 'Non-Etch' -> 'Spacing:' -> 'x:' -> '0.5',

'y:' -> '0.5' 입력 -> 'OK' 선택
 



'Setup' -> 'Cross-section...' 선택



2레이어 확인 -> 'OK' 선택


2) 보드 외곽선의 생성

'Setup' -> 'Outlines' -> 'Board Outline...' 선택



'Board Edge Clearance:' -> '2.00 MM',

'Draw Rectangle' 선택
 



'Command' 창 -> 'x 0 0' 입력 -> 'Enter' 키 입력



'Command' 창 -> 'x 80 70' 입력 -> 'Enter' 키 입력



'Board Outline' 창 -> 'Close' 선택


3) 기구 홀 및 주요 부품 배치

'Place' -> 'Manually...' 선택



'Advanced Settings' 탭 -> 'List construction' -> 'Library' 선택,

'Symbols and Module Definitions' -> 'Disable' 선택
 



'Placement List' 탭 -> 'Mechanical symbols' -> 'MTG125' 선택 -> 'Hide' 선택
 



'Command' 창 -> 'x 5 5' 입력 -> 'Enter' 키 입력
 



'Command' 창 -> 'x 75 5' 입력 -> 'Enter' 키 입력



'Command' 창 -> 'x 75 65' 입력 -> 'Enter' 키 입력
 



'Command' 창 -> 'x 5 65' 입력 -> 'Enter' 키 입력
 



마우스 우클릭 -> 'Done' 선택



'Etchedit' 선택



'MTG125' pad 마우스 우클릭 ->'Modify design padstack' -> 'All instances' 선택



'Units' -> 'Millimeter', 'Decimal places:' -> '3' 입력,

'Drill/Slot hole' -> 'Drill diameter:' -> '3' 입력
 



'File' -> 'Update to Design and Exit' 선택
 



'Place' -> 'Manually...' 선택



'Placement List' 탭 -> 'Components by refders' -> 'J1', 'J2', 'J3' 선택 -> 'Hide' 선택
 



마우스 우클릭 -> 'Rotate' 선택



마우스 이용 방향 지정 -> 마우스 좌클릭



'Command' 창 -> 'x 5 45' 입력 -> 'Enter' 키 입력
 



마우스 우클릭 -> 'Rotate' 선택 -> 방향 지정



'Command' 창 -> 'x 5 25' 입력 -> 'Enter' 키 입력
 



마우스 우클릭 -> 'Done' 선택



'Generaledit' 선택 -> 'J*' 1번핀 마우스 우클릭 -> 'Replace padstack' -> 'Selected instance(s)' 선택



'Pad60sq36d' 선택 -> 'OK' 선택
 



1번핀 pad 모두 변경

4) 치수 보조선

'Manufacture' -> 'Dimension Environment' 선택



마우스 우클릭 -> 'Parameters' 선택



'Text' 탭 -> 'Text block:' -> '5' 입력,

'Aligh text with dimension line' 선택,

'Decimal places:' -> '0' 입력 -> 'OK' 선택
 



마우스 우클릭 -> 'Linear dimension' 선택



보드 외곽선 마우스 좌클릭 -> 방향 결정 -> 마우스 좌클릭



치수 보조선 모두 입력



마우스 우클릭 -> 'Done' 선택


5) 실크 데이터의 작성

'Add' -> 'Text' 선택



'Options' -> 'Active Class and Subclass:' -> 'Board Geometry' -> 'Silkscreen_TOP' 선택,

'Text block:' -> '17',

'Text just:' -> 'Center' 선택



보드 상단 클릭 -> 'Basic Op-Amp' 입력 -> 마우스 우클릭 -> 'Next' 선택



보드 하단 선택 -> 'test' 입력 -> 마우스 우클릭 -> 'Done' 선택


6) 설계 규칙의 설정

'Setup' -> 'Constraints' -> 'Constraint Manager...' 선택



'Physical' -> 'Physical Constraint Set' -> 'All Layers' -> 'Line Width' -> '0.5' 입력



'Physical' -> 'Net' -> 'All Layers' -> '+12V', '-12V', 'GND' -> 'Line Width' -> '1.0' 입력



'Spacing' -> 'Spacing Constraint Set' -> 'All Layers' -> 'Line' -> 'Line' ~ 'Hole' -> '0.254' 입력



'Spacing' -> 'Spacing Constraint Set' -> 'All Layers' -> 'Pins' -> 'Line' ~ 'Bond Finger' -> '0.254' 입력



'Spacing' -> 'Spacing Constraint Set' -> 'All Layers' -> 'Shape' -> 'Line' ~ 'Hole' -> '0.5' 입력



'Same Net Spacing' -> 'Same Net Spacing Constraint Set' -> 'All Layers' -> 'Line' -> 'Line' ~ 'Hole' -> '0.254' 입력



'Same Net Spacing' -> 'Same Net Spacing Constraint Set' -> 'All Layers' -> 'Pins' -> 'Line' ~ 'Bond Finger' -> '0.254' 입력



'Same Net Spacing' -> 'Same Net Spacing Constraint Set' -> 'All Layers' -> 'Shape' -> 'Line' ~ 'Hole' -> '0.5' 입력



'Properties' -> 'Net' -> 'General Properties' -> 'GND' -> 'No Rat' -> 'On' 선택


7) 부품(Footprint)의 배치

'Setup' -> 'Grids...' 선택



'Non-Etch' -> 'Spacing:' -> 'x:' -> '1.27',

'y:' -> '1.27' 입력
 



'Display' -> 'Color/Visibility...' 선택



'Layers' -> 'Package Geom...' -> 'Pin_Number' 체크 해제



'Layers' -> 'Components' -> 'Silkscreen_TOP' -> 'RefDes' 선택 -> 'OK' 선택



'Place' -> 'Quickplace...' -> 선택



'Placement Filter' -> 'Place all components' 선택,

'Edge' -> 'Top', 'Bottom' 선택 -> 'Place' 선택
 



아래와 같이 풋프린트 위치함



적절하게 풋프린트 위치 시킴


8) 배선

'Route' -> 'Connect' 선택



'Options' -> 'Line lock:' -> 'Line', '45',

'Bubble:' -> 'Shove preferred' 선택



'Display' -> 'Color/Visibility...' 선택



'Nets' -> 아래와 같이 전원 색 입력



배선 -> 'Options' -> 작업면 변경



마우스 우클릭 -> 'Done' 선택


9) 카퍼(Copper Pour)의 작성

'Shape' -> 'Rectangular' 선택



'Options' -> 'Active Class and Subclass:' -> 'Etch' -> 'Bottom',

'Assign net name:' -> '...' 선택



'Gnd' 선택 -> 'OK' 선택
 



'Assign net name:' -> 'Gnd',

'Command' 창 -> 'x 5 5' 입력 -> 'Enter' 키 입력



'Command' 창 -> 'x 75 65' 입력 -> 'Enter' 키 입력



'Display' -> 'Status...' 선택



DRC 확인(Isolated shapes 존재)
 



'Shape' -> 'Delete Islands' 선택



'Options' -> 'Delete all on layer' 선택



'Display' -> 'Status...' 선택, DRC 확인


10) Reference의 정리

'Display' -> 'Color/Visibility...' 선택



'Global Visibility:' -> 'Off' 선택



'Stack-Up' -> 'Top', 'Bottom' -> 'Pin' 선택



'Board Geometry' -> 'Dimension', 'Outline', 'Silkscreen_TOP' 선택



'Package Geom...' -> 'Silkscreen_TOP' 선택



'Components' -> 'Silkscreen_TOP' -> 'RefDes' 선택



'Edit' -> 'Change' 선택



'Options' -> 'Text block:' 선택 -> '3',

보드 드래그하여 선택



마우스 우클릭 -> 'Done' 선택



'Edit' -> 'Move' 선택



'Find' -> 'All off' -> 'Text' 선택



레퍼런스 위치 및 방향 정리


11) Artwork File 생성

'Manufature' -> 'NC' -> 'Drill Customization...' 선택



'Auto generate symbols' 선택



'Manufacture' -> 'NC' -> 'Drill Legend...' 선택



'OK' 선택
 



범례 위치 시킬곳에 마우스 좌클릭



'Manufacture' -> 'Artwork...' 선택



'General Parameters' 탭 -> 'Device type' -> 'Gerber RS274X',

'Output units' -> 'Millimeters',

'Format' -> 'Integer places:' -> '3',
'Decimal places:' -> '5',

'Suppress' -> 'Leading zeroes', 'Equal coordinates' 선택
 



'Film Control' 탭 -> 'Top' 하위 메뉴 선택 -> 마우스 우클릭 -> 'Add' 선택
 



'BOARD GEOMETRY' -> 'OUTLINE' 선택 -> 'OK' 선택
 



'Undefined line width:' -> '0.2' 입력
 



'BOTTOM' -> 하위 메뉴 선택 -> 마우스 우클릭 -> 'Add' 선택
 



'BOARD GEOMETRY' -> 'OUTLINE' -> 'OK' 선택
 



'Undefined line width:' -> '0.2' 입력
 



'Display' -> 'Color/Visibility...' 선택



'Global Visibility:' -> 'Off' 선택



'Stack-Up' -> 'Soldermask_Top' -> 'Pin' 선택



'Board Geometry' -> 'Outline' 선택



'Manufacture' -> 'Artwork...' 선택 -> 'TOP' 마우스 우클릭 -> 'Add' 선택
 



'Soldermask_TOP' 입력 -> 'OK' 선택
 



'Undefined line width:' -> '0.2' 입력



'Display' -> 'Color/Visibility...' 선택 -> 'Global Visibility:' -> 'Off' 선택



'Stack-Up' -> 'Soldermask_Bottom' -> 'Pin' 선택



'Board Geometry' -> 'Outline' 선택



'Manufacture' -> 'Artwork...' 선택 -> 'Soldermask_TOP' -> 마우스 우클릭 -> 'Add' 선택
 



'Soldermask_BOTTOM' 입력 -> 'OK'선택
 



'Undefined line width' -> '0.2' 입력
 



'Display' -> 'Color/Visibility...' 선택 -> 'Global Visibility:' -> 'Off' 선택



'Board Geometry' -> 'Dimension', 'Outline', 'Silkscreen_Top' 선택



'Package Geom...' -> 'Silkscreen_Top' 선택



'Components' -> 'Silkscreen_Top' -> 'RefDes' 선택



'Manufacture' -> 'Artwork...' 선택 -> 'Soldermask_BOTTOM' -> 마우스 우클릭 -> 'Add' 선택
 



'Silkscreen_TOP' 입력 -> 'OK' 선택
 



'Undefined line width:' -> '0.2' 입력
 



'Display' -> 'Color/Visibility...' 선택 -> 'Global Visibility:' -> 'Off' 선택



'Board Geometry' -> 'Outline' 선택



'Manufacturing' -> 'Nclegend-1-2' 선택



'Manufacture' -> 'Artwork...' 선택 -> 'Silkscreen_TOP' -> 마우스 우클릭 -> 'Add' 선택
 



'DRILL' 입력 -> 'OK' 선택



'Undefined line width:' -> '0.2' 입력
 



'Select all' 선택 -> 'Create Artwork' 선택

12) 결과물 출력

'File' -> 'Plot Setup...' 선택



'Plot scaling:' -> 'Scaling factor:' -> '1.0',

'Plot orientation:' -> 'Auto center',

'Plot method:' -> 'Black and white',

'Plot contents:' -> 'Sheet contents' -> 'OK' 선택
 



'Visibility' -> 'Views:' -> 'TOP', 'BOTTOM', 'Soldermask_TOP', 'Soldermask_BOTTOM', 'Silkscreen_Top', 'DRILL'

출력하고자 하는 뷰 선택



'File' -> 'Plot...' 선택


반응형

'Study > 전자캐드기능사' 카테고리의 다른 글

전자캐드기능사 부품선정 Orcad 회로설계  (3) 2021.01.25
반응형

풋프린트 선정

1.트랜지스터(npn,pnp,JFET 등): TO92
2.다이오드(제너 포함):DO35
3.IC(8,14,16핀짜리): DIP(핀갯수)_3
EX)8핀 IC=DIP8_3
4.정전압 IC: TO220AB
5.저항,R: RES400
6.가변저항: RESADJ
7.콘텐서(극성없음/있음):CAPCK05/CAP196
8.LED: CAP196(극성있는 콘데서와 같다.)
9.CON2/스위치(2핀짜리): JUMPER2
10.CON(3,4,5 등): JUMPER(3,4,5)


[출처] 각 부품별 풋프린트값 알아보기|작성자 뿌이이이잉



전자캐드 기능사 실기 참고 링크


https://m.blog.naver.com/PostView.nhn?blogId=junyoung8934&logNo=220393220042&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F


OrCAD 16.6 이용하여 전자캐드 기능사 실기 평가와 유사한 형태의 회로 설계 진행



그리고자 하는 opamp 기본 구동 회로



- 진행 순서

1) Project 만들기

OrCAD Capture 실행 -> 'File' -> 'New' -> 'Project...' 선택



'Name' -> 생성할 프로젝트명 입력,

'Create a New Project Using' -> 'Schematic' 선택,

'Location' -> 생성할 프로젝트 경로 입력 -> 'OK' 선택


2) 환경 설정

'Options' -> 'Schematic Page Properties...' 선택



'Units' -> 'Millimeters' 선택,

'New page Size' -> 'A4' -> '확인' 선택

 

3) Title Block 작성

도면 우측 하단의 '<Title>' 우클릭 -> 'Edit Properties...' 선택



'Value:' -> 제목 입력 ,

'Font' -> 'Change' 선택
 



'크기' 수정 -> '확인' 선택
 



'Document Number', 'Rev' 위와 동일하게 내용 입력 및 수정 -> 메뉴바 'Snap To grid' 선택



'Title', 'Document Number', 'Rev' 드래그하여 위치 이동 -> 메뉴바 'Snap To Grid' 선택하여 원래 상태로 돌림

 


4) 부품 배치

'Place' -> 'Part...' 선택



우측의 'Place Part' -> 'Libraries:' -> 'Add Library' 선택



'library' 폴더내의 전 폴더 및 파일 선택 -> '열기' 선택
 



'Place Part' -> 'Part'에서 원하는 부품명 입력



도면에 부품 위치 시킴



'Place' -> 'Power...' 선택하여 전원 추가



'Name' -> 원하는 전원 value 입력 -> 'OK' 선택
 



'Place' -> 'Ground...' 선택



'GND' 선택 -> 'OK' 선택
 



핀 수정 위해 'LM741' 우클릭 -> 'Edit Part' 선택



수정하기 전의 핀 배치



4번, 7번 핀 드래그하여 위치 변경



'*.DSN' 탭 우클릭 -> 'Close' 선택



'Update All' 선택

 

5) 배선 작업

LM741의 패키지 형태, 본 회로에서 1, 5번핀 기능은 사용하지 않아 이를 처리해줌

(8번 핀의 NC는 이후 Footprint 과정에서 작업)
 

'Place' -> 'No Connect' 선택



LM741의 1번, 5번 핀 선택하여 아래와 같이 작업



'Place' -> 'Net Alias...' 선택



'Alias:' -> net 이름 입력 -> 'OK' 선택
 



아래와 같이 연결하고자 하는 net 위에 클릭



'Place' -> 'Hierarchical Port...' 선택



'Symbol:' -> 'PORTLEFT-R' 선택 -> 'Name' -> port 이름 입력 -> 'OK' 선택 -> net 위에 클릭
 



위와 동일하게 'PORTLEFT-L' 선택 -> 'NAME' -> port 이름 입력 -> 'OK' 선택 -> net 위에 클릭
 



아래와 같이 작업



'*.opj' 탭 -> '*.dsn' 선택 -> 'Tools' -> 'Annotate...' 선택



'Action' -> 'Reset part references to "?" 선택 -> '확인' 선택
 



아래와 같이 reference "?"로 초기화



적절하게 reference 지정

 


6) Footprint 작업

'*.opj' 탭 -> '*.dsn' 우클릭 -> 'Edit Object Properties' 선택




 PCB Footprint

 Part 

 DIP8_3

 LM741, LF355, LF356, NE555

 DIP14_3

 74LS90, 4011, 4013, 74LS04

 DIP16_3

 4538

 CON2

 JUMPER2

 CON3

 JUMPER3

 CON4

 JUMPER4

 DO41

 DIODE, DIODE ZENER

 RES400

 RESISTOR

 RESADJ

 RESISTOR VAR 

 CAPCK05

 CAP NP

 CAP196

 CAP POL, LED

 TO92

 NPN ECB, JFET N SGD

 TO220AB

 LM7812, LM7912



'PCB Footprint' 열의 적절한 내용 입력 -> 'New Property...' 선택



'Name' -> 'NC' 입력 -> 'OK' 선택
 



풋프린트상 연결하지 않는 핀 번호 'NC' 열에 입력

 


7) 설계 규칙 검사

'*.opj' 탭 -> '*.dsn' 선택 -> 'Tools' -> 'Design Rules Check...' 선택



'Design Rules' -> 'View Output' 선택 -> '확인' 선택
 



에러 확인



'*.opj' 탭 -> '*.dsn' 선택 -> 'Tools' -> 'Create Netlist...' 선택



'Create or Update PCB Editor Board (Netrev)' 선택,

'Options' -> 'Board Launching Option' -> 'Open Board in OrCAD PCB Editor' 선택
 



생성된 파일 확인




반응형

'Study > 전자캐드기능사' 카테고리의 다른 글

전자캐드기능사 풋프린트 Artwork  (0) 2021.01.25
반응형



코딩은 MPLAB에서 무료로 제공되는 어셈블리어(mpasm)나 C언어(xc8)로 하고, 기본적인 시뮬레이션은 MPLAB에 있는 simulator 기능으로 돌려보고... 칩에 꿉는 것(프로그래밍)은 3만원짜리 PICkit3(↓) 하나면 문제없이 할 수 있다. 


 



PIC용 C언어인 CCS-C를 개발용으로 많이 쓰기도 하는데, 예전에는 P2P에 크랙판이 많이 돌아다녔지만 요즘은 정품 아니면 곤란하고, 개인이 사기엔 비싸다. 


나는 어셈블리어를 사용할 예정이다. CCS-C를 잠시 써보기는 했지만, 왠지 레지스터를 직접 제어하는 어셈블리어에 대한 매력이 있다. 자동차로 치자면 수동변속기의 불편하지만 짜릿한 손맛이랄까? 제품개발이 아니라 취미로 하는 것이니 힘들어도 문제될 것도 없다. C에서 쉽게 함수하나로 쉽게 구현할 수 있는 것도,,, 온갖 손짓발짓을 다해야 하겠지만.... 어떻게든 되겠지...



MPLAB 설치는 마이크로칩 홈페이지 https://www.microchip.com/ 에서 아래의 순서에 따라 한다.


홈페이지의 Design - Development Tool - MPLAB X IDE로 들어간다.

 Windows용으로 선택해서 설치



MPLAB 설치 후 화면에 보이는 아이콘


프로그램 시작하면 CCS-C 데모버젼을 다운하겠냐는 팝업창이 뜬다. 필요없으니 No.



최초화면이 이와 비스므리 하게 뜬다. 가운데 Start Page라고 나오는데 큰의미 없음. 


프로젝트를 만든다. microchip embedded - stand alone project... 여기는 그대로 따라가기.



디바이스(칩) 종류 선택한다. 내가 주로 사용할 제품은 PIC 18계열의 <PIC1818F4480> 이다. 2480/2580/4480/4580은 핀숫자와 메모리 크기만 다르고 같은 계열이다.



하드웨어툴은 PICkit3을 선택한다. 하드웨어 툴이 없으면 simulator를 선택하면 된다.



코딩에 사용할 언어는 어셈블리어인 mpasm을 선택


 

프로젝트 이름 입력

왼쪽 상단에 프로젝트가 생겼다. 성가신 Start Page는 X 표시를 클릭해서 지워버려도 된다.



프로젝트의 여러 구성들 중에서 source files를 오른쪽 클릭하면 나타나는, new - pic_8b_simple.asm을 클릭한다.



소스파일 명을 입력한다. 프로젝트명과 같은 이름으로 했다.


pic_8b_simple.asm 은 간략한 소스프로그램 샘플을 보여준다. 여기에 코딩을 하면 되는데, 추가적인 코딩 없이 있는그대로 <빌드>를 해본다.  상단의 망치 아이콘을 클릭하면 오른쪽 아래에 초록색 글글자로 "BUILD SUCCESSFUL"이라 나온다. 이제 칩에 꾸울 준비가 되었다. 비록 아무 동작도 하지않는 프로그램이지만...... 


반응형
반응형

방법


1. 프로젝트 > 속성 > 링커 > 시스템 > 하위시스템 > 콘솔


2. system("pause")

반응형

'개발환경 > Visual Studio' 카테고리의 다른 글

단축키  (0) 2021.01.25
반응형

https://cafe.naver.com/carroty/249972


참고


1. Reshack 파일 실행


2. pads 경로 C:\MentorGraphics\9.5PADS\SDD_HOME\Programs\enu


3. powerpcbres.dll, powerlogicres.dll 파일을 연다.


4. logic에선 650, 740, 748 수정


5. pcb에선 8004, 8005, 8006, 10010, 11100, 11200 를 크기에 맞게 수정한다.


6. 650, 8004, 10010을 먼저 수정하길 권장한다.

반응형
반응형

CTRL + H : 바꾸기 기능

CTRL + A : 전체 선택

CTRL +K, F : 정렬하기

CTRL +M+O : 접기

CTRL +M+L : 펼치기

반응형

'개발환경 > Visual Studio' 카테고리의 다른 글

Visual studio 2017 콘솔창 바로 꺼지는 현상.  (0) 2021.01.25
반응형

AVR Studio 4.19 + toolchain 을 사용하고 있었다.


Atmel studio 7.0 이 더 편리하고 깔끔하다는 얘기를 듣고 찾아보았다.

 

micorchip 홈페이지 에 들어가서 atmel studio를 찾아보면 다운로드를 할 수 있습니다.

 

http://www.microchip.com/avr-support/atmel-studio-7

 

 

 

두번 째 offline installer 를 다운로드 해서 다운로드 후 설치 하면 된다.

 

avr studio 4.19와 다르게 빌드 > hex파일  > 다운로더 를 한번에 IDE에서 처리 할 수 있다고 한다.

 

소스 UI또한 깔끔해 졌으며, vs기반으로 만들어 졌다고 한다.

 

memory 또한 IDE에서 출력을 해준다. 나중에 map파일을 보아야 알 수 있다고 한다.

 

얼마나 편리한지는 칩에 한번 올려 봐야 알 것 같다.

 

 

반응형
반응형

1. avrstudio 환경에서 delay 함수 사용시 

 

 

F_CPU를 선언하지 않는 경우, 또는 F_CPU를 delay.h 이후에 선언하는경우
-> 컴파일 옵션(project 속성에서)으로 -DF_CPU=xxx 가 되도록 하시거나,
#define F_CPU 16000000UL // 실제 동작 clock hz
#include <util/delay.h>

위 F_CPU 정의 및 delay.h 와의 순서 지킬것.

2. avrstudio 환경에서 인터럽트 문맥과 비 인터럽트 문맥에서 공유하는 변수 사용시 volatile 

인터럽트 문맥과 비 인터럽트 문맥에서 공유하는 변수는 volatile 수형을 붙여 주거나,
컴파일 옵션에서 -O0(옵티마이저 끄기)를 주거나

3. 빠른 속도로 인터럽트(타이머 같은) 에서 변경되는 변수를 비 인터럽트 루틴에서 exact match 비교

volatile int cnt  = 0;
ISR(TIMER0_COMPA_vect)
{
    cnt ++;
}

main()
{
    while(1)
    {
        if(cnt == 100) //  자원 공유(바로 이전 보충자료(13)참조 문제 및, 실행되는 코드에 따라서는 cnt 변화를 따라 갈수 없는 경우발생
    }
}

4.  uart 의 buffer 동작 잘못 이해
 
main()
{
     if(UDR0 == 'a') { } 
     else if(UDR0 == 'b') {}
}
=> UDR은 마치 fifo와 같아서 읽으면 수신된 데이타가 buffer에서 없어짐.
  즉 첫번째 UDR0 를 읽으면 그 다음 else if의 UDR0는 이전 UDR0 에 저장된 값이 아님.

5.  atmega8 계열의 UCSRC와 UBRRH 가 같은 주소를 공유함. 
최상위 한비트에 따라 1이면 UCSRC가, 0이면 UBRRH가 선택됨
=> UCSRC = (1 << 7) | 원하는 값;

6. 16MHz 동작 avr 칩의 uart  115200 baud 인 경우 
16X 로 동작시 error 율이 3% 넘어서 데이타 깨질수 있음.
=> U2X = 1로 설정(UCSRA) 및 ubrr = SYS_CLK / 8.0 / baud - 1 + 0.5;
 U2X를 1로 하고 8로 나눠서 에러율을 낮출수 있음. 위 0.5는 반올림용.


7. 칩을 새로 붙인후 fuse 비트 외부 crytal이 16MHz라고 16Mhz로 동작한다고 생각하는 경우

#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
main()
{
    DDRA = 1;
    while(1) { PORTA ^= 1; _delay_ms(1000); }
}
포트 A의 핀 0에 LED가 있다고 가정하고
1초 켜지고 1초 꺼지면, 16MHz
2초 켜지고 2초 꺼지면, 8MHz
4,
8
16초 켜지고, 16초 꺼지면, 1MHz(보통 내부)

8. 인터럽트 루틴내에서 처리시간 많이 넣기.

ISR()
{
    while(1)
    {
        _delay_ms(x); 
        기타 시간소모하는 코드들.
    }
}
=> 가능하면 인터럽트 루틴 코드는 간단히, 시간 적게 걸리게 하기
하지만 그렇다고 너무 지나치게 ISR에서 코드 넣는걸 싫어할 필요는 없음.

즉 사용하고자 하는 다른 인터럽트 종류, 또는 controller의 오동작 유발하지 않는 범위면 상관없음.


9. atmega128 함수 호출만 하지 않으면 정상 동작하는 경우

fuse 비트의 M103C 가 체크 되어 있으면, 내부 sram주소 영역이 0x100 만큼 줄어든다.
이 상태에서 atmega128로 코딩하면 stack이 정상 동작하지 않는다.

=> M103C 를 uncheck 상태로 

10. avrstudio/winavr 환경에서 _delay_ms , _delay_us 의 인자가 변수가 허용되지 않는 경우
#define __DELAY_BACKWARD_COMPATIBLE__
이걸 delay.h앞에 추가


11. avr 16비트 레지스터 access 시 주의 

11.1 16비트 레지스터중 주의 읽기 주의해야 하는 레지스터
    
  ADCL, ADCH 경우 ADCL를 읽으면, 내부의 ADC값이 하위값이 읽히고, 상위는 내부에 latch 됨
  상위를 읽지 않으면 ADCL을 읽어도 새로운 ADC값이 읽히지 않음..
  즉 불필요하더라도 ADCL 만 읽는 형태로 코딩하면 안됨.

  16비트 단위로 읽거나, 하위, 상위 순서대로 읽기를 할것.(상위가 필요없어도 꼭 읽어줘야 함)

11.2 16비트 읽기,쓰기 바이트 단위로 접근시 주의 할 레지스터

The TCNTn, OCRnA/B/C, and ICRn 16bit 레지스터는 직접 8비트 단위로 접근시,
읽기 : 하위 먼저, 다음 바로 해당 레지스터 상위
쓰기 : 상위 먼저, 다음 바로 해당 레지스터 하위

- 쓰기
   상위 쓰기 하면 내부 임시 레지스터에 들어 있다가, 하위 쓰기 하면 16비트 쓰기가 실제로 이루어짐.
   이 임시 레지스터는 여러 16bit 레지스터간 공유이므로,  다음과 같은 건 문제가 있겠죠.
    TCNT1H = 0x10;
    TCNT3H = 0x20;
    TCNT1L = 0x34;
    TCNT3L = 0x56; 
   위 임시저장이 하나이므로 이 경우 TCNT1은 0x2034(0x1034가 아님), TCNT3은 0x02056이 들어갈것 
 (확인 한게 아니라 나중에 확인 하겠음) 


12. 인터럽트 루틴에서 cli(), sei() 사용하기

ISR()
{
    cli();
    할일들
    sei();
}

ISR에 들어가면 자동으로 cli()와 같은 효과, 나올때 sei() 효과와 동일한 일이 하드웨어적으로 이루어 집니다,.
따라서 ISR내에서 cli(), sei()로 critical section 화 하는건 의미가 없습니다.


13. 상태 flag 지우기

13.1 uart 수신 flag 지우기
ISR(USARTx_RXC_vect)
{
    UCSRxA = UCSRxA & ~0x80;
    ch = UDRx;
}
이런식으로 해당 수신 flag을 지울려고 노력하는 사람들이 보이는데, 해당 flag는 UDR(실제로 두바이트 버퍼)에 
데이타가 없을때 자동으로 지워집니다. 위처럼 해당 비트를 0으로 쓰기한다고 지워지지 않습니다.

13.2 EIFR, TIFR 의 특정 flag 비트 지우기
 
mcu/controller 등에 익숙하지 않은 분들은 13.1 처럼 flag 성격의 비트를 지울때 0을 쓰기 하면 된다고 생각하는 
사람들이 있습니다.
 EIFR = EIFR & ~1; // 최하위 한비트 지울려고 이렇게 함. 이렇게 하면 원하는 동작이 안됨.

 flag 성격의 비트들은 s/w가 clear 할 수 있는 경우 보통 해당 비트를 1로 쓰기하면 지워집니다.
 즉
 EIFR = EIFR;
이렇게 하면. 1로 설정된 비트들에 모두 1을 쓰기 한 결과가 되어서, 그전에 설정된 모든 flag(EIFR을 읽을떄)를  clear  하는 효과가 있습니다.

 원하는 비트만 clear 할려면
 EIFR = 1 << 원하는 비트위치;
 이렇게 합니다.

 즉 정리하면 
 일반 레지스터(모드 설정등)는 해당 비트를 0을 쓰기 하면 0이 쓰여지고, 1을 쓰기 하면 1이 쓰여지는 게 있지만
 flag(인터럽트를 발생시키기 위한 비트로도 사용되는 경우가 많은)은 
 인터럽트 발생시 clear 되거나(EIFR), program에서 직접 clear 하고자 하는 비트만 1이 되도록 해서 쓰기를 하거나,
 해당 조건이 사라지는(UCSRnA 의 RXC 비트 같은 경우 데이타를 읽어내면 저절로 지워짐) 해당 flag가 clear 됩니다.
 해당 레지스터를 잘 읽는게 좋습니다.


반응형

'개발환경 > AVR Studio 4.19' 카테고리의 다른 글

No such file 오류시 및 환경 설정  (0) 2021.01.25
_delay_ms() 인자로 변수 사용하기  (0) 2021.01.25
반응형

경로  및 MCU 미설정시 build 실행시 오류가 생길 수 있음

 



 

avr-gcc 에는 C: inAVR-20100110\bin\avr-gcc.exe 로 경로를 입력

 


make 에는 C: inAVR-20100110\utils\bin\make.exe 로 경로를 입력

반응형

'개발환경 > AVR Studio 4.19' 카테고리의 다른 글

실수 하기 쉬운 것들 참고  (0) 2021.01.25
_delay_ms() 인자로 변수 사용하기  (0) 2021.01.25
반응형

프로젝트 생성

- Analog or Mixed A/D : 아날로그 또는 아날로그/디지털 혼합회로 설계하기 위해 OrCAD PSpice를 사용하려는 프로젝트

- PC Board Wizard : PCB를 설계하기 위해 OrCAD PCB Editor를 사용하려는 프로젝트

- Programmable Logic Wizard : PLD 또는 FPGA를 사용한 로직 회로를 설계

- Schematic : 위의 세 가지 프로젝트에 포합되지 않는 단순 회로도면을 작성하기 위한 프로젝트

 설계 환경 설정

1. Option 메뉴에서 Design Template(alt+O,D)​ 

2. Schematic page Properties 명령에서 Page Size, Grid Reference, Miscellaneous 등의 옵션 설정가능 그러나 현재 사용하는 회로도면에 국한되어 있으며 전체 설계에 영향을 끼치지 않는다.

3. Option 메뉴에서 Design Template 명령의 수형은 현 회로도면 및 설계에는 적용되지 않는 것에 유의

반응형

+ Recent posts