MCU 제품군 중 HEF ( High Endurance Flash) 가 지원된다고 표시된 것을 아래에서 확인할 수 있습니다.






PIC12F1501 MCU의 Flash는 1만 번 E/W 가 가능합니다. 하지만 Flash의 일부 영역인 HEF 영역에 대해서는 10만 번 E/W가 가능합니다. (128byte) (참조: EEPROM의 경우 통상 100만 번 E/W입니다.)





만약 EEPROM에 쓰일 정보가 적고 Erase/Write 횟수가 10만 번 이내일 경우 외부 EEPROM이나 내부 EEPROM이 내장된 MCU를 선정하지 않고 MCU 내 부 HEF 영역을 EEPROM 대신에 사용할 수 있습니다.

아래의 링크에서 HEF를 지원하는 MCU를 확인할 수 있습니다.
http://www.microchip.com/ParamChartSearch/Chart.aspx?branchID=1012






Posted by KennyShin
,



This is an example code which can output 300Hz sine waveform using internal DAC on a microcontroller. DAC on a microcontroller has the 10bit resolution but I used only 32step when i make sine waveform


A device that I used is PIC16F1778 and developed on MPLAB X and XC8 v2.0 Compiler


unsigned int cnt=0; unsigned int sin[] = { 512, 611, 707, 796, 873, 937, 984, 1013, 1023, 1013, 984, 937, 873, 796, 707, 611, 512, 412, 316, 227, 150, 86, 39, 10, 0, 10, 39, 86, 150, 227, 316, 412 }; void main(void) { // initialize the device SYSTEM_Initialize(); DAC1CON0bits.DAC1FM = 0; // 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) { // Add your application code // DAC1_Load10bitInputData(sin[cnt++]); //Loading 10bit data to DAC1 DAC1REFL = (uint8_t) sin[cnt]; DAC1REFH = (uint8_t)(sin[cnt++] >> 8); //Loading DAC1 double buffer data to latch. DACLDbits.DAC1LD = 1; __delay_us(100); if(cnt == 32) cnt = 0; } }


The waveform using DAC without Voltage Follower on MCU




The waveform using DAC with Voltage Follower on MCU



The sine waveform is made by polling mode in while loop. If you remove the delay function in while loop, you can see the 8.6kHz sine waveform. It might be maximum output frequency using this microcontroller.



Sinewave_Table.xlsx


PIC16F_DAC_TO_SINE.X.zip



2019/01/02 - [Embedded] - How can i select the optimization level of compiler on MPLAB X?

2019/01/02 - [Embedded] - How much optimize depend on optimization level of compiler?

2018/08/02 - [Embedded/MCU Basic] - XC8 Compiler optimization level


Posted by KennyShin
,

MCC(MPLAB Code Configurator)에서

어떤 디바이스를 지원하는지 알아보겠습니다.

먼저 www.microchip.com/mcc로 이동합니다.


해당 페이지가 나오면 Current Download Tab을 클릭합니다.

Device Libraries와 부분에서 다바이스 정보를 확인할 수 있습니다.










아래에 표시된 8비트 MCU 시리즈를 클릭해 보겠습니다.





클릭해 보면 PDF 파일이 열리는데 맨 마지막 페이지를 보면

어떤 디바이스를 지원하는지 한눈에 확인할 수 있습니다.





























마지막으로 최신 버전의 MCC에서는

AVR MCUs, PIC24 / dsPIC33 / PIC33MM MCUs / PIC32MX MCUs도

지원하는 것을 확인할 수 있었습니다.



Posted by KennyShin
,

나의 소중한 매직카 골드 2 리모컨 액정이 깨졌다.

정말 정말 슬픈 일이 발생했다.




손에 잘 들고 가다가 리모컨이 손에서 떨어졌다. 손에서 멀어진 리모컨이 바닥에 닿는 순간 액정이 깨져버렸다. 쓰라린 가슴을 쓰다듬으며 그냥 쓰지 뭐. 이러면서 사용한 것이 1년 정도 지났다. 순정으로 돌아가려고 생각해 보니 이 리모컨에 너무 익숙해져 버렸다. 시동을 미리 걸어서 여름에는 시원한 에어컨을 틀어 놓을 수도 있고 겨울에는 히터를 미리 켜놓을 수 있다는 엄청난 장점이 있다. 심지어 리모컨이 동작하는 거리도 도심에서 2~300미터 가능하고, 시골에 같은 곳에서는 산 정상에서 차까지 시동을 걸 수도 있다. 거리가 1km 정도 되는데도 잘 동작한다. ( 굳이 산 정상에서 미리 시동까지 걸어 놓을 필요는 없겠지만... 이만큼 멀리에서도 동작한다는 거다. 가끔 가을에 벌초를 가면 산 정상에서 미리 시동을 걸어 놓는다. 에어컨을 켜 놓기 위해..)


액정을 수리할 수 있을지 인터넷을 찾아보니 수리비가 3만 원이라고 한다. 그리고 배송비는 별도란다. 그래서 동일한 액정을 찾아 수리해보려고 국내 인터넷 쇼핑몰을 찾아보았지만 액정을 판매하는 곳이 없었다. 해외로 눈을 돌리니 해외 쇼핑몰에서 이런 액정을 팔고 있었다.


알리익스프레스에서 구입한 액정

원래 제품과 다르지만 액정 위에 핀 수가 같길래 사 봤다. 무료 배송으로 오기 때문에 배송까지 한 달 정도 걸린 것 같다. 토요일에 액정을 받았기 때문에 주말 동안 손이 간질간질 했다. 집에는 인두기가 없어서 수리를 해 볼 수 없었기 때문이다.

회사에 출근하자마자 매직카 리모컨을 분해했다. 아래 사진처럼 기존의 액정 위의 다리 개수와 새로 산 액정의 다리 개수가 같은 것을 확인해 볼 수 있다.


매직카 리모컨을 뜯어 분해한 모습

휘리릭 뽕!

인두기를 이용해 액정을 교체했다. 액정이 동작할까?




야호!! 잘 동작한다.!!

매직카 골드 2의 리모컨 액정이 다시 눈을 떴다.



잘 동작하고 있습니다.

자동차가 기존 국산차에서 중국차로 바뀌었지만 어찌 되었든 잘 동작한다. 키도 잘 동작하고 오토, 터보 등등 기능이 다 활성화된다. 심지어 리모컨 배터리 잔량도 표시된다. 너무 기쁘다.

액정은 중국 알리익스프레스에서 5,000원 정도에 구입했다. 배송은 물론 한 달 정도 걸렸다. 이만하면 만족한다. 5,000원으로 30,000원을 아꼈다. A/S를 맡기면 배송비는 또 별도라니 배송비도 5,000원 더 벌었다. 수리하는 업체에 맡기면 총 35,000 원정도 비용이 발생한다고 보면 된다.

장점:

저렴한 가격에 수리

원래 리모컨 기능을 모두 사용 가능

단점:

자동차가 중국 스타일로 바뀌었음

배송이 오래 걸림


Posted by KennyShin
,

Brown out 이란?(BOR)

MCU Basic 2019. 1. 17. 14:41

 브라운 아웃(Brown-out)은 전원의 전류가 부족해서 전압이 정상적으로 인가되지 않는 상황을 뜻합니다. 브라운 아웃의 어원은 백열전구를 사용하던 시절 전원이 부족해서 백열전구의 밝기가 낮아져 그 결과로 빛 색깔이 갈색으로 보이는 현상에서 유래되었습니다.


  마이크로컨트롤러(MCU)의 브라운 아웃은 마이크로컨트롤러의 정상적인 동작 전압 범위 아래로 내려가는 상황을 뜻합니다. 1.8V~5.5V까지 동작 가능한 마이크로컨트롤러의 경우 동작 전압 범위 내에서는 전압이 변해도 동작이 가능합니다. 

 

 하지만 동작 중 전원이 불안정하여 1.8V 이하로 내려가면 마이크로컨트롤러의 정상적인 동작을 보장하기 어렵습니다. 1.8V 이하로 전압이 내려갔다가 다시 정상 전압 범위로 복귀했더라도 문제가 발생할 수 있습니다. 이러한 상황에 놓이게 되면 마이크로컨트롤러 내에 위치한 CPU가 이상 동작을 하여 내부의 Flash를 지워버리거나 심각한 경우 GPIO의 입출력을 바꾸어 쇼트가 되는 상황을 만들 수도 있습니다.


 따라서 브라운 아웃(Brown out)은 시스템을 심각한 상황으로 만들 수 있습니다. 이러한 브라운 아웃을 방지하기 위해 BOR Protection을 해주어야 합니다.





이러한 상황을 방지하기 위해 사용할 수 있는 방법은 대표적으로 2가지 입니다.


첫째, 마이크로컨트롤러에 내장된 BOR(Brown out reset)을 사용

둘째, 외부에 Reset IC를 별도로 추가

  

 Battery를 이용하는 시스템에서는 BOR이나 Reset IC를 사용하지 않기도 합니다. 그 이유는 BOR이나 Reset IC가 파워 소모를 하기 때문에 배터리 수명을 단축시킬 수 있기 때문입니다. 상시 전원을 이용하는 경우에는 비용이 상승되더라도 BOR이나 Reset IC 사용하여 견고한 시스템을 설계하는 것을 추천드립니다.


Posted by KennyShin
,

CAN Overview (FAQ)

CAN 2019. 1. 16. 16:41



CAN(Controller Area Network)이란 무엇인가?

 CAN(Controller Area Network) 고속 시리얼 통신 네트워크로 Intel과 Bosch가 오토모티브(Automotive) 어플리케이션을 위해서 개발했습니다. 현재에는 산업 장비나 의료장비를 제어하는데에도 쓰여집니다.




CAN(Controller Area Network) node를 구성하기 위해서 필요한 것

 CAN node는 3가지 기본 구성이 필요합니다.

 1. Host processor가 필요합니다. Host processor는 메시지(Messages)를 해석 및 만들어내는 역활을 합니다.

 2. CAN Controller가 필요합니다. CAN Controller는 메지시(Messages)를 시리얼버스에 보내거나 시리얼버스로부터 수신되는 데이터를 수신하는 역활을 합니다. CAN Controller는 주로 Microcontroller(Host processor)에 내장되어 있습니다.

   3. Transceiver가 필요합니다. Tranceiver는 Physical layer interface로 CAN Controller로부터 출력되는 신호의 Level을 변경하여 시리얼버스로 보내주거나 시리얼 버스로부터 입력되는 신호의 Level을 CAN Controller가 입력받을 수 있는 Level로 변경하는 역활을 합니다. Transceiver는 Host processor외부에 연결되는 것이 일반적입니다.


 위에서 설명드린 CAN node는 3가지로 기본 구성이 되지만 일반적으로는 Host processor내부에 CAN controller가 내장되고 Tranceiver는 별도 Device로 존재하여 총 2개의 Device로 구성되는 것이 일반적입니다.


CAN ISO 표준은 어떤 것이 있을까?

 Physical layer는 ISO11898에 Conformance testing은 ISO16845에 정의되어 있습니다.

 

CAN FD를 사용하는 이유?

 어플리케이션 프로그램을 위해서 양산 최종 단계에 프로그래밍하는 것이 너무 오래 걸리기 때문입니다. 왜냐하면 기존 Classic CAN의 경우 Message는 8bytes단위 구성되어 있기 때문입니다.  CAN FD는 64bytes를 주고 받을 수 있습니다.


CAN 2.0과 CAN FD를 비교하여 가장 다른 것은?

 최대 통신속도가 1Mb/s에서 5Mb/s로 변경되었고 CAN message가 8bytes에서 64bytes로 변경되었습니다.


CAN FD를 이용하는 이유는?

 CAN 네트워크를 통한 Application program 시간을 단축하고 기존 CAN Network에서 가지고 있던 Bandwidth를 높이기 위함입니다.


CAN 2.0 기능이 있는 Microcontroller와 CAN FD Tranceiver사용이 가능한가요?

  불가능합니다. MCU와 CAN Tranceiver모두 최종버전인 ISO11898-1/2 Specification에 만족해야 합니다. CAN 2.0 MCU는 CAN FD 네트워크에서 사용할 수 없습니다.


CAN FD MCU는 CAN 2.0과 호환이 되나요?

  가능합니다. CAN FD MCU는 CAN2.0과 CAN FD를 동시에 지원하기 때문입니다.



Posted by KennyShin
,

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
,