7. Electronics design

Group assigment: test the equipment

The link: Roger

For testing the equipment we had the basic electronics class where we used some beds for testing the current, voltage and resistance of resistors and boards. I teamed with Roger for this and we played with an arduino kit.

I’ve used already a multimeter (or tester), but it was a long time ago when I was more used to their use, so a refresh and a little sandbox to play with was very handy.

In this class we used an arduino as a battery and used capacitors and different pieces to know how they work.

Multimeter

but the breadboards are difficult to understand if you don’t have a drawing

And when we used the multimeter we could see the difference between the positive and the negative current. Useful to know wher do you have to put your diodes or leds!

Multimeter

current in a way

Multimeter

current in the other way

Individual assignment

First I thought of doing a full ESP32 board that I could reuse. But personal schedule problems prevent me from this and also that I didn’t get where to connect everything or if we starts from Barduino what can I add or substract.

So finally I decided to do an ATtiny44 that seems more accesible.

I used Kicad because we had a Kicad class that helped with it.

Kicad worksflow

The kicad workflow is quite strict and you have to follow properly the steps. It reminded me when I first learnt AutoCAD when you have the drawing and you have “the model” and “the presentation” so you have several layers.

So the process it’s the following

1) You start with an idea of what do you want (by hand or you take frome somewhere). I think having a sketch is necessary so you have a map of what to do. In this case I have the echo board from Neil for the ATtiny44 echo board (1 side)

ATtiny44

In this case there is something that I learnt after doing all of this but I should have done better.

Types of pins

I think that it’s important to know at least the basic kinds of pins:

ATtiny44 the pins from an ATTiny44 as they come in the datasheet

Some important ones:

GND: this is always ground. 3V3/VCC/5V: this is always 3.3V or 5V. XTAL and XTAL2: This goes to the clock RESET: This is the reset buton.

Then, depending on the microcontroller you can check if the other pins are for, if they have analog to digital conversion or if they have internal pull-up or pull downs resistors.

They usually go with a PB[number] or PA[number] based on that you can check for other options.

In my case when I did this first design I wasn’t even sure about what’s a pull up resistor. (a pull-up resistor is a mechanism that ables to detect properly if something is connected or not)

Now you’re ready to open Kicad ATtiny44 now with windows 2000 like gui

2) Then you make the schematic with the Eeschema. This is going to be very abstract. Here you have to set the components and establish what goes with what. In this phase you don’t see it where it’s going to be yet. Only where are the connections.

ATtiny44 Here is the final result

An important idea where working here is to separate the components into functions. In this case, the clock (that we already have in the echo board), the pinsets (separate), the led and the button.

note

When you do this you have to set properly the libraries of the components you’re going to use. You need 2 things. The component itself (so you know how many pins does it have and the representation of them) and the footprint. The footprint it’s how phisically is set in the board. And both parts have to be linked to work. For the fabacademy components we have some specific libraries of the components we have so we don’t have to spend time finding them.

3) Once you have the schema, you can get a netmap. That is a file where there is the information of the components and the connections of all of them.

4) You go to the PCB Layout Editor.

In the PCB editor you have to load the netmap, check if you have all the footprints set and then you start untangling the mess and connecting it. In this case since we have the echo board as a reference we can go a bit faster because we know where does that go.

This is the result:

ATtiny44 It seems more 90 future stuff than it really is

It’s important to set properly the chanels and measure the space of the trace and between traces (because that’s where the mill is going to pass!)

When you’re done you can make the svg files. That’s going to be the outline and the traces files to send to the mods.

5) (optional) double Check the svg files with illustrator.

In my case the exterior line I made it with illustrator because it’s easier for me to use it rather than the Kicad.

6) Go to mods and double and triple check the result

(measure twice, cut once)

To check it I revised if the trace file that you can preview didn’t miss any spot.

If everything is ok you can mill the board! If not you can go back in the different steps.

Things I learn designing it

Important thing to know is that when adding something to a microcontroller you need to attach it to one of the free pins (you need to see which are those in the datasheet or be told) and the other point will be ground.

In my first test attempt I added the switch and the led (with the resistor) in the same pin but when I revised the file this was not an optimal disposition. The reason is that with 2 pins we can test and program the button and the led to do different things and have different routines that we can’t reach easily without them. For example that if you press the button the led starts to blink. If you want to do that without the microcontroller you would need a more complex circuit.

So after the second attempt I went to the CNC milling machine. For some reason (I think that the bed is too flexible) when I cut the traces of my board they got polished instead of cut.

ATtiny44

polished results from the CNC

So I had to retry a couple of times. In the third one the outmill went almost well but it still had polished uncut parts (in dark in the image) that I detected using the multimeter.

ATtiny44

seems well but no

When I tried to cut with a blade those parts a teared apart one of the lines so it was futile and I had to make it a fourth time.

The last cut went well but I couldn’t make the outline because we needed the machines to do barduino for all of us to the next weeks (due to Covid19) so I cut the outline manually with a guillotine.

ATtiny44

Powerful with a bit of sanding

Soldier process

That last day in the lab, I spend the time welding the Barduino that was printed so we can do the rest of the assigments and I can only managed to have the ATtiny44 soldiered to the board.

ATtiny44

The two shopping lists

ATtiny44

Result with the mircrocontroller but not the other components

Next day I went to a bazar and I bought a soldering iron and some soldering cable. I thought it was enough but days later when I had the time to soldier the board, I found that the cable was 2.0 mm and in the interior had something so it didn’t soldier properly. So that has to be stopped until I go back to the fablab or another hardware store.

ATtiny44

I was ready to soldier stuff!

ATtiny44

But the cable betrayed me. Top 10 anime betrayals

Some ~~days~~ weeks later I could get some wire from the lab.

This is waaaay different.

ATtiny44

in the middle there is some wire I could get

Now I can progress in the soldiering with the shopping list. Always checking with the multimeter everything is ok.

ATtiny44 ATtiny44

the multimeter is now off but I used it!

And finally:

Hero shot

ATtiny44

I am proud of my little child

Once the soldering is Off

Ok, now I have the board I designed from a variation of Neil’s. Now I have to have a ISP programmer… that I don’t have.

Using an arduino as a ISP programmer

I had to ask for an Arduino to Roger that lives in the same city I do (Because in the time we were separated from Barcelona in the lockdown).

I’m trying first to reprogram the malfunctioned Arduino I have. So I’m following this guide

ATtiny44

I had some errors, that may be have to do with the wiring. Following Oscar advice I test with the multimeter the arduino to check that the continuities are ok and the position of the ISP is correct.

ATtiny44

https://fabacademy.org/2019/docs/FabAcademy-Tutorials/week08_embedded_programming/attiny_arduino.html

The idea it’s first to test it with the program of echo that Neil made

Um, I try to burn the bootloader (As the tutorial says) and I have (Again) something that seems a wiring error

Arduino:1.8.12 (Windows 10), Tarjeta:"ATtiny24/44/84, Enabled, ATtiny84, 8 MHz (internal), EEPROM retained, B.O.D. Disabled, Clockwise (like damellis core), Enabled, Port A (CW:0~7,CCW:3~10)"

C:\Users\david\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude -CC:\Users\david\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3/avrdude.conf -v -pattiny84 -cstk500v1 -PCOM8 -b19200 -e -Uefuse:w:0xFF:m -Uhfuse:w:0b11010111:m -Ulfuse:w:0xE2:m -Uflash:w:C:\Users\david\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3/bootloaders/empty/empty_all.hex:i

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Users\david\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3/avrdude.conf"

         Using Port                    : COM8
         Using Programmer              : stk500v1
         Overriding Baud Rate          : 19200
         Setting bit clk period        : 5.0
         AVR Part                      : ATtiny84
         Chip Erase delay              : 15000 us
         PAGEL                         : P00
         BS2                           : P00
         RESET disposition             : possible i/o
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65     6     4    0 no        512    4      0  4000  4500 0xff 0xff
           flash         65     6    32    0 yes      8192   64    128  4500  4500 0xff 0xff
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel STK500 Version 1.x firmware
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000 (retrying)

Error quemando bootloader
Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
         Double check connections and try again, or use -F to override
         this check.


avrdude done.  Thank you.

Going back to the soldering station

I talked with Edu and Oscar and they told me that I have probably to resoldier the board because with the photo they noticed (thanks to the HD) that there were lots of improvements to do.

ATtiny44

notes from them via Zoom

And this is the result (also I revisited the soldiering of a couple of barduinos but those seems to be fine)

ATtiny44

Shinier than you

I think that what I’ve learnt from this (from Edu) it’s to not only test the trace but from end to end of the line (for example, from the ISP tip to the microcontroller pin, on the top of it)

Now the problem I have when I wire it again it’s this one:

ATtiny44

the error in the device signature

So now I’m not using an ATTiny 44? The arduino ide is looking for 1E 92 07 and the board is answering 0x 64996c

Digging up the error

I double checked that the microcontroller was the ATtiny44 (in this case ATTiny44a) but I tried once more and the bad device signature still happens but with another signature. Maybe it’s still a wiring problem?

Let’s check again.

Edu says that we need to change the microcontroller

Change the microcontroller

I unsoldier the microcontroller to change with another one. The bad news are that by doing so, I broke the traces and I can’t put them back together.

I think I need to mill another board. That would be the fifth?

Ugh.

ATtiny44

disaster.jpg

Once I change the microcontroller I realize that the traces are kind of broken. So I decided to mill another board.

New board

Now that I have access to the lab. I can mill another board easily. So I did. And I scraped what I could from the other board.

ATtiny44

scavenge feels good

Netrunner card

And it felt easier. Maybe because with the final project I’m having more experience with the soldier but I did it.

ATtiny44

Result

Testing again

So I tried to program it. I tried two ways. With a programmer AVRMKII that is available at the lab using a computer from the Lab (with the help of Josep).

ATtiny44

trying to plug it in

but it didn’t work.

I also tried at home using an Arduino board as a programmer. I had to be realy careful about the wiring.

ATtiny44

ATTiny pinout. The bottom image are the arduino ports you have to connect your attiny.

ATtiny44

wiring wiring wiring

In both cases I didn’t manage to program the board. It was something else but…

Pause to do the Final Project

I had to pause this to address the Final Project. So after some time and rest (and reaperture of the lab) I could…

Restart

Ok. So now that it’s september I can go back and look what happened in the board and why isn’t working… and thanks to Josep… he realized that… I put wrong the controler. I rotated it 180 degrees.

Rotated microcontroller

So that was the problem. The solution was to unsoldier it and soldier it again. I learn a trick of using a heat pistol (with care) to take out things with lots of legs.

ATtiny44

I love the retro-futuristic aeshtetics of this heat pistol

So this was the result. Now I have to soldier it again in the right position. Siiiigh.

ATtiny44

Now I’m ready to soldier it again. I almost can hear the microcontroller laughing at me

And this is the result

ATtiny44

Are you happy now, mr. microcontroller?

Problems with the programmer AVR (MKII)

Now the problem was with the AVR programmer and my windows10 computer (well, my wife’s). There were always kind of problems of not getting the programmer right. And that was annnoooooyiiiiing

ATtiny44

ATtiny44

If you ever get these kind of errors, the solution I’ve followed was installing the drivers unsigned manually. This is the tutorial (and the files)

https://boseji.com/posts/installing-avrisp-mkii-with-libusb-win32-on-windows10/

It’s long but it gets the job done. With all that now I can program my attiny OR NOT

Simple programming

Ok, for the programming I have a led and a button. And I had all the day trying to make it work, so let’s try something easy.

I tried the the serial echo program by Neil. But probably there is something that I miss (maybe that I have to open the other port to communicate) so I tried the Blink program.

ATtiny44

Finally it gets programmed

I go back to the pinout and the 7 was the pin of the LED and the 8 is the pin of the button. So a simple Blink would do.

Problems with the LED

And it was programmed but it didn’t work. We tested and the voltage with the multimeter was varying so the progamming was ok (FINALLY!) but the LED didn’t blink. So back to the soldiering station.

Finally the problem was that the leg in question wasn’t well connected.

ATtiny44

The last laugh of the bad microcontroller

After using more wire… and copperbraid I could correct it.

I also modified the program so it only blinked when I press the button (to add any kind of funcionality)

And it worked. Yay!

Hero Shot!

ATtiny44

IT’S ALIVE

only blink programming

blink when the button is pushed

http://fab.cba.mit.edu/classes/863.16/doc/tutorials/fabisp_programming/#windows

Design files

Remember to use download link as.. to download the files.

Other thoughts

These are notes from the session of April, the 21th.

  • Remember to use a capacitator.

  • Remember that if using connectors, it can be a good idea to have a simmetrical connector with duplicates to reduce the posibility of disconnection. Use something like GND VCC VCC GND

Further design. Attiny1614

This is written after doing the final project presentation and with more knowledge acquired.

Ok, so we’re not done yet. I want to add another board designed by me. And since I hate the ATTiny44 I’ve used (Because what happened and because it doesn’t have serial communication to debug) I want to do a board with

  • An ATTiny1614

  • An input

  • An output

  • As a plus, I2C to connect to the barduino and do stuff

  • An embedded LED.

Starting the design

So the list now is

  • An Attiny1614

  • An UPDI connection

  • An FTDI connection

As a basic. For the output

  • A pin with resistor (220 ohms, but it will be 100 ohms)

  • A ground connection

  • A pin with a resistor and an LED connected to ground.

For the input

  • A pulled down pin so a pin with a connection with ground.

  • A pin to VCC

For the I2C

  • 2 pins

  • VCC

  • Ground

With all that, before going to kicad, I’m going to do a drawing of it. Since I have the Neil’s example I have a glimpse of the scale of it and make a first draft.

And this is it.

ATtiny1416

Changes of the design

Ok, having the input of Oscar the instructor and also from Adrian from FablabLeon (he showed me the Adrianino he made) I correct some stuff

Looking at this image I can correct some pins that can be better assigned:

ATtiny1416

Here we can see

  • that the pins that are SCL and SDA are the B0 and B1.

  • That A3 is PWM (so it can be better suited for output)

  • That A2 has an interrupt. So it may be better suited for using the shock input.

Also a doubt that I have is that the I2C has no clear protocol. There is some by grovy that is SCL/SDA/VCC/GND but it’s not that standard so I can play with it because I don’t feel comfortable to have VCC next to ground.

ATtiny1416

Also there is a problem about the input. Barduino works at 3V3. FTDI goes on 5V. Attiny can go either 5 or 3V3 buut not both at the same time. So maybe put a power regulator for that. Aaaand since maybe also the input comes from 3V3 and the regulator it’s not going to come, let’s add a jumper.

Now I feel more confident going to Kicad

Schema

And this is the schema with several parts done in kicad.

ATtiny1416

ATtiny1416

ATtiny1416

I had to add a capacitor that I thought I added but I didn’t.

PCB

Then going to the PCB board I untangle the untangable

ATtiny1416

And I add some space because I want to add some text for the David of 2022 who doesn’t want to see this documentation with much care in order to know which pin does what.

ATtiny1416

I added the text in Photoshop because it’s easier.

And then go to mods.

ATtiny1416

ATtiny1416

I tried the idea of separating the cuts and make one cut for the text (with 1 offset) and the 4 offsets for the rest of the traces. But they overlap and I wouldn’t read the text. And also the problems took too much time to resolve

Problems

  • I put the wrong machine (I’m milling in a SRM and I put the MDX) and I scaled the drawing by doing that u.u

  • Josep found before cutting a failure wher ethe mods was going to make a shortcut. Fixed in Photoshop and in Kicad.

But now it’s working well. I hope so, at least!

Programming

Here I’ll link back to the programming week to deal with all the shenanigans of programming. And I hope I don’t have to go back here to redesign anything!

It seems that after a long journey I can establish the workflow to program the updi. It’s not the most confortable buuuut…

You can check it out here