Difference between revisions of "DsPIC30F 5011 Development Board"
Jump to navigation
Jump to search
(best pharmacy company) |
Russ hensel (talk | contribs) m (Reverted edits by ColeenRosales (Talk) to last revision by Russ hensel) |
||
(194 intermediate revisions by 26 users not shown) | |||
Line 1: | Line 1: | ||
− | + | This project aims to provide the development tools for building a [[Multi-purpose_Embedded_System | multi-purpose MCU board]]. Description is based on Microchip dsPic33FJ256GP506 (was dsPic30F5011), but information provided in this wiki may give useful directions for developing similar embedded systems with different platforms. | |
− | |||
− | |||
− | |||
− | |||
− | + | ==Introduction== | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ==Programming the | + | ===Features of dsPic33FJ256GP506=== |
+ | *3.0 to 3.3 V | ||
+ | *Up to 40 MIPs | ||
+ | *Maximum current sink/source for I/O pins: 4 mA | ||
+ | *16-bit arithmetics | ||
+ | *DSP Instruction Set | ||
+ | *Dual programming techniques: ICSP and RTSP | ||
+ | *Memory | ||
+ | **256 KB flash (86K instructions) | ||
+ | **16 KB RAM (incl. 2 KB DMA RAM) | ||
+ | **No EEPROM | ||
+ | *Communications ports | ||
+ | **UART | ||
+ | **I<sup>2</sup>C: up to 1 Mbit/s | ||
+ | **SPI | ||
+ | *ADC | ||
+ | *10-bit A/D, 1.1 Msps | ||
+ | *12-bit A/D, 500 ksps | ||
+ | *No DAC (PWMs only) | ||
+ | *Pin-to-pin compatible with other dsPICs | ||
+ | {| border="1" cellspacing="0" cellpadding="5" | ||
+ | |+ Comparison between different dsPICs | ||
+ | ! dsPic !! *Price<br>US$ !! MIPs | ||
+ | ! Flash<br>(kB)!! RAM<br>(kB) !! EEPROM<br>(kB) | ||
+ | ! I/O !! ADC<br>12-bit !! IC !! OC !! Motor<br>Ctrl !! Timers | ||
+ | ! QEI !! UART !! SPI !! I2C !! CAN !! Codec | ||
+ | |- | ||
+ | | 33FJ256GP506 || 6.11 || 40 | ||
+ | | 256 || 16 || 0 | ||
+ | | 53 || 18 || 8 || 8 || 0 || 9x16bit<br>4x32bit | ||
+ | | 0 || 2 || 2 || 2 || 1 || 1 | ||
+ | |- | ||
+ | | 33FJ128GP206 || 4.62 || 40 | ||
+ | | 128 || 8 || 0 | ||
+ | | 53 || 18 || 8 || 8 || 0 || 9x16bit<br>4x32bit | ||
+ | | 0 || 2 || 2 || 1 || 0 || 1 | ||
+ | |- | ||
+ | | 33FJ128GP306 || 4.81 || 40 | ||
+ | | 128 || 16 || 0 | ||
+ | | 53 || 18 || 8 || 8 || 0 || 9x16bit<br>4x32bit | ||
+ | | 0 || 2 || 2 || 2 || 0 || 1 | ||
+ | |- | ||
+ | | 33FJ128GP706 || 5.49 || 40 | ||
+ | | 128 || 16 || 0 | ||
+ | | 53 || 18 || 8 || 8 || 0 || 9x16bit<br>4x32bit | ||
+ | | 0 || 2 || 2 || 2 || 2 || 1 | ||
+ | |- | ||
+ | | 33FJ128MC506 || 4.97 || 40 | ||
+ | | 128 || 8 || 0 | ||
+ | | 53 || 16 || 8 || 8 || 8 || 9x16bit<br>4x32bit | ||
+ | | 1 || 2 || 2 || 2 || 1 || 0 | ||
+ | |- | ||
+ | | 33FJ128MC706 || 5.38 || 40 | ||
+ | | 128 || 16 || 0 | ||
+ | | 53 || 16 || 8 || 8 || 8 || 9x16bit<br>4x32bit | ||
+ | | 1 || 2 || 2 || 2 || 1 || 0 | ||
+ | |- | ||
+ | |} | ||
+ | <nowiki>*</nowiki>For reference only, subject to change | ||
+ | |||
+ | ===Forums=== | ||
+ | *[http://forum.microchip.com/ Microchip]: Official forum by Microchip | ||
+ | **See MPLAB ICD 2, MPLAB IDE, MPLAB C30 Compiler, ASM30, Link30 forum, dsPIC30F Topics, dsPic33 topics | ||
+ | *[http://www.htsoft.com/forum/all/ubbthreads.php/Cat/0/C/6 HI-TECH Software Forum]: Discussion on dsPICC, a C compiler developed by HI-TECH | ||
+ | *[http://sourceforge.net/forum/forum.php?forum_id=382005 FreeRTOS Real Time Kernel]: Open Discussion and Support on FreeRTOS | ||
+ | *[http://www.nabble.com/MicroControllers---GNUPIC-f2057.html Nabble]: MicroControllers - GNUPIC | ||
+ | |||
+ | ===References=== | ||
+ | *dsPIC33F | ||
+ | **[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2573 dsPIC33F Family Reference Manual Sections] | ||
+ | **[http://ww1.microchip.com/downloads/en/DeviceDoc/70286C.pdf dsPIC33FJXXXGPX06/X08/X10 Data Sheet] | ||
+ | **[http://ww1.microchip.com/downloads/en/DeviceDoc/80306E.pdf dsPIC33FJXXXGPX06/X08/X10 Rev. A2/A3/A4 Silicon Errata] | ||
+ | **[http://ww1.microchip.com/downloads/en/DeviceDoc/70152G.pdf Flash Programming Specification] | ||
+ | *ICD2 Programmer | ||
+ | **[http://ww1.microchip.com/downloads/en/DeviceDoc/51331C.pdf ICD2 User's Guide] | ||
+ | *MPLAB | ||
+ | **[http://ww1.microchip.com/downloads/en/DeviceDoc/51519B.pdf MPLAB IDE User's Guide] | ||
+ | *C30 Compiler | ||
+ | **[http://ww1.microchip.com/downloads/en/DeviceDoc/C30_Users_Guide_51284e.pdf MPLAB C30 C Compiler User's Guide]: Contains commands for using pic30-elf-gcc | ||
+ | **[http://ww1.microchip.com/downloads/en/DeviceDoc/16bit_Language_Tool_Libraries_51456c.pdf 16-bit Language Tools Libraries]: Contains summaries and examples of using DSP libraries, standard C libraries and device libraries | ||
+ | **[http://ww1.microchip.com/downloads/en/DeviceDoc/Asm30_Link_Util_51317e.pdf MPLAB ASM30, MPLAB LINK30 and Utilities User's Guide] | ||
+ | |||
+ | ===Code Examples=== | ||
+ | *[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1408 Microchip Example Codes for dsPic] | ||
+ | |||
+ | ===Related Development=== | ||
+ | *[[Ethernet Module]] | ||
+ | *[[Modulation Plugin]] | ||
+ | |||
+ | |||
+ | ==Programming Methods== | ||
+ | *There are 2 programming methods: In-Circuit Serial Programming (ICSP) and Run-Time Self-Programming (RTSP) | ||
+ | *ICSP allows the devices to be programmed after being placed in a circuit board. | ||
+ | *RTSP allows the devices to be programmed when an embedded program is already in operation. | ||
+ | |||
+ | ===ICSP: External Programmer (ICD2)=== | ||
+ | *Two types of ICSP are available: '''ICSP''' and '''Enhanced ICSP'''. Both of them require setting MCLR# to V<sub>IHH</sub> (9V – 13.25V). | ||
+ | *Standard ICSP | ||
+ | **Use external programmer (e.g. MPLAB<sup>®</sup> ICD 2, MPLAB<sup>®</sup> PM3 or PRO MATE<sup>®</sup> II) only. | ||
+ | **Required low-level programming to erase, program and verify the chip. | ||
+ | **Slower, because codes are serially executed. | ||
+ | |||
+ | *Enhanced ICSP | ||
+ | **Use external programmer and '''Programming Executive''' (PE). | ||
+ | **PE is stored in the on-chip memory. | ||
+ | **PE allows faster programming. | ||
+ | **PE can be downloaded to the chip by external programmer using the standard ICSP method. | ||
+ | **PE contains a small command set to erase, program and verify the chip, avoiding the need of low-level programming. | ||
+ | |||
+ | ====Hardware Interface==== | ||
+ | {| border="1" cellspacing="0" cellpadding="5" | ||
+ | |+ Pin Used by ICSP | ||
+ | ! Pin Label !! Function !! Pin Number | ||
+ | |- | ||
+ | | MCLR# || Programming Enable|| 7 | ||
+ | |- | ||
+ | | V<sub>DD</sub> || Power Supply || 10, 26, 38, 57 | ||
+ | |- | ||
+ | | V<sub>SS</sub> || Ground || 9, 25, 41, 56 | ||
+ | |- | ||
+ | | PGC || Serial Clock || 17 | ||
+ | |- | ||
+ | | PGD || Serial Data || 18 | ||
+ | |- | ||
+ | |} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | + | {| border="1" cellspacing="0" cellpadding="5" |
− | + | |+ Available Programmers in the Market | |
− | + | ! Product Name | |
− | #[http:// | + | ! Interface with PC |
+ | ! Interface with Device | ||
+ | ! *Price (US) | ||
+ | ! Remarks | ||
+ | |- | ||
+ | | [http://direct.www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010046&part=DV164005 MPLAB<sup>®</sup> ICD 2] | ||
+ | | USB or RS232 | ||
+ | | [http://www.microchip.com/Microchip.WWW.SecureSoftwareList/secsoftwaredownload.aspx?device=en010046&lang=en&ReturnURL=http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010046&part=DV164005# 6-PIN RJ-12 connector] | ||
+ | | $159.99 | ||
+ | | - | ||
+ | |- | ||
+ | | [http://www.sureelectronics.net Clone Microchip ICD2] (Now Using) | ||
+ | | USB | ||
+ | | 6-pin flat cables | ||
+ | | $52.35 | ||
+ | | Do not work with new MPLAB versions (works for 7.50), communication to MPLAB may sometime hang (see [http://www.sureelectronics.net/pdfs/DB-DP003.pdf manual]) | ||
+ | |- | ||
+ | |} | ||
+ | <nowiki>*</nowiki>For reference only (exclude shipping), subject to change | ||
+ | |||
+ | |||
+ | {| border="1" cellspacing="0" cellpadding="5" | ||
+ | |+ DIY ICD 2 Programmer Circuit | ||
+ | ! Source !! Schematic !! PIC16F877A Bootloader | ||
+ | |- | ||
+ | | [http://membres.lycos.fr/silicium31/Electronique/PIC/FreeIcdEnglish.htm Patrick Touzet] | ||
+ | | [http://membres.lycos.fr/silicium31/Electronique/PIC/ICD2%20V1.3.pdf Yes] | ||
+ | | [http://membres.lycos.fr/silicium31/Electronique/PIC/ICD2_FW.zip HEX] | ||
+ | |- | ||
+ | | [http://www.nebadje.org/doku.php?id=neblab:icd2clone Nebadje] | ||
+ | | [http://people.ee.ethz.ch/~jbiveron/nebadje/ICD2_DOC.pdf Yes] | ||
+ | | [http://people.ee.ethz.ch/~jbiveron/nebadje/ICD2_FW.zip Zip] | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | |||
+ | ====Software Interface==== | ||
+ | *The program can be written and compiled in an Integrated Development Environment (IDE) using either Assembly or C. The complied codes are then loaded to the device through the external programmer. | ||
+ | |||
+ | {| border="1" cellspacing="0" cellpadding="5" | ||
+ | |+ Summary of IDE | ||
+ | ! Product Name !! Features !! OS !! Price (US$) | ||
+ | |- | ||
+ | | [http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002 MPLAB<sup>®</sup> IDE] | ||
+ | | Assembler Only | ||
+ | | Windows | ||
+ | | Free | ||
+ | |- | ||
+ | | [http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010065&part=SW006012 MPLAB<sup>®</sup> C30] | ||
+ | | Assembler and C-Compiler | ||
+ | | Windows | ||
+ | | $895.00 (Free student version<sup>1</sup>) | ||
+ | |- | ||
+ | | [http://piklab.sourceforge.net/ Piklab] | ||
+ | | Assembler and C-Compiler | ||
+ | | Linux | ||
+ | | Free | ||
+ | |} | ||
+ | # Full-featured for the first 60 days. After 60 days, some code optimization functions are disabled. The compiler will continue to function after 60 days, but code size may increase. | ||
+ | |||
+ | ===RTSP: COM Port (Bootloader)=== | ||
+ | *RTSP works in normal voltage (MCLR# no need to raise to V<sub>IHH</sub>). | ||
+ | *No literature has mentioned the incorporation of Programming Executive (PE). Presumably, since Enhanced ICSP needs to set MCLR# to V<sub>IHH</sub>, RTSP cannot use PE. | ||
+ | *Refer to [[DsPIC30F_5011_Development_Board#Bootloader_Development | bootloader section]]. | ||
+ | |||
+ | |||
+ | ==Development Environment== | ||
+ | |||
+ | ===Windows=== | ||
+ | |||
+ | [[Image:PIC_setup_win.JPG]] | ||
+ | |||
+ | *C-Compiler, Assembler and Linker are under GNU license. | ||
+ | **MPLAB C30 C Compiler (*.c -> *.s) | ||
+ | **MPLAB ASM30 Assembler (*.s -> *.o) | ||
+ | **MPLAB LINK30 Linker (*.o -> *.bin) | ||
+ | |||
+ | *PA optimizer, simulator, runtime libraries, header files, include files, and linker scripts are not covered by GNU. Reference is [http://direct.forum.microchip.com/tm.aspx?m=107208 here]. | ||
+ | |||
+ | *Microchip has integrated ASM30, LINK30, assembly header files, linker scripts in MPLAB IDE, which is free for download. | ||
+ | *MPLAB C30 costs US$895. A 60-day free student version is also available. After 60-days, the optimizer is automatically disabled, while other tools can still function properly. | ||
+ | |||
+ | *C-libraries contained in C30 includes (Refer to [http://ww1.microchip.com/downloads/en/DeviceDoc/16bit_Language_Tool_Libraries_51456c.pdf 16-Bit Language Tools Libraries] from Microchip). | ||
− | |||
− | |||
− | |||
− | |||
{|border="1" cellspacing="0" cellpadding="5" | {|border="1" cellspacing="0" cellpadding="5" | ||
− | |+ | + | |+ C Libraries in MPLAB C30 |
− | ! | + | ! Library !! Directory <br>(\\Microchip\MPLAB C30) !! Major functions |
|-valign="top" | |-valign="top" | ||
− | | | + | | DSP Library <br>(e.g. libdsp-coff.a) |
− | + | | \lib <br> \src\dsp <br> \support\h | |
− | + | | Vector, Matrix, Filter, etc. | |
|-valign="top" | |-valign="top" | ||
− | | | + | | 16-Bit Peripheral Libraries |
− | + | | \lib <br> \src\peripheral <br> \support\h | |
+ | | ADC12, IOPort, UART, I<sup>2</sup>C, etc. | ||
|-valign="top" | |-valign="top" | ||
− | | | + | | Standard C Libraries <br>(e.g. libc-coff.a, libm-coff.a, libpic-coff.a) |
− | + | | \lib <br> \src\libm <br> \include | |
− | + | | stdio.h, time.h, float.h, math.h, | |
− | |||
|-valign="top" | |-valign="top" | ||
− | | | + | | MPLAB C30 Built-in Functions |
− | * | + | | none |
− | * | + | | _buildin_addab, _buildin_add, _buildinmpy, etc |
− | * | + | |- |
+ | |} | ||
+ | |||
+ | ===Linux=== | ||
+ | |||
+ | [[Image:PIC_setup_linux.JPG]] | ||
+ | |||
+ | *C Compiler, Assembler and Linker are under GNU license. | ||
+ | **The code can be downloaded from Microchip at [http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en023073 here]. | ||
+ | **Current MPLAB ASM30 Assembler: v2.04 | ||
+ | **Current MPLAB C30 Compiler: v2.04 | ||
+ | *'''Important Note''': Only the compiler is free. The header files and library are owned by Microchip. | ||
+ | |||
+ | {|border="1" cellspacing="0" cellpadding="5" | ||
+ | |+ Pic30 C-Compiler Toolchain Templates for Conversion to Debian-based systems | ||
+ | ! Toolchain Source !! Instruction !! Remarks | ||
|-valign="top" | |-valign="top" | ||
− | | | + | | [http://www.baycom.org/~tom/dspic/ v2.00] |
− | + | | Download pic30-gcc-2.00-1.i386.rpm and pic30-binutils-2.00-1.i386.rpm.<br>Convert to deb files. | |
− | + | | Stable<br>Now using | |
− | |||
− | |||
− | |||
− | |||
|-valign="top" | |-valign="top" | ||
− | | | + | | [http://www.nabble.com/Debian-templates-for-dsPIC-build-toolchain-2.05-td7886279.html v2.05] |
− | + | | Reference to example below, but use 2.05 files | |
− | + | | Can compile<br>Stable but not heavily tested | |
|-valign="top" | |-valign="top" | ||
− | | | + | | [http://www.nabble.com/Debian-templates-for-dsPIC-build-toolchain-3.01-tf4308624.html v3.01] |
− | + | | Follow example below | |
+ | | Can compile<br>Unstable (sometime produce segmentation fault) | ||
|-valign="top" | |-valign="top" | ||
− | | | + | | [http://www.nabble.com/Debian-Template-Patches-for-C30-v3.10-i386-td17534084.html v3.10] |
− | + | | Reference to example below, but use 3.10 files | |
− | + | | Cannot compile yet (segmentation fault) | |
− | |||
|- | |- | ||
|} | |} | ||
+ | ====Conversion Example==== | ||
+ | *Pre-install these packages: dpkg-dev, debhelper, bison, flex, sysutils, gcc-3.3, fakeroot | ||
+ | **cmd: '''sudo apt-get install dpkg-dev debhelper bison flex sysutils gcc-3.3 fakeroot''' | ||
+ | *Download and unzip template: '''pic30-3.01.tar.bz2''' | ||
+ | *Download assembler: '''mplabalc30v3_01_A.tar.gz'''. Save under /pic30-3.01/pic30-binutils-3.01/upstream/ | ||
+ | *Download c-compiler: '''mplabc30v3_01_A.tgz'''. Save under /pic30-3.01/pic30-gcc-3.01/upstream/ | ||
+ | *Install MPLAB_C30_v3_01-StudentEdition under Windows | ||
+ | *Copy directories /include, /lib, /support, and /bin/c30_device.info to pic30-3.01/pic30-support-3.01/upstream/ | ||
+ | *Pack pic30-binutils into deb file | ||
+ | **goto /pic30-3.01/pic30-binutils-3.01/ | ||
+ | **type cmd: '''dpkg-buildpackage -rfakeroot -b''' | ||
+ | *Install pic30-binutils_3.01-1_i386.deb | ||
+ | **type cmd: '''sudo dpkg -i pic30-binutils_3.01-1_i386.deb''' | ||
+ | *Pack pic30-gcc-3.01 into deb file | ||
+ | **goto /pic30-3.01/pic30-gcc-3.01/ | ||
+ | **type cmd: '''dpkg-buildpackage -rfakeroot -b''' | ||
+ | *Install pic30-gcc_3.01-1_i386.deb | ||
+ | **type cmd: '''sudo dpkg -i pic30-gcc_3.01-1_i386.deb''' | ||
+ | *Pack support files into deb file | ||
+ | **goto /pic30-3.01/pic30-support-3.01/ | ||
+ | **type cmd: '''dpkg-buildpackage -rfakeroot -b''' | ||
+ | *Install pic30-support_3.01-1_all.deb | ||
+ | **type cmd: '''sudo dpkg -i pic30-support_3.01-1_all.deb''' | ||
+ | *After installation, locations of | ||
+ | **C-Header (*.h): /usr/pic30-elf/include | ||
+ | **Libraries (*.a): /usr/pic30-elf/lib | ||
+ | **Assembly header (*.inc): /usr/share/pic30-support/inc | ||
+ | **Linkerscript (*.gld): /usr/share/pic30-support/gld | ||
+ | |||
+ | ===Burning Program Codes to Target Board=== | ||
+ | #Use 'dspicprg and dspicdmp' utilities developed by [http://homerreid.ath.cx/misc/dspicprg/ Homer Reid] to burn hex code (*.hex) to devices. See Reference [http://forum.microchip.com/tm.aspx?m=94243 here]. Through serial port only? | ||
+ | #Use [http://piklab.sourceforge.net/ Piklab IDE]. Details on file format not known. | ||
+ | #Use [http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002 MPLAB IDE] to burn hex code (*.hex) to devices. | ||
+ | |||
+ | ===Code Optimization=== | ||
+ | *Below is a comparsion between different optimization levels for the project including drivers for 2 projects. | ||
− | |||
{|border="1" cellspacing="0" cellpadding="5" | {|border="1" cellspacing="0" cellpadding="5" | ||
− | |+ | + | |+ Comparison between differnt optimization levels |
− | ! | + | ! Optimization !! Description !! Project 1<br>Code Size<br>(byte) !! Project 1<br>Data Usage<br>(byte) !! Project 2<br>Code Size<br>(byte) !! Project 2<br>Data Usage<br>(byte) |
|-valign="top" | |-valign="top" | ||
− | | | + | | O0 |
− | + | | No optimization<br>Fastest Compilation | |
− | + | | 6222 (9%) || 178 (4%) || 26,037 (38%) || 710 (17%) | |
− | |||
− | |||
− | |||
− | |||
|-valign="top" | |-valign="top" | ||
− | | | + | | O1 |
− | + | | Optimize<br> Tries to reduce code size and execution time. | |
− | + | | 4473 (6%) || 178 (4%) || 22,290 (32%) || 710 (17%) | |
− | |||
− | |||
|-valign="top" | |-valign="top" | ||
− | | | + | | O2 |
− | + | | Optimize even more<br> Performs nearly all supported optimizations <br>that do not involve a space-speed trade-off. <br>Increases both compilation time and the <br>performance of the generated code. | |
+ | | 4422 (6%) || 178 (4%) || 21,993 (32%) || 710 (17%) | ||
|-valign="top" | |-valign="top" | ||
− | | | + | | O3 |
− | + | | Optimize yet more. <br>O3 turns on all optimizations specified by O2 <br>and also turns on the inline-functions option. | |
− | + | | 4485 (6%) || 178 (4%) || 22,176 (32%) || 710 (17%) | |
− | |||
− | |||
− | |||
|-valign="top" | |-valign="top" | ||
− | | | + | | Os |
− | + | | Optimize for size. <br>Os enables all O2 optimizations that do not <br>typically increase code size. It also performs <br>further optimizations designed to reduce code <br>size. | |
− | + | | 4356 (6%) || 178 (4%) || 21,885 (32%) || 710 (17%) | |
|- | |- | ||
|} | |} | ||
− | == | + | ==[[freertos_posix Development | Driver Development]]== |
− | * | + | *Description on developing drivers with POSIX API |
− | * | + | |
+ | |||
+ | ==[[Bootloader Development]]== | ||
+ | *Description on concepts and development on bootloader | ||
+ | *Description on dsPicProgrammer to download firmware via bootloader | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | == | + | ==[[Programming the Device]]== |
− | + | *Description on how to use dsPicProgrammer to download firmware to dspic | |
− | |||
− | |||
− | * | ||
− | |||
− | |||
− | + | [[category:projects]] | |
− | |||
− | |||
− |
Latest revision as of 06:30, 16 October 2012
This project aims to provide the development tools for building a multi-purpose MCU board. Description is based on Microchip dsPic33FJ256GP506 (was dsPic30F5011), but information provided in this wiki may give useful directions for developing similar embedded systems with different platforms.
Contents
Introduction
Features of dsPic33FJ256GP506
- 3.0 to 3.3 V
- Up to 40 MIPs
- Maximum current sink/source for I/O pins: 4 mA
- 16-bit arithmetics
- DSP Instruction Set
- Dual programming techniques: ICSP and RTSP
- Memory
- 256 KB flash (86K instructions)
- 16 KB RAM (incl. 2 KB DMA RAM)
- No EEPROM
- Communications ports
- UART
- I2C: up to 1 Mbit/s
- SPI
- ADC
- 10-bit A/D, 1.1 Msps
- 12-bit A/D, 500 ksps
- No DAC (PWMs only)
- Pin-to-pin compatible with other dsPICs
dsPic | *Price US$ |
MIPs | Flash (kB) |
RAM (kB) |
EEPROM (kB) |
I/O | ADC 12-bit |
IC | OC | Motor Ctrl |
Timers | QEI | UART | SPI | I2C | CAN | Codec |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
33FJ256GP506 | 6.11 | 40 | 256 | 16 | 0 | 53 | 18 | 8 | 8 | 0 | 9x16bit 4x32bit |
0 | 2 | 2 | 2 | 1 | 1 |
33FJ128GP206 | 4.62 | 40 | 128 | 8 | 0 | 53 | 18 | 8 | 8 | 0 | 9x16bit 4x32bit |
0 | 2 | 2 | 1 | 0 | 1 |
33FJ128GP306 | 4.81 | 40 | 128 | 16 | 0 | 53 | 18 | 8 | 8 | 0 | 9x16bit 4x32bit |
0 | 2 | 2 | 2 | 0 | 1 |
33FJ128GP706 | 5.49 | 40 | 128 | 16 | 0 | 53 | 18 | 8 | 8 | 0 | 9x16bit 4x32bit |
0 | 2 | 2 | 2 | 2 | 1 |
33FJ128MC506 | 4.97 | 40 | 128 | 8 | 0 | 53 | 16 | 8 | 8 | 8 | 9x16bit 4x32bit |
1 | 2 | 2 | 2 | 1 | 0 |
33FJ128MC706 | 5.38 | 40 | 128 | 16 | 0 | 53 | 16 | 8 | 8 | 8 | 9x16bit 4x32bit |
1 | 2 | 2 | 2 | 1 | 0 |
*For reference only, subject to change
Forums
- Microchip: Official forum by Microchip
- See MPLAB ICD 2, MPLAB IDE, MPLAB C30 Compiler, ASM30, Link30 forum, dsPIC30F Topics, dsPic33 topics
- HI-TECH Software Forum: Discussion on dsPICC, a C compiler developed by HI-TECH
- FreeRTOS Real Time Kernel: Open Discussion and Support on FreeRTOS
- Nabble: MicroControllers - GNUPIC
References
- dsPIC33F
- ICD2 Programmer
- MPLAB
- C30 Compiler
- MPLAB C30 C Compiler User's Guide: Contains commands for using pic30-elf-gcc
- 16-bit Language Tools Libraries: Contains summaries and examples of using DSP libraries, standard C libraries and device libraries
- MPLAB ASM30, MPLAB LINK30 and Utilities User's Guide
Code Examples
Related Development
Programming Methods
- There are 2 programming methods: In-Circuit Serial Programming (ICSP) and Run-Time Self-Programming (RTSP)
- ICSP allows the devices to be programmed after being placed in a circuit board.
- RTSP allows the devices to be programmed when an embedded program is already in operation.
ICSP: External Programmer (ICD2)
- Two types of ICSP are available: ICSP and Enhanced ICSP. Both of them require setting MCLR# to VIHH (9V – 13.25V).
- Standard ICSP
- Use external programmer (e.g. MPLAB® ICD 2, MPLAB® PM3 or PRO MATE® II) only.
- Required low-level programming to erase, program and verify the chip.
- Slower, because codes are serially executed.
- Enhanced ICSP
- Use external programmer and Programming Executive (PE).
- PE is stored in the on-chip memory.
- PE allows faster programming.
- PE can be downloaded to the chip by external programmer using the standard ICSP method.
- PE contains a small command set to erase, program and verify the chip, avoiding the need of low-level programming.
Hardware Interface
Pin Label | Function | Pin Number |
---|---|---|
MCLR# | Programming Enable | 7 |
VDD | Power Supply | 10, 26, 38, 57 |
VSS | Ground | 9, 25, 41, 56 |
PGC | Serial Clock | 17 |
PGD | Serial Data | 18 |
Product Name | Interface with PC | Interface with Device | *Price (US) | Remarks |
---|---|---|---|---|
MPLAB® ICD 2 | USB or RS232 | 6-PIN RJ-12 connector | $159.99 | - |
Clone Microchip ICD2 (Now Using) | USB | 6-pin flat cables | $52.35 | Do not work with new MPLAB versions (works for 7.50), communication to MPLAB may sometime hang (see manual) |
*For reference only (exclude shipping), subject to change
Source | Schematic | PIC16F877A Bootloader |
---|---|---|
Patrick Touzet | Yes | HEX |
Nebadje | Yes | Zip |
Software Interface
- The program can be written and compiled in an Integrated Development Environment (IDE) using either Assembly or C. The complied codes are then loaded to the device through the external programmer.
Product Name | Features | OS | Price (US$) |
---|---|---|---|
MPLAB® IDE | Assembler Only | Windows | Free |
MPLAB® C30 | Assembler and C-Compiler | Windows | $895.00 (Free student version1) |
Piklab | Assembler and C-Compiler | Linux | Free |
- Full-featured for the first 60 days. After 60 days, some code optimization functions are disabled. The compiler will continue to function after 60 days, but code size may increase.
RTSP: COM Port (Bootloader)
- RTSP works in normal voltage (MCLR# no need to raise to VIHH).
- No literature has mentioned the incorporation of Programming Executive (PE). Presumably, since Enhanced ICSP needs to set MCLR# to VIHH, RTSP cannot use PE.
- Refer to bootloader section.
Development Environment
Windows
- C-Compiler, Assembler and Linker are under GNU license.
- MPLAB C30 C Compiler (*.c -> *.s)
- MPLAB ASM30 Assembler (*.s -> *.o)
- MPLAB LINK30 Linker (*.o -> *.bin)
- PA optimizer, simulator, runtime libraries, header files, include files, and linker scripts are not covered by GNU. Reference is here.
- Microchip has integrated ASM30, LINK30, assembly header files, linker scripts in MPLAB IDE, which is free for download.
- MPLAB C30 costs US$895. A 60-day free student version is also available. After 60-days, the optimizer is automatically disabled, while other tools can still function properly.
- C-libraries contained in C30 includes (Refer to 16-Bit Language Tools Libraries from Microchip).
Library | Directory (\\Microchip\MPLAB C30) |
Major functions |
---|---|---|
DSP Library (e.g. libdsp-coff.a) |
\lib \src\dsp \support\h |
Vector, Matrix, Filter, etc. |
16-Bit Peripheral Libraries | \lib \src\peripheral \support\h |
ADC12, IOPort, UART, I2C, etc. |
Standard C Libraries (e.g. libc-coff.a, libm-coff.a, libpic-coff.a) |
\lib \src\libm \include |
stdio.h, time.h, float.h, math.h, |
MPLAB C30 Built-in Functions | none | _buildin_addab, _buildin_add, _buildinmpy, etc |
Linux
- C Compiler, Assembler and Linker are under GNU license.
- The code can be downloaded from Microchip at here.
- Current MPLAB ASM30 Assembler: v2.04
- Current MPLAB C30 Compiler: v2.04
- Important Note: Only the compiler is free. The header files and library are owned by Microchip.
Toolchain Source | Instruction | Remarks |
---|---|---|
v2.00 | Download pic30-gcc-2.00-1.i386.rpm and pic30-binutils-2.00-1.i386.rpm. Convert to deb files. |
Stable Now using |
v2.05 | Reference to example below, but use 2.05 files | Can compile Stable but not heavily tested |
v3.01 | Follow example below | Can compile Unstable (sometime produce segmentation fault) |
v3.10 | Reference to example below, but use 3.10 files | Cannot compile yet (segmentation fault) |
Conversion Example
- Pre-install these packages: dpkg-dev, debhelper, bison, flex, sysutils, gcc-3.3, fakeroot
- cmd: sudo apt-get install dpkg-dev debhelper bison flex sysutils gcc-3.3 fakeroot
- Download and unzip template: pic30-3.01.tar.bz2
- Download assembler: mplabalc30v3_01_A.tar.gz. Save under /pic30-3.01/pic30-binutils-3.01/upstream/
- Download c-compiler: mplabc30v3_01_A.tgz. Save under /pic30-3.01/pic30-gcc-3.01/upstream/
- Install MPLAB_C30_v3_01-StudentEdition under Windows
- Copy directories /include, /lib, /support, and /bin/c30_device.info to pic30-3.01/pic30-support-3.01/upstream/
- Pack pic30-binutils into deb file
- goto /pic30-3.01/pic30-binutils-3.01/
- type cmd: dpkg-buildpackage -rfakeroot -b
- Install pic30-binutils_3.01-1_i386.deb
- type cmd: sudo dpkg -i pic30-binutils_3.01-1_i386.deb
- Pack pic30-gcc-3.01 into deb file
- goto /pic30-3.01/pic30-gcc-3.01/
- type cmd: dpkg-buildpackage -rfakeroot -b
- Install pic30-gcc_3.01-1_i386.deb
- type cmd: sudo dpkg -i pic30-gcc_3.01-1_i386.deb
- Pack support files into deb file
- goto /pic30-3.01/pic30-support-3.01/
- type cmd: dpkg-buildpackage -rfakeroot -b
- Install pic30-support_3.01-1_all.deb
- type cmd: sudo dpkg -i pic30-support_3.01-1_all.deb
- After installation, locations of
- C-Header (*.h): /usr/pic30-elf/include
- Libraries (*.a): /usr/pic30-elf/lib
- Assembly header (*.inc): /usr/share/pic30-support/inc
- Linkerscript (*.gld): /usr/share/pic30-support/gld
Burning Program Codes to Target Board
- Use 'dspicprg and dspicdmp' utilities developed by Homer Reid to burn hex code (*.hex) to devices. See Reference here. Through serial port only?
- Use Piklab IDE. Details on file format not known.
- Use MPLAB IDE to burn hex code (*.hex) to devices.
Code Optimization
- Below is a comparsion between different optimization levels for the project including drivers for 2 projects.
Optimization | Description | Project 1 Code Size (byte) |
Project 1 Data Usage (byte) |
Project 2 Code Size (byte) |
Project 2 Data Usage (byte) |
---|---|---|---|---|---|
O0 | No optimization Fastest Compilation |
6222 (9%) | 178 (4%) | 26,037 (38%) | 710 (17%) |
O1 | Optimize Tries to reduce code size and execution time. |
4473 (6%) | 178 (4%) | 22,290 (32%) | 710 (17%) |
O2 | Optimize even more Performs nearly all supported optimizations that do not involve a space-speed trade-off. Increases both compilation time and the performance of the generated code. |
4422 (6%) | 178 (4%) | 21,993 (32%) | 710 (17%) |
O3 | Optimize yet more. O3 turns on all optimizations specified by O2 and also turns on the inline-functions option. |
4485 (6%) | 178 (4%) | 22,176 (32%) | 710 (17%) |
Os | Optimize for size. Os enables all O2 optimizations that do not typically increase code size. It also performs further optimizations designed to reduce code size. |
4356 (6%) | 178 (4%) | 21,885 (32%) | 710 (17%) |
Driver Development
- Description on developing drivers with POSIX API
Bootloader Development
- Description on concepts and development on bootloader
- Description on dsPicProgrammer to download firmware via bootloader
Programming the Device
- Description on how to use dsPicProgrammer to download firmware to dspic