본문 바로가기

분류 전체보기840

STM32 + MFC ] 델타 로봇, RTOS 구조 변경 + 슬라이더 컨트롤을 통한 좌표 이동 제어 먼저 STM32 부분 구조를 좀 바꿨다. Task 는 다음의 3개로 구성된다. 1. 각 조인트에 달린 모터의 각도를 읽고 정기구학을 통해 엔드이펙터의 좌표를 UART로 송신하는 Task (수행 중엔 다른 Task 보다 Priority 가 높을 필요가 있다) 2. 엔드이펙터의 좌표를 변경하라는 command 가 들어왔을 때 역기구학을 통해 모터의 각도를 제어하는 Task 3. UART 수신으로 command 가 들어오면 처리하는 Task 이렇게 3개가 있다. Queue는 엔드이펙터 좌표값을 넣는 SetQueue와 커맨드 문자열(cahr 배열 20byte)을 담든 cmdQueue가 있다. Semaphores는 1번 Task에 보내는 신호로 ReadPosSem을 하나 놔두고 다 지웠다. UART3 인터럽트 콜.. 2022. 9. 14.
MFC ] 라디오 버튼 그룹 지정하여 사용하기 + 초기값 지정하기 직관적으로 만들기 위해 그룹 박스를 먼저 그려주고 그 위에 라디오 버튼을 만든다. 라디오 버튼을 MOVE, DELAY, PUMP 이렇게 3개를 만들었다. 내가 생성한 컨트롤에는 각 ID마다 #define으로 숫자값이 부여되는데 이건 Resource.h 에 정의되어 있다. 이 값이 1씩 증가해야 그룹지어 사용할 수 있다. Ctrl+D 를 눌러 중간에 끼어드는 값 없이 번호가 순차적으로 부여되었는지 시각적으로 확인할 수도 있다. 각 라디오 버튼의 속성은 아래처럼 설정한다. 라디오 버튼은 그룹 True 부터 시작해서 다음 True를 만나기 전까지 하나의 그룹으로 묶인다. 이렇게 한 그룹으로 묶이면 클래스 마법사에서 확인해봤을 때 그룹의 첫번째 라디오 버튼만 뜨는 것을 확인할 수 있다. -Dlg.h 파일에 체크.. 2022. 9. 13.
MFC ] 리스트 컨트롤 첫번째 열 가운데 정렬하는 법 BOOL CdeltaControlDlg::OnInitDialog() { //... m_list.SetExtendedStyle( LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); m_list.InsertColumn(0, _T(""), LVCFMT_CENTER, 0); m_list.InsertColumn(1, _T("No."), LVCFMT_CENTER, 40); m_list.InsertColumn(2, _T("Action Type"), LVCFMT_CENTER, 160); m_list.InsertColumn(3, _T("Attributes"), LVCFMT_CENTER, 304); //... } 리스트 컨트롤의 첫번째 열은 왼쪽 정렬밖에 안되는 데 굳이 가운데 정렬를 하고 싶다면 .. 2022. 9. 13.
TMS320F28388D ] ADC (ePWM 타이머를 사용한 Interrupt 방식) //// Included Files//#include "driverlib.h"#include "device.h"#include "board.h"//// Defines//#define RESULTS_BUFFER_SIZE 256//// Globals//uint16_t myADC0Results[RESULTS_BUFFER_SIZE]; // Buffer for resultsuint16_t index; // Index into result buffervolatile uint16_t bufferFull; // Flag to indicate buffer is full//// Function Pr.. 2022. 9. 13.
TI ] SysConfig 와 CCS 의 유용한 기능 1. pinmux.csv .syscfg 파일이 있는 프로젝트를 빌드하면 실행파일이 나오는 폴더 안의 syscfg 폴더 안 pinmux.csv 파일이 있다. 열어보면 아래와 같이 pinMux 세팅을 한눈에 볼수 있다. 해당 핀으로 사용가능한 기능, 현재 사용중인 모드 등을 볼 수 있고 엑셀의 필터기능을 사용하면 더 유용하게 쓸 수 있다. 2. Compare 소스파일을 누르고 오른쪽클릭 Compare With Local History 를 선택하면 아래와 같이 Revision History가 나오고 해당 시간을 클릭하면 어떤걸 수정했는지 확인할 수 있다. 파일 두 개를 선택하고 Compare Each Other 하는 것도 가능하다. 3. Outline CCS에서 Outline이 뜨지 않을때, 해당부분을 체크 .. 2022. 9. 12.
TMS320F28388D ] Watch Expressions (Continuous Refresh) STM32에서 Live Expression 과 같이 전역변수를 디버깅하며 실시간으로 관찰할 수 있는 기능이다. 첫번째 방법 보려고 하는 변수를 Expression 에 추가 Continuous Refresh 클릭 점 세개 누르고 Continuous Refresh Interval 클릭 최소 100ms 간격으로 refresh 되게 할 수 있다. 두번째 방법 Continuous Refresh 는 해제하고 해당 변수의 데이터가 변한 뒤 부분에 Breakpoint를 건다. (오른쪽 클릭 또는 파란 라인을 더블클릭해서 토글시킬 수 있다) 참고. Hardware Breakpoint는 CPU의 디버그 레지스터를 이용하는 방법으로 INT1을 사용한다. 속도는 빠르지만 설정할 수 있는 브레이크 포인트 개수에 한계가 있다. .. 2022. 9. 10.
CPU, MCU, MPU, DSP, FPGA 구분 On chip / SoC On chip은 하나의 IC에 제어, 연산, 입출력, 저장장치가 다 들어 있는 Stand alone 형태를 의미한다. SoC(System on Chip)과 같은 의미로 볼 수 있지만, 보통 SoC를 말하면 On chip + 특수기능을 하나의 칩에 구현하는 것을 의미한다. CPU (Central Processing Unit) CPU는 산술 및 논리 연산 유닛인 ALU(Arithmetic and Logical Unit)와 명령어를 읽어오고 해석해서 각 유닛을 제어하는 CU(Control Unit) 그리고 연산을 수행할 때 필요한 데이터를 빠르게 접근하고 처리하기 위해 사용되는 Register를 묶은 형태이다. CPU는 실행할 프로그램과 데이터, 입출력을 제어하는 역할을 하지만 I/O.. 2022. 9. 10.
Ethernet Frame 최소 길이가 64 byte인 이유 (+ CSMA/CD) 프레임의 최소 길이는 왜 64 byte 일까. 그 이유는 과거 Layer 1의 표준 때문이었다. Ethernet이 처음 만들어졌을 때 통신을 위해 만들었던 최초의 케이블의 Type은 10BASE5 를 이용해서 통신을 하였다. 즉 대역폭 10Mbps & 거리 500M 의 동축 케이블이다. 또한 그 때 당시 Ethernet은 half-duplex 이었으므로 충돌(Collision)이 발생하는 구조였고, 충돌을 방지하기 위해 CSMA/CD방식을 사용하였다. 우선 송신 측에서는 내가 보낸 프레임이 목적지에 도착할 때까지는 충돌이 발생하는 지를 감시해야 하는데, 충돌이 발생하는지 안 하는지 감지할 동안 프레임이 계속 전송되고 있어야, 충돌 발생 시 프레임을 폐기하고 재 전송할 수 있다. 때문에 데이터가 가장 멀리.. 2022. 9. 10.
MFC ] 슬라이더 컨트롤 사용하기 도구 상자 - Slider Control 생성하고 그 옆에 Edit Control을 만든다. ID는 다음과 같이 변경했다. 에디트 컨트롤 속성의 숫자를 True로 하면 숫자만 입력되게끔 할 수 있다. 슬라이더 컨트롤은 범주 컨트롤로 변수 추가하고 에디트 컨트롤은 값 CString으로 변수를 추가한다. OnInitDialog() 에 다음과 같이 추가한다. BOOL CdeltaControlDlg::OnInitDialog() { //... SliderInit(&m_sliderX); SliderInit(&m_sliderY); SliderInit(&m_sliderZ); m_strX.Format(_T("%d"), 0); m_strY.Format(_T("%d"), 0); m_strZ.Format(_T("%d"), -.. 2022. 9. 10.
Ethernet Frame 이더넷 프레임의 구조 CSMA/CD 를 사용하는 Ethernet 상의 MAC 프레임을 이더넷 프레임이라고 한다. OSI 7 Layer 중 2계층인 데이터링크 계층에 해당하는 프로토콜이다. Ethernet Frame 의 구조 ▶ Preamble (7 byte) (10101010) 비트 동기를 위해 56 비트 동안 `1`,`0`을 반복함 ▶ SFD (1 byte) : Start of Frame Delimiter (10101011) 프레임 동기를 위한 식별용 문자 (0xAB). 마지막 두 비트가 `11` 임. 프리엠블 직후에 붙어 자신의 뒤로 프레임의 내용이 시작된 다는 것을 알리는 역할을 한다. Peaamble과 SFD는 물리계층 헤더이기 때문에 MAC Frame에는 포함되지 않고 Wireshark에서 확인되지않는다. ▶ MAC.. 2022. 9. 8.
TMS320F28388D ] External Interrupt 외부 인터럽트 데이터 시트 116페이지에 나와있듯이 외부 인터럽트는 5개 까지 지원된다. syscfg 설정 LED GPIO Output 설정 버튼 GPIO Input 설정 참고로 Qualification Mode는 디폴트가 Synchronization to SYSCLKOUT Only 이다. 그냥 단순히 SYSCLK에 동기화해서 들어오는 신호를 입력받겠다는 것이다. 여기서 Input Qualification 이란 (Technical Reference Guide 1639페이지 부터) 디지털 신호는 일반적으로 아날로그 신호보다 노이즈에 대한 내성이 더 강하므로 왜곡이 거의 없다고 볼 수 있는데 위의 그림처럼 (A)와 같은 노이즈가 발생하면 매우 곤란하다. 이런 경우에 Input Qualification 이 쓰일 수 있다. .. 2022. 9. 8.
TMS320F28388D ] SCI (UART) 통신하기 - 수신 인터럽트를 통한 에코백 설정은 이전 글에서 이어진다. 2022.09.07 - [DSP, MCU/TMS320F2838x (C28x)] - TMS320F28388D ] SCI (UART) 통신하기 - 송신 TMS320F28388D ] SCI (UART) 통신하기 - 송신 SCI : Serial Commnucation Interface 직렬 통신 인터페이스로 UART보다 광범위한 개념으로 쓰이지만 주로 UART 용도로 쓴다. 새 프로젝트를 만드는 것보다 .syscfg 가 있는 예제파일을 불러와 시작하는 것이 eteo.tistory.com interrupt를 수행하는 함수를 Interrupt Handler 또는 ISR (Interrupt Service Routine) 이라고 표현한다. 그리고 핸들러 함수를 만들때는 앞에 __inter.. 2022. 9. 8.
네트워크 프린터 연결 방법 프린터 추가로 안될 때 하는 방법 먼저 프린터 제조사 홈페이지에 소프트웨어를 다운받고 장치가 연결되지 않은 상태에서 드라이버 먼저 설치한다. 제어판 - 프린터 - 해당 프린터 오른쪽 클릭해 프린터 속성 포트 탭 - 포트 추가 새 포트 프린터 ip 주소 입력 후 선택 2022. 9. 7.
TMS320F28388D ] SCI (UART) 통신하기 - 송신 SCI : Serial Commnucation Interface 직렬 통신 인터페이스로 UART보다 광범위한 개념으로 쓰이지만 그중에 주로 UART 용도로 쓴다. 새 프로젝트를 만드는 것보다 .syscfg 가 있는 예제파일을 불러와 시작하는 것이 좋다. 프로젝트를 복붙해 sci_test 라는 프로젝트를 하나 만들고 .syscfg 파일을 더블클릭해 sysconfig tool 로 들어간다. 형관펜으로 표시한 버튼을 누르면 데이터시트 11페이지에도 있는 핀 다이어그램을 볼 수 있다. F2838x는 176-pin QFP 와 337-pin BGA 패키지가 있는데 내가 사용하는 모델은 337-pin BGA이다. 그리고 그 옆의 Show Generated Files 를 누르고 File name 을 클릭하면 sysco.. 2022. 9. 7.
TMS320F28388D ] 프로젝트 복사하기 Copy와 Paste로 복붙한다. 프로젝트명을 적어 복사한다. F2키를 눌러 .c 파일과 .syscfg 파일도 프로젝트명과 동일하게 바꾼다. 이전 빌드로 생긴 CPUx_RAM 또는 CPUx_FLASH 폴더는 지워준다. 링커 설정에 아래와 같이 되어 있기 때문에 빌드하면 생성되는 실행파일(.out)포함 출력물도 프로젝트명으로 생긴다. 참고로 STM32에선 .elf 로 생성됐었다. 필요한 경우 Debug Configuration 을 수정하고 디버그한다. 2022. 9. 7.
Git ] Private 레파지토리에 협업자를 초대하기 Settings - Collaboratos - Add people ID 나 email 주소로 검색해 초대할 수 있다. 초대받은 사람은 gmail에 들어가면 초대장이 와있다. 깃 계정에 로그인하고 수락하면 해당 레포지토리에 접근가능하고 포크해서 가져오는 것도 가능하다. 2022. 9. 7.
TMS320F2838x ] PIE Vector Table TI 의 PIE Vector table 행이 그룹이고 열이 채널이며 숫자가 낮을수록 더 높은 우선순위를 갖는다. 즉 여러 인터럽트가 펜딩 상태일 때 낮은 숫자 그룹의 낮은 채널 인터럽트가 먼저 실행된다. 테크니컬 레퍼런스 매뉴얼 153-158 페이지 더 자세한 내용을 확인할 수 있다. https://www.ti.com/lit/ug/spruii0d/spruii0d.pdf?ts=1662539879473 2022. 9. 7.
Git ] fork 와 pull request 로 협업 과정 팀장이 만들어둔 private repository를 팀원이 fork하고 수정작업 후 pull request를 보내고 팀장이 코드 리뷰 후 merge 하는 상황을 가정. HTML 삽입 미리보기할 수 없는 소스 팀장 : 자신의 repository에 팀원 초대 깃허브 Settings - collaborators ↓ 팀원 : 초대수락 및 fork gmail에서 초대장 수락하고 fork 해서 자신의 깃허브로 가져옴 ↓ 팀원 : clone fork한 원격 레파지토리를 자신의 local workspace에 clone해서 가져옴 ↓ 팀원 : 팀장의 원격 저장소를 remote로 등록해두기 clone하면 내 원격 저장소가 origin으로 설정되어 있는데 팀장의 원격 저장소와도 동기화되야 하기 때문에 remote에 포크한 .. 2022. 9. 7.
Git ] Remote 저장소 추가 등록하기 (Tortoise Git 사용) Settings 원격 저장소의 이름을 주고 url을 입력하여 remote 로 연결한다. 아래 명령어로도 가능 git remote add upstream "https://github.com/..." 깃 배쉬에서 아래 명령어로 확인해보면 원래의 원격저장소 origin 과 방금 추가한 원격저장소 두 개가 remote로 등록되어 있는 것을 볼 수 있다. git remote -v 추가 후 fetch와 pull 작업을 해주는게 좋다. 2022. 9. 7.
CMD 파일 (linker command files) 작성 팁 공식 홈페이지의 작성 팁 : https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_Linker-Command-File-Primer.html#barely-beyond-basics TI Linker Command File Primer software-dl.ti.com 하기 자료 출처 : http://mcublog.co.kr/ (timcu) TI MCU 카페 mcublog.co.kr TI DSP 개발에 관련하여 CMD 파일의 작성법에 대해 아는 사람은 알고 모르는 사람은 모르는 몇 가지 간단한 팁을 알려드리겠습니다. CMD 파일은 보통 아래와 같이 MEMORY{}에서 사용하는 DSP의 메모리 영역을 정의하고, SECTION{}에서 섹션들을 MEMORY{}에서 정의된 .. 2022. 9. 7.
DSP ] C28x 계열 Data Types 출처 : https://www.ti.com/lit/ug/spru514p/spru514p.pdf 이 코어는 고속연산과 자료 저장의 효율성을 위해서 기본 word단위를 16비트로 사용하고 있기 때문에 자료형 선정 시 주의가 필요하다. char 가 16비트, int 가 16비트, long이 32비트 실수 자료형은 float 와 double 둘다 32비트이다 리틀엔디안 방식이라 예를들어 0x12345678 을 저장하면 메모리에 0x56781234 로 저장된다. 2022. 9. 6.
JTAG 에뮬레이터를 연결해서 사용하기 On Board USB JTAG 에뮬레이션 회로를 사용하지 않고 14핀 JTAG 인터페이스 통해 에뮬레이터를 사용하기. 사용할 에뮬레이터는 Blackhawk USB560 v2 System Trace CCS 설치파일을 다시 실행해서 Blackhawk Debug Probes 설치 14-Pin TI Adapter Pinout 보통 방향 잘못꼽는것을 막기 위해 여기서 NC (Not/Connected)부분은 핀헤더가 부러져있거나 막혀있다. 케이블을 연결하고 설치하면 장치 관리자에서 잡힌다. 싱크웍스 DOCK 보드 내장 JTAG 회로 비활성화 프로젝트 Properties에서 Connection 선택 2022. 9. 5.
TortoiseGit ] 새 Branch 생성하기 0. 먼저 원격 저장소에 변경사항이 있는지 fetch 또는 pull로 확인한다. 1. Create Branch 클릭 2. 새로 생성할 브랜치명 입력하고 Switch to new branch 선택 OK 이후 브랜치를 변경할 때는 Switch/Checkout 을 클릭하면 가능하다. 터미널 명령어로 할 때는 아래와 같다. $ git checkout -b develop # develop 브랜치를 생성하고 해당 브랜치로 이동한다. 3. 로컬 저장소에서 새 브랜치로 변경된 상태이며 이대로 커밋한다. 4. 원격 저장소에 푸시한다. 원격에 로컬 저장소의 브랜치명과 일치하는 브랜치가 없을 경우, 원격 저장소에 해당 브랜치가 새로 생성된 후 푸시된다. 원격에 dev 브랜치가 새로 생성된 것을 알 수 있다. ※ 여러 브랜치.. 2022. 9. 4.
STM32 ] 델타로봇, UART로 Command Line Interface 구현 + 기판에 다시 납땜 (5) 2022.08.25 - [프로그래밍/C] - C ] 명령 프롬프트 구현 (함수포인터 사용) C ] 명령 프롬프트 구현 (함수포인터 사용) #include #include /* for strcmp() strlen*/ //#include /* for usleep() */ #include #include #define MAX_CMD_NUM 10 #define BUF_LEN 128 int cmd_continue = 0; typedef int cmd_func(int argc, char* argv[.. eteo.tistory.com 이전에 콘솔에서 구현했었던 명령 프롬프트를 가져와 STM32에서 UART로 Command Line Interface를 구현하고 간단하게 델타로봇을 제어해봤다. cli.h /* * cli.. 2022. 9. 4.
TMS320F28388D ] 예제파일 불러오는방법 (LED Blink) C2000ware 설치 Texas Instruments 사가 개발자들을 대상으로 칩에 대해 제공하는 각종 자료들(데이터시트, 칩 매뉴얼, 기본 예제 및 소스, 라이브러리 등)이 담긴 C2000ware 를 다운로드해 설치한다. (설치 folder path : C:\ti\c2000) https://www.ti.com/tool/C2000WARE 첫번째 방법 Project explorer 에서 import - CCS Projects Browse 클릭 - C2000ware가 설치된 폴더 안의 driverlib - 디바이스명 폴더를 선택한다. 참고로 driverlib 폴더에는 HAL(Hardware Abstraction Layer) driver를 사용한 예제, device_support 폴더에는 레지스터를 조작해 .. 2022. 9. 3.
TI ] CCS (Code Composer Studio) 설치하기 + 새 프로젝트 만들기 이글은 TMS320F2838x 를 바탕으로 쓰여졌습니다. 먼저 TI 사의 DSP를 사용하기 위한 툴인 CCS를 설치한다. https://www.ti.com/tool/download/CCSTUDIO Rdcommended 인 커스텀 설치 선택 해당되는 제품군을 선택 Debug probes 선택. 필요하면 나중에 추가설치 할 수 있다. CCS를 사용하면 내장 JTAG 에뮬레이터(=Debug Probe)를 위한 FTDI Driver가 같이 설치되기 때문에 5핀 케이블로 PC와 연결을 하면 다음과 같이 장치 관리자에 뜬다. CCS 실행 실행 후 첫 화면 New CCS Project 만들기 먼저 타겟보드를 선택하고 Connection에서 맞는 Debug Probe를 선택한다. 옆의 Verify를 누르면 스캔 테스트.. 2022. 9. 3.
Python ] Visual Studio Code 에서 Jupyter Notebook 사용하기 Extension 에서 Python 설치 그러면 Jupyter notebook Extension 도 같이 설치된다. 주피터 노트북은 파일 - 새 파일이 아니라 명령 팔레트로 만들어야한다. Ctrl + Shift + P 를 눌러 명령 팔레트를 켜고 jupyter를 쳐서 Create New Jypyter Notebook 선택 2022. 9. 2.
온도센서 ] RTD 와 서미스터의 차이 서미스터(Thermistor)와 RTD(Resistance Temperature Detectors)는 모두 전기 저항을 측정하여 온도를 측정하는 온도 센서 유형이다. 차이점 RTD (Resistance Temperature Detector) Thermistor Material 백금, 니켈 또는 구리와 같은 순수한 금속 세라믹 또는 폴리머 온도계수 +(온도 상승에 따라 저항 증가) + or -(온도 상승에 따라 저항 감소) 정확성 상대적으로 낮음 분해능 높음 측정 범위 up to 600°C. -55°C to +130°C 케이블 허용 길이 짧음 김 응답 시간 느림 빠름 Application 산업용 가정용/산업용 안정성 높음 상대적 낮음 가격 비쌈 저렴 발열 낮음 높음 크기 큼 작음 그래프 특성 선형 비선형 2022. 9. 2.
MySQL ] millisecond, microsecond 까지 표현하기 MySQL version 5.6.4 or later 부터 microsecond 까지 표현이 가능하다. 1. test 테이블을 생성하고 TIMESTAMP(6) 형식의 칼럼을 만듬 CREATE TABLE IF NOT EXISTS `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `measured_at` TIMESTAMP(6) NOT NULL, `data` int(11) NOT NULL, PRIMARY KEY (`id`) ) ; 혹은 HeidiSQL 툴에서 다음과 같이 생성한다. 2. 데이터 삽입 시 NOW(6) INSERT INTO test(measured_at, data) VALUES(NOW(6),1234) 만약 마이크로초가 아니라 밀리초 단위만 쓰려면 (6) 대신 (3).. 2022. 9. 2.
Python ] 아나콘다, 주피터 노트북 설치하기 아나콘다는 머신러닝이나 데이터 분석 등 수학과 과학 분야에서 사용되는 여러 패키지들을 묶어 놓은 파이썬 배포판으로기본설치파일에 더해 SciPy, Numpy, Matplotlib, Pandas 등을 비롯한 많은 패키지들을 포함하고 있다.아나콘다는 내부적으로 conda라는 환경/패키지 관리자가 존재하여 파이썬 가상 환경을 구축하는데도 유용하게 사용할 수 있어 결과적으로 프로젝트별 개발 환경을 효율적으로 구성할 수 있다 1. ANACONDA 공식 홈페이지에 가서 다운로드 받고 설치하기기존에 파이썬을 설치해놨다면 지우고 설치하는것이 좋다.아나콘다를 깔면 Python 3.9 버전이 깔린다. recommended인 Just Me를 선택한다. All Users로 하면 나중에 라이브러리 업데이트나 삭제시 관리자 권한이.. 2022. 9. 1.