[Microchip]/dsPIC33-SM2008. 7. 10. 23:19

[dsPIC33F-QFN44 EVM] 보드 조립 - dsPIC33FJ32MC204

[dsPIC33F-QFN44 EVM] 보드 조립 - dsPIC33FJ32MC204

사용자 삽입 이미지


dsPIC33F - QFN44 타입용(dsPIC33FJ32MC204m dsPIC33FJ32MC304) 소형 보드를 제작 했다.





여러 Application Board에 연결하여 테스트 가능하도록 했다.



기존의 STM32-48 Application Board에 연결해서 테스트 할 수 있도록 기본 포트 배열을 맞추어 확장보드에서 쉽게 테스트 해 볼 수 있도록 했다.



테스트 동영상( dspic led test )
Posted by nexp

댓글을 달아 주세요

[Microchip]/dsPIC2008. 6. 12. 11:33

dsPIC 의 GPIO 특징

dsPIC 의 GPIO 특징



TRIS
 
GPIO의 입출력 방향을 설정하는 레지스터
 0 : 출력
 1 : 입력

* AVR과 같은 대부분 마이컴과 반대로 되어 있으므로 주의 필요하다.
)
* ADC 포트는 디폴트 ADC로 설정 되어 있므로 GPIO를 사용하려면 ACDON레지스터의 설정이 필요하다.


PORT
현재의 포트 상태를 알수 있는 레지스터, 입력모드일때 사용하면 된다.
LAT 레지스터와 차이는 입력용이다는 것이다.

LAT
PIC18이상에서만 존재하는 레지스터로 출력레치용이다.
이 레지스터를 읽어보면 출력한값을 알수 있다.

Posted by nexp

댓글을 달아 주세요

[Microchip]/dsPIC2008. 4. 27. 11:04

[dsPIC33 EVM] rev2 보드 관련 자료

[dsPIC33 EVM] rev2 보드 관련 자료

사용자 삽입 이미지
회로도:



On Board LED테스트 예제 소스




보드는 기존 [dsPIC33 EVM]보다  더 작아 졌지만 USB2Serial(CP2102), IR, CdS, LED(PWM), S/W(INT),  등의 간단한 테스트 소자도 추가 하였다.
참고







LED포트 변경 및 스위치 추가



IR및 CdS센서 추가



시리얼 포트 커넥터 추가


 
Posted by nexp

댓글을 달아 주세요

  1. 비밀댓글입니다

    2009.01.30 13:36 [ ADDR : EDIT/ DEL : REPLY ]

[Microchip]/dsPIC2008. 4. 26. 15:05

[dsPIC33 EVM] rev2 보드 조립 및 테스트 - 소형버젼

[dsPIC33 EVM] rev2 보드 조립 및 테스트 - 소형버젼

사용자 삽입 이미지


[dsPIC33 EVM]을 새롭게 만들었다.
좀더 심플하고, 소형으로 만들고, 포트도 통일화 하였으며, 기존 보드의 버그도 수정 해서 새롭게 만들었다.



먼저 dsPIC33FJ256GP506 을 실장해서 만들어 보았다.




보드는 더 작아 졌지만 IR, CdS, LED(PWM), S/W(INT) 등의 간단한 테스트 소자도 추가 하였다.



기존 보드보다 300mil정도 줄여서 상당히 심플하다.



테스트 동영상
LED를 PWM포트로 테스트 하기위해 포트가 수정되었지만 PWM등 테스트 하기에 좋을것 같다.



확장보드



dspic 확장보드
Posted by nexp

댓글을 달아 주세요

[Microchip]/dsPIC33-SM2008. 3. 12. 00:30

dsPIC33 속도 테스트 - LED 토글 테스트

dsPIC33 속도 테스트 - LED 토글 테스트


LED토글링으로 dsPIC33 속도 측정을 했다.
여러가지 테스트를 해서 결론적으로 LED 속도는 56ns/6.6Mhz 이 출력된다.

[다른 MCU속도 측정 결과] 에 비교하면 상당히 빠르다..

dsPIC33 속도 테스트를 위해 아래와 같이 LED토글 하는 코드를 작성했다.
#define LED1_BIT   BIT0
#define LED1_PORT   PORTB
#define Led1Init()   _TRISB7 = 0

#define Led1Toggle()  _RB7 ^= 1

main()
{
  :
 while(1)
 {
   Led1Toggle();
 }

LED토글 속도 측정 결과 330ns/14Mhz 가 측정된다. 40MIP라기에는 너무 느리다.

어샘블 코드를 들여다보자
헉! 옵티마이즈 문제인가?
Level-s 면 나쁘지 않은데... 이런 무식한 컴파일러를 봤나~
Level-s 330ns

26:                 while(1)
27:                 {
28:                  Led1Toggle();
 0028C  BFC2C2     mov.b 0x02c2,0x0000
 0028E  FB8000     ze 0x0000,0x0000
 00290  DE0047     lsr 0x0000,#7,0x0000
 00292  A20400     btg 0x0000,#0
 00294  DD0047     sl 0x0000,#7,0x0000
 00296  202C21     mov.w #0x2c2,0x0002
 00298  784091     mov.b [0x0002],0x0002
 0029A  A17401     bclr 0x0002,#7
 0029C  70C080     ior.b 0x0002,0x0000,0x0002
 0029E  780001     mov.w 0x0002,0x0000
 002A0  B7E2C2     mov.b 0x0000,0x02c2
 002A2  37FFF4     bra 0x00028c

옵티마이즈 옵션을 Level-0으로 변경하고 컴파일 해보자



Level - 0

25:                 
26:                 while(1)
27:                 {
28:                  Led1Toggle();
 0028E  BFC2C2     mov.b 0x02c2,0x0000
 00290  FB8000     ze 0x0000,0x0000
 00292  DE0047     lsr 0x0000,#7,0x0000
 00294  A20400     btg 0x0000,#0
 00296  604061     and.b 0x0000,#1,0x0000
 00298  DD00C7     sl 0x0000,#7,0x0002
 0029A  BFC2C2     mov.b 0x02c2,0x0000
 0029C  A17400     bclr 0x0000,#7
 0029E  704001     ior.b 0x0000,0x0002,0x0000
 002A0  B7E2C2     mov.b 0x0000,0x02c2
29:                 }
 002A2  37FFF5     bra 0x00028e

그닥 줄여지지 않는다. 토글 속도는 280ns/1.6Mhz가 나온다. 뭔가 이상하다.
Levle3은 더 과관이다.  아무리 컴파일러가 이상해도 뭔가 이상하다...
Level3 - 630ns, 7.70khz

26:                 while(1)
27:                 {
28:                  Led1Toggle();
 0028C  BFC2C2     mov.b 0x02c2,0x0000
 0028E  FB8000     ze 0x0000,0x0000
 00290  DE0047     lsr 0x0000,#7,0x0000
 00292  A20400     btg 0x0000,#0
 00294  DD0047     sl 0x0000,#7,0x0000
 00296  202C21     mov.w #0x2c2,0x0002
 00298  784091     mov.b [0x0002],0x0002
 0029A  A17401     bclr 0x0002,#7
 0029C  70C080     ior.b 0x0002,0x0000,0x0002
 0029E  780001     mov.w 0x0002,0x0000
 002A0  B7E2C2     mov.b 0x0000,0x02c2
 002A2  BFC2C2     mov.b 0x02c2,0x0000
 002A4  FB8000     ze 0x0000,0x0000
 002A6  DE0047     lsr 0x0000,#7,0x0000
 002A8  A20400     btg 0x0000,#0
 002AA  DD0047     sl 0x0000,#7,0x0000
 002AC  202C21     mov.w #0x2c2,0x0002
 002AE  784091     mov.b [0x0002],0x0002
 002B0  A17401     bclr 0x0002,#7
 002B2  70C080     ior.b 0x0002,0x0000,0x0002
 002B4  780001     mov.w 0x0002,0x0000
 002B6  B7E2C2     mov.b 0x0000,0x02c2
 002B8  37FFE9     bra 0x00028c


자세히 들여다 보니 문제는 PORT를 포인터로 접근하는것에 문제가 있는것 같다. 똑똑하지 않는 컴파일러인건지.. 옵티마이즈가 안되는건지?
아무튼 이제 정상적으로 동작하는것 같다.

#define LED1_BIT   BIT0
#define LED1_PORT   LATA
#define Led1Init()   _TRISB0 = 0

#define Led1Toggle()  Tbi(LED1_PORT, LED1_BIT)


26:                 while(1)
27:                 {
28:                  Led1Toggle();
 002CC  AAE2C4    btg.b 0x02c4,#7
 002CE  37FFFE     bra 0x0002cc


코드 수정후에 LED 속도는 56ns/6.6Mhz 나온다.
Posted by nexp

댓글을 달아 주세요