Jump to content

abecedarian

Members
  • Content Count

    1,711
  • Joined

  • Last visited

  • Days Won

    23

Reputation Activity

  1. Like
    abecedarian reacted to spirilis in My time with FreeRTOS on the TM4C   
    Picking this forum for a blog thread on learning the "ropes" of FreeRTOS.  TM4C123 launchpad is my learning board for now, using CCSv6 under Windows, latest FreeRTOS and the GNU GCC compiler that ships with CCS (Linaro).
     
    From a fresh download of FreeRTOS, I finally have a working example (not relying on "importing" a CCS example and modifying it - you learn more this way).  Here's main.cpp with all the init + task code:
    /* * main.c */ #include <FreeRTOS.h> #include <task.h> #include <timers.h> #include <stdint.h> #include <stdbool.h> #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "inc/hw_ints.h" #include "inc/hw_gpio.h" #include "driverlib/gpio.h" #include "driverlib/interrupt.h" #include "driverlib/pin_map.h" #include "driverlib/rom.h" #include "driverlib/rom_map.h" #include "driverlib/sysctl.h" void UsrSW1_Monitor(void *); int main(void) { MAP_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN); MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); while (!MAP_SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF)) ; MAP_GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_0 | GPIO_PIN_4); MAP_GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_0 | GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); MAP_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); MAP_GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD); if (pdTRUE != xTaskCreate(UsrSW1_Monitor, "Pushbutton_Monitor", 48, NULL, 3, NULL)) { // Crash due to insufficient heap memory? MAP_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_PIN_1 | GPIO_PIN_2); // Illuminate R+B for purple while(1) ; } //xTaskCreate(NullTask, "Nothing", 48, (void *)1, 4, NULL); vTaskStartScheduler(); // If FreeRTOS ever exits, illuminate orange (R+G) MAP_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_PIN_1 | GPIO_PIN_3); while(1) ; return 0; } void BlinkyTask_LEDBlink(void *pvParams) { unsigned int whichLed = (unsigned int)pvParams; uint8_t whichBit = 1 << whichLed; uint8_t currentValue = 0; while (1) { currentValue ^= whichBit; MAP_GPIOPinWrite(GPIO_PORTF_BASE, whichBit, currentValue); vTaskDelay(250 / portTICK_RATE_MS); } } void UsrSW1_Monitor(void *pvParams) { uint16_t inputShifter = 0; bool inputLatched = false; const uint32_t USR_SW1 = GPIO_PIN_4; // PF4 uint8_t whichLed = 1; xTaskHandle blinkerTask; // Start blinker task with current whichLed value. if (pdTRUE != xTaskCreate(BlinkyTask_LEDBlink, "Blinker", 32, (void*)whichLed, 4, &blinkerTask)) { // Crash due to insufficient heap memory? Halt scheduler and hold all RGB LEDs to white. vTaskSuspendAll(); MAP_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); while(1) ; } while (1) { // Poll USR_SW1 GPIO - active LOW if (MAP_GPIOPinRead(GPIO_PORTF_BASE, USR_SW1)) { inputShifter <<= 1; } else { inputShifter <<= 1; inputShifter |= 1; } // Test if button has been pressed or released if ( !inputLatched && (inputShifter & 0xF0) == 0xF0 ) { // Rotate LED whichLed++; if (whichLed > 3) { whichLed = 1; } // Kill blinker task vTaskDelete(blinkerTask); // Switch off all LEDs MAP_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, 0); // Start new blinker task with new whichLed value. if (pdTRUE != xTaskCreate(BlinkyTask_LEDBlink, "Blinker", 32, (void*)whichLed, 4, &blinkerTask)) { // Crash due to insufficient heap memory? Halt scheduler and hold all RGB LEDs to white. vTaskSuspendAll(); MAP_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); while(1) ; } // Latch button press so we don't re-trigger until button has been released inputLatched = true; } if ( inputLatched && (inputShifter & 0xFF) == 0 ) { inputLatched = false; // un-latch USR_SW1 } // Wait 10ms before checking again vTaskDelay(10 / portTICK_RATE_MS); } } Result: Red LED blinks, left pushbutton toggles to blue & green and back to red.  Pressing & holding the pushbutton switches the LED but only once, as the pushbutton task "latches" it.
     
    The technique of debouncing a pushbutton using periodic polling + bit shifts and logic tests was something I saw on hackaday recently - http://hackaday.com/2015/12/10/embed-with-elliot-debounce-your-noisy-buttons-part-ii/
    I didn't use the same test values but it doesn't matter...
     
    Using polling instead of interrupt for the pushbutton is definitely one of those things that is easy & practical only if using an RTOS.
  2. Like
    abecedarian reacted to Fmilburn in AD9850 Frequency Generator BoosterPack   
    This project uses an inexpensive AD9850 board obtained off eBay to create a frequency generator boosterpack that is especially useful with the MSP-EXP430FR6989 LaunchPad. It features an encoder with a pushbutton to adjust frequency. In the photo below it is generating a 7000 Hz signal which agrees nicely with the oscilloscope.

    The schematic is simple:

    The encoder is a Bourns 652-PEC12R-4225F-S24. I tried various arrangements and value of resistors and capacitors for debouncing the encoder and switch. In the end I just added some capacitance as shown in the schematic. On the oscilloscope it looked pretty clean so I called it good enough. All the parts are through hole as seen in the photograph below:

    The fit is tight but fortunately all the materials were on hand when the PCB was being designed so I printed out a paper PCB outline and checked it before ordering.

    If I were making it again I would increase the size of the board a bit to allow larger/additional labels. Otherwise, everything works and it turned out fine. This is a picture of the unpopulated boards I received from Osh Park.

    While it should work with most LaunchPads I had the FR6989 in mind as I developed it - in particular I wanted to use the integrated LCD display. Accordingly, I was careful not to obscure the display or the reset button. The software was developed with Energia V17. Here is a photo of what it looks like in operation:

    The output from the AD9850 comes out the jumpers attached to the 90 degree male header pins marked with arrow A. The dark jumper wire is GND and the sine wave is coming out of the lighter wire on the right. Adjustments are made with the encoder knob marked by arrow B. Turning it adjusts the frequency up and down and the current value is output on the LCD as shown by the arrow C. The range is from zero to 32 MHz. Since fine adjustment is desired, as well as rapid adjustment, the push button on the encoder is used to change the coarseness of the adjustment. The magnitude is indicated by the battery indicator on the LCD as shown by arrow D. For example, in the photo three battery bars are showing which indicates that each adjustment/click of the encoder will change the output by 1000 Hz. When the encoder is pushed down it will cycle through in this case to 100 Hz adjustment (with two bars showing), 10 Hz (one bar), 1 Hz (no bars), and then up to 1 MHz (six bars), and so on. In practice, it adjusts pretty quickly with good resolution.
     
    One enhancement might be to have the software scroll the output value since as is it won't display full resolution due to the 6 digit screen. The Energia sketch can be found here.
     
    I have an extra PCB so if you are active in the 43oh forums and would like it then send me a personal message and I will mail it gratis.
  3. Like
    abecedarian got a reaction from Marija in MSP430 project for motor control using multiple ISR   
    @@Marija
     
    With an analog input, you likely wouldn't want to set a pull-up or pull-down state. However, with digital inputs, and without setting the input as INPUT_PULLUP or INPUT_PULLDOWN in the sketch or using an external pull-up or pull-down resistor, the input pin will float, as in won't have a default state, and this can cause issues like false or missed triggers.
     
    So, if the switch connects to ground when pushed, either set internal pull-up in the sketch or provide an external resistor (10K should work) pull-up to VCC. If the switch connects to VCC when pushed, either set internal pull-down in the sketch or provide an external weak pull-down resistor to ground.
  4. Like
    abecedarian got a reaction from Derekspeegle in ADC with MSP430   
    @@Derekspeegle
     
    Maybe this will do what you want:

    byte PWM1_PIN = P1_5; byte PWM2_PIN = P1_4; byte PWM3_PIN = P1_3; byte ROUT = P1_7; byte GOUT = P1_6; byte BOUT = P8_3; void setup() { analogFrequency(10000); // moved from loop() to setup() pinMode(PWM1_PIN, INPUT); pinMode(PWM2_PIN, INPUT); pinMode(PWM3_PIN, INPUT); pinMode(ROUT, OUTPUT); pinMode(GOUT, OUTPUT); pinMode(BOUT, OUTPUT); } void loop() { analogWrite(ROUT, map(pulseIn(PWM1_PIN, HIGH), 0, 1636, 0, 255)); analogWrite(GOUT, map(pulseIn(PWM2_PIN, HIGH), 0, 1636, 0, 255)); analogWrite(BOUT, map(pulseIn(PWM3_PIN, HIGH), 0, 1636, 0, 255)); }If not, since sometimes some functions have issues calling other functions from within themselves, maybe:
    byte PWM1_PIN = P1_5; byte PWM2_PIN = P1_4; byte PWM3_PIN = P1_3; byte ROUT = P1_7; byte GOUT = P1_6; byte BOUT = P8_3; int pwm1_value; int pwm1; int pwm2_value; int pwm2; int pwm3_value; int pwm3; void setup() { analogFrequency(10000); // moved from loop() to setup() pinMode(PWM1_PIN, INPUT); pinMode(PWM2_PIN, INPUT); pinMode(PWM3_PIN, INPUT); pinMode(ROUT, OUTPUT); pinMode(GOUT, OUTPUT); pinMode(BOUT, OUTPUT); } void loop() { pwm1_value = pulseIn(PWM1_PIN, HIGH); pwm1 = map(pwm1_value, 0, 1636, 0, 255); pwm3_value = pulseIn(PWM2_PIN, HIGH); pwm2 = map(pwm2_value, 0, 1636, 0, 255); pwm3_value = pulseIn(PWM3_PIN, HIGH); pwm3 = map(pwm3_value, 0, 1636, 0, 255); analogWrite(ROUT, pwm1); analogWrite(GOUT, pwm2); analogWrite(BOUT, pwm3); }Note that I changed some of your variables' names and their "case" so that those that don't change are all CAPS and those that do are lower case.
  5. Like
    abecedarian got a reaction from energia in ADC with MSP430   
    @@Derekspeegle
     
    Maybe this will do what you want:

    byte PWM1_PIN = P1_5; byte PWM2_PIN = P1_4; byte PWM3_PIN = P1_3; byte ROUT = P1_7; byte GOUT = P1_6; byte BOUT = P8_3; void setup() { analogFrequency(10000); // moved from loop() to setup() pinMode(PWM1_PIN, INPUT); pinMode(PWM2_PIN, INPUT); pinMode(PWM3_PIN, INPUT); pinMode(ROUT, OUTPUT); pinMode(GOUT, OUTPUT); pinMode(BOUT, OUTPUT); } void loop() { analogWrite(ROUT, map(pulseIn(PWM1_PIN, HIGH), 0, 1636, 0, 255)); analogWrite(GOUT, map(pulseIn(PWM2_PIN, HIGH), 0, 1636, 0, 255)); analogWrite(BOUT, map(pulseIn(PWM3_PIN, HIGH), 0, 1636, 0, 255)); }If not, since sometimes some functions have issues calling other functions from within themselves, maybe:
    byte PWM1_PIN = P1_5; byte PWM2_PIN = P1_4; byte PWM3_PIN = P1_3; byte ROUT = P1_7; byte GOUT = P1_6; byte BOUT = P8_3; int pwm1_value; int pwm1; int pwm2_value; int pwm2; int pwm3_value; int pwm3; void setup() { analogFrequency(10000); // moved from loop() to setup() pinMode(PWM1_PIN, INPUT); pinMode(PWM2_PIN, INPUT); pinMode(PWM3_PIN, INPUT); pinMode(ROUT, OUTPUT); pinMode(GOUT, OUTPUT); pinMode(BOUT, OUTPUT); } void loop() { pwm1_value = pulseIn(PWM1_PIN, HIGH); pwm1 = map(pwm1_value, 0, 1636, 0, 255); pwm3_value = pulseIn(PWM2_PIN, HIGH); pwm2 = map(pwm2_value, 0, 1636, 0, 255); pwm3_value = pulseIn(PWM3_PIN, HIGH); pwm3 = map(pwm3_value, 0, 1636, 0, 255); analogWrite(ROUT, pwm1); analogWrite(GOUT, pwm2); analogWrite(BOUT, pwm3); }Note that I changed some of your variables' names and their "case" so that those that don't change are all CAPS and those that do are lower case.
  6. Like
    abecedarian reacted to spirilis in Msp430G2553 draws significant current at start up   
    Ok if you have the XTAL installed don't change that routine or comment out the do/while stuff... maybe tighten it up a bit:
     
    uint16_t timeout = 20;
     
    and for the do/while loop's __delay_cycles, use:
     
    __delay_cycles(100000L * (F_CPU/1000000L));
     
    That might take a little less time.  Still will busy-wait though.  Just no way around that here IIRC.
  7. Like
    abecedarian reacted to fabo9573 in Msp430G2553 draws significant current at start up   
    Hi spirilis,
     
    Ok, i just commented out the wrong thing! Now it works! Thank you so much! Really appriciate this amazingly fast help!
    Just shocked how low the consumption really is. I did a lot of things before with the Cypress PsoC (1 and 4) but the MSP is just way better in power consumption.
     
    Not gonna be the last project!
     
    Thank you again,
     
    Fabian
  8. Like
    abecedarian reacted to spirilis in Redundant Microcontroller Programming   
    A shortcut might be to use the TI Hercules series processors, sporting an ARM Cortex-R series chip with dual-core lock-step execution for safety purposes.  That requires a specific workflow using their HALCoGen software to generate a CCS project and then utilizing CCS to do your programming, and HALCoGen provides the peripheral driver library, but it might solve your design problem neatly.  They do have several reasonably-priced LaunchPads for sale including a more recent ARM Cortex-R5F based board with a lot of pins.  I've personally tinkered with the original Hercules TMS570LS0432 based launchpad myself.
  9. Like
    abecedarian reacted to roadrunner84 in Redundant Microcontroller Programming   
    I once did a medical grade project, the designer chose to have very extensive redundancy.
    - Three different brand micro controllers were used
    - Code was written non-shared
    - Every task was handled by two controllers redundantly
    All of this to avoid silicon bugs, programming bugs, quality issues, etc.
     
    If you want to have a "spare" kind of redundancy - one fails, other takes over, replace first while online - you should still use an additional arbitrating control. Depending on where you can still afford redundancy.
    If you have a certain indicator LED that is vital for your function, consider putting in two LEDs; one to each controller.
    If you have some kind of actuator (e.g.: motor), have some majority voting in place. Or consider using open-drain control, so if either controller fails, the other still drives the line.
  10. Like
    abecedarian got a reaction from energia in tsl 235r + interrutpts on msp432   
    @@davisse
    Looking at the datasheet for the TSL235R, I don't see anywhere mentioning a need for pull up or down on the output and one is not shown on the sample schematic. So, maybe try setting the input pin on the 432 as simple "INPUT" and remove / comment out the digitalWrite setting the pin high. The sensor might pull the pin whichever way it needs to.
  11. Like
    abecedarian got a reaction from energia in Energia compilation errors   
    2231 only has 2KB for program / data storage. Serial takes up a lot of space in memory. If you can, try to shorten the printed messages to save memory.
     
    edit- @@chicken beat me to it.
  12. Like
    abecedarian reacted to chicken in Energia compilation errors   
    The error says "will not fit in region rom" and "region rom overflowed by 28 bytes" (last few lines of your dump). You're running out of FLASH memory.
     
    The MSP430G2231 has only 2KB of FLASH and 128 bytes of RAM. With Energia's overhead, you won't be able to do much else beyond wiggling a few pins. Your sketch will probably work when not using Serial.
     
    I suggest you use the MSP430G2553 IC that's included with the G2 LaunchPad. It has 16KB of FLASH and 512 bytes of RAM.
  13. Like
    abecedarian got a reaction from energia in Hello World using CogLCD   
    Just an FYI... According to the relevant datasheets, TM4C123G GPIO are 5v tolerant when configured as digital inputs, and TM4C129, TM4C1294 are not 5v tolerant at all.
  14. Like
    abecedarian got a reaction from Fmilburn in Hello World using CogLCD   
    Just an FYI... According to the relevant datasheets, TM4C123G GPIO are 5v tolerant when configured as digital inputs, and TM4C129, TM4C1294 are not 5v tolerant at all.
  15. Like
    abecedarian got a reaction from energia in msp430 launchpad ADC   
    With a 10 bit ADC, you have 1024 possible values. Using 3.3V as a reference, you end up with 3.3 / 1024 = 0.003v resolution. So 3 thousandths of a volt is the difference between 0 and 1 from the ADC. With 12 and 14 bit ADC, the difference between 0 and 1 from the ADC are 0.0008 and 0.0002v, respectively. Your hand passing near a wire will likely induce more voltage than that. Also, a little ripple in the supply voltage can often cause a bigger variation than that when sampling. So take note of the datasheet for the chip in question as they'll often list ADC accuracy in some manner such a 2 LSB- least significant bit. This means natural variations or fluctuations within the chip itself will reduce the accuracy by that much. In the case of 2 LSB, that means you could ignore those two bits because they are basically inseparable "noise" in the sample.
     
    However, as @@yosh mentioned, oversampling, taking more than one sample and averaging the readings, reduces the amount of noise. Have to be careful though because too much oversampling might cause you to miss important signals.
     
    Some people might simply take a reading and store it, then on each successive reading, add that to the stored value and divide by two, then store that value. Others might take some number of readings, add them together and average those. Some will have an array of the last X number of readings which are averaged and as a new one comes in, the oldest one goes out.
  16. Like
    abecedarian reacted to Fmilburn in MSP432P401R PWM   
    This is one of those things I just had to try and it worked...
     
    The neat thing about the MSP432 is that it is pretty fast and it has a RTOS.  So you can run the PWM in it's own little space and do other stuff at the same time easily.  The way I implemented it was to use the MultiBlink example as a starting place just to busy the MCU with other tasks.  Then I opened a new tab with the following code:
    //#define PWM_PIN YELLOW_LED #define PWM_PIN 2 // Calculate 30% duty periods in milliseconds for 70 Hz PWM #define FREQ 70 // frequency in Hz #define PERIOD 1000000/FREQ // total period in microseconds #define DUTY 30 // duty in % #define PERIOD_ON (DUTY*PERIOD)/100 #define PERIOD_OFF ((100-DUTY)*PERIOD)/100 void setupYellowLed() { // initialize the digital pin as an output. pinMode(PWM_PIN, OUTPUT); } // the loop routine runs over and over again forever as a task. void loopYellowLed() { digitalWrite(PWM_PIN, HIGH); // turn the pin on (HIGH is the voltage level) delayMicroseconds(PERIOD_ON); // wait for a duty on period digitalWrite(PWM_PIN, LOW); // turn the pin off by making the voltage LOW delayMicroseconds(PERIOD_OFF); // wait for a duty off period } I tried it first on LED1 which carries the strange name YELLOW_LED even though it isn't yellow.  Then I moved it over to Pin 2 and had a look on the oscilloscope with the duty set at 30%.  It actually makes a nice PWM signal at just over 70 Hz.
     
    Meantime the MultiBlink is running without any apparent problem.  I'm sure you could overload it at some point though.

  17. Like
    abecedarian got a reaction from Towhid in Energia 16   
    @@Towhid
    http://energia.nu/download/
     
    Just below 17.
  18. Like
    abecedarian reacted to CorB in Energia 17 is available!   
    Just seen at www.energia.nu !!
     
     
  19. Like
    abecedarian got a reaction from yosh in msp430 launchpad ADC   
    With a 10 bit ADC, you have 1024 possible values. Using 3.3V as a reference, you end up with 3.3 / 1024 = 0.003v resolution. So 3 thousandths of a volt is the difference between 0 and 1 from the ADC. With 12 and 14 bit ADC, the difference between 0 and 1 from the ADC are 0.0008 and 0.0002v, respectively. Your hand passing near a wire will likely induce more voltage than that. Also, a little ripple in the supply voltage can often cause a bigger variation than that when sampling. So take note of the datasheet for the chip in question as they'll often list ADC accuracy in some manner such a 2 LSB- least significant bit. This means natural variations or fluctuations within the chip itself will reduce the accuracy by that much. In the case of 2 LSB, that means you could ignore those two bits because they are basically inseparable "noise" in the sample.
     
    However, as @@yosh mentioned, oversampling, taking more than one sample and averaging the readings, reduces the amount of noise. Have to be careful though because too much oversampling might cause you to miss important signals.
     
    Some people might simply take a reading and store it, then on each successive reading, add that to the stored value and divide by two, then store that value. Others might take some number of readings, add them together and average those. Some will have an array of the last X number of readings which are averaged and as a new one comes in, the oldest one goes out.
  20. Like
    abecedarian reacted to Rei Vilo in The Story of Energia in 150 Seconds   
    Watch The Story of Energia in 150 Seconds.
     

  21. Like
    abecedarian got a reaction from TheTaillessWonder in Wrong I2C Interface for MSP430 F5529 LaunchPad?   
    TI has a habit of changing things, apparently.
     
    The "original" default I2C should be on 14/15 [sCL(0)|SDA(0)]. Those are, as far as I can tell, consistent across the MSP430 LPs, including the "latest" FR6989.
     
    However, MSP432 and LM4/TM4 LPs seem to be different, and put I2C on 9/10.
  22. Like
    abecedarian reacted to TI_Trey in Quadcopter BoosterPack   
    Hi 43oh!
     
    Some of you may have seen me over at c2kcentral, but I'm mostly a lurker here.  For a while now, I've been working on developing a low cost quadcopter.  Well that quadcopter is nearly done!  Boards are being manufactured as I type this, and I plan to have it flying at the Bay Area MakerFaire in May.
     
    Here's a picture of the top of the motor driver board:

     
    Personally, I would like to see this manufactured and sold, but before I invest the effort to do that I need to ensure there is a demand for such a board.  The finished quad will be about 1 square foot in size, will cost ~$200, and will be able to carry a small payload (I've got my fingers crossed we'll have enough thrust for a Go Pro).  If you would please take a second to answer the poll as to whether or not you would be interested in purchasing one.
     
    This is all very preliminary, but I appreciate any feedback you may have.
     
    Thanks!
     
    Edit:
    Moving some of the information regarding the setup up here:
     
    4x TMS320F28027F + DRV8312 make up the ESC.  That is the bulk of what is on the board which you can see on the first post.
    1x C2000 LP acts as the brain.  This board decodes the control signals and sends torque commands to each of the ESCs via a PWM signal.  This LaunchPad runs the open source AeroQuad firmware on top of Energia...which also means other LaunchPads could be used as the brain.
    Control Inputs come via a standard RC 2.4GHz radio and receiver.  Because the LaunchPad doesn't have 1 million capture inputs I am using a receiver which supports S.Bus.
    3 axis accelerometer, gyro, magnetometer, barometer and GPS
     
    Update 4/16:
    Got the IMU board in today.  Here's a picture:

     
    Yellow - TC6000GN - CC4000 based GPS
    Red - MPU6000 - 6 axis IMU
    Blue - HMC5983 - 3 axis Mag
    Purple - MS5611 Barometer
     
    Update 4/21:
    Got in a car accident and have been dealing with insurance, so instead of working on this I've been dealing with BS.  Good news is that all that is finally taken care of and the motor boards are here!  These are by far the most complex and visually appealing boards I've even designed.  Take a look:

     
    I'm still waiting on a few structural pieces to arrive which are being water cut.  I expect I'll have them later this week.  I'll post some more pictures once I get the boards assembled.
     
    Update 4/22:
    Motor boards are assembled and basic functionality checks out.  Next checks will include JTAG connectivity, and then motor drive capability.  The design is based off an earlier prototype that was proven out, so I expect everything to work splendidly on this board.

     
     
    If you're not already, follow me on twitter for up to the minute project updates! @yertnamreg1218
     
    Update 4/24:
    The 4 InstaSpin Piccolos are all in a JTAG chain.  Initially I had a little trouble getting CCS to connect, but after a little re-soldering of the ICs JTAG started working.  I now have all 4 device programmed with the motor control software.  I was also able to verify operating on a battery and the serial data link between the receiver and main microcontroller.

     
    Yes, I'm aware my desk is a mess right now. :-P
     
    Update 5/6:
    Lots of work has been going into the AeroQuad firmware I'll be running on the LaunchPad.  The two main contenders for firmware were Arducopter and Aeroquad.  The reason Aeroquad was chosen over Arducopter was their use of the standard Arduino IDE to build their firmware.  Arducopter uses a hacked together one off build system.  Since Energia is based off Arduino, getting the AeroQuad project to build was much easier than Arducopter would have been.  
     
    With that said, I'm happy to announce that today I was able to compile AeroQuad successfully for the C2k LaunchPad in Energia.  This is a huge milestone!

     
    As you can see it didn't link, but that's an easy problem to fix.  With MakerFaire less than 2 week away, the pressure is on!  Will Trey get the quadcopter flying in time or will Murphy raise his evil head and sabotage the project?  Stay tuned to find out!
     
    Update 5/23:
    After my last update I had to really focus on getting the thing done in time for MakerFaire, so I slacked off on project updates.  Sadly, Murphy paid me a visit and threw a few wrenches into my plan.
     
    Problem #1: Everything on the motor drive boards appears to be working as planned with the exception of the current feedback circuitry for the motors.  The old board can spin the motors just fine, but on the new board the current feedback isn't behaving nicely which is causing us problems with the motor control software.  The boards are based on the same schematic, but the original developer changed some of the components in the feedback circuitry.  I have a list of the changes and the new board has incorporated those changes, but still has problems.  I'm unsure if the issue is layout or component related and will be doing some experiments in the coming weeks to determine and fix the cause.
     
    Problem #2: I pulled a special favor to get the structural materials (i.e. frame) for the quadcopter cut on a waterjet.  I kicked this off in early April, but because it was a favor and there were other users of this machine my parts didn't end up getting cut in time.  I'm currently looking for a place in town that can do CNC routing and drilling to get these parts cut.
     
    MakerFaire was still a big success and I was able to talk to a ton of people about LaunchPad, Energia, and the quadcopter.  I even met a few 43oh members while I was there!  I also talked to the creators of the Aeroquad firmware and they are very excited about this project.  Once the C2000 port is more stable I will be merging my changes upstream to the main Aeroquad repository.  
     
    I also talked to them about structural materials for the frame.  The Aeroquad guys use a material called DiBond.  Its a composite aluminum/polyethylene laminate which is less dense than FR4 with comparable material properties.  It is commonly used in signage applications, but also makes for an excellent quadcopter frame.  At MakerFaire the AeroQuad team participated in an event called the "Game of Drones".  This event pitted two quadcopters against eachother in air to air combat.  Take a look at this video showing off some of the fights: 
     

    http://youtu.be/91OCQ-1KP08
     
    After seeing how well they performed in the competition I am considering switching to use DiBond as the structural material in my quadcopter as well.
     
    Update 8/19
    It took me a while to find someone to cut the frame at a reasonable price, but I finally did.  I just received the frame back from the fabricator and it looks great.  I'll still need to tweak the design a bit due to machining tolerances, but that's something that's easily accomplished.  Without further ado, here are the pics:

     

     
    There are some spars that connect the two pieces together that should also be here, but the fabricator was confused and thought they were scrap.  I should be able to fully assembled the quad after I get back the tweaked version of the frame.
     
    I also was lucky enough to be a guest on "The Amp Hour" this week.  Be sure to tune in!  I talk about my experience in college at Rose-Hulman, my first job after college with Simma Software, and I reveal a new job I've accepted at TI!!!!
  23. Like
    abecedarian reacted to Johann in Error communicating with MSP432   
    I have recently encountered this problem too. My device drivers seems to be properly installed and I have selected the correct device, but I am unable to upload a blank sketch. Note that I am running 64-bit Windows 8.1.
     

     
    Looking at the application event log, I see the following error:
     
     
    It seems that x86 MFC run-time is not installed by default on newer systems. I downloaded and installed the Microsoft Visual C++ 2008 Redistributable Package (x86) and I was able to compile and upload my sketch to the device.
  24. Like
    abecedarian reacted to yyrkoon in Concept: CANBus to ethernet "bridge"   
    Oh . . . I've been using both MS OSes, and Linux since the early 90's . . . I know both fairly well.
     
    As far as connotation goes . . . there really is none. To be 100% blunt, I'm kind of indifferent about all this right now. If I wasn't then I'd be off chasing another project down a rabbit hole . . . which is not something I need right now heh.
  25. Like
    abecedarian reacted to chicken in CAL.430FR: MSP430 Wrist Watch   
    Just came across this very well documented project (not mine):
    http://blog.kemushicomputer.com/search/label/MSP430 ( translate)
    https://github.com/kentN/CAL430FR
     
    It's a wrist watch featuring Energia (incl. custom pin map), MSP430FR5949, Sharp Memory LCD and an accelerometer.

     
    KentN, if you're reading this: great job!
     
     


×
×
  • Create New...