Fully Automated PCB Testing
Вставка
- Опубліковано 28 сер 2024
- The fully automatic motherboard test jig is done! I wrote code solid for like two weeks straight, and now we have a machine that flashes test firmware to the board being tested, checks every pin and peripheral, and prints out a report of what passed and failed! It feels so good to have this thing working, and I'm excited to use it on the production line!
Black Magic Probe:
1bitsquared.co...
Piotr's Channel:
/ piotresdentempski
-------------------------------------------------------------------
Check out my Patreon:
/ stephenhawes
Join the STR Discord Server:
discordapp.com...
Index Pick and Place Github Repo:
github.com/ind...
Index Machines Shop!:
shop.indexmach...
-- FOLLOW --
Twitch bit.ly/stephen...
Instagram bit.ly/stephen...
Twitter bit.ly/stephen...
-- PO BOX --
Stephen Hawes
PO Box 44248
Pittsburgh, PA
15205
-- GEAR --
These are affiliate links so if you buy anything through them I get a small percentage which helps out the channel. Thank you!
PCB Holder: amzn.to/344qhVD
Microscope: amzn.to/348aSnw
Soldering Iron: amzn.to/2KlHDGs
Wire Strippers: amzn.to/2IESgDV
Cutting Mat: amzn.to/3oNCwOz
Flush Cutters: amzn.to/3ncFwnc
Digital Calipers: amzn.to/3gIzZSL
Leatherman Sidekick: amzn.to/3a4sQuY
Part Organizer: amzn.to/3a9uDyV
Soldering Iron Tip Cleaner: amzn.to/3a3wZiD
Oscilloscope: amzn.to/2W4zrNt
Multimeter: amzn.to/2JVp6Ba
Crimping Tool: amzn.to/37WymwP
SpaceMouse: amzn.to/3gCWR64
Tweezers: amzn.to/3a1auL5
Solder Wick: amzn.to/347kUVI
Files: amzn.to/37bMXp0
Dremel: amzn.to/3gIADj9
Headlamp: amzn.to/3gE5VYw
Pelican Case: amzn.to/3ncFpbg
It may be a good idea to get longer pogo pins for the gnd connections so they always are the first to make contact
i was about to say the same thing
Good thought! ill do that!
Or just solder them a bit higher. This is cheaper than two different pogo pins
Or just a shorter one for the power.
This!
For the 24V issue, there is also the issue of *disconnecting* the apparatus. A shorter 24V pin and a longer GND pin is an easy and reliable solution. I think the "best" solution would be to have it be software controlled by the tester itself -- it turns on the rail only after it senses continuity AND a 500ms delay, and turns it off again after a successful test.
I really like what another commenter said in that "there is no budget for a test rig". There is only going to be one, it's definitely worth the extra expense making it right.
^this. Only thing to add is that the 24V has to be turnt off after every test, not just a successful one. In fact my logic would be inverse, it should only be turned on while testing, not before nor after.
On my jigs, I have no power to a board at the start, and control it via a load switch that only turns on when the test starts, I have the GND pins on the jig weakly pulled high, so I can detect when a board is inserted (GND pulled low) and if that detection is not found, I am blocked from trying to run the test. This way a board has to be properly seated before any power can be applied.
This also allows me to do short detection (via the load switch) and have power shut down instantly if a fault occurs, and I can read the error pin on the load switch so I know what the test stopped. I've never blown a board in over 25k tests :)
It would be cool if you did a video on how you do this!
Yeah not having the jig sending power by default is a good idea. Throwing my setup out there as well for anyone else reading and looking for inspiration. My jigs use SCPI to control a 3-port Rigol supply and a Rigol bench multimeter. SCPI is "Standard Commands for Programmable Instruments" This is what the RS232 port on many instruments is for. Follow the protocol and you can automate your instruments with a microcontroller or a USB/RS232 converter etc. (there are other options than SCPI but its one of the simplest to implement embedded if that is desired). Moving on I also use relays as well to cut the impedance of the supplies. I first run resistance checks of power rails to make sure boards fall within expected ranges prior to introducing power. If the resistance is out of range there is typically an issue with the board that will fail power up. So this is an opportunity to save the board before accidently frying it. Then my routine checks continuity between any power pins that are on separate connectors. With SCPI control of the power supply you can also limit the current set the voltage dynamically etc. So you can test a basic power up with a trip current that is just barely sufficient. Then when firmware is loaded etc. the limit can be adjusted etc. It is more expensive to use a smart bench supply and a bench multimeter but I think in the long run it has been a great investment over doing all the acquisition onboard a specific test PCB. The only items I put on test PCBs these days are i2C i/o expanders for basic i/o testing, and analog muxes for the digital multimeter to analyze analog signals (occasionally scope as well). TLDR I recommend using bench supplies with SCPI. This lets you control power up while also controling current and voltage limits to protect against faults breaking chips.
Stephen,
I’ve done ASIC test for 30 years now. You probably already know this but you can test continuity on any pins that come to the outside by pulling them below GND using a constant current source. Sink about 100uA out of the pin and the voltage from that pin to GND will be between -400 to -600mV. That is if it is soldered correctly. If it is open it will read the full negative voltage your constant current source is capable of. In other words it will read that negative rail. Or 0V is shorted to GND.
In ASIC test this is the first thing we do to ensure all pins are properly connected in the socket.
Hi, Stephen. I am very interested in this comment. Could you please provide more details on this test. Do you use an SMU? Do you have a link you can provide for more details? Or a reference? Thanks.
Same here! Any info/references would be well appreciated :)
..or you just make the 24v pin shorter and the ground pins longer
This is like de-facto standard for so many hot swap situations
I came to post this and the master has spoken already...of course! Good old 'make before break' versus 'break before make' just in pogo.
also use current limiting and sensing. sounds like his tester only tests the microcontroller side of stuff but not the output MOSFETS and such?
I highly recommend test driven development. You basically do what you did, driving the code using tests. This means you think you need a feature, then write the test that would prove the feature works, then write the code. The big benefits is that the test serve a a proof that your code does what it should do and serve as documentation.
In his case even ATDD with Gherkin (Cucumber / SpecFlow).
If you put some series resistors in series with the measurement pins it will limit the current when a fault occurs and protect your boards. The fault is not only when inserting the board, but maybe also when there is a short on the board.
Yes, some current limiting resistors and fuses (or polyfuses - the resettable ones) on the power lines can help prevent the chips blowing out.
Your friend is wrong about software...IMHO. Long time software developer here, refactoring is how you clean up your structure. As you said, doing it "big bang" (aka Waterfall) means that debugging is trickier as you don't know what might have broken - there could be dozens of bugs. This isn't a massive software project, though, so YMMV.
If have all your goals clearly defined in advance there is zero reason to bullrush the whole codebase without ever testing it. Problems come from tacking needs on, not testing and writing more code
My immediate gut response as well, especially with hardware interfacing.
Although, if you put in test modes for each of the software components and have some way of enabling them one at a time, then it makes debugging easier. It's something that I have done before for a complex project.
But it almost doubles the effort - because you need to code in real operation and a test mode.
I don't think it's about writing the software all at once, it's about having a consistent architecture
For rev 2 of the tester board, you should add a solid-state power switch (Like those little power chips in USB hubs, except not) on the 24-volt rail, and add a current monitor to quickly check for short circuits.
Those two functions can be combined using an E-fuse. Those chips usually have short circuit protection, an enable pin and current monitoring!
I think I physically winced when you said you put new chips back on and tested it again without even looking for where the overvoltage was coming from, lol.
Did you guys just said we should go back develop in waterfall?
The circle is complete! Dev is now like fashion it just goes in circle every 30 years!!
(Btw love the project, just my inner grand-pa shaking its stick at the youth)
Waterfall should never be an answer though. If Agile isn't working for you it means you need to fix your Agile, not go back to practices we moved away from for good reasons.
Agreed on the project though, looks amazing.
@@klh_io waterfall may be an acceptable application for this. his requirements are very well-defined and will NOT change (he is constrained by the hardware). but yeah doing it "little by little" forces you to write testable code.
@@klh_io iterative project management and and iterative product development lifecycles have been around since at least the 50s. In general, there is no "this lifecycle/framework is better than that one". Everything must be "tailored" according to the specific needs of the project/product. The uncertainty around the solution, and requirements, and the complexity of the problem must be accounted for, and everything must be monitored and adjusted as necessary. But most of the time, no framework fits perfectly, so projects usually contain both iterative and predictive lifecycle phases, and can often shift from one type of planning to another, depending on feedback from the teams, new requirements, changes, etc.
@@83hjf you can always write "little by little" in waterfall. And in fact, TDD is much easier to implement if all the requirements are fully defined and planned BEFORE you start writing the first line of tests/code. It sucks writing tests, writing the code to satisfy the tests, then finding out from the client that the requirements are changing, so you have to change all your tests, rewrite the code, and so on and so on. Which is the definition of how agile/iterative projects are run. But sometimes that's just the way it goes, lol.
Also, you don't generally "write everything" then test it all at once. In true predictive, you break down the requirements into small enough work packages that you can write and unit test each individual feature so it meet the "definition of done (acceptance criteria)" and then you move on to the next task. So in the end, when they all get combined (according to your planning documents), in theory, if you've implemented and tested each "building block" correctly, you shouldn't even need any e2e testing because each "unit" and the higher level combinations of each unit have already been tested.
The bluepill you bought has a fake STM32 clone. Likely a CS32F103 or GD32F103(or APM32F103, BLM32F103, HK32F103,MM32F103). Both have catastrophic silicon bugs that prevent certain peripherals(like USB) from working.
Your receipt printer is also really slow. You're doing something wrong there, it should print at double-digit mm/s at highest power.
I've actually heard folks argue that one of the benefits of the f103 is that these clones exist, like old school second sourcing. The ones from giga devices (gd32f103) are apparently actually pretty good. (And nobody's getting anything from ST anyway right now)
To be honest the original has catastrophic silicon flaws, just look at the errata sheet, and be glad you're probably using an Arduino driver for the i2c peripheral. I once had to work on some code that was just bit banging i2c because it's easier than getting the crappy f103 i2c peripheral working, and I didn't realize the depth of the flaws when I started and thought "that's a hack and error prone, I should use the actual peripheral" 🤦 scarred for life
2:51 That monitor setup is looking nice!
YES! PLEASE DO A PANELIZE VIDEO :)
I would recommend checking out load switches from Texas Instruments. Wait like 40ms after contact is established to power up the rails. After test passes, send a signal to power down rails in correct sequence.
Also, consider adding some kind of resistance check to ensure there is no short to GND on any of the power rails. Only if the resistance check passes, do you power on the board under test.
load switches may be overkill. just current limiting and current sensing should work.
100% would be interested in video about panelization (is that even a word lol) I am working on a project now where I will probably be doing that in the near future.
Would LOVE to see your take on panelising....cheers.
I would also like to see this content
Definitely want to see this as well. We’re going to start panelizing soon but I’ve been putting the learning off
@@builditwithadam Yeah, its always a job for tommorow !
@@builditwithadam check out EEVblog, he has good videos on panelization.
Is that a really slow receipt printer or is it just the communication to it that is slow? Seems to take almost as much time to print the receipt than to test the board.
The bitmap graphics part is always painfully slow. The preprogrammed fonts print much faster.
Some thermal printers take much longer to print images than just plain old text. One thing to try and speed it up is to just print the perimiter of the check or the X rather than have it solid all the way through.
I am a firm subscriber to receipt printers everywhere as well. Totally amazing.
A video on panelization would be awesome! Keep up the great work 🙌
This is so interesting and is also a passion of mine. We have a lot of similarities. My approach is the write C# code that controls programmable test equipment such as power supplies, meters, and generators. These are connected to a PCB test fixture with circuitry and Pogo Pins. The PCB to be tested is placed on the Pogo Pins and the program is run. The results are stored for later analysis. Automation is part of a larger passion of mine: efficiency. It would be interesting if we could connect and compare and contrast of methods. Wishing you an amazing day!
The Black Magic Probe code for the Bluepill is much better now. It took me around 3-4 days days from start to finish, but I managed to build the firmware binary from source, flash it and write a launch.json file for VSCode. It works pretty reliably, and if the probe crashes, the easy fix for that is to just press the RESET button.
The reason buying it was not an option for me was that 60 dollars is a lot of money in my country and the shipping would take forever. Faster to make one myself, and I larned a lot of important things in the journey.
Definitely curious about panelization, either doing it yourself or having the PCB manufacturer do it (and obviously needing the panel-wide stencil either way).
wayy too late, but give it a look at pcb tools by ThisIsNotRocketScience. not sure how it would perform in a "professional" setting, but for home users works great.
@@andreacerfoglia8007 I recall having some difficulty getting it to build in Linux, and some difficulty figuring it out in Windows. Ultimately, I ended up using KiKit which let me script the process using a configuration file. That's kinda a better approach for me, since its more repeatable.
In the case where it's not practical to use a relay or MOSFET to switch the supply voltage, make sure the VCC pogopin is shorter than other pins so it will only make contact once the rest of the pins are touching.
Sounds like adding some protection diodes would have saved you a few fried controllers as well.
In general, we also make all power supplies switchable on test jigs and typically have a "switch" to detect if a board is loaded. We also use compressed air for loading the board if possible. If I remember they typically place a board, close the lid on the tester and that triggers the test.
Stephen, I think the way you should approach the grounding issue is by putting it on the backplate. You could easily build this into your jig. But if you had say 3-5 places that ground the board it would when you apply the 24v it will have ground in multiple places to run to.
I love the "tool or project" dichotomy because I can drop $350 on a printer that overall is on par with (or better than) my friend's Prusa, and I can drop $20 on their old half-disassembled kit printer (Anet A3, I think) to have as a project printer :) It's fun to tinker and mod things while still knowing for sure that I have one to be a TOOL rather than a project.
Do I buy the Index then, and spend a ton of time tinkering with it, or spend 10k$ or more on an old refurbished professional pick and place machine and try to get that machine to be productive faster?
@@ProtonOne11 I suppose that depends on your timeframe and experience level - if you're not in a rush and new to PnP machines, you could wait for folks to get their hands on the Index and help sort out the first-generation troubles, and buy one in a few months or so after some revisions have been made. That'd be the most ideal approach, where ease and money are the concern but time is not.
If time is the concern, then it's up to you which one you care more about: ease or money.
With that said, I have a slight feeling that a passion project made by a team of fresh, young engineers is going to be chock full of modern conveniences and thoughtful design that you simply won't find on an outdated, archaic 'refurb industrial' unit - so unless you specifically are already trained on those, AND/OR need features explicitly and exclusively available on a specific ancient machine... I'd avoid them :) but that's just me.
Excellent work!
I actively avoid writing large chunks of code at once because it leads to a long period of fixing all the little errors, but you bring up a good point about the gain on overall architecture. I guess, as someone who doesn't like writing code, how do you push forward without feeling all the little gains from incrementally working code?
Automated testing (unit and integration tests)
@@JoseAlcerreca Ugh. Yeah. You're right. I guess this is why solder is my favorite coding language.
This is why pseudocode as a concept exists. Write pseudocode, work out the low level implementation later.
@@Yp-ku4sy Yes, absolutely, or any other form of "noodling" in advance of writing code (or proceeding with another kind of project that has more than one component). Something as simple as post-it notes stuck on the wall will make the system design a hands-and-eyes-on process. Each note represents a functional block of code that you then code and test. Up-front noodling of this sort separates design from troubleshooting, clarifying the former and greatly simplifying the latter.
I'm reminded of the old (and no doubt politically-incorrect) joke about an old bull and a young bull on a hill, and the young one says, "Come on, Pop, let's run down the hill and get us a heifer!", to which the old bull replies, "No, son, let's walk down and get them all."
For my SP Racing FC tester, i designed a short-circut tester using 2 multiplexers, also have an io isolation board between the target board and the host board, power to target is controlled by mosfets, and only applied after circuit tester has tested power rails for shorts. power is cut if any rail is out-of-range. this has worked flawlessly for me so far.
Can you explain how you do this?
Quick tip, that thermal printer seems a little bit slow, what i suggest is buying a receipt printer (like those you may find in restaurant, you can buy one on amazon or ebay for like 50 $) and use the python-escpos library (really easy to use) to interface your raspberry with the printer! That library also supports ethernet connectivity, so when you will scale (hope you will) your production and testing you can hook up more testing gig to a single printer
Thanks @Stephen, i became fan of you, sharing your failure helps us 100s times more than just showcasing a finished item.
FYI: You can get variable-length pogo pins... longer pins for ground will contact first. Their fully compressed height is identical.
Nice job. One thing you can do with the printing that can be both handy, and save a little time, is to print each test result as it happens and then only print the overall PASS/FAIL at the bottom of the receipt. This way you are not running the tests and then waiting for output, the output happens as the tests are run. This may or may not be significant depending on how long the testing takes. The other nice thing is that if the whole thing dies mid-test, you have a live progress report on how far things got before it died.
its always good idea to design your jig so its rest state is no power on any pins. That you deliberately need to activate relay or something to have power present.
i really admire open source projects like this! great job :D youre making pcb manufacturing more accessible
Suggestion is to make the ground line pin longer So it would always be the first want to make contact
Hey guys. We're currently working on a cool software framework for automating testing in mass production of PCB. There's already a lot of stuff there - support for instruments, scanners, printers, databases. If you're interested, drop me a line here.
Here's a demo. ua-cam.com/video/mGoGg6JLOS4/v-deo.html
"Then the whole jig was buzzin'..." - T-pain's next track name
This is an underrated comment lmao
Also, be very mindful of USB connections to a PC while also having a separate 120VAC to DC adapter powering your board. Lots of high voltages and strange interference can occur.
For the 24v pin issue, just make the ground pogo pin taller so it touches first
Awesome, your channel is an inspiration. Thanks for the video.
The printer speed can be varied. Slower is higher quality print. Faster is appropriate for like say, a retail application.
Now I realize why all of the mounting holes are always connected to ground. So before anything is connected it is well grounded.
loved the video, I hope to buy an index kit down the line. I would absolutely love to see a video on panelization from you. Keep up the good work Stephen!
FYI. You may want to do a little research into thermal print paper - specifically the chemicals which can apparently transfer through the skin. Their are small inkjet printers available for this. As for blowing the inputs of the micro(s) - the keyword there is power sequencing - of which you may be now painfully aware. Keep up the good work. :-)
YESSSS panelizing
Does it check marlin successfully gets installed at the end?
Yup, it talks to it over serial and sends it a gcode command, sees it it gets a good response back!
I get that PCBWay is sponsoring you, and you probably aren't paying for the circuit boards, but sheeeeeeesh... 100x200mm is 67$, and your design calls for 2 per feeder...
That's a MASSIVE waste of money, when you consider most of the circuit board is empty.
I think it would be better overall to be a little more frugal, especially when you're already 3d printing most of the structure for the feeder, there's literally nothing gained by using an expensive circuit board as a structural component.
Split them into smaller boards, print recesses to index them into place, run FFC or ribbon cables from board to board.
In the long run, this is more cost effective, especially if later down the line you chose to alter the design, the boards can be upgraded seperately, instead of ordering a whole new board (or two per feeder) @ $67 each + shipping, add to that the mentions of 30+ feeders.. the cost is getting astronomically high..
Stephen -- if you're going to discuss panelization, then I hope you've had a chance to look at Kikit, and determine whether it fits your use case. And "nice work" in this video!
Panelization would be super nice to have a video about! :)
Don't add a relay for the 24V, add a MOSFET. It'll be cheaper and could be on the board with the trace you cut.
Panelization would be cool to learn about.
Such a cool jig! Can you share a link to the receipt printer you used? I need it
Me too!
If anything should be fail-safe, it should be a testing setup that takes boards in a completely unknown condition and tests for faults. So I ask, why is a fault condition killing both boards? The ground pin on the microcontroller could very well not be soldered correctly and cause the exact same issue, no?
Oh yeah, I'd like to see a good way to panelize PCBs!
All ways I tried felt very clunky and janky, I hope you know a nicer way!
why not have a little fuse before the 24v hits the big expensive chip?
Power the board slowly with current limiting and measure it against voltage
If theres problem it will draw more current but not damage chip then u can cut test
Which model of receipt printer did you get for this?
Put a power switch on the up down lever. When the lever is not in operating position kill ALL power to the UUT. This makes it automatic, open the jig the power goes off irregardless of software state or idiotic operators.
Can't you make it serially output the log to the PC? Could be a way faster result than waiting for the receipt to print out
would love to see some examples of the code for this. i have been thinking about trying to make some little testing rigs for some projects for a while now but im not really sure where to start.
why not have the ground pogo pins stick out a bit more then all the others so that the ground pins always connect first, no relais needed
Panelizing in kicad!
Know I'm late to this issue, but I design with pretty conservative rules, bare boards are tested, and assembled boards are AOI. In a run of about 2000 thru our assembly floor, we've only had at most 10 board issues. Couple guys still working on test jig, but will it really be worth the effort ?
Thank you from Turkey 🇹🇷
What about first testing ground? By applying a smaller voltage?
How would I know that the receipt is specific to my actual board and not a generic printout? What would stop you from printing out a bunch of receipts that had nothing to do with my board?
Yeah I got a roll of thermal printer labels in a box of stuff from an auction. Definitely has me wanting to buy a thermal printer, in what is totally a false economy.
And yeah the real black magic probe is nicer than homebrew ones. Though I wish the numbered breakout wires were labeled with something not numbers, I did recently get a breakout from Adafruit that I'll use to remedy that.
were you having problems with the arduinos incoming data serial buffer? If so, how did you fix it??
Are you planing to do an pre-release indiegogo or kickstater camping?
Interesting. Can you increase the speed of the receipt printer?
Wouldn’t having a separate isolated 24 volts be easier? Then only when the board is grounded the test jig will connect to its isolated ground then linking it and allowing it to test? Hopefully that makes sense but would likely need a lot of redesigning. (Extra pogo and pad on board)
Polyfuse would solve your issue. (a few cents instead of 80 bucks) However I don't get how you could burn the chip if there was no ground connection present... I mean without ground there is no current flow. (but I have no idea how the schematics looks like)
There would have been a connection to 24V and a connection to at least one data pin. This would allow one of the data pins (even one connected to a 5V signal) to act as a current sink for the 24V pin, basically burning a giant trough through the silicon in the chip.
GPIO pins have protection diodes that go to the power rail and GND. This provides a higher impedance path for power, but if GND isn't connected, 24V will end up using that path.
EEVBlog has a good explanation of this - ua-cam.com/video/2yFh7Vv0Paw/v-deo.html
@@aveekbh Still not clear, the video shows the case when the power is missing and not the ground. I've tested in spice and no current is flowing when either of the grounds are missing. (with both ground in place the 24V will burn the diode, because it flipsthe relative polarity) Also what does a 24V rail do on a GPIO port?
The spice model may not take into account that the clamp diode might fail short when 24V is presented on an IC pad that can tolerate 5 V (maybe 9 V). Also, the GND is connected on the controller board, so the current flows in to the micro there and finds a path to GND. All the devices (actual transistors in the IC) are only designed to handle 3.3V (with the GPIO cells for 5 V). Providing 4x that voltage can (and probably will) cause catastrophic failures.
What is the make and model printer you used?
If you find an easy to program for sticker printer, I would be very interested
I have to ask because I’m curious…is that a servo horn necklace??
When do you expect the index to come out?
Out of curiosity, what is that on your necklace? I noticed you usually have one of those on, or another one in a different color.
It kinda looks like a servo horn.. Maybe an avid RC-hobbyist as well?
Now to over clock that printer a bit, damn it’s slow ;)
Am I the only one wondering why that receipt printer is sooo slow, get a cheap receipt printer off Amazon that they use in shops there not too hard communicate with especially if you get an Epson one.
Printers are so 20th century! It would be far more useful to add a bluetooth or USB interface. It would be less expensive and would allow you to export test results instantly to any device, even a receipt printer.
He mentioned that all the data is also sent to a database.
Any chance you could post some of the code? I need to do the same thing and send receipts to an Epson thermal printer. I like the idea of using Rpi and BMP.
One question, why not use a standard test framework for running the tests?
this might just be me nit picking about this video but wither put an ND filter over your lens or bring down you exposure by anout half a stop
I would love to learn how to panelize boards!
I like these videos and I have no skin in the game.
What are your plans if the test board does not accept the test code?
I really like your way to explain your mistakes, make me realise that I am human and not just a dumb ass 🤣 even the best of us do theses mistakes.
I really want to design a bullshit project just as an excuse to use a receipt printer now...
testing is easy if you do unit testing :D
9:17 It still is Open Source though, so no worries in my armchair opinion, short of maybe making it less neatly integrated?
Panelizing 101 video please 😊
The pop and hiss video clips would get a lot of views fwiw.
make that 24v pogo shorter.
... If you're struggling to understand where an error in your code is, you should likely be writing unit tests...
I would upgrade to a real receipt printer, not one of those Chinese printer modules. They are very slow, and using a real receipt printer is about the same cost, is a lot faster, and also the nicer ones have a built in cutter, and could cut your receipts automatically.
i'd give all the rice in China to be able to have the skills you have
or you just plan the project properly and then write and test code incrementally.....
panelize me, daddy
diy microchips, not the biblical type, just silicon, do it
thsi was not service to you, buzz off