Jump to content
43oh

jbremnant

Members
  • Content Count

    80
  • Joined

  • Last visited

  • Days Won

    1

Reputation Activity

  1. Like
    jbremnant reacted to RobG in Ethernet Booster Pack   
    Here's little how-to.
     
    1. download attached zip file and paste all files into your project
    2. change IP addresses in main.c, local and gateway, and subnet mask if needed.
    3. compile and run, that's it.
     
    If you want to use this software with any other Ethernet boards, just change one line in the defines.h
    #define W5200_BOOSTER // booster
    //#define W5200_SERVER // stand-alone version
    //#define WIZ820_BOOSTER // WIZ820io booster pack
    //#define WIZ820_SERVER_G // WIZ820io server board, G series
     
    Default ports:
    MOSI - P1.7
    MISO - P1.6
    SCLK - P1.5
    SS - P1.0 (W5200 select)
     
    W5200 INT pin is not connected. JP1 jumper will connect INT to P1.3, JP2 to P2.7
    W5200 PWDN is grounded (JP4,) JP3 will connect P2.0 to PWDN
    W5200 RST is connected to P1.4 (JP5,) JP6 will let you use P2.6
     
    If you want to run it as a stand-alone, solder the chip, C20 (0.1uF,) R23 (47k,) and C19 (1nF.)
    To use LDO, solder IC1 (any SOT223 LDO with Vout in the middle,) C5, and C18 (~10uF.)
    OK1 is a single dual channel or two single channel opto couplers, R24 & R25 are opto's current limiting resistors.
     
    Plug in Ethernet cable first, then power up LP/booster pack.
    Some routers may not be happy with constant changes, unplug all, wait few seconds, plug everything back in.
     
     

     
    w5200-0716.zip
  2. Like
    jbremnant reacted to bluehash in PetiteFS FATfs SDCard USCI code   
    Edit: July 6th, 2014
    Please also note that Pabigot maintains BSP430 which has an example for the msp430. He also tracks any changes done to the ElmChan library with patches made to the example. Refer this post.
     
    ---------------------------------------
    First version. It's very untidy as I just got it to work. Works on USCI on the MSP430G2553. Supports Read/Listing. The monitor code does not have write yet. It works on the SDCard Boosterpack.
     

    I also used Rickta's serial code to reduce file size. I'll update to the next version once I have time and a clean it up to. Also need to add more features.

    Usage in screenshot.
    di : disk initialize
    fi : mount disk
    fl : list files
    fo filename: open file name.



    Latest Code:
    http://www.43oh.com/forum/viewtopic.php?f=10&t=1883&start=20#p18738'>Code Rev 0.2

    Member Contributed Code:
    Jazz_ys - http://forum.43oh.com/topic/1427-petitefs-fatfs-sdcard-usci-code/page__st__20#entry24449'>Link
    SDCARD_PetiteFS_2553_v0.01.zip
    SDCARD_PetiteFS_2553_v0.02.zip
  3. Like
    jbremnant reacted to oPossum in Software async serial tx/rx without timer   
    Had some requests for this in IRC so here it is. This is an improved version of the serial tx previously posted and new serial rx code. Both tx and rx are blocking and interrupts should be disabled before calling.
     
    C code to show how to use the serial_setup(), putc(), puts(), and getc() functions.
    This will receive a character, increment it and echo it back. So if you type 'A', then 'B' will be echoed.

    // test.c #include "msp430g2211.h" // Functions in serial.asm (this really should be in a header file) void serial_setup(unsigned out_mask, unsigned in_mask, unsigned duration); void putc(unsigned); void puts(char *); unsigned getc(void); void main(void) { char c; // Disable watchdog WDTCTL = WDTPW + WDTHOLD; // Use 1 MHz DCO factory calibration DCOCTL = 0; BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; // Setup the serial port // Serial out: P1.1 (BIT1) // Serial in: P1.2 (BIT2) // Bit rate: 9600 (CPU freq / bit rate) serial_setup(BIT1, BIT2, 1000000 / 9600); // Send a string puts("\r\nRunning...\r\n"); for(; { // Do forever c = getc(); // Get a char ++c; // Increment it putc(c); // Echo it back } }
     
    The serial tx/rx code. Just add this as a new source file in your CCS project and it will be callable from your C code.

    ; serial.asm .cdecls C, LIST, "msp430g2231.h" .bss in_bit_mask, 2 ; Serial in pin .bss out_bit_mask, 2 ; Serial out pin .bss bit_dur, 2 ; Bit duration in cycles .bss half_dur, 2 ; Half bit duration in cycles ; .text ; .def serial_setup ; void serial_setup(unsigned out_mask, unsigned in_mask, unsigned bit_duration); .def putc ; void putc(unsigned c); .def puts ; void puts(char *s); .def getc ; unsigned getc(void); ; ; serial_setup ; - Setup serial I/O bitmasks and bit duration (32 minimum) mov R12, &out_bit_mask ; Save serial output bitmask mov R13, &in_bit_mask ; Save serial input bitmask bis.b R12, &P1DIR ; Setup output pin bis.b R12, &P1OUT ; bic.b R13, &P1DIR ; Setup input pin or R13, R12 ; bic.b R12, &P1SEL ; Setup peripheral select mov R14, R12 ; sub #16, R14 ; Adjust count for loop overhead rla R14 ; Multiply by 2 because NOP is two bytes mov R14, &bit_dur ; Save bit duration sub #32, R12 ; Adjust count for loop overhead mov R12, &half_dur ; Save half bit duration ret ; Return ; ; - Send a single char putc ; Char to tx in R12 ; R12, R13, R14, R15 trashed mov &out_bit_mask, R15 ; Serial output bitmask mov &bit_dur, R14 ; Bit duration or #0x0300, R12 ; Stop bit(s) jmp bit_low ; Send start bit... ; tx_bit mov R14, R13 ; Get bit duration tx_delay nop ; 4 cycle loop sub #8, R13 ; jc tx_delay ; subc R13, PC ; 0 to 3 cycle delay nop ; 3 nop ; 2 nop ; 1 ; rra R12 ; Get bit to tx, test for zero jc bit_high ; If high... bit_low bic.b R15, &P1OUT ; Send zero bit jmp tx_bit ; Next bit... bit_high bis.b R15, &P1OUT ; Send one bit jnz tx_bit ; If tx data is not zero, then there are more bits to send... ; ret ; Return when all bits sent ; ; ; - Send a NULL terminated string puts ; Tx string using putc push R11 ; mov R12, R11 ; String pointer in R12, copy to R11 putsloop ; mov.b @R11+, R12 ; Get a byte, inc pointer tst.b R12 ; Test if end of string jz putsx ; Yes, exit... call #putc ; Call putc jmp putsloop ; putsx pop R11 ; ret ; ; getc ; - Get a char mov &bit_dur, R14 ; Bit duration mov &in_bit_mask, R13 ; Input bitmask mov #0x01FF, R12 ; 9 bits - 8 data + stop ; rx_start ; Wait for start bit mov.b &P1IN, R15 ; Get serial input and R13, R15 ; Mask and test bit jc rx_start ; Wait for low... ; mov &half_dur, R13 ; Wait for 1/2 bit time ; rx_delay nop ; Bit delay sub #8, R13 ; jc rx_delay ; subc R13, PC ; 0 to 3 cycle delay nop ; 3 nop ; 2 nop ; 1 ; mov.b &P1IN, R15 ; Get serial input and &in_bit_mask, R15 ; rrc R12 ; Shift in a bit ; mov R14, R13 ; Setup bit timer jc rx_delay ; Next bit... ; rla R12 ; Move stop bit to carry swpb R12 ; Move rx byte to lower byte, start bit in msb ret ; Return with rx char and start bit in R12, stop bit in carry ; .end ;
  4. Like
    jbremnant reacted to simpleavr in TI Launchpad plays Bad Apple   
    this is my entry to 2011 Nov/Dec POTM.
     
    been a while since my last project. the "bad apple" sound and sight reminds me of days when i spend afternoons in video arcade shop/parlor/institute? wasting my time/life. hope u enjoy.
     
    this is not an original project, rather a mesh up of what i can google for my target toy instrument. original source / site are credited in the source code and mentioned.
     



     
    description
     
    . reproduction of the internet meme "bad apple" sound and sight, in a self contained device
    . ti launchpad / msp430 low end device demo
    . msp430 spi usage, bit-bang style, on two devices
    . lcd module access demonstrated
    . sd / mmc low level access demonstrated
    . polyphonic tone generation via pwm demonstrated
     

     
    schematic
     

    // MSP430F20x2/3 ----------o--------------o Audio out // ----------------- | | o // /|\| XIN|- | --- | // | | | .-. --- 10-500nF | // --|RST XOUT|- | | 1-10K | | // | | |_| |--------------- // LED <-|P1.0 | | ___ // | | | /// SD / MMC card /|\ // | pwm out P2.6|----- --------------------- | // | | | Vcc 4|--- // | as CS P1.7|-------------->|1 CS, select device | // | as MOSI P1.6|<--------------|7 MISO, data out | // | | ----------->|2 MOSI, data in | // | | | --------->|5 CLK, spi clock | // | | | | | Gnd 3|--- // | | | | --------------------- | // | | | | --- // | | | | Nokia 5110 breadout /// // | | | | ----------------------------- // | as SCLK P1.1|---|-o->|7 SCLK, spi clock | // | as MISO P1.2|---o--->|6 MOSI, data in | // | as D/C P1.3|------->|5 D/C, data or control | // | as RST P1.4|------->|4 RST, reset, low active | // | as SCE P1.5|------->|3 SCE, select , low active | /|\ // | | ----|2 Gnd | | // | | | | Vcc 1|--- // --- ----------------------------- // /// // // SD (back side) Micro-SD (back side) // __________________ __________________ // / 1 2 3 4 5 6 7 8 | 1. CS .. SEL / 1 2 3 4 5 6 7 8 | 1. NC // |9 | 2. DATAIN .. SDO | | 2. CS .. SEL // | | 3. GND .. Gnd | | 3. DATAIN .. SDO // | S O - + C I | 4. 3.3V .. Vcc | S O + C - I | 4. 3.3V .. Vcc // | | 5. CLK .. Clk | | 5. CLK .. Clk // | | 6. GND/NC .. Gnd | | 6. GND/NC // | | 7. DATAOUT .. SDI | | 7. DATAOUT .. SDI // | | 8. DAT1 | | 8. DAT1 // | | 9. DAT2 | | 9. DAT2
    the circuit is consist of three modules.
     
    . a sd / mmc module that reads content from sd / mmc card
    . a lcd module that show video on nokia 7110 or 5110 lcds
    . a polyphonic pwm output implementation, 8 channels are used in this project
    . the sd / mmc module and the lcd module shares some pins
    . both sd / mmc module and the lcd module are isolated and can be included in other projects
    . the core part of the code implements pwm sound and controls timing for content reads and displays
     
    firmware
     
    the firmware was done under ubuntu 11.10 w/ mspgcc4 + mspdebug as programmer. it is also test built under windows 7 with cygwin environment, mspgcc4 is also used and a MSP430Flasher.exe (command line programmer released by TI) is used to program the launchpad. it should build also w/ CCS as i had compiler directives to switch code portions. however i did not verify, you are on your own if you are on CCS or IAR.
     
    the are additional details / options that you can tweak, they are explained in the source code. they are not listed here as you only need them if you built the project.
     
    content generation
     
    data content for both the video and sound can be created via the supplied zcontent.pl script. input for content includes an avi video file and a midi file. this script can be used to generated alternate contents for most avi and midi files.
     
    the followings are needed for content generation
    . we need an avi file for video
    . we need a midi file for audio, prefer about 8 channel simple paino instrument
    . supporing utility / tools
    . should be done in a linuxish machine or w/ cygwin
    . unixish bin-utils, etc. we need "sort" for sure
    . perl, the internet duct tape to tie things together
    . certian perl modules, like "Image::BMP", "POSIX"
    . midicsv and whatever he requires, this is for midi extraction
    . ffmpeg to extract bitmaps from video
    . dd utility (part of linux / cygwin) to write content binary to sd / mmc card
     
    i don't want to put full details in this post as it may be too long to read. and it can be found here at http://www.simpleavr.com/msp430-projects/bad-apple. comments / suggestions are most welcomed.
     
    source tarball is available here as attachment. binaries (contents + firmware) are available at the mentioned link.
    bad_apple_src.tgz
  5. Like
    jbremnant reacted to simpleavr in [ ENDED ] Nov-Dec 2011 - 43oh Project of the Month Contest   
    this is my entry to 2011 Nov/Dec POTM.
     
    been a while since my last project. the "bad apple" sound and sight reminds me of days when i spend afternoons in video arcade shop/parlor/institute? wasting my time/life. hope u enjoy.
     
    original project thread http://43oh.com/forum/viewtopic.php?f=9&t=1961
     


     
    description
     
    . reproduction of the internet meme "bad apple" sound and sight, in a self contained device
    . ti launchpad / msp430 low end device demo
    . msp430 spi usage, bit-bang style, on two devices
    . lcd module access demonstrated
    . sd / mmc low level access demonstrated
    . polyphonic tone generation via pwm demonstrated
     
    Please post comments / suggestions in the project thread.
     
    http://43oh.com/forum/viewtopic.php?f=9&t=1961
     
    EDIT: btw, the powered speaker in the video is the "pringle's speaker" that u can get for free (almost). unfortunately the offer expired yesterday (in US), fortunately in Canada there is another month before the offer expires.
  6. Like
    jbremnant reacted to cubeberg in Bluetooth/Android RC Car & Wall Racer   
    I finally got my RC Car/Wall Racer working the other day. I still have some finishing touches to add, but I wanted to post my code here.
     
    The car starts out in "manual" mode - controlled by the android application. Switching into "Wall following" mode switches on the ultrasonic sensors - the device drives itself.
     
    I'm still ironing out some bugs - the wheels aren't getting much traction on my hardwood floors, so the car tends to spin around in circles when it gets too far away from the wall.
     


     
    Parts:


    [*:1eopntqk]Launchpad with the MSP430G2553 (mostly for the hardware UART)
    [*:1eopntqk]2x HC-SR04 Ultrasonic Sensors (~$4 USD each)
    [*:1eopntqk]$10 Bluetooth/UART module (HC06) from eBay
    [*:1eopntqk]RC Car 1:16 BMW M3 Winsome Tuner Electric RTR Remote Control RC Car
    [*:1eopntqk]5v USB Battery http://www.amazon.com/Scosche-Powered-Battery-Charger-Players/dp/B0036ORMS0/ref=sr_1_1?ie=UTF8&qid=1322601303&sr=8-1 - had this from our last Hurricane
    [*:1eopntqk]2 x Schottky diode 1N5818
    [*:1eopntqk]3x 10k resistors or 1x10k & 1x20k - used as a voltage divider http://43oh.com/forum/viewtopic.php?f=30&t=1811

     
    Power is provided by the 5v battery (had a phone charger/battery - 1500mAh) which provides power to the Launchpad and the 5v required for the HC-SR04. The Schottky dioide (serious overkill, but what I had) is used to prevent the signal from one sensor from messing up the other. It didn't like 5v coming in on the Echo line.
     
    Giving credit where credit's due - here was some of my inspiration for the project


    [*:1eopntqk] http://letsmakerobots.com/node/696?page=8 - wall racers
    [*:1eopntqk]http://www.43oh.com/forum/viewtopic.php?f=9&t=1752 - MarkoeZ's OpenPandora/Bluetooth RC Car
    [*:1eopntqk]Base code for the Android application - http://uzzors2k.4hv.org/index.php?page=blucar

     
    Schematic

    // // // // \\\ // --- // | // | // .-. // | |R2:20K // |_| // MSP430G2553 | HC-SR04 (Front) // ------------ | \\\ ------- // | XIN|- | --- | |--- // | XOUT|- R1:10k | | | | | // | | ___ | 1N5818 ---|GND | | // | P2.0|-------[___]-o-----|<------|ECHO |--- // | P2.1|-------------|-------------|TRIG | // | P2.2|-----------| | ---|VCC(5V)|--- // | | | | | | | | // | | | | \|/ | | | // | | | | | |--- // | | | | ------- // | | | | // | | | | HC-SR04 (Right) // | RXD P1.1|---- | | \\\ ------- // | TXD P1.2|-- | | | --- | |--- // | | | | | | | | | | // | | | | | | 1N5818 ---|GND | | // | | | | | -----|<-------|ECHO |--- // | | | | ----------------|TRIG | // | | | ---|VCC(5V)|--- // | | | | | | | // | | | \|/ | | | // | | | \\\ | |--- // | | | --- ------- // | | | | ---------------- // | | | ---|GND [ // | | | <------|3.3 ] // | | | |5.0 HC-06 [ // | | -------------------|TXD ] // | ---------------------|RXD [ // | |KEY ] // | ---------------- // | // | // | RX2 // | ------------- // | | | // P1.3|----|6 right | // P1.0|----|7 left | // P1.4|----|11 forward | // P1.5|----|10 backward | // | | | // ------------- // // // //
     
    main.c

    /* * Chris Berg * Started - October 2011 * Version 1 - 11/12/2011 * Project: Bluetooth controlled RC Car * Ultrasonic sensors used for Autonomous (wall following) mode * Combined project using Bluetooth and Ultrasonic sensors */ #include volatile unsigned int measure; //this is the difference in counts measured by the Ultrasonic timer volatile unsigned int up=0; //helps the timer determine which edge //determines what mode to run the car in - this will start as Manual later on volatile char runMode = 'M'; //W = Wall, M = manual - setting Manual as default /* * These are our constants that drive wall-following * At or Below RightLow = too close to wall * At or Above RightHigh = too far from wall * Will need to fiddle with these values to find something that works well with your car */ const unsigned int FrontHighThreshold = 25; //16 initially const unsigned int FrontLowThreshold = 8; const unsigned int RightLowThreshold = 10;//6 & 8 didn't work const unsigned int RightHighThreshold = 20; /* * Configuration for Trigger Pins - these drive the Ultrasonic device */ #define UltraPortOut P2OUT #define UltraPortDirection P2DIR #define UltraFrontPin BIT1 #define UltraRightPin BIT2 /* * Configuration for drive pins - these can be changed to move around pins that drive H Bridge * Will need to recode if you need to split these pins across ports */ #define DrivePortOut P1OUT #define DrivePortDirection P1DIR #define LeftPin BIT0 #define RightPin BIT3 #define ForwardPin BIT4 #define BackPin BIT5 void Left(); void Right(); void Straight(); void Forward(); void Backward(); void Stop(); main() { WDTCTL = WDTPW + WDTHOLD; // Stop WDT //***Configure clock // we need DCO@1MHZ -> SMCLCK -> TA BCSCTL1 |= CALBC1_1MHZ; // DCOCTL |= CALDCO_1MHZ; // dco at 1mhz BCSCTL2 &= ~SELS; // select dco for smclck source //BCSCTL2 |= DIVS0; // select no division BCSCTL2 &= ~(DIVS1|DIVS0); DrivePortDirection |= LeftPin|RightPin|ForwardPin|BackPin; // Set P1.0 to output direction DrivePortOut &= ~(LeftPin|RightPin|ForwardPin|BackPin);//turn all drive ports off - avoid any issues with outputs P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD UCA0CTL1 |= UCSSEL_2; // SMCLK UCA0BR0 = 104; // 1MHz 9600 UCA0BR1 = 0; // 1MHz 9600 UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1 UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt //***Timer1A? capture configuration //rising & falling edge + synchronous + P2.0 (CCI1A) + capture + capture/compare interrupt enable TA1CCTL0 |= CM_3 + CCIS_0 + CAP + CCIE; //select smclock for timer a source + make ta1ccr0 count continously up + no division TA1CTL |= TASSEL_2 + MC_2 + ID_0; //***Set up pins for Ultrasonic sensing UltraPortDirection = UltraFrontPin|UltraRightPin; UltraPortOut &= ~(UltraFrontPin|UltraRightPin);//turn off trigger pins to make sure they're in the correct state //Set P2.0 to pick up echo from the HC-SR04 //Not using a #define element for this - it's tied to the timer P2SEL = BIT0; P1OUT=0; // turn led and outputs off //set up pins for driving DrivePortDirection = LeftPin|RightPin|ForwardPin|BackPin; DrivePortOut &= ~(LeftPin|RightPin|ForwardPin|BackPin); //make sure all drive pins are off //***Enable interrupts _BIS_SR(GIE); // general interrupt enable unsigned int trigPin = UltraRightPin; unsigned int device = 0;//0 = Right, 1 = Front unsigned int RightMeasure = 0; unsigned int FrontMeasure = 0; //***Loop while (1) { if (runMode == 'W')//wall following { //store values from sensor if (device == 0) //Right { if(measure != 0) RightMeasure = measure; trigPin = UltraFrontPin; device = 1; } else //Front { if(measure != 0) FrontMeasure = measure; trigPin = UltraRightPin; device = 0; } //review values from sensor - evaluate if both values are availaable if(RightMeasure > 0 && FrontMeasure > 0) { if (FrontMeasure <= FrontLowThreshold) { Right(); Backward(); } else if (FrontMeasure <= FrontHighThreshold) { Left(); Forward(); } else if (RightMeasure <= RightLowThreshold) { Left(); Forward(); } else if (RightMeasure >= RightHighThreshold) { Right(); Forward(); } else { Straight(); Forward(); } } UltraPortOut |= trigPin; up = 1; //Next catch on Timer1A0 should be rising edge - helps with capture timer _delay_cycles(10); UltraPortOut &= ~trigPin; _delay_cycles(50); //TODO: Figure out some way to use a timer for the delay instead - use low power mode if possible //delay is approximate - must be at least 50ms per device _delay_cycles(55000); } else { //is there anything special to do in manual mode? } } } void Left() { DrivePortOut &= ~(RightPin);//turn right off if enabled DrivePortOut |= LeftPin; } void Right() { DrivePortOut &= ~(LeftPin);//turn left off if enabled DrivePortOut |= RightPin; } void Straight() { DrivePortOut &= ~(LeftPin|RightPin); } void Forward() { DrivePortOut &= ~(BackPin); DrivePortOut |= ForwardPin; } void Backward() { DrivePortOut &= ~(ForwardPin); DrivePortOut |= BackPin; } void Stop() { DrivePortOut &= ~(ForwardPin|BackPin); } //can these be switched to static within the timer? they don't need to be available outside of the timer unsigned int measure_1 = 0; unsigned int measure_2 = 0; //Timer1_A Capture //P2.0 ends up triggering this timer #pragma vector=TIMER1_A0_VECTOR __interrupt void Timer1A0(void) { if(up) //is this the rising edge? { measure_1=TA1CCR0; // take first time measure } else //is this the falling edge? { measure_2=TA1CCR0; //take second time measure measure=(measure_2-measure_1)/58; // microseconds / 58 = centimeters } up=!up; //if this was the rising edge, the next one will be a falling edge, and vice-versa TA1CTL &= ~TAIFG; //clear timer A interrupt flag, so the chip knows we handled the interrupt } /* * Incoming commands from Serial device * Currently only set to handle single character commands */ #pragma vector=USCIAB0RX_VECTOR __interrupt void USCI0RX_ISR(void) { char buffer = UCA0RXBUF; if (runMode == 'M') { if (UCA0RXBUF == 'l') Left(); else if (UCA0RXBUF == 'r') Right(); else if (UCA0RXBUF == 'm') Straight(); else if (UCA0RXBUF == 'f') Forward(); else if (UCA0RXBUF == 'b') Backward(); else if (UCA0RXBUF == 's') Stop(); else if (UCA0RXBUF == 'W') { Stop(); Straight(); runMode = 'W'; } } else { if (UCA0RXBUF == 'M') { Stop(); Straight(); runMode = 'M'; } } }
     
    **Edit** I attached some pictures of the car and a video and my first try at the schematic
    blu_car.zip


  7. Like
    jbremnant reacted to gwdeveloper in SimpliciTI RF wireless for the Launchpad   
    With the group buy for CC2500 radios happening soon, I though everyone might want easy access to software and get up and running with wireless super fast.
     
    The conversion was pretty simple to get SimpliciTI running on the MSP430G2553. It uses UCBO on P1.4, 1.5, 1.6, 1.7. P2.6 and 2.7 were used for GDO0 and GDO2 but these can be changed if needed. The led on P1.0 is used for a connection indicator. Of course, the jumper on 1.6 must be removed.
     
    Unzip the attached file to your SimpliciTI\bsp\boards folders.
    eg:

    C:\Texas Instruments\SimpliciTI-CCS-1.1.1\Components\bsp\boards\LP_G2553
     
    It will work with MDFLY's CC2500 radio http://www.mdfly.com/index.php?main_page=product_info&cPath=8_52&products_id=880&zenid=hqoogv1qn7ler204vb7vjkior3, the group buy CC2500 radio http://www.43oh.com/forum/viewtopic.php?f=22&t=1873, and TI's RF2500T http://www.ti.com/tool/ez430-rf2500t.
     
    I'm working on a demo project to post here as well as a short tutorial on getting a basic SimpliciTI project started in CCS.
     
    On a side note, this will not work in CCSv5.1 yet. The new compiler creates numerous Syntax errors. It compiles and works just fine with CCSv4.
    EDIT: After changing the optimization level and ignoring the syntax errors, it compiles and runs just fine from CCS v5.1!
     
    LP_G2553.zip
  8. Like
    jbremnant reacted to MattTheGeek in 70 Pack Jumper Wires - $3.50 shipped   
    Dealextreme has a 70 pack of jumper wire for $3.50 with shipping...
  9. Like
    jbremnant reacted to oPossum in TV-B-Gone using Launchpad   
    This is a reimplementation of adafruit's TV-B-Gone kit. It has been written from scratch to be more efficient and more precise than the AVR version. Assembly code is used for the critical timing, everything else is in C. Clock is 1 MHz (vs. 8 MHz for AVR).
     
    This code is small enough to fit in a G2231 (2K flash, 128 RAM) that comes with the launchpad. There are only 39 codes due to limited flash capacity. Obviously larger parts like the G2553 could be used to fit all codes and add additional features.
     
    main code (excerpt)

    void send_code(TIRCODE * const ic) { const uint8_t *code_byte; unsigned code_bitmask; static uint8_t idx[100]; // static so it is not on the stack unsigned n, j; uint8_t *p; // Make sure there is room for all indicies if(ic->pair_count > sizeof(idx)) return; // Convert variable bit count to uint8_t n = ic->pair_count; code_byte = ic->bitstream; code_bitmask = 0x80; p = idx; // Iterate indicies while(n--) { *p = 0; j = ic->bits_per_index; // Iterate bits while(j--) { *p <<= 1; if(*code_byte & code_bitmask) *p |= 4; code_bitmask >>= 1; if(!code_bitmask) ++code_byte, code_bitmask = 0x80; } ++p; } if(ic->carrier_period) { TACCR0 = ic->carrier_period; TACCR1 = ic->carrier_period >> 1; tx_ir_carrier(ic->pair_count, idx, ic->durations); } else { tx_ir_pulse(ic->pair_count, idx, ic->durations); } } void main(void) { unsigned n; WDTCTL = WDTPW + WDTHOLD; // Disable watchdog // DCOCTL = 0; // Use 1 MHz calibration BCSCTL1 = CALBC1_1MHZ; // DCOCTL = CALDCO_1MHZ; // // // See chart for I/O assignment P1OUT = 0x0E; // Txd, Rxd, S2 high P1REN = 0x0C; // Rxd / S2 pullup enabled P1DIR = 0xF3; // Rxd / S2 in, all others out P1SEL = 0x50; // Timer A T0.1 / SMCLK TACTL = TASSEL_2 | MC_1; // Clock = SMCLK, Mode = UP // do { // /// todo: Sleep while waiting for S2 press // while(P1IN & 8); // Wait for S2 press // for(n = 0; n < code_count; ++n) { // P1OUT |= 0x01; // LED on delay10us(450 * 100u); // Wait 450 ms P1OUT &= ~0x01; // LED off send_code(CodeList[n]); // Send code } // } while(1); // }
     
    ir transmission code (excerpt)

    tx_ir_carrier ; void tx_ir_carrier(unsigned n, uint8_t *i, TDUR *d) ; R12 Duration pair count ; R13 Pointer to duration indicies ; R14 Pointer to durations ; mov #OUTMOD_7, R10 ; IR Carrier On (reset/set output mode) mov #OUTMOD_5, R11 ; IR Carrier Off (reset output mode) ; ir_tx_loop mov.b @R13, R15 ; Get duration index add R14, R15 ; Add duration pointer mov @R15, R15 ; Get duration ; mov R10, &TACCTL1 ; Turn on IR call #delay ; Wait for on duration ; nop2 ; Precise timing ; mov.b @R13+, R15 ; Get duration index and increment pointer incd R15 ; Adjust for off duration add R14, R15 ; Add duration pointer mov @R15, R15 ; Get duration ; mov R11, &TACCTL1 ; Turn off IR call #delay ; Wait for off duration ; dec R12 ; Decrement pair count jne ir_tx_loop ; Do next duration pair... ; ret ; Return ; ; ; ; - Delay in units of 10 cycles (10 us at 1 MHz) delay cmp #4, R15 ; Compare to minimum jlo dlyret ; Below minimum, return... sub #2, R15 ; Adjust loop count for overhead jmp eloop ; Make the first iteration shorter ; delay10us mov R12, R15 ; C callable ; dloop nop2 ; 7 cycles of nop nop2 ; nop2 ; eloop nop ; dec R15 ; Decrement loop count - 1 cycle jne dloop ; Loop if not zero - 2 cycles ; dlyret ret ;
     
    Complete code attached
    tvbg_lp.zip
  10. Like
    jbremnant reacted to oPossum in Consumer IR (CIR) capture   
    There is a cool trick that can be used with LEDs (IR and visible) when repetition rate is low ( a few Hz at most).
     
    Charge the LED with reverse bias (diodes have a small capacitance) and then measure the time it takes for the charge to drop below the logic threshold of the micro.
     
    The small photocurrent generated by the LED discharges the small charge stored in it. The shorter the discharge time, the brighter the light. Elegant and effective.
  11. Like
    jbremnant got a reaction from RobG in ANT+ wireless using Launchpad and Android   
    Geez.. I have been really missing in action this whole year. Been busy with work, kids, studying, etc.. (excuses, excuses)
    Anyhows, just wanted to share a project I worked on for few weeks over the summer on my spare time.
    Finally had the chance to do a writeup during this thanksgiving break.
     
    This project started as a proof of concept for a mobile application idea my friend and I had.
    Something else came up, so we didn't see this idea to fruition.
    However, I thought the technologies we used was interesting and something I haven't yet seen on the Launchpad.
     
    So here goes.. you can find lots of detail on my blog post here.
     
    http://jbremnant.wordpress.com/2011/11/27/ant-between-msp430-and-android/
     
    And here's the youtube demo video:
     


     
    Enjoy!
  12. Like
    jbremnant got a reaction from bluehash in ANT+ wireless using Launchpad and Android   
    Geez.. I have been really missing in action this whole year. Been busy with work, kids, studying, etc.. (excuses, excuses)
    Anyhows, just wanted to share a project I worked on for few weeks over the summer on my spare time.
    Finally had the chance to do a writeup during this thanksgiving break.
     
    This project started as a proof of concept for a mobile application idea my friend and I had.
    Something else came up, so we didn't see this idea to fruition.
    However, I thought the technologies we used was interesting and something I haven't yet seen on the Launchpad.
     
    So here goes.. you can find lots of detail on my blog post here.
     
    http://jbremnant.wordpress.com/2011/11/27/ant-between-msp430-and-android/
     
    And here's the youtube demo video:
     


     
    Enjoy!
  13. Like
    jbremnant reacted to oPossum in Game of Life with G2211 and Nokia 5110 LCD   
    Features...
    Software SPI
    Random number generation using DCO and VLO
    Reduced memory usage by buffering only 2 columns of next grid
     

    #include "msp430g2211.h" // --- I/O Map --- // P1.0 DC / RES // P1.1 TxD (not used) // P1.2 RxD (not used) // P1.3 Switch // P1.4 SCE // P1.5 SCLK // P1.6 Backlight // P1.7 SDIN static const unsigned TXD = BIT1; static const unsigned RXD = BIT2; static const unsigned SWITCH = BIT3; static const unsigned LCD_DC = BIT0; static const unsigned LCD_CE = BIT4; static const unsigned LCD_CLK = BIT5; static const unsigned LCD_BACKLIGHT = BIT6; static const unsigned LCD_DATA = BIT7; #define GRID_WIDTH 28 #define GRID_HEIGHT 24 // Must be multiple of 8 static unsigned char cells[GRID_WIDTH * (GRID_HEIGHT / 8)]; static unsigned char next[2 * (GRID_HEIGHT / 8)]; typedef enum { lcd_command = 0, // Array of one or more commands lcd_data = 1, // Array of one or more bytes of data lcd_data_repeat = 2 // One byte of data repeated } lcd_cmd_type; // Send commands or data to LCD using software SPI void lcd_send(const unsigned char *cmd, unsigned len, lcd_cmd_type type) { register unsigned mask; // CE & DC high upon entry and exit do { // Send bits 7 to 1 mask = 0x0080; // msb first do { // if(*cmd & mask) { // Test bit P1OUT |= LCD_DATA; // 1 bit, data high P1OUT &= ~(LCD_CE | LCD_CLK); // Clock & CE low } else { // P1OUT &= ~(LCD_CE | LCD_CLK | LCD_DATA); // 0 bit, data, clock & CE low } // P1OUT |= LCD_CLK; // Clock high mask >>= 1; // Next bit } while(!(mask & 1)); // Check if bit 0, loop if not if(!type) P1OUT &= ~LCD_DC; // DC low if command // Send bit 0 if(*cmd & mask) { // Test bit P1OUT |= LCD_DATA; // 1 bit, data high P1OUT &= ~LCD_CLK; // Clock low } else { // P1OUT &= ~(LCD_CLK | LCD_DATA); // 0 bit, data & clock low } // P1OUT |= LCD_CLK; // Clock high P1OUT |= LCD_DC; // DC high if(!(type & 2)) ++cmd; // Inc buf pointer if not repeat } while(--len); // Decrement byte count, next byte if not zero... P1OUT |= LCD_CE; // CE high } static unsigned get_cell(int x, int y) { if(x < 0 || x >= GRID_WIDTH || y < 0 || y >= GRID_HEIGHT ) return 0; return (cells[(x * (GRID_HEIGHT / 8)) + (y >> 3)] >> (y & 7)) & 1; } static void set_cell(int x, int y, unsigned { register unsigned char *p = &cells[(x * (GRID_HEIGHT / 8)) + (y >> 3)]; register const unsigned char m = (1 << (y & 7)); if( *p |= m; else *p &= ~m; } static unsigned get_next(int x, int y) { return (next[((x & 1) ? 0 : (GRID_HEIGHT / 8)) + (y >> 3)] >> (y & 7)) & 1; } static void set_next(int x, int y, unsigned { register unsigned char *p = &next[((x & 1) ? (GRID_HEIGHT / 8) : 0) + (y >> 3)]; register const unsigned char m = (1 << (y & 7)); if( *p |= m; else *p &= ~m; } void copy_column(int x) { //int y; //for(y = 0; y < GRID_HEIGHT; ++y) set_cell(x - 1, y, get_next(x, y)); memcpy(cells + ((x - 1) * (GRID_HEIGHT / 8)), next + ((x & 1) ? 0 : (GRID_HEIGHT / 8)), 3); } static void update_lcd(void) { static const unsigned char pm[16] = { 0x00, // 0000 -> 00000000 0x03, // 0001 -> 00000011 0x0C, // 0010 -> 00001100 0x0F, // 0011 -> 00001111 0x30, // 0100 -> 00110000 0x33, // 0101 -> 00110011 0x3C, // 0110 -> 00111100 0x3F, // 0111 -> 00111111 0xC0, // 1000 -> 11000000 0xC3, // 1001 -> 11000011 0xCC, // 1010 -> 11001100 0xCF, // 1011 -> 11001111 0xF0, // 1100 -> 11110000 0xF3, // 1101 -> 11110011 0xFC, // 1110 -> 11111100 0xFF // 1111 -> 11111111 }; unsigned char c[2]; register unsigned x; // Note: Grid height of 24 assumed c[0] = 0x40; // y = 0 for(x = 0; x < GRID_WIDTH * 3; ) { // Each cell is 2 pixels high next[0] = pm[cells[x] & 0x0F]; next[1] = pm[cells[x] >> 4]; ++x; next[2] = pm[cells[x] & 0x0F]; next[3] = pm[cells[x] >> 4]; ++x; next[4] = pm[cells[x] & 0x0F]; next[5] = pm[cells[x] >> 4]; x -= 2; // Each cell is 3 pixels wide c[1] = 0x80 | x++; lcd_send(c, sizeof(c), lcd_command); lcd_send(next, 6, lcd_data); c[1] = 0x80 | x++; lcd_send(c, sizeof(c), lcd_command); lcd_send(next, 6, lcd_data); c[1] = 0x80 | x++; lcd_send(c, sizeof(c), lcd_command); lcd_send(next, 6, lcd_data); } } void main(void) { register int x, y, n; static const unsigned char init[] = { 0x20 + 0x01, // Function set - extended instructions enabled 0x80 + 0x40, // Set vop (contrast) 0 - 127 0x04 + 0x02, // Temperature control 0x10 + 0x03, // Set bias system 0x20 + 0x02, // Function set - chip active, vertical addressing, basic instructions 0x08 + 0x04 // Display control - normal mode }; static const unsigned char clear[] = { 0x40, 0x80, 0 }; WDTCTL = WDTPW | WDTHOLD; // Disable watchdog DCOCTL = 0; // Use 1 MHz DCO calibration BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; // Setup I/O P1REN = RXD | SWITCH; P1DIR = LCD_DC | LCD_CE | LCD_CLK | LCD_BACKLIGHT | LCD_DATA; P1OUT = RXD | SWITCH | LCD_CE | LCD_BACKLIGHT; TACTL = TASSEL_2 + MC_1 + ID_0; // setup timer, up mode, SMCLK/1 TACCR0 = 1000 - 1; // 1 kHz BCSCTL3 = LFXT1S_2; // Use VLOCLK as ACLK // Watchdog: Interval timer, ACLK, /64 WDTCTL = 0x5A00 | WDTTMSEL | WDTSSEL | WDTIS1 | WDTIS0; __delay_cycles(250000); // Reset LCD P1OUT |= LCD_DC; lcd_send(init, sizeof(init), lcd_command); // Initialize LCD for(; { // Clear LCD lcd_send(clear, 2, lcd_command); lcd_send(clear + 2, 504, lcd_data_repeat); // Create inital grid for(n = 0; n < GRID_WIDTH * (GRID_HEIGHT / 8); ++n) { x = 8; do { while(!(IFG1 & WDTIFG)); IFG1 &= ~WDTIFG; cells[n] <<= 1; cells[n] ^= (TAR >> 1); } while(--x); } // Toggle backlight if button still down if((P1IN & BIT3) == 0) P1OUT ^= BIT6; // Play game for(; { // Update LCD update_lcd(); // Generation interval n = 200; do { TACCTL0 &= ~CCIFG; while(!(TACCTL0 & CCIFG)); } while(--n && (P1IN & SWITCH)); // Reset when S2 pushed if(!(P1IN & SWITCH)) break; // Play the field for(x = 0; x < GRID_WIDTH; ++x) { for(y = 0; y < GRID_HEIGHT; ++y) { // Tally neighbors n = get_cell(x - 1, y - 1) + get_cell(x, y - 1) + get_cell(x + 1, y - 1) + get_cell(x - 1, y ) + /* me */ get_cell(x + 1, y ) + get_cell(x - 1, y + 1) + get_cell(x, y + 1) + get_cell(x + 1, y + 1); // Live or Die set_next(x, y, get_cell(x, y) ? (n == 2 || n == 3) : (n == 3)); } // Update field if(x) copy_column(x); } copy_column(x); } } }
     


  14. Like
    jbremnant got a reaction from oPossum in ANT+ wireless using Launchpad and Android   
    Geez.. I have been really missing in action this whole year. Been busy with work, kids, studying, etc.. (excuses, excuses)
    Anyhows, just wanted to share a project I worked on for few weeks over the summer on my spare time.
    Finally had the chance to do a writeup during this thanksgiving break.
     
    This project started as a proof of concept for a mobile application idea my friend and I had.
    Something else came up, so we didn't see this idea to fruition.
    However, I thought the technologies we used was interesting and something I haven't yet seen on the Launchpad.
     
    So here goes.. you can find lots of detail on my blog post here.
     
    http://jbremnant.wordpress.com/2011/11/27/ant-between-msp430-and-android/
     
    And here's the youtube demo video:
     


     
    Enjoy!
  15. Like
    jbremnant reacted to PentiumPC in Ebay Bluetooth Dongle write up. HC-06 /HC05   
    All these are China made and don't know who is the main OEM.
    From the information gathered from the Net,(this is what I do when I cannot sleep ) and most of them info in Chinese, most common models are HC03/HC05, HC04/HC06.
    HC03 and HC04 is the industrial version and the both works the same, I think it is a signal or a regulatory thing.
     
    Hardware wise they are physically the same, just different firmware.
     
    Information on the EBay sites are usually a mix of both model, but I think most of them are HC-06.
     
    Differences.
    HC-06 pinout. Key on 26, LED pin24.
    HC-06 cannot set Master mode with AT commands.
     
    HC-05 pinout. Key on 11, LED on 31 and 32.
    Expanded AT command set.
     
    more info and footprint at http://iteadstudio.com/produce/more-powerful-serial-port-bluetooth-module-masterslave/.
     
    Regards,
    Terence
     
  16. Like
    jbremnant reacted to TopHatHacker in [REQ]Idea - Nunchuck/Video Game Shield   
    NatureTM has done some video work with C
    http://naturetm.com/?p=147
     
    and here's a blogpost about using the nunchuck and a nokia lcd
    http://jbremnant.wordpress.com/2011/01/03/nokia-lcd-wiinunchuck-with-msp430/
     
    when NatureTM did the tv code the g2553 wasn't out yet, so theres some more room to play with. I branched off his code and got one paddle working and a ball bouncing (brick attack!) and i think he was working on a similar thing, though i don't think any of that is posted on his site. i'll try and dig up the code i did for brick attack (on my other laptop)
     
    if you can get spi working along with the tv out on the same chip, you can use a second chip for the game workings.. easily dooable with two 2553 chips i think
  17. Like
    jbremnant reacted to gordon in MSP430 USB FET (JTAG + SBW)   
    I just got mine today. Works well. Use mspdebug from Git; latest release (0.17) will not cut it.
  18. Like
    jbremnant reacted to pabigot in MSP430 USB FET (JTAG + SBW)   
    Whatever said to use -d for the MSP-FET430UIF is out of date. Use -U if you need to select a specific FET, otherwise all you should need is -j (with the current git release, at least, and only if your target uses JTAG instead of SBW).
     

    linux[444]$ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 002: ID 0409:005a NEC Corp. HighSpeed Hub Bus 002 Device 012: ID 0451:f432 Texas Instruments, Inc. eZ430 Development Tool Bus 001 Device 012: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC Bus 005 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC Bus 002 Device 014: ID 0451:f430 Texas Instruments, Inc. MSP-FET430UIF JTAG Tool linux[445]$ mspdebug -j -U 2:14 uif MSPDebug version 0.17 - debugging tool for MSP430 MCUs Copyright (C) 2009-2011 Daniel Beer This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ti3410: warning: can't detach kernel driver: No such file or directory TI3410 device is in boot config, setting active Initializing FET... FET protocol version is 20405003 Configured for JTAG (2) Set Vcc: 3000 mV Device ID: 0x0580 Device: MSP430F5438A Code memory starts at 0x5c00 Number of breakpoints: 8 Available commands: = delbreak gdb load opt reset simio alias dis help locka prog run step break erase hexout md read set sym cgraph exit isearch mw regs setbreak Available options: color gdb_loop iradix fet_block_size gdbc_xfer_size quiet Type "help " for more information. Press Ctrl+D to quit. (mspdebug)
  19. Like
    jbremnant got a reaction from cubeberg in MSP430 and Nokia 6100 LCD   
    Here's a preview of my msp430 project.
     


     
    Just started mucking around with sparkfun lcd breakout board.
    Managed to take the code they had for arduino and made it work with msp430g2211 on mini breadboard.
     

     
    Next steps:
     
    - use simpleavr's i2c library to interface against wii nunchuck
    - make a simplegame that uses wii nunchuck for user input and lcd display for graphics
    - thinking about making the system modular by breaking functionality into 2 msp430g2211 chips:
    one handling lcd graphics and the other on game logic and wii nunchuck.
    the chips would communicate over SPI.
    - replace sparkfun's lcd breakout with low cost soloution: custom made pcb, and a few components.
     
    As time permits, I'll post the code, etc...
    I'll attempt to fit everything on a mini breadboard. (inspiration from simpleavr's projects)
    Let's see how this goes.
     
    EDIT: dang, you can hear my baby crying in the background in the video. what a nice dad. 8-)
  20. Like
    jbremnant got a reaction from mcookieman in MSP430 and Nokia 6100 LCD   
    Here's a preview of my msp430 project.
     


     
    Just started mucking around with sparkfun lcd breakout board.
    Managed to take the code they had for arduino and made it work with msp430g2211 on mini breadboard.
     

     
    Next steps:
     
    - use simpleavr's i2c library to interface against wii nunchuck
    - make a simplegame that uses wii nunchuck for user input and lcd display for graphics
    - thinking about making the system modular by breaking functionality into 2 msp430g2211 chips:
    one handling lcd graphics and the other on game logic and wii nunchuck.
    the chips would communicate over SPI.
    - replace sparkfun's lcd breakout with low cost soloution: custom made pcb, and a few components.
     
    As time permits, I'll post the code, etc...
    I'll attempt to fit everything on a mini breadboard. (inspiration from simpleavr's projects)
    Let's see how this goes.
     
    EDIT: dang, you can hear my baby crying in the background in the video. what a nice dad. 8-)
  21. Like
    jbremnant reacted to ender in Best information for those new to the MSP430?   
    To me ..
     
    These two have provided the best information so far:
     
    1. http://mspsci.blogspot.com/2010/07/tuto ... arted.html
    2. http://glitovsky.com/blog/?p=85
  22. Like
    jbremnant reacted to zeke in MSP430 USB FET (JTAG + SBW)   
    I have it. It's the only thing that will work on the older devices that only have JTAG.
     
    I think it's worth it.
  23. Like
    jbremnant got a reaction from MystBoy in MSP430 and Nokia 6100 LCD   
    Finally had the chance to do a write up on work done so far:
     
    http://jbremnant.wordpress.com/2011/01/03/nokia-lcd-wiinunchuck-with-msp430
     
    The code can be downloaded here:
    http://www.remnantone.com/pkgs/msp430/noklcd.zip
     
    I am still trying to squeeze every bit (literally!) of flash space out of the chip, so I can fit a simple game in there.
    Let me know if you guys have good suggestions/feedback.
  24. Like
    jbremnant reacted to bluehash in [ ENDED ] April 2011 - 43oh Project of the Month Contest   
    Entry to the March 2011 contest is open. This is an opportunity for you to show off what you can do with the MSP430. Projects based on February being the Valentine month are appreciated, but you are free to submit anything you create with the MSP430.
    The 43oh community forum has been growing both with good discussions and members. The project section of the forum as well as the Blog has a lot of project ideas you can base your submission on. Feel free to ask questions about the project on the forum.
     
    Previous Contests
    November 2010 [Announce] [ Winner]
    December 2010 [Announce / Winner]
     
    Last Date for entries:
    21st April, 2011.
     
    Prizes:
    Winner : Texas Instruments has graciously donated an Ez430-Rf200 Wireless Development Tool.[Estore] [Info] [Wiki]
    Runner up :[J]bremnant has been kind enough to donate a pristine unopened Launchpad kit. Although you may already have one, having another Launchpad can be quite handy like a project you may not want to take apart or recreate[J]oby's SPI Ninja. Thanks [J]bremnant for sponsoring this month's contest giveaway.
     
    To submit your entry, make an entry into this thread with the following:
    1 - A small description of your project.
    2 - A picture or video of your setup
    3 - Code.
    4 - Schematic(rough/hand drawn is fine as long its legible)
     
    About judging the winner :
    A week before the contest ends, a poll will be created with all the project entries. Only members of the forum will be allowed to vote.
    The contest will roll over to the next month if there are fewer than 5 projects(four or less).
     
    A few simple rules to follow:
    - You must be a member of the 43oh forum at least a week before your submission.
    - One entry from each member will be permitted.
    - Your project can be anything based around the MSP430. You may interface the MSP430 to another controller.
    - You may reuse code from anywhere as long as you give credit to the original author.
    - You must submit code and schematics of your project with a proper description.
    - You can submit your MSP430 project, if it was created before the annoucement of the contest.
    - You must have at least 5 posts in the forums, for your entry to be considered when the voting begins.
     
     
    [1st May, 2011]
    Voting closed.
    Congratulations to NatureTM on his "Polyphonic MIDI Dynth" project. He wins this April 2011 Project of the Month Contest.
    Runner up is the "Serial to 7 segment LED display driver v1" by Rob.
     
    A big thank you to PhirePhly, GeoNomad and SugarAddict for participating. Wish you all luck in the upcoming contests
  25. Like
    jbremnant reacted to simpleavr in Optimizing for flash space   
    @jbremnant
    i always does that when i see code, and it's easy under linux, get the source package and try compiler switches via a script, all in command line, no ide.
    i didn't spend time to analyze your code, just looking at high-level flow. the CFLAG is just something i used for tight projects and so i gave it a try. it reduces the executable from 1938 to 1520. hope it can also help in your current project w/o breaking anything.
×
×
  • Create New...