FyberChris
Member since Mar 2014 • Last active Feb 2015Most recent activity
-
-
We have some Flex Module prototypes for sale at our new Tindie store. We will be releasing more Flex Modules and demo projects utilizing them. We have STM32F401CC and STM32F411CC modules available (they have the same pin layout). The STM32 Flex Module along with the USB BiPower3.2 Flex Module provide USB connectivity.
-
- 21 comments
- 9,518 views
-
I home etch using laser jet toner on glossy magazine paper. Laminating is easier since the board itself is much thinner. I'll be putting up a how-to, but it is the same as etching FR4.
I have been working mostly with a 1960s material called Electroply (it was the only flexPCB available on ebay at the time). It is much thicker and robust than Kapton copper clad. Both have good uses for wearables. I have been trying to get a real source for something like a PET based flexible copper clad as that should be similar to the Electroply. If we do a kickstarter, I will budget for a kit which includes a large sheet of Kapton at least. It is expensive stuff and it is great Adafruit is selling it (ebay is still cheapest usually). Dupont only sells it in big rolls. Another alternative is silver deposition - http://www.cartesianco.com/product/the-argentum/ .
We are also using low temp solder paste - http://www.chipquik.com/store/prod_smdltfp.htm to attach the modules.
-
I have put the initial hardware up on Hackaday for feedback - http://hackaday.io/project/2236-Flex-Modules . I am still working on board quality issues, but I think it is coming along.
-
-
- 5 comments
- 4,705 views
-
Yeah, it works. I tested against 1v60 and 1v62. I am still trying to clean it up and fix the 401 USB.
//Sources: //https://github.com/technicalmachine/servo-pca9685 //https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library //TODO: //Add additional modes and functions, ie. //such as from https://github.com/arc12/PCA9685/ var C = { PCA9685_SUBADR1 : 0x02, PCA9685_SUBADR2 : 0x03, PCA9685_SUBADR3 : 0x04, MAX : 4096, PCA9685_MODE1 : 0x00, PCA9685_MODE2 : 0x01, PCA9685_PRESCALE : 0xFE, /* MODE1 bits */ PCA9685_RESTART : 0x80, //!< Restart logic. Default disabled. Not used. PCA9685_EXTCLK : 0x40, //!< External clock. Default disabled. Not used. PCA9685_AI : 0x20, //!< Register auto-increment. Enabled by initialise() PCA9685_SLEEP : 0x10, //!< Sleep (osc off). Device is sleeping on POR, brought out of sleep by initialise() PCA9685_SUB1 : 0x08,//!< Sub-address 1 enable. Default disabled. Not used. PCA9685_SUB2 : 0x04, //!< Sub-address 2 enable. Default disabled. Not used. PCA9685_SUB3 : 0x02, //!< Sub-address 3 enable. Default disabled. Not used. PCA9685_ALLCALL : 0x01, //!< Respond to all-call. Default enabled. Not used. /* MODE2 bits. These are not actually used at present */ PCA9685_INVRT : 0x10, PCA9685_OCH : 0x08, PCA9685_OUTDRV : 0x04, PCA9685_OUTNE1 : 0x02, PCA9685_OUTNE0 : 0x01, // I2C Address for "all call" (7 bit form) PCA9685_ALLCALLADR : 0x70, //!< 0xE0 default "all call" I2C write address (7bit => 0x70) LED0_ON_L : 0x06, LED0_ON_H : 0x07, LED0_OFF_L : 0x08, LED0_OFF_H : 0x09, ALLLED_ON_L : 0xFA, ALLLED_ON_H : 0xFB, ALLLED_OFF_L : 0xFC, ALLLED_OFF_H : 0xFD }; exports.connect = function(_i2c,freq) { return new PCA9685(_i2c,freq); }; function PCA9685(i2c, freq, address) { this.i2c = i2c; freq = typeof freq != 'undefined' ? freq : 50; this.setPWMFreq(freq); this.a = typeof address ! == 'undefined' ? address : 0x40; this.resetPCA9685(); } PCA9685.prototype.resetPCA9685 = function() { this.i2c.writeTo(this.a, [C.PCA9685_MODE1, 0x0]); }; PCA9685.prototype.setPWMFreq = function(freq) { var prescaleval = (25000000/C.MAX)/freq - 1; var prescale = Math.floor(prescaleval); var oldmode = this.i2c.readFrom(this.a, C.PCA9685_MODE1) | 0x10; var newmode = (oldmode & 0x7F) | 0x10; // sleep this.i2c.writeTo(this.a, [C.PCA9685_MODE1, newmode]); // go to sleep this.i2c.writeTo(this.a, [C.PCA9685_PRESCALE, prescale]); // set the prescaler this.i2c.writeTo(this.a, [C.PCA9685_MODE1, oldmode]); setTimeout(this.i2c.writeTo(this.a, [C.PCA9685_MODE1, oldmode | 0x80]),1); }; PCA9685.prototype.setPWM = function(num, on, off) { if (num < 1 || num > 16) { throw "Servos are 1-indexed. Servos can be between 1-16."; } this.i2c.writeTo(this.a, [C.LED0_ON_L + (num-1)*4, on]); this.i2c.writeTo(this.a, [C.LED0_ON_H + (num-1)*4, on >> 8]); this.i2c.writeTo(this.a, [C.LED0_OFF_L + (num-1)*4, off]); this.i2c.writeTo(this.a, [C.LED0_OFF_H + (num-1)*4, off >> 8]); }; // 0...180 PCA9685.prototype.moveServo = function (num, val) { if (num < 1 || num > 16) { throw "Servos are 1-indexed. Servos can be between 1-16."; } this.setPWM(num, ((val/180) * (this.high - this.low)) + this.low, Math.floor(C.MAX/100*on)); }; //I2C1.setup({scl:B8, sda:B9}); //var driver = connect(I2C1, 50); //driver.setPWM(1,400,20);
-
Congratulations on funding. I got some samples from my rep. I was originally worried it was a replacement, but ST is planning to keep both lines. Honestly, I am not sure which to finalize design on either. I think both are going to require factory orders as neither seems popular enough at the moment for distributors to keep on hand. Arrow has been really good to me with their quotes, but it may be the specific Seattle sales office.