Originally I meant to contract out board assembly to some technicians on craigslist but I think I want greater control over even this stage of the process at least for the prototype(s).
So in keeping with the age old adage "if you want something done well, do it yourself" I have assembled the tools Ill need.
Soldering SMD parts almost always requires either a reflow oven or a hot plate. There is a $300 electronic reflow oven on ebay. Chinese made, works and doesnt take up too much space. However on youtube and on reddit various individuals have expressed more success using hotplates to reflow solder. Some even use electric skillets and an infrared temperature monitor
I purchased a $100 electronic hotplate on Ebay (YADGONG 946C from a seller in California with two) with enough surface area to handle an 8x8 sized board. Mine is 7.6 x 5.4. I also bought an IR temperature sensor for around $12 ... shipping included for both
Of course I might have need to do rework and I definitely need to hand solder some through hole parts on the board. With that in mind I bought the 2 in 1 SRS 852D+ reflow soldering station. This cost me about $61 on Ebay shipping included
Finally and possibly the most important tool on an Engineer/Inventors lab (outside of a digital multimeter) is an analog scope. My favorite Engineer vlogger Dave Johnson (eevblog on youtube) recommends ditching the fancy usb/pc scopes and getting a nice dual channel analog oscilloscope for starters. So I bought this Tektronix 464 100Mhz Dual Channel scope on Ebay for about $129 with $30 shipping from Rochester, NY.
Various other small tools like hand pump to lift and place SMT, soldering tools and tweezers, rework wire, solder paste, solder flux and enough parts to make a prototype and perhaps an initial run of 10 has been purchased on Ebay, CircuitSpecialists and Mouser
Once the solder paste and boards arrive I am good to go.
Tuesday, December 9, 2014
Monday, December 1, 2014
Message from Board Fabrication Plant ... boards are done and shipped
Pictures attached ... should be here in about a week and a half. cant wait. Btw
I am currently reading "Makers: The Next Industrial Revolution" by Chris Anderson.
I also got a stencil made since I plan on assembling/soldering this board at home. I bought a Hotplate and rework/soldering station last week on ebay in anticipation
I am currently reading "Makers: The Next Industrial Revolution" by Chris Anderson.
I also got a stencil made since I plan on assembling/soldering this board at home. I bought a Hotplate and rework/soldering station last week on ebay in anticipation
Wednesday, November 19, 2014
project EGWU complete !!!
Its been a year ... a whole year since I set about designing this board. At lot has happened distractions wize some enormously stressful none of which I am comfortable going into on here.
But I have finally completed the layout. Actually I finished the layout about a month ago but had been touching up and correcting problems since. Even this week - after submitting the gerber files to the Chinese PCB Fab plant (from Ebay) that will be doing the boards ... I still had to revise it two more times (the plots not the layout) to satisfy them.
I am off the whole thanksgiving week and I am looking for a much needed "staycation". Ill also use the opportunity to start on the firmware. It will be another two and a half to three weeks before I see the 5 boards I ordered
Sillkscreen layer below
Wednesday, January 8, 2014
IAR kickstart dev kit for the LPC1788
Long story short I am working on my first commercial product and the lpc17xx series of cortex-m3 processors fits the bill. Picked up this lpc1788 system on ebay for a whopping $47 + $16 = $63 verses the 399.99 it used to cost new. Board appears to power up - comes with JLINK lite for debugging ... Heres a breakdown and pics
|
Thursday, November 21, 2013
the sort of bugs that keep you up at night - ripping your hair out
Ok so I figured Id test this $50 investment real quick, before I get back to work I am doing with the Xilinx Xcv3 Spartan board. Figured Id modify the my stm32 firmware/linker scripts for the different I/O ports on this board. Figured Id get it to where I was originally with USB access - didnt think it would take three days ...
I had encountered a serious error right off the bat. Where the code was generating hard faults with fault #3 in execution and systick handler #15 pending and never running (after the first time).
The cortex m3 pushes 8 registers on the stack whenever it takes an exception. So I modified stm32_nvic_fault_handler as follows
asm ("mrs r0, msp");
asm ("ldr r1, [r0, #24]");
The value returned was something like 0x2000 0887. Checked the map file flash.map and found that was a line of code in the stm32_uart_puts() routine. I tried to disassemble it from within gdb and it balked after address 0x2000 0888.
I used monitor mdw 0x20000888 3 to look at the three words immediately after loading the file "load" and before setting a break point and running to main. I noticed that the value was changing when I got to main ... it made no sense.
I started to wonder why the stack (monitor reg sp) held a value other than the 0x20010000 I wanted it set to. After all the first instruction in main was forcing the stack with
asm ("ldr sp, =(0x20000000 + (64 * 1024) - 4)");
Thats when I noticed that when arm-linux-gnueabi-gdb ./usb_test.out runs it prints out
xPSR: 0x01000000 pc: 0x0800125 msp: 0x20000890
Where was it getting this value? The command
monitor reset halt
Should be placing it in a known state. But where was that. I checked the map file and found nothing that would lead me to believe it was using information I provided. I checked the openocd scripts for odd initialization parameters.
Then I remember that on the arm7 board I had a similar problem because the board would start up running from flash. So when I dumped the value of 0x0 it was 0x2000 0890.
EUREKA!!!
Jtag still allows it to boot from eeprom on reset before it grabs control and the stack value was corrupting my program in ram.
So the solution would have to be the same I did with the arm7 and other cortex-m3. I will wipe out the contents of flash.
I did it with.
Now arm-linux-gnueabi-gdb ./usb_test.out starts off with
xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
No where near my program at ram address 0x2000 0000 (64k of it on this ZET)
No more hard faults and my systick stay-alive-LED blinks once a second. Next Ill tackle uart and usb ... if I have time
I purchased The Definitive Guide To Arm cortex-m3 this morning as well. It should shed a little more light on some gotchas - not necessarily listed or described well in the arm cortex m3 and the stm32 manuals
I had encountered a serious error right off the bat. Where the code was generating hard faults with fault #3 in execution and systick handler #15 pending and never running (after the first time).
The cortex m3 pushes 8 registers on the stack whenever it takes an exception. So I modified stm32_nvic_fault_handler as follows
asm ("mrs r0, msp");
asm ("ldr r1, [r0, #24]");
The value returned was something like 0x2000 0887. Checked the map file flash.map and found that was a line of code in the stm32_uart_puts() routine. I tried to disassemble it from within gdb and it balked after address 0x2000 0888.
I used monitor mdw 0x20000888 3 to look at the three words immediately after loading the file "load" and before setting a break point and running to main. I noticed that the value was changing when I got to main ... it made no sense.
I started to wonder why the stack (monitor reg sp) held a value other than the 0x20010000 I wanted it set to. After all the first instruction in main was forcing the stack with
asm ("ldr sp, =(0x20000000 + (64 * 1024) - 4)");
Thats when I noticed that when arm-linux-gnueabi-gdb ./usb_test.out runs it prints out
xPSR: 0x01000000 pc: 0x0800125 msp: 0x20000890
Where was it getting this value? The command
monitor reset halt
Should be placing it in a known state. But where was that. I checked the map file and found nothing that would lead me to believe it was using information I provided. I checked the openocd scripts for odd initialization parameters.
Then I remember that on the arm7 board I had a similar problem because the board would start up running from flash. So when I dumped the value of 0x0 it was 0x2000 0890.
EUREKA!!!
Jtag still allows it to boot from eeprom on reset before it grabs control and the stack value was corrupting my program in ram.
So the solution would have to be the same I did with the arm7 and other cortex-m3. I will wipe out the contents of flash.
I did it with.
monitor flash probe 0
monitor flash protect 0 0 127 off
monitor reset halt
monitor stm32f1x mass_erase 0
monitor flash protect 0 0 127 on
Now arm-linux-gnueabi-gdb ./usb_test.out starts off with
xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
No where near my program at ram address 0x2000 0000 (64k of it on this ZET)
No more hard faults and my systick stay-alive-LED blinks once a second. Next Ill tackle uart and usb ... if I have time
I purchased The Definitive Guide To Arm cortex-m3 this morning as well. It should shed a little more light on some gotchas - not necessarily listed or described well in the arm cortex m3 and the stm32 manuals
STM32F103ZET6 ARM Cortex-M3 Development Board
STM32F103ZET6(development board ) with FSMC,NAND/NOR FLASH
STM32 development board based on STMicroelectronics (ST) has introduced the highest series of ARM CortexM3 chip configuration as the core component STM32F103ZET6
On-board resources:
* CPU: STM32F103ZET6; (LQFP144-pin, on-chip integrated 512K flash, 64KRAM, 12Bit A / D, D / A; PWM, CAN, USB, SDIO, FSMC and other resources)
* Outside the expanded board 512K SRAM, 2M NOR FLASH (on-board support for the largest 1024k SRAM, 16M of NOR FLASH) to meet the large capacity data acquisition, processing and analysis requirements
* Board outside 128M NAND FLASH expand to meet the rich color of the picture storage, data storage form, document management applications and so on
*FSMC control, color touch module configuration TSC2046 controller, support for a SD card (SPI mode) can be used to store pictures, in support of AT45DBxxx of a DATA FLASH (can be used for storage)
* All the way CAN communication interface, the drive chip SN65VHD230
* Two-way RS232 interface
* All the way RS485 communication interface
* A SD card connector SDIO control
* A I2C memory interface, the standard 24LC02 (EEPROM)
* A SPI memory interface, AT45DB161D or M45PE16V (DATA FLASH)
* All the way adjustment potentiometer ADC input
* Three-way leads to ADC input terminals
* Two-way terminal block PWM output leads
* Two-way leads to DAC output terminals
* A buzzer, the five users LED lights, a power indicator light, a USB communication indicator, four user keys, a system reset button
* Power Select jumper to support the external 5V power supply, USB power supply or power supply by JLINK
* Board Size: 13CM X 10CM
STM32 development board based on STMicroelectronics (ST) has introduced the highest series of ARM CortexM3 chip configuration as the core component STM32F103ZET6
On-board resources:
* CPU: STM32F103ZET6; (LQFP144-pin, on-chip integrated 512K flash, 64KRAM, 12Bit A / D, D / A; PWM, CAN, USB, SDIO, FSMC and other resources)
* Outside the expanded board 512K SRAM, 2M NOR FLASH (on-board support for the largest 1024k SRAM, 16M of NOR FLASH) to meet the large capacity data acquisition, processing and analysis requirements
* Board outside 128M NAND FLASH expand to meet the rich color of the picture storage, data storage form, document management applications and so on
*FSMC control, color touch module configuration TSC2046 controller, support for a SD card (SPI mode) can be used to store pictures, in support of AT45DBxxx of a DATA FLASH (can be used for storage)
* All the way CAN communication interface, the drive chip SN65VHD230
* Two-way RS232 interface
* All the way RS485 communication interface
* A SD card connector SDIO control
* A I2C memory interface, the standard 24LC02 (EEPROM)
* A SPI memory interface, AT45DB161D or M45PE16V (DATA FLASH)
* All the way adjustment potentiometer ADC input
* Three-way leads to ADC input terminals
* Two-way terminal block PWM output leads
* Two-way leads to DAC output terminals
* A buzzer, the five users LED lights, a power indicator light, a USB communication indicator, four user keys, a system reset button
* Power Select jumper to support the external 5V power supply, USB power supply or power supply by JLINK
* Board Size: 13CM X 10CM
Tuesday, November 12, 2013
[peekstm32] the problem was data toggle
The odd thing was that the problem lay with JUST the peek function or host "IN" packets. I played around with the stm32_endp_isr_user_out() routines "IN" packet handling section. Wasnt sure of the state of DTOG_TX so I figured Id force it to 0 instead 1.
Immediately the first peek command from the next run worked and failed there after. After playing around with DTOG_TX forced to 1, toggled I finally deleted it, essentially leaving it floating and that worked
Basically delete this line from stm32_endp_isr_user_out()
stm32_usb_set_epr_dtog(wdEndP,\
1,\
STM32_USB_EPR_DTOG_TX_OFFSET);
End Result - arm m-3 minicom:
--------RESET----------- 27uS
--------RESET----------- 28uS
80 06 00 01 00 00 40 00
--------RESET----------- 28uS
00 05 3E 00 00 00 00 00
usb device address = 3E
80 06 00 01 00 00 12 00
80 06 00 02 00 00 09 00
80 06 00 02 00 00 20 00
80 06 00 03 00 00 FF 00
80 06 02 03 09 04 FF 00
80 06 01 03 09 04 FF 00
80 06 03 03 09 04 FF 00
00 09 01 00 00 00 00 00
00 08 ED FE 04 5C 00 40
user req peek [40005C04]=7021
00 08 ED FE 04 5C 00 40
user req peek [40005C04]=3061
00 08 ED FE 04 5C 00 40
user req peek [40005C04]=7021
00 08 ED FE 04 5C 00 40
user req peek [40005C04]=3061
00 08 ED FE 40 60 00 40
user req peek [40006040]=00
01 0C ED FE 40 60 00 40
user req poke [40006040]=B0
00 08 ED FE 40 60 00 40
user req peek [40006040]=B0
On the host linux pc side:
sudo ./peekstm32.out 0x40005c04
[40005c04] = 7021
sudo ./peekstm32.out 0x40005c04
[40005c04] = 3061
sudo ./peekstm32.out 0x40005c04
[40005c04] = 7021
sudo ./peekstm32.out 0x40005c04
[40005c04] = 3061
sudo ./peekstm32.out 0x40006040
[40006040] = 0
sudo ./peekstm32.out 0x40006040 0xb0
sudo ./peekstm32.out 0x40006040
[40006040] = b0
DONE!!!
Immediately the first peek command from the next run worked and failed there after. After playing around with DTOG_TX forced to 1, toggled I finally deleted it, essentially leaving it floating and that worked
Basically delete this line from stm32_endp_isr_user_out()
stm32_usb_set_epr_dtog(wdEndP,\
1,\
STM32_USB_EPR_DTOG_TX_OFFSET);
End Result - arm m-3 minicom:
--------RESET----------- 27uS
--------RESET----------- 28uS
80 06 00 01 00 00 40 00
--------RESET----------- 28uS
00 05 3E 00 00 00 00 00
usb device address = 3E
80 06 00 01 00 00 12 00
80 06 00 02 00 00 09 00
80 06 00 02 00 00 20 00
80 06 00 03 00 00 FF 00
80 06 02 03 09 04 FF 00
80 06 01 03 09 04 FF 00
80 06 03 03 09 04 FF 00
00 09 01 00 00 00 00 00
00 08 ED FE 04 5C 00 40
user req peek [40005C04]=7021
00 08 ED FE 04 5C 00 40
user req peek [40005C04]=3061
00 08 ED FE 04 5C 00 40
user req peek [40005C04]=7021
00 08 ED FE 04 5C 00 40
user req peek [40005C04]=3061
00 08 ED FE 40 60 00 40
user req peek [40006040]=00
01 0C ED FE 40 60 00 40
user req poke [40006040]=B0
00 08 ED FE 40 60 00 40
user req peek [40006040]=B0
On the host linux pc side:
sudo ./peekstm32.out 0x40005c04
[40005c04] = 7021
sudo ./peekstm32.out 0x40005c04
[40005c04] = 3061
sudo ./peekstm32.out 0x40005c04
[40005c04] = 7021
sudo ./peekstm32.out 0x40005c04
[40005c04] = 3061
sudo ./peekstm32.out 0x40006040
[40006040] = 0
sudo ./peekstm32.out 0x40006040 0xb0
sudo ./peekstm32.out 0x40006040
[40006040] = b0
DONE!!!
Subscribe to:
Posts (Atom)





