10진수(DEC)

16진수(HEX)

8진수(OCT)

2진수(BIN)

0

00

0000

00000000

1

01

0001

00000001

2

02

0002

00000010

3

03

0003

00000011

4

04

0004

00000100

5

05

0005

00000101

6

06

0006

00000110

7

07

0007

00000111

8

08

0010

00001000

9

09

0011

00001001

10

0A

0012

00001010

11

0B

0013

00001011

12

0C

0014

00001100

13

0D

0015

00001101

14

0E

0016

00001110

15

0F

0017

00001111

16

10

0020

00010000

17

11

0021

00010001

18

12

0022

00010010

19

13

0023

00010011

20

14

0024

00010100

21

15

0025

00010101

22

16

0026

00010110

23

17

0027

00010111

24

18

0030

00011000

25

19

0031

00011001

26

1A

0032

00011010

27

1B

0033

00011011

28

1C

0034

00011100

29

1D

0035

00011101

30

1E

0036

00011110

31

1F

0037

00011111

32

20

0040

00100000

33

21

0041

00100001

34

22

0042

00100010

35

23

0043

00100011

36

24

0044

00100100

37

25

0045

00100101

38

26

0046

00100110

39

27

0047

00100111

40

28

0050

00101000

41

29

0051

00101001

42

2A

0052

00101010

43

2B

0053

00101011

44

2C

0054

00101100

45

2D

0055

00101101

46

2E

0056

00101110

47

2F

0057

00101111

48

30

0060

00110000

49

31

0061

00110001

50

32

0062

00110010

51

33

0063

00110011

52

34

0064

00110100

53

35

0065

00110101

54

36

0066

00110110

55

37

0067

00110111

56

38

0070

00111000

57

39

0071

00111001

58

3A

0072

00111010

59

3B

0073

00111011

60

3C

0074

00111100

61

3D

0075

00111101

62

3E

0076

00111110

63

3F

0077

00111111

64

40

0100

01000000

65

41

0101

01000001

66

42

0102

01000010

67

43

0103

01000011

68

44

0104

01000100

69

45

0105

01000101

70

46

0106

01000110

71

47

0107

01000111

72

48

0110

01001000

73

49

0111

01001001

74

4A

0112

01001010

75

4B

0113

01001011

76

4C

0114

01001100

77

4D

0115

01001101

78

4E

0116

01001110

79

4F

0117

01001111

80

50

0120

01010000

81

51

0121

01010001

82

52

0122

01010010

83

53

0123

01010011

84

54

0124

01010100

85

55

0125

01010101

86

56

0126

01010110

87

57

0127

01010111

88

58

0130

01011000

89

59

0131

01011001

90

5A

0132

01011010

91

5B

0133

01011011

92

5C

0134

01011100

93

5D

0135

01011101

94

5E

0136

01011110

95

5F

0137

01011111

96

60

0140

01100000

97

61

0141

01100001

98

62

0142

01100010

99

63

0143

01100011

100

64

0144

01100100

101

65

0145

01100101

102

66

0146

01100110

103

67

0147

01100111

104

68

0150

01101000

105

69

0151

01101001

106

6A

0152

01101010

107

6B

0153

01101011

108

6C

0154

01101100

109

6D

0155

01101101

110

6E

0156

01101110

111

6F

0157

01101111

112

70

0160

01110000

113

71

0161

01110001

114

72

0162

01110010

115

73

0163

01110011

116

74

0164

01110100

117

75

0165

01110101

118

76

0166

01110110

119

77

0167

01110111

120

78

0170

01111000

121

79

0171

01111001

122

7A

0172

01111010

123

7B

0173

01111011

124

7C

0174

01111100

125

7D

0175

01111101

126

7E

0176

01111110

127

7F

0177

01111111

128

80

0200

10000000

129

81

0201

10000001

130

82

0202

10000010

131

83

0203

10000011

132

84

0204

10000100

133

85

0205

10000101

134

86

0206

10000110

135

87

0207

10000111

136

88

0210

10001000

137

89

0211

10001001

138

8A

0212

10001010

139

8B

0213

10001011

140

8C

0214

10001100

141

8D

0215

10001101

142

8E

0216

10001110

143

8F

0217

10001111

144

90

0220

10010000

145

91

0221

10010001

146

92

0222

10010010

147

93

0223

10010011

148

94

0224

10010100

149

95

0225

10010101

150

96

0226

10010110

151

97

0227

10010111

152

98

0230

10011000

153

99

0231

10011001

154

9A

0232

10011010

155

9B

0233

10011011

156

9C

0234

10011100

157

9D

0235

10011101

158

9E

0236

10011110

159

9F

0237

10011111

160

A0

0240

10100000

161

A1

0241

10100001

162

A2

0242

10100010

163

A3

0243

10100011

164

A4

0244

10100100

165

A5

0245

10100101

166

A6

0246

10100110

167

A7

0247

10100111

168

A8

0250

10101000

169

A9

0251

10101001

170

AA

0252

10101010

171

AB

0253

10101011

172

AC

0254

10101100

173

AD

0255

10101101

174

AE

0256

10101110

175

AF

0257

10101111

176

B0

0260

10110000

177

B1

0261

10110001

178

B2

0262

10110010

179

B3

0263

10110011

180

B4

0264

10110100

181

B5

0265

10110101

182

B6

0266

10110110

183

B7

0267

10110111

184

B8

0270

10111000

185

B9

0271

10111001

186

BA

0272

10111010

187

BB

0273

10111011

188

BC

0274

10111100

189

BD

0275

10111101

190

BE

0276

10111110

191

BF

0277

10111111

192

C0

0300

11000000

193

C1

0301

11000001

194

C2

0302

11000010

195

C3

0303

11000011

196

C4

0304

11000100

197

C5

0305

11000101

198

C6

0306

11000110

199

C7

0307

11000111

200

C8

0310

11001000

201

C9

0311

11001001

202

CA

0312

11001010

203

CB

0313

11001011

204

CC

0314

11001100

205

CD

0315

11001101

206

CE

0316

11001110

207

CF

0317

11001111

208

D0

0320

11010000

209

D1

0321

11010001

210

D2

0322

11010010

211

D3

0323

11010011

212

D4

0324

11010100

213

D5

0325

11010101

214

D6

0326

11010110

215

D7

0327

11010111

216

D8

0330

11011000

217

D9

0331

11011001

218

DA

0332

11011010

219

DB

0333

11011011

220

DC

0334

11011100

221

DD

0335

11011101

222

DE

0336

11011110

223

DF

0337

11011111

224

E0

0340

11100000

225

E1

0341

11100001

226

E2

0342

11100010

227

E3

0343

11100011

228

E4

0344

11100100

229

E5

0345

11100101

230

E6

0346

11100110

231

E7

0347

11100111

232

E8

0350

11101000

233

E9

0351

11101001

234

EA

0352

11101010

235

EB

0353

11101011

236

EC

0354

11101100

237

ED

0355

11101101

238

EE

0356

11101110

239

EF

0357

11101111

240

F0

0360

11110000

241

F1

0361

11110001

242

F2

0362

11110010

243

F3

0363

11110011

244

F4

0364

11110100

245

F5

0365

11110101

246

F6

0366

11110110

247

F7

0367

11110111

248

F8

0370

11111000

249

F9

0371

11111001

250

FA

0372

11111010

251

FB

0373

11111011

252

FC

0374

11111100

253

FD

0375

11111101

254

FE

0376

11111110

255

FF

0377

11111111


Posted by KennyShin
,

개발환경 셋업을 위해서는 아래 두 가지 소프트웨어만 설치하면 완료됩니다. 


먼저 링크에서 두 가지 모두 다운로드 받고 각각 설치합니다.


2019/01/14 - [Embedded/MCU Basic] - Pickit3 연결 방법(ISCP 연결방법)

2019/01/14 - [Embedded/MCU Basic] - Pickit4 연결 방법(ISCP 연결방법)

2019/01/07 - [Embedded/MCU Basic] - Download old version MPLAB X, MPLAB IDE and XC Compiler (Archive)


Posted by KennyShin
,

 

**최신버전을 다운로드 받는 방법**

 위 버전은 2019년 1월 15일 기준 최신 버전이며 이 후 새로운 버전 업데이트가 있는지 확인을 위해서는 아래 링크를 참조하시면 확인하실 수 있습니다.


**MPLAB 최신버전을 다운로드 받는 방법**

 아래 링크 페이지를 열고 Downloads tab을 클릭하면 아래의 파란색으로 표시된 링크에서 MPLAB X IDE v5.10을 다운로드 할 수 있습니다. 만약 Linux 버전이나 Mac용이 필요하신 분은 아래의 링크에서 Linux 또는 Mac용으로 다운로드하여 사용할 수 있습니다.

MPLAB X IDE Page: https://www.microchip.com/mplabx


**XC8 Compiler 최신버전을 다운로드 받는 방법**

 아래 링크 페이지를 열고 Downloads tab을 클릭하면 아래의 파란색으로 표시된 링크에서 MPLAB XC Compiler를 다운로드 할 수 있습니다. 만약 Linux 버전이나 Mac용이 필요하신 분은 아래의 링크에서 Linux 또는 Mac용으로 다운로드하여 사용할 수 있습니다. 

 MPLAB XC8, XC16, XC32 Compiler는 각각 8비트, 16비트, 32비트 마이크로컨트롤러용 컴파일러입니다.

XC8 Compiler: https://www.microchip.com/mplab/compilers

Posted by KennyShin
,

Development Tool: MPLAB X v5.1(MCC v3.66)
Compiler: XC8 v2.0
Device: PIC16F1827

I2C Master: SCL(RB4 - 10pin), SDA(RB1 - 7pin)
I2C Slave:    SCL(RB5 - 11pin), SDA(RB2 - 8pin)


PIC16F1827_I2C.X.zip


void main(void) { // initialize the device SYSTEM_Initialize(); // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits // Use the following macros to: // Enable the Global Interrupts INTERRUPT_GlobalInterruptEnable(); // Enable the Peripheral Interrupts INTERRUPT_PeripheralInterruptEnable(); // Disable the Global Interrupts //INTERRUPT_GlobalInterruptDisable(); // Disable the Peripheral Interrupts //INTERRUPT_PeripheralInterruptDisable(); while (1) { wrBuffer[0] = 0x0A; wrBuffer[1] = 0x0B; wrBuffer[2] = 0x0C; I2C1_MasterWrite( wrBuffer, 1, 0x08, &status); while(status == I2C1_MESSAGE_PENDING); I2C1_MasterRead( rdBuffer, 3, 0x08, &status); while(status == I2C1_MESSAGE_PENDING); __delay_ms(500); } }



I2C Output waveformI2C Output waveform

I2C Output waveform


INTERRUPT_GlobalInterruptEnable() and INTERRUPT_PeripheralInterruptEnable() have to comment out due to I2C Master and I2C Slave are using interrupt service routine

I2C Pin allocation for I2C1, I2C2


Posted by KennyShin
,


Pickit4를 이용한 ICSP 연결방법


Pickit4를 이용하여 MCU에 프로그래밍을 할 때에는 총 5개(MCLR, VDD, GND, PGD, PGC)의 선을 연결해야 합니다. 

전원인 VDD와 기준전압이 되는 GND를 제외하면 실제로 MCU에 프로그래밍을 하는데 사용하는 핀은 MCLR, PGD, PGC로 총 3개 핀입니다.


MPLAB PICkit 4 Debugger User's Guide Figure 2-4 발췌



MCLR Pull-up 저항
 MCLR은 VDD에 Pull-up 저항을 연결해야 하며 10~50kohm 저항을 추천합니다. 

MCLR Internal Pull-up의 사용
 MCU 내부의 Internal Pull-up 저항을 Configuration bit에서 Enable 하여 사용하는 경우도 있습니다. Internal Pull-up 저항을 사용하여도 외부에 저항을 이용하여 Pull-up을 연결하는 경우와 동일한 효과를 가집니다. 단 내부 Internal Pull-up 저항은 1kohm 정도로 낮은 값의 저항이 연결되어 외부 Pull-up을 10~50kohm을 사용하는 경우보다 미세하게나마 전류 소모가 더 발생합니다. Battery를 이용하여 오랜 시간 동작시켜야 하는 Application을 설계하는 경우에는 Internal Pull-up보다 외부에 Pull-up 저항을 사용하는 것을 추천합니다. 

MCLR에 Reset 지연을 위한 Capacitor 사용
 전원이 인가될 때 MCU의 시작을 지연시키기 원할 경우 MCLR에 Capacitor를 VSS와 연결하여 전원 인가 시 MCLR이 High가 되는 시간을 지연시키는 역할로 사용하는 경우가 있지만 지연시간이 필요하지 않을 경우 Capacitor를 추가하지 않아도 됩니다. 

 PGC, PGD 라인에는 저항이나 캐패시터 등 아무것도 연결되지 않도록 해야 합니다. 만약 저항이나 캐패시터가 연결되어 있으면 정상적인 다운로드나 디버깅이 되지 않을 수 있습니다.

MPLAB PICkit 4 Debugger User's Guide Figure 2-7 발췌



Posted by KennyShin
,


Pickit3를 이용한 ICSP 연결방법


Pickit3를 이용하여 MCU에 프로그래밍을 할 때에는 총 5개(MCLR, VDD, GND, PGD, PGC)의 선을 연결해야 합니다. 

전원인 VDD와 기준전압이 되는 GND를 제외하면 실제로 MCU에 프로그래밍을 하는데 사용하는 핀은 MCLR, PGD, PGC로 총 3개 핀입니다.


MPLAB PICkit 3 Debugger User's Guide Figure 2-4 발췌



MCLR Pull-up 저항
 MCLR은 VDD에 Pull-up 저항을 연결해야 하며 10~50kohm 저항을 추천합니다. 

MCLR Internal Pull-up의 사용
 MCU 내부의 Internal Pull-up 저항을 Configuration bit에서 Enable 하여 사용하는 경우도 있습니다. Internal Pull-up 저항을 사용하여도 외부에 저항을 이용하여 Pull-up을 연결하는 경우와 동일한 효과를 가집니다. 단 내부 Internal Pull-up 저항은 1kohm 정도로 낮은 값의 저항이 연결되어 외부 Pull-up을 10~50kohm을 사용하는 경우보다 미세하게나마 전류 소모가 더 발생합니다. Battery를 이용하여 오랜 시간 동작시켜야 하는 Application을 설계하는 경우에는 Internal Pull-up보다 외부에 Pull-up 저항을 사용하는 것을 추천합니다. 

MCLR에 Reset 지연을 위한 Capacitor 사용
 전원이 인가될 때 MCU의 시작을 지연시키기 원할 경우 MCLR에 Capacitor를 VSS와 연결하여 전원 인가 시 MCLR이 High가 되는 시간을 지연시키는 역할로 사용하는 경우가 있지만 지연시간이 필요하지 않을 경우 Capacitor를 추가하지 않아도 됩니다. 

 PGC, PGD 라인에는 저항이나 캐패시터 등 아무것도 연결되지 않도록 해야 합니다. 만약 저항이나 캐패시터가 연결되어 있으면 정상적인 다운로드나 디버깅이 되지 않을 수 있습니다.

MPLAB PICkit3 Debugger User's Guide Figure 2-5 발췌



Posted by KennyShin
,

ARM Cortex Family에 대한 기본 이해


ARM Core라는 용어에 대해 임베디드를 하시는 분이면 많이 들어보셨을 것입니다. 그런데 ARM이 어떤 것의 약자인지 알고 계셨나요? 이번 글에서는 ARM이 의미하는 것이 무엇인지에 대해 알아보겠습니다.


ARM 로고

출처: 위키백과

먼저 Cortex Family는 다음 3가지로 분류합니다.


Cortex-A (Application)

Cortex-R (Real-time)

Cortex-M (MCU)


 위에 파란색으로 표시해 보았는데요. Cortex-A, Cortex-R, Cortex-M Family의 맨 뒤에 글자를 따서 ARM이라는 단어가 탄생했다고 합니다.

 각각의 Family는 위의 분류와 같이 'A'는 Application, 'B'는 Real-time, 'M'은 MCU를 위한 제품군입니다. 이제 ARM Core의 제품 분류만 보셔도 사용하고 있는 제품군이 어떠한 것을 Target 하여 만들어졌는지 한 번에 확인할 수 있겠죠?


조금 더 자세하게 알아볼까요?


Cortex-A (Application)

 리눅스(Linux)와 같은 OS(Operating System)사용이 가능한 제품군입니다. 이 제품군은 디바이스에 Flash memory나 RAM을 별도로 추가하여 사용하는 것이 일반적입니다. 주로 큰 시스템에 사용됩니다. 스마트폰과 같은 것을 만드는데 사용됩니다.


Cortex-R (Real-time)

 Cortex-R은 Cortex-A 와 비슷한 기능으로 사용되지만 Device 내부에 Flash memory나 RAM을 모두 내장하고 있습니다. Cortex-A보다 Flash memory와 RAM의 size를 사용자가 선택하여 설계하는 측면에서는 유연성이 떨어질 수 있지만 한 칩에서 모두 구현할 수 있다는 장점이 있습니다. 주로 하드디스크나 오토모티브 제품군 안에서 빠른 실시간 처리를 하는데 사용됩니다.


Cortex-M (MCU)

Cortex-M MCU 제품군입니다. Cortex-M은 여러 시리즈를 가지고 있습니다. 

M0나 M0+는 32비트 저가형 마이크로컨트롤러 애플리케이션 용도입니다.

M0+는 M0에 비하여 더 빠릅니다. 그리고 M0에 비하여 저전력으로 구동할 수 있습니다. M0 이후버전이라고 생각하셔도 됩니다.

M3는 HW divide와 연산을 위한 파이프라인이 더 추가됩니다.

M4는 floating point(FPU)와 디지털 시그널 프로세싱을 위한 DSP가 포함되어 있습니다.

M7은 멀티로 연산을 하기 위한 daul-precision FPU와 superscalar pipelining 기능을 가지고 있습니다.

Posted by KennyShin
,




MCU의 Unused GPIO(I/O) 핀은 어떻게 처리해야 할까요?

 

 MCU를 사용하다보면 사용하지 않는 핀이 생깁니다. 이 때 사용하지 않는 핀(Unused Pin)을 어떻게 하드웨어나 소프트웨어로 처리해야 하는지 알아 보도록 하겠습니다.




대표적으로 두 가지 방법이 있습니다.


첫 번째 방법은 사용하지 않는 GPIO 핀을 출력(Output mode)로 설정 후 GPIO 를 LOW로 설정하는 것입니다. 

두 번째 방법은 사용하지 않는 GPIO 핀을 출력(Output mode)로 설정 후 1kOhm~10kOhm의 저항을 GND사이에 연결하는 방법입니다. 즉 저항을 이용하여 Pull-down으로 연결하는 것입니다.


Microchip사의 PIC16F18345 MCU에는 아래와 같이 명시되어 있습니다.MCU를 사용하다보면 사용하지 않는 핀이 생깁니다.



Unused I/O 처리방법 출처:

http://ww1.microchip.com/downloads/en/DeviceDoc/PIC16-L-F18325_18345-Data-Sheet-40001795G.pdf



첫 번째 방법과 두 번째 방법에는 장단점이 있습니다.

 첫 번째 방법은 별도의 저항을 추가하지 않아도 되기 때문에 저항 자리만큼 PCB 공간을 확보할 수 있고 하드웨어의 개수가 줄어들기 때문에 양산시에는 불량이 발생할 가능성을 그만큼 줄일 수 있습니다. 그러나 첫 번째 방법은 미사용핀이 외부에 그대로 노출되어 있기 때문에 외부로부터 정전기와 같은 원하지 않는 노이즈로부터 취약합니다. 


 두 번째 방법은 저항을 사용하지 않는 핀마다 추가해야 하지만 첫 번째 방법에서 제시한 단점을 보완할 수 있습니다. 


만약 회로에 여유 공간이 있다면 두 번째 방법을 추천드립니다.


이러한 미사용GPIO 핀 처리 방법은 대부분의 마이크로컨트롤러 미사용핀에 적용할 수 있습니다


Posted by KennyShin
,