Jump to content
43oh

zeke

Members
  • Content Count

    1,782
  • Joined

  • Last visited

  • Days Won

    102

Reputation Activity

  1. Like
    zeke got a reaction from yyrkoon in What is "our" time worth ?   
    @@yyrkoon
     
    I am thinking of all kinds of things but the first is this...
     
    Congratulations! You did it! You Delivered! Clients love it when you DELIVER! Good Job!!!
     
    I am also thinking how you have begun to develop a process for doing various tasks. Things like this:
    - How do I capture the client's requirements?
    - How do I program a chip?
    - How do I invoice the client?
    - and so on ...
     
    Once you have figured out one of those processes then I recommend writing it down immediately. Then you will remember how to do it next time. Also, you will be able to teach your employee how to do the same thing in the future.
     
    I'm also thinking about liability. That is, this hush hush product is now out in the wild being used. Will it fail? When will it fail? How will it fail? Will someone get injured or die if it fails? If any of that happens then who will bear the liability for that unintended and unexpected event? For me, I have an insurance policy that covers me for "Errors and Omissions". That's the policy type.
     
    And then I am always hunting for the next job or task. Who could or should I talk to to get more work?
     
    I'm sure there are many other things that I could think about but it's important to celebrate the present successes first.
     
    <fistbump>
    Good Job!
     
    This is awesome. Let's do some more of this!
  2. Like
    zeke got a reaction from LiviuM in What is "our" time worth ?   
    @@yyrkoon
     
    I am thinking of all kinds of things but the first is this...
     
    Congratulations! You did it! You Delivered! Clients love it when you DELIVER! Good Job!!!
     
    I am also thinking how you have begun to develop a process for doing various tasks. Things like this:
    - How do I capture the client's requirements?
    - How do I program a chip?
    - How do I invoice the client?
    - and so on ...
     
    Once you have figured out one of those processes then I recommend writing it down immediately. Then you will remember how to do it next time. Also, you will be able to teach your employee how to do the same thing in the future.
     
    I'm also thinking about liability. That is, this hush hush product is now out in the wild being used. Will it fail? When will it fail? How will it fail? Will someone get injured or die if it fails? If any of that happens then who will bear the liability for that unintended and unexpected event? For me, I have an insurance policy that covers me for "Errors and Omissions". That's the policy type.
     
    And then I am always hunting for the next job or task. Who could or should I talk to to get more work?
     
    I'm sure there are many other things that I could think about but it's important to celebrate the present successes first.
     
    <fistbump>
    Good Job!
     
    This is awesome. Let's do some more of this!
  3. Like
    zeke got a reaction from dubnet in What is "our" time worth ?   
    @@yyrkoon
     
    I am thinking of all kinds of things but the first is this...
     
    Congratulations! You did it! You Delivered! Clients love it when you DELIVER! Good Job!!!
     
    I am also thinking how you have begun to develop a process for doing various tasks. Things like this:
    - How do I capture the client's requirements?
    - How do I program a chip?
    - How do I invoice the client?
    - and so on ...
     
    Once you have figured out one of those processes then I recommend writing it down immediately. Then you will remember how to do it next time. Also, you will be able to teach your employee how to do the same thing in the future.
     
    I'm also thinking about liability. That is, this hush hush product is now out in the wild being used. Will it fail? When will it fail? How will it fail? Will someone get injured or die if it fails? If any of that happens then who will bear the liability for that unintended and unexpected event? For me, I have an insurance policy that covers me for "Errors and Omissions". That's the policy type.
     
    And then I am always hunting for the next job or task. Who could or should I talk to to get more work?
     
    I'm sure there are many other things that I could think about but it's important to celebrate the present successes first.
     
    <fistbump>
    Good Job!
     
    This is awesome. Let's do some more of this!
  4. Like
    zeke reacted to jazz in SBW MSP430F550x based programmer   
    It is completed. Board size is 3.8 x 3.8 cm (1.5 x 1.5 in).
     

     
    Only CLI (open source) executable is needed on OS side, no dll / driver / installation, except (unsigned) inf file for Windows.
    Basic version and version with Mailbox / UART / I2C bridges working on:
    any Linux I tried: Ubuntu from 10 till 16, Fedora Workstation x86_64 23.10, openSUSE Leap 42.1 x86_64, CorePlus 6.4.1 (bootable USB stick) OS X from Lion (10.7.5) till Yosemite (10.10.5) Windows XP / 7 There will be website with all details about it. If you have any questions, let me know.
  5. Like
    zeke reacted to enl in Electronic Thermometer with analog meter   
    The board sockets on to the power header

    The 5-pin with the cable going to the right is for a button and double pole, center off momentary switch for adjusting the scale in operation. The software does linear interpolation from 0 to 100 degrees F, and allows for key points every 10 degrees. The three yellow wires go to the remote sensor (DS18B20). The mounting is leftover oak from redoing a floor. Glued up, planed, bored for the meter and the electronics, and finished to hang on the wall. The circuit board is mounted by putting epoxy in the pocket and dropping it in.
     
    Power board on. The tie point for the power line isn't on yet.

     
    The face of the finished display:

    The finish is shellac. I slopped on a heavy coat, light sanded, and then wiped another couple on. Then paste wax. Not perfect, but I banged it out quickly.
     
    The meter:

     
    Operating. The temp in my shop has climbed to 66F with a lot of help from the electric radiator.

     
     
  6. Like
    zeke reacted to terjeio in MSP430 Infrared Controlled Wearable   
    SLAA134 may also be of interest:
     
    http://www.ti.com/litv/pdf/slaa134
     
    I have recoded the RC5 receiver algoritm in C (for CCS) - I like it because it does not use much RAM.
    I can post the code but I need to make it postable first - it is part of one of my very first MCU projects.
     
    Terje
  7. Like
    zeke got a reaction from veryalive in Saving flash space, by making use of infomem   
    While reading this thread, I noticed that the answers did not comment on a solution for CCS. 
     
    So here are my observations and code samples to make that work in CCS.
     
    First, I trimmed down the font sample code from @@greeeg just to see if it will work.
    #pragma DATA_SECTION(font_data, ".infoB") const unsigned int font_data[] = { 0x0000,0xC101,0x0110,0x3B89,0x9BD9,0x5BDA,0x0F6D,0x4000, 0x4400,0x0022,0x55AA,0x1188,0x0002,0x1008,0x0001,0x4002, 0xEA57,0x6800,0xB24D,0xDA41,0x3818,0x8659,0x9A5D,0xA840, 0xBA5D,0xBA59,0x0041,0x0042,0x4203,0x1209,0x0621,0xB0C0, }; Good! This is just the right size to fill up 64 bytes - the size of INFOB. Any bigger and the compiler fails out with an error message about memory size is over filled or something.
     
    Next, figure out what special names you can use in the DATA_SECTION declaration.
     
    Open up the linker file for your project. In my case, it's called lnk_msp430g2553.cmd. 
     
    You will see this inside of it:
    .infoA : {} > INFOA /* MSP430 INFO FLASH MEMORY SEGMENTS */ .infoB : {} > INFOB .infoC : {} > INFOC .infoD : {} > INFOD so, use the lowercase name in your declaration.
     
     
    And here is my test program that I used to test drive the flash on an MSP43G2553:
    #include <msp430.h> /* "Compressed" font data, in form 0b ABCD EFGH IJKL MNOP {A-P} represent segment bits in each character __J_ _A__ |\ | /| | K H B | L \ | / C | \|/ | >-M--*--D-< | /|\ | N / | \ E | O I F | |/ | \| ~~P~ ~G~~ */ #pragma DATA_SECTION(font_data, ".infoB") const unsigned int font_data[] = { 0x0000,0xC101,0x0110,0x3B89,0x9BD9,0x5BDA,0x0F6D,0x4000, 0x4400,0x0022,0x55AA,0x1188,0x0002,0x1008,0x0001,0x4002, 0xEA57,0x6800,0xB24D,0xDA41,0x3818,0x8659,0x9A5D,0xA840, 0xBA5D,0xBA59,0x0041,0x0042,0x4203,0x1209,0x0621,0xB0C0, }; //const unsigned int font_data[] //__attribute__((section(".infob"))) = //{ //0x0000,0xC101,0x0110,0x3B89,0x9BD9,0x5BDA,0x0F6D,0x4000, //0x4400,0x0022,0x55AA,0x1188,0x0002,0x1008,0x0001,0x4002, //0xEA57,0x6800,0xB24D,0xDA41,0x3818,0x8659,0x9A5D,0xA840, //0xBA5D,0xBA59,0x0041,0x0042,0x4203,0x1209,0x0621,0xB0C0, //0xAACD,0xB85C,0xBBC1,0x8255,0xABC1,0x825D,0x805C,0x9A55, //0x381C,0x83C1,0x81C5,0x441C,0x0215,0x6834,0x2C34,0xAA55, //0xB05C,0xAE55,0xB45C,0x9A59,0x81C0,0x2A15,0x4016,0x2C16, //0x4422,0x40A0,0xC243,0x0055,0x0420,0xAA00,0x0402,0x0201, //0x0020,0x028D,0x009D,0x000D,0x018D,0x000F,0x9188,0x1E01, //0x009C,0x0080,0x0081,0x1580,0x03C0,0x188C,0x008C,0x008D, //0x015C,0x03D8,0x000C,0x1081,0x1388,0x0085,0x0006,0x0A85, //0x4182,0x0E01,0x000B,0x8388,0x0180,0x11C1,0x3150,0x0000, //}; char value; // 8-bit value to write to segment A // Function prototypes void write_SegC (char value); void copy_C2D (void); int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer if (CALBC1_1MHZ==0xFF) // If calibration constant erased { while(1); // do not load, trap CPU!! } DCOCTL = 0; // Select lowest DCOx and MODx settings BCSCTL1 = CALBC1_1MHZ; // Set DCO to 1MHz DCOCTL = CALDCO_1MHZ; FCTL2 = FWKEY + FSSEL0 + FN1; // MCLK/3 for Flash Timing Generator value = 0; // initialize value while(1) // Repeat forever { write_SegC(value++); // Write segment C, increment value copy_C2D(); // Copy segment C to D __no_operation(); // SET BREAKPOINT HERE } } void write_SegC (char value) { char *Flash_ptr; // Flash pointer unsigned int i; Flash_ptr = (char *) 0x1040; // Initialize Flash pointer FCTL1 = FWKEY + ERASE; // Set Erase bit FCTL3 = FWKEY; // Clear Lock bit *Flash_ptr = 0; // Dummy write to erase Flash segment FCTL1 = FWKEY + WRT; // Set WRT bit for write operation for (i=0; i<64; i++) { *Flash_ptr++ = value; // Write value to flash } FCTL1 = FWKEY; // Clear WRT bit FCTL3 = FWKEY + LOCK; // Set LOCK bit } void copy_C2D (void) { char *Flash_ptrC; // Segment C pointer char *Flash_ptrD; // Segment D pointer unsigned int i; Flash_ptrC = (char *) 0x1040; // Initialize Flash segment C pointer Flash_ptrD = (char *) 0x1000; // Initialize Flash segment D pointer FCTL1 = FWKEY + ERASE; // Set Erase bit FCTL3 = FWKEY; // Clear Lock bit *Flash_ptrD = 0; // Dummy write to erase Flash segment D FCTL1 = FWKEY + WRT; // Set WRT bit for write operation for (i=0; i<64; i++) { *Flash_ptrD++ = *Flash_ptrC++; // copy value segment C to segment D } FCTL1 = FWKEY; // Clear WRT bit FCTL3 = FWKEY + LOCK; // Set LOCK bit } Here is a screen shot of CCS as I inspected the information memory section.  
     
    The way I have the screen stretched out causes each memory section to be all on one line ie:
    INFOD (0x1000), INFOC (0x1040), INFOB (0x1080) and INFOA (0x10C0).  

     
     
    Footnote: For reference, here's TI's take on this topic: 
  8. Like
    zeke got a reaction from abecedarian in PCB design guide   
    I stumbled across a really cool resource from Ford Motor Company tonight.
     
    It's called EMC Online and it's located here: http://www.fordemc.com
     
    Here's a copy-paste of their introduction:
     
    ======================
    Forward
    The quality and reliability of today's automobiles are dependent in part on its electrical system to operate as designed within the vehicle
  9. Like
    zeke got a reaction from dubnet in PCB design guide   
    I stumbled across a really cool resource from Ford Motor Company tonight.
     
    It's called EMC Online and it's located here: http://www.fordemc.com
     
    Here's a copy-paste of their introduction:
     
    ======================
    Forward
    The quality and reliability of today's automobiles are dependent in part on its electrical system to operate as designed within the vehicle
  10. Like
    zeke got a reaction from Fmilburn in PCB design guide   
    I stumbled across a really cool resource from Ford Motor Company tonight.
     
    It's called EMC Online and it's located here: http://www.fordemc.com
     
    Here's a copy-paste of their introduction:
     
    ======================
    Forward
    The quality and reliability of today's automobiles are dependent in part on its electrical system to operate as designed within the vehicle
  11. Like
    zeke got a reaction from spirilis in PCB design guide   
    I stumbled across a really cool resource from Ford Motor Company tonight.
     
    It's called EMC Online and it's located here: http://www.fordemc.com
     
    Here's a copy-paste of their introduction:
     
    ======================
    Forward
    The quality and reliability of today's automobiles are dependent in part on its electrical system to operate as designed within the vehicle
  12. Like
    zeke reacted to chicken in Basic MSP430 GPIO Macros   
    In my project, I use a few basic macros for GPIO. The goal is, that I can easily redefine pin assignment in a central location without compromising performance or code size.
     
    The macros (gpiomacros.h):
    // MSP430 gpio macros #define GPIO_SEL(port) P ## port ## SEL #define GPIO_DIR(port) P ## port ## DIR #define GPIO_OUT(port) P ## port ## OUT #define GPIO_IN(port) P ## port ## IN #define GPIO_IS_INPUT(port,pin) { GPIO_SEL(port) &= ~(pin); GPIO_DIR(port) &= ~(pin); } #define GPIO_IS_OUTPUT(port,pin) { GPIO_SEL(port) &= ~(pin); GPIO_DIR(port) |= (pin); } #define GPIO_IS_PERIPHERAL_IN(port,pin) { GPIO_SEL(port) |= (pin); GPIO_DIR(port) &= ~(pin); } #define GPIO_IS_PERIPHERAL_OUT(port,pin) { GPIO_SEL(port) |= (pin); GPIO_DIR(port) |= (pin); } #define GPIO_SET(port,pin) { GPIO_OUT(port) |= (pin); } #define GPIO_CLEAR(port,pin) { GPIO_OUT(port) &= ~(pin); } #define GPIO_READ(port,pin)  ( GPIO_IN(port) & (pin) ) In a central configuration file (e.g. hardware.h) I assign pins like this:
    // Pin assignment #define LED1_PIN BIT1 #define LED1_PORT 6 #define LED2_PIN BIT0 #define LED2_PORT 1 And then in the code I interact with GPIO like this:
    // Setup LEDs GPIO_IS_OUTPUT(LED1_PORT, LED1_PIN); GPIO_IS_OUTPUT(LED2_PORT, LED2_PIN); // Turn off LEDs GPIO_CLEAR(LED1_PORT, LED1_PIN); GPIO_CLEAR(LED2_PORT, LED2_PIN); The macros are resolved in two steps:
    1. Higher level "functions" define the commands. E.g. GPIO_SET(), GPIO_IS_OUTPUT(), ..
    2. Lower level macros used within those functions translate port, pin to a register. E.g. GPIO_IN(), GPIO_SEL(), ..
     
    The end result is code like you would write when directly working with the GPIO registers. E.g. P2OUT &= ~BIT0; Note that this translation is done by the C pre-processor before the code is compiled.
     
    This all works fine and dandy, with the exception of port J. Port J doesn't have a SEL register, which breaks the 1st half of the GPIO_IS_OUTPUT and GPIO_IS_INPUT macros. I currently work around this by adding special GPIO_IS_OUTPUT/INPUT_J macros, but then the main code needs to include some logic to invoke the proper macro.
    #if (LED2_PORT == J) GPIO_IS_OUTPUT_J(LED2_PORT, LED2_PIN); #else GPIO_IS_OUTPUT(LED2_PORT, LED2_PIN); #endif Any ideas, how I could include a condition inside macros, that checks whether the port is J, and if so excludes the GPIO_SEL command?
     
    And yes, I could probably use C++ templates with identical results and an easy workaround for port J, but I'd like to avoid migrating my plain old C project.
     
    Edit: Added a few missing parentheses, thanks to Rickta59 for spotting that
  13. Like
    zeke reacted to jazz in CCS 7.0 beta available   
    Frequent CCS crashes with MacOS Sierra  https://e2e.ti.com/support/development_tools/code_composer_studio/f/81/t/556117
     
    ...Additionally, the installer for CCS 7.0.0 beta is very unstable and crashed multiple times before I could get the installation to begin...
  14. Like
    zeke reacted to yyrkoon in Industrial / commercial sensors   
    By the way, this is the light level sensor we went with: http://www.acuitybrands.com/products/detail/147289/Sensor-Switch/CM-PC-ADC/Photocell-Dimming-Ceiling-Low-Volt
     
    Kind of expensive at ~$140, but when you need it NOW, hehe you usually end up paying through the nose.
     
    Eventually we may end up designing our own sensors, if there is a need . . . Problem is, finding good enclosures for a decent price.
  15. Like
    zeke got a reaction from yyrkoon in Industrial / commercial sensors   
    @@yyrkoon
     
    For your consideration:
    Motion Sensors from Grainger. Light Sensors from Grainger. I'm certain that there are many other options out there. This is where I would start my research.
  16. Like
    zeke got a reaction from Rei Vilo in Logic Analyzers   
    @@yyrkoon
     
    Joe and his brother built the company from the ground up. Their software was written in house. Their product is top notch. They are good people.
     
    EEVBlog has done a teardown.
     
    And another one here.
     
    If the Saleae isn't your cup of tea then maybe you might like the Open bench Logic Sniffer instead?
  17. Like
    zeke got a reaction from yyrkoon in Logic Analyzers   
    @@yyrkoon
     
    Joe and his brother built the company from the ground up. Their software was written in house. Their product is top notch. They are good people.
     
    EEVBlog has done a teardown.
     
    And another one here.
     
    If the Saleae isn't your cup of tea then maybe you might like the Open bench Logic Sniffer instead?
  18. Like
    zeke got a reaction from dubnet in Logic Analyzers   
    @@yyrkoon
     
    Joe and his brother built the company from the ground up. Their software was written in house. Their product is top notch. They are good people.
     
    EEVBlog has done a teardown.
     
    And another one here.
     
    If the Saleae isn't your cup of tea then maybe you might like the Open bench Logic Sniffer instead?
  19. Like
    zeke got a reaction from greeeg in Logic Analyzers   
    @@yyrkoon
     
    Joe and his brother built the company from the ground up. Their software was written in house. Their product is top notch. They are good people.
     
    EEVBlog has done a teardown.
     
    And another one here.
     
    If the Saleae isn't your cup of tea then maybe you might like the Open bench Logic Sniffer instead?
  20. Like
    zeke got a reaction from yyrkoon in Logic Analyzers   
    @@yyrkoon
     
    These days, I rarely use my Saleae Logic but I know that it is within an arm's reach if I need it.
     
    I has saved me countless hours of debugging when working on a brand new sensor or when developing a brand new device driver.
     
    As a Contractor, your value will increase to your clients therefore you ought to be charging more for your services. Tools and software that are needed for the job ought to be factored into your agreement with your client so that they are covered. 
     
    Keep this in mind. Your client will take your hard work and turn around and make 100x his investment cost when he sells it to his clients.
     
    You are worth every penny your charge!
  21. Like
    zeke got a reaction from LIJsselstein in Logic Analyzers   
    @@yyrkoon
     
    I have the genuine Saleae and a chinese counterfeit. Their hardware and software is solid. The counterfeit ... well, you get what you pay for.
     
    FYI, they are under pressure by the far east counterfeiters.  
     
    Rest assured that the company is filled with good guys and their products are Made in the USA.
     
    There's no sense in getting worked up about it. It isn't worth the stress.
     
    Just switch off your emotions and select a logic analyzer based on its abilities.
  22. Like
    zeke got a reaction from yyrkoon in Logic Analyzers   
    I use a genuine Saleae Logic.  
     
    It's awesome.
  23. Like
    zeke got a reaction from yyrkoon in Logic Analyzers   
    @@yyrkoon
     
    I have the genuine Saleae and a chinese counterfeit. Their hardware and software is solid. The counterfeit ... well, you get what you pay for.
     
    FYI, they are under pressure by the far east counterfeiters.  
     
    Rest assured that the company is filled with good guys and their products are Made in the USA.
     
    There's no sense in getting worked up about it. It isn't worth the stress.
     
    Just switch off your emotions and select a logic analyzer based on its abilities.
  24. Like
    zeke got a reaction from yyrkoon in UART - Sending 3 bytes per start/stop bit sets.   
    @@yyrkoon
     
    Don't overthink the solution.
     
    Try bit banging the protocol and see how it goes. If it solves the problem then you're done.
     
    "Good enough is the enemy of perfection." 
  25. Like
    zeke reacted to Siladitya in Questions on SFP transceivers in hobbyist projects.   
    @@zeke,  Thank you for your input. For now I am planning to go with your suggestion of using traditional SFP module. I guess if I want to use BiDi module in future, its just the matter of replacing the module.
     
    Thank you.
×
×
  • Create New...