본문 바로가기
반응형

전자/임베디드 시스템164

DSP의 ESTOP0 명령어 ESTOP0는 에뮬레이터를 중지하는 명령어이다. ESTOP0을 만나면 CCS에서 중지된다. 인터럽트 루틴에 있는 다음과 같은 코드는 에뮬레이터를 중지시키고 만약 에뮬레이터가 연결되어 있지 않다면 다음 문장인 무한 for 문을 실행한다. asm (" ESTOP0"); for(;;); 2021. 1. 29.
MSP430 전압와 클럭 주파수 MSP430의 코어 전압은 PMM에서 변경할 수 있다. PMMCOREV=0 이면 코어 전압이 가장 낮고 PMMCOREV=3 이면 전압이 가장 높다. 디폴터는 PMMCOREV=0 이다. 클럭 속도도 설정할 수 있는데 클럭 속도가 높아지면 코어 전압을 높여야 한다. 그렇지 않으면 정상적으로 동작하지 않는다. 클럭 속도가 높아지고 코어 전압이 높아지면 소비 전력이 증가한다. 아래 그래프에서 0,1,2,3은 설정가능한 PMMCOREV 값이고 X 축은 공급 전압이고 Y 축은 클럭 주파수이다. 예를 들면, 공급 전압 +3.3V에서 8MHz로 동작한다면 코어 전압 설정 PMMCOREV은 0~3 모두가 가능하다. 이 때 25MHz로 동작시키기 위해서는 코어 전압 설정 PMMCOREV을 3으로 해야 한다. MSP430는.. 2021. 1. 22.
TMS320FC28x 인터럽터 처리 절차 TMS320FC28x 인터럽터 처리 절차는 다음과 같다. 1. S/W 또는 H/W 인터럽터를 입력받는다. 2. 입력받은 인터럽터가 Mask 되여 있는지 확인한다. 3. 현재 실행 중인 명령어를 완료한다. 파이프라인에 Decode 2 phase 미만에 있는 명령어를 삭제한다. 4. ST0, T, AL, AH, PL, PH, AR0, AR1, DP, ST1, DBGSTAT, PC, IER 레지스터를 Stack에 저장한다. 5. 인터럽터 벡터를 읽어 PC에 설정한다. PIE 설정에 따라 적용되는 인터럽터 벡터가 달라진다. 6. 인터럽터 루틴이 실행된다. ☞ 파이프라인 원리 2021. 1. 16.
Op-amp summing 회로 Op-amp summing 회로는 다음과 같다. 위 회로는 다음 식과 같다. R1과 R2의 값이 같다면 다음 식과 같다. 출력 전압 Vo는 V1과 V2의 합에 반비례한다. 2021. 1. 4.
EEPROM 사용횟수와 프로그래밍 EEPROM을 지우고 다시 쓰는 횟수는 AVR의 경우 100,000번으로 제한되어 있다. 이것을 생각하지 않으면 횟수를 넘겨 프로그램을 잘못 작성할 가능성이 높다. 1초에 한번 지우고 쓴다면 약 27.8시간만 사용할 수 있다. 1시간에 한번 지우고 쓴다면 약 11.4년을 사용할 수 있다. 전원 꺼질 때 상태 저장방법 전원이 꺼질 때 현재 상태를 저장해야 되는 경우가 있다. 이 때 가장 쉬운 방법은 일정 시간마다 현재상태를 EEPROM에 저장하는 것이지만 이렇게 되면 EEPROM 최대 사용회수를 넘어갈수 있다. 이럴 때는 전원의 Power-fail 신호를 사용해야 한다. 전원이 꺼질 때 Power-fail 신호를 MCU에서 입력받아 EEPROM에 데이터를 저장하고 종료한다. 2021. 1. 2.
TI DSP 엔디언 TI의 C2000 계열 DSP는 리틀 엔디언이다. 리틀 엔디언은 하위 바이트가 낮은 주소에 저장된다. 다음 그림과 같이 CCS의 속성에서 Device endianness가 little로 고정되어 있다. PC와 ARM도 Little 엔디언이다. ☞ Endian 뜻 2020. 12. 23.
ATmega에서 Fuse 등이 안 쓰질 때 ATmega에서 Lock이 걸려 Fuse 등이 안 쓰질 때는 Memories에서 Erase Chip을 하면 된다. 2020. 11. 29.
ATmega EEPROM 데이터 깨질 때 ATmega MCU 사용 중 전원이 꺼질 때 전압이 낮은 상태에서 EEPROM을 라이팅하면 데이터가 깨지는 경우가 있다. 이 때는 ATmega의 BOD(Brown-out Detector) 퓨즈를 세팅하면 해결할 수 있다. 또는 외부에 리셋 칩을 사용하여 전압이 낮을 때 리셋할 수도 있다. 2020. 11. 29.
STM32 타이머의 CCPC 타이머의 CR2 레지스터에 있는 CCPC(Capture/compare Preload Control) 비트는 CCxE, CCxNE, OCxM 비트를 Preload할지를 결정한다. CCPC=0 이면 CCxE, CCxNE, OCxM 비트를 Preload하지 않고 이 비트에 데이터를 쓰면 바로 적용된다. CCPC=1 이면 CR2의 CCUS에 따라 Preload가 적용된다. ▶ CCUS=0 : CCxE, CCxNE, OCxM 비트에 데이트를 쓰고 COMG 비트가 1이 되면 실제 적용된다. ▶ CCUS=1 : CCxE, CCxNE, OCxM 비트에 데이트를 쓰고 COMG 비트가 1이 되거나 또는 TRGI의 라이징 엣지에서 실제 적용된다. CCPS가 1이면 CCxE, CCxNE, OCxM 비트에 데이터를 쓰고 바로 .. 2020. 11. 21.
TMS320 회로도는 어디 있나요? C2000 회로도는 C2000Ware를 설치하면 아래 폴더에 회로도와 PCB 파일이 있다. C:\ti\c2000\C2000Ware_3_02_00_00\boards 위 폴더에는 다음 MCU의 회로도가 있다. TMS320F28027 , TMS320F28035 , TMS320F28069 , TMS320F28075 , TMS320F28335 , TMS320F28343 , TMS320F2877D , TMS320F28377D , TMS320F28379D , TMS320F28388D ☞ C2000Ware 바로가기 2020. 11. 7.
DSP 컴파일러 섹션 컴파일러 section 이름의 뜻 플래시 영역.text : 프로그램.cinit : 전역변수 또는 static 변수의 초기화 값.econst : 상수값.switch : switch 문에서 사용. 테이블 저장 램 영역.ebss : 전역변수 또는 static 변수.stack : 스택.esysmem : malloc 함수에 사용.reset : 리셋 벡터 프로그램이 처음 실행될 때 cinit에 저장된 초기화 값이 ebss로 복사된다. 2020. 11. 7.
TI DSP TMS320F2837xD의 차이 TMS320F2837xD 시리즈는 다음과 같은 제품이 있다. TMS320F28374D TMS320F28375D TMS320F28376D TMS320F28377D TMS320F28378D TMS320F28379D 주요 차이는 메모리의 크기이다. CLB(Configurable Logic Block)는 28378 이상에서만 있다. 2020. 11. 6.
STM32 printf 문에서 float 변수 출력하기 STM32에서 printf나 sprintf 함수를 사용할 때 float 변수가 정상적으로 출력되지 않을 때는 다음과 같이 설정한다. 2020. 11. 5.
DSP CCS 디버거 ccxml 파일 설정 DSP 종류와 디버거 설정을 위한 ccxml 파일 만드는 방법 1. 메뉴에서 View - Target Configurations을 선택한다. 2. 우클릭하여 New Target Configuration 메뉴를 선택한다. 3. DSP와 디버거를 선태한 후 Save를 눌려 저장한다. 우클릭하여 Launch Selected Configuration을 선택한다. 4. 디버그 화면이 뜬다. 2020. 11. 2.
TMS320F28x 클럭 연결 TMS320F28x에 크리스탈 또는 오실레이터를 핀에 연결하는 방법은 다음과 같다. 사용하지 않는 핀은 그라운드에 연결하거나 오픈 시켜야 한다. 위에서 Internal oscillator는 외부에 크리스탈을 연결해야 하고 External oscillator는 외부에 오실레이터를 연결해야 한다. ☞ 크리스탈과 오실레이터의 차이 2020. 10. 25.
TMS320F28xx ADC 입력 범위 TMS320F28335의 ADC 입력 전압 범위는 0~3V이다. 다음 식과 같이 3V 이상의 입력은 최대값인 4095로 변환된다. TI을 제외한 대부분의 MCU의 ADC의 입력 범위는 0~3.3V이다. 2020. 10. 22.
STM32CubeIDE 플래시 에러 STM32CubeIDE에서 디버거나 플래시 다운로드 중 갑자기 Error: ST-LINK error (DEV_TARGET_NOT_HALTED)와 같은 에러 메세지가 뜨는 경우가 있다. 이 에러는 플래시가 Erase나 Write 등의 동작 중에 STM32CubeIDE가 플래시 다운을 시도할 때 발생한다. 프로그램 시작 부분에 플래시 Erase 코드가 있으면 이런 에러 메세지가 나타날 수 있다. 이 때는 아래 사진의 Reset behaviour를 none으로 변경하면 해결할 수 있다. 또는 Boot 핀을 변경하여 플래시가 아닌 램에서 부팅하면 된다. 2020. 10. 17.
STM32 Hard fault 발생과 해결 방법 STM32에서 Hardfault가 발생하는 이유 □ Stackoverflow □ 메모리 엑세스 가능 범위 초과 - 배열의 인덱스 확인 Hardfault 해결 방법 □ 디버거 창에서 Hardfault가 발생 직전에 수행된 함수를 확인한다. □ Hardfault 인터럽터 함수를 다음과 같이 입력한 후 Hardfault가 발생하면 디버거 창에서 hardfault_flag 값을 1로 변경하여 인터럽트 함수를 빠져 나오면 Hardfault가 발생하기 직전으로 돌아가서 확인할 수 있다. void HardFault_Handler(void) { static volatile int hardfault_flag; hardfault_flag=0; while(hardfault_flag==0); } ☞ MCU 리셋 문제 해결 2020. 9. 23.
파워 온 리셋 파워 온 리셋 (Power-on reset)은 전원이 들어올 때 리셋 신호를 주는 것을 의미한다. 전원이 켜지는 동안에는 전압이 낮기 때문에 MCU와 같은 IC들이 동작하면 안되고 리셋 상태를 유지해야 한다. 이와 같은 리셋 상태를 유지하도록 하는 회로 중 가장 단순한 RC 회로는 다음과 같다. RC 회로의 전압과 리셋신호는 다음과 같다. 전압이 일정값 이상이 될 때 리셋이 해제되면서 MCU 등이 동작을 시작한다. 위의 회로에서 다이오드는 파워 오프일 때 커패시터에 충전된 전하를 신속하게 방전 시켜서 다음 파워 온에서 정상적으로 파워 온 리셋 동작이 되도록 한다. 2020. 4. 30.
ATmega128 스펙 ATmega128A 스펙은 다음과 같다. ■ AVR 구조의 8비트 MCU ■ 128kbyte 플래시, 10,000번 쓰기 가능 ■ 4kbyte EEPROM, 100,000번 쓰기 가능 ■ 4kbyte SRAM ■ JTAG ■ 8비트 타이머 2개 ■ 16비트 타이머 2개 ■ 8비트 PWM 출력 2개 ■ 16비트 PWM 출력 6개 ■ 10비트 ADC 8채널 ■ UART 2개 ■ SPI ■ 아날로그 비교기 ■ 동작 전압 2.7~5.5V ■ 최대 동작 주파수 16MHz ■ 가격 $3.97 2020. 4. 30.
GPIO 출력 포트 확장 IC MCU의 GPIO에서 출력 포트가 모자랄 때는 74x594를 이용하여 출력 포트를 확장할 수 있다. DS에 시리얼 데이터가 입력되고 SHCP에 클럭이 입력되고 STCP 신호에 레지스터가 출력된다. 로직 타이밍은 다음과 같다. ☞ 74HCT594 데이트 시트 ☞ 74x573을 이용한 출력 포트 확장 2020. 4. 28.
MCU 종류 2016년 MCU 제조업체 순위는 다음과 같다. 순위 업체 시장점유율 1 NXP (Freescale) 19% 2 Renesas 16% 3 Microchip (Atmel) 14% 4 Samsung 12% 5 ST 10% 6 Infineon 7% 7 TI 6% 8 Cypress 4% 2015년 NXP는 Freescale을 인수했고, 2016년 Microchip은 Atmel을 인수했다. 2020. 4. 27.
임베디드 시스템 MCU 현재 판매되는 MCU(Microcontroller)의 모델 개수는 수백가지로 매우 많기 때문에 처음 임베디드 시스템을 설계할 때 MCU를 선정하는 것은 매우 까다로운 작업이다. 보통은 이전에 사용했던 것과 같은 MCU 또는 같은 시리즈의 MCU를 사용하지만, 새로이 설계하는 임베디드 시스템에 이전의 MCU로는 요구 기능이나 성능을 만족시킬 수 없을 때는 다른 MCU를 찾아봐야 한다. 많이 사용되는 MCU를 선정하면 그와 관련된 자료도 많고 MCU를 구하기도 쉬운 장점이 있다. MCU 특성 ATmel의 ATmega ATmel에서 나온 ATmega 시리즈는 8 bit AVR 아키텍처를 가지고 있다. ATmega는 학생들이 가장 많이 사용하는 MCU일 것이다. 그만큼 사용하기 쉽고 자료도 많다. 매우 저렴한 .. 2020. 4. 27.
임베디드 시스템 프로그래밍 임베디드 시스템을 개발할 때 소프트웨어가 차지하는 비중이 약 70~80% 정도된다. 여기서 비중이란 투입되는 개발시간, 투입인원, 노력, 난이도, 버그 발생 등의 종합적인 비중이다. 임베디드 시스템에서 소프트웨어가 하드웨어보다 훨씬 중요하다. 하드웨어의 숨어있는 버그도 소프트웨어로 찾을 수 있고 하드웨어 버그를 소프트웨어로 피해갈 수도 있다. 2020. 4. 27.
AVRISP Mk2 단종과 대체품 Microchip이 ATmel을 인수하면서 ATeml의 JTAGICE MkII와 AVRISP MkII가 단종 되었고, JTAGICE MkII 또는 AVRISP MkII는 Atmel-ICE로 대체 되었다. Atmel-ICE는 ARM Cortext-M 기반의 SAM과 AVR MCU를 지원한다. Atmel-ICE의 가격은 약 170,000원 이다. 2020. 4. 11.
ATmega 변수 사용시 주의사항 ATmega는 하바드 구조를 사용하기 때문에 프로그램 영역과 데이터 영역이 분리되어 있다. 그래서, 상수로 정의된 변수도 프로그램 플래시 메모리에서 SRAM 영역으로 복사하여 사용한다. SRAM을 사용하지 않고 플래시 메모리를 직접 액세스하기 위해서는 PROGMEM와 같은 명령어를 사용해야 한다. 아두이노에서는 문자열도 기본적으로 SRAM에 할당되는데 F("") 함수를 이용하여 플래시로 할당할 수 있다. 2020. 4. 11.
임베디드 시스템 디버깅 코드 임베디드 시스템의 소프트웨어나 하드웨어 등을 디버깅할 때 디버깅용 코드나 회로 또는 절차를 만드는 것이 좋다. 디버깅용 코드나 회로는 한번 쓰고 버리는 것이 아니라 영구적으로 사용할 수 있도록 시스템의 개발자 모드에 숨겨 둔다. 버그를 찾아 해결했다고 해도 개발이나 생산 또는 A/S 중 비슷한 문제가 계속 발생할 수 있기 때문에 디버깅용 코드나 회로가 있으면 매우 유용하다. 예를 들면, 두 보드 사이에 통신이 잘 안될 때는 통신을 모니터링하는 모드를 넣는다. 또는 통신 문제를 쉽게 찾을 수 있는 검사 절차를 만들어 둔다. 2020. 4. 11.
허블 망원경에 사용되는 컴퓨터 1990년에 발사된 허블 망원경 (HST, Hubble Space Telescope)에서 처음에는 DF-224 컴퓨터가 사용되었다. DF-224는 1.25MHz로 동작하고 메모리는 24 비트 8K 인 3개의 컴퓨터가 구성되었다. 3개 중 1개만 동작하고 2개는 예비로 동작한다. 1993년 DF-224에 인텔 80386(co-processor 80387, 15MHz)을 추가하였다. 1999년 DF-224의 80836은 인텔 80486 (25MHz)으로 교체되었다. 2020. 4. 8.
AVR Watchdog 사용법 Watchdog 시작wdt_enable(WDTO_1S); // Watchdog 시작 1초 Watchdog 시간 설정#define WDTO_15MS 0 // 15ms#define WDTO_30MS 1#define WDTO_60MS 2#define WDTO_120MS 3#define WDTO_250MS 4#define WDTO_500MS 5#define WDTO_1S 6 // 1s#define WDTO_2S 7 // 2s#define WDTO_4S 8 // 4s#define WDTO_8S 9 // 8s Watchdog resetwdt_reset(); Watchdog 중지wdt_disable(); 2020. 3. 28.
GPIO 입력 포트 확장 IC MCU의 GPIO에서 입력 포트가 모자랄 때는 74x165를 이용하여 입력 포트를 확장할 수 있다. SH/LD 핀으로 로딩 한 후 한 비트씩 시프트하여 값을 읽는다. SH/LD가 Low일 때 A~H 데이터를 읽고 SH/LD가 High일 때 데이터가 래치된다. CLK에 클럭이 입력되면 Q로 데이터가 순차적으로 출력된다. ☞ 74HC165 데이트 시트 2019. 10. 25.
반응형