Silicon ChipATtiny816 Breakout and Development Board with capacitive touch - January 2019 SILICON CHIP
  1. Outer Front Cover
  2. Contents
  3. Publisher's Letter: It's getting hard to avoid tiny SMDs
  4. Feature: From body parts to houses: the latest in 3D Printing by Dr David Maddison
  5. Project: DAB+ Tuner with FM & AM and a touchscreen interface! by Duraid Madina & Nicholas Vinen
  6. Feature: A quick primer on stepper motors by Jim Rowe
  7. Project: ATtiny816 Breakout and Development Board with capacitive touch by Tim Blythman
  8. Product Showcase
  9. Serviceman's Log: Chasing wild geese isn't as fun as it sounds by Dave Thompson
  10. Subscriptions
  11. Project: Zero Risk Serial Link by Tim Blythman
  12. Review: “CircuitMaker” PCB software. It’s FREE! by Tim Blythman
  13. Project: The PicoPi Pro Robot by Bao Smith
  14. Vintage Radio: 1958 Stromberg-Carlson Baby Grand Radio by Associate Professor Graham Parslow
  15. PartShop
  16. Market Centre
  17. Advertising Index
  18. Notes & Errata: USB digital and SPI interface board, November 2018; GPS-synched Frequency Reference, October-November 2018; Automatic Reverse Loop Controller, October 2012

This is only a preview of the January 2019 issue of Silicon Chip.

You can view 40 of the 112 pages in the full issue, including the advertisments.

For full access, purchase the issue for $10.00 or subscribe for access to the latest issues.

Items relevant to "DAB+ Tuner with FM & AM and a touchscreen interface!":
  • DAB+/FM/AM Radio main PCB [06112181] (AUD $15.00)
  • Dual Horizontal PCB-mounting RCA sockets (white/red) [RCA-210] (Component, AUD $2.50)
  • PCB-mount right-angle SMA socket (Component, AUD $3.00)
  • 465mm extendable VHF whip antenna with SMA connector (Component, AUD $10.00)
  • 700mm extendable VHF whip antenna with SMA connector (Component, AUD $15.00)
  • PCB-mount right-angle PAL socket (Component, AUD $5.00)
  • Short Form Kit for the Micromite Plus Explore 100 (Component, AUD $75.00)
  • Case pieces for the DAB+/FM/AM Tuner (PCB, AUD $20.00)
  • Firmware (BAS and HEX) files for the DAB+/FM/AM Radio project (Software, Free)
  • DAB+/FM/AM Radio main PCB pattern (PDF download) [06112181 RevC] (Free)
Articles in this series:
  • DAB+ Tuner with FM & AM and a touchscreen interface! (January 2019)
  • DAB+ Tuner with FM & AM and a touchscreen interface! (January 2019)
  • Build-it-yourself DAB+/FM/AM radio (February 2019)
  • Build-it-yourself DAB+/FM/AM radio (February 2019)
  • Our new DAB+ Tuner with FM and AM – Part 3 (March 2019)
  • Our new DAB+ Tuner with FM and AM – Part 3 (March 2019)
Items relevant to "ATtiny816 Breakout and Development Board with capacitive touch":
  • ATtiny816 Development/Breakout Board PCB [24110181] (AUD $5.00)
  • ATtiny816-SFR programmed for the ATtiny816 Development/Breakout Board [2411018A.HEX] (Programmed Microcontroller, AUD $10.00)
  • Software for the ATtiny816 Development/Breakout Board [2411018A.HEX] (Free)
  • ATtiny816 Development/Breakout Board PCB pattern (PDF download) [24110181] (Free)
Items relevant to "Zero Risk Serial Link":
  • Isolated Serial Link PCB [24107181] (AUD $5.00)
  • CP2102-based USB/TTL serial converter with microUSB socket and 6-pin right-angle header (Component, AUD $5.00)
  • MCP1700 3.3V LDO (TO-92) (Component, AUD $2.00)
  • CP2102-based USB/TTL serial converter with microUSB socket and 6-pin right-angle header (clone version) (Component, AUD $3.00)
  • Isolated Serial Link PCB pattern (PDF download) [24107181] (Free)
Items relevant to "The PicoPi Pro Robot":
  • Sample programs for the PicoKit PicoPi Pro line-following robot (Software, Free)

Purchase a printed copy of this issue for $10.00.

ATtiny816 Breakout and Development Board with Capacitive Touch Now that Microchip has purchased their arch-rivals Atmel, good things are happening. They are starting to produce microcontrollers with some of the best features that we’ve come to expect from both companies. One such chip is the ATtiny816 and we’re going to describe its features and show you how to use them. by Tim Blythman W e’re fans of both the PIC and AVR families of microcontrollers for different reasons. So it’s exciting to see the two worlds come together now that the companies have merged. The new products are starting to combine the best features of the two families and the ATtiny816 is the one that we’ve chosen to use first. See the table below for a summary. One of the (few) drawbacks of this chip is that, like so many ICs these days, it’s only available in surface-mounting packages. But the 20-pin SOIC chip is not difficult to solder; however, you need some sort of “break-out” board to experiment with it. if you already have the latest PICkit, you won’t need any extra development tools. By the way, we published a review of the PICkit 4 in the September 2018 issue – see siliconchip.com.au/Article/11237 And you can use the same MPLAB X software that’s used to develop code for PICs, too, as long as you have the latest version (but note that this support is “beta” so it may be buggy). As well as showing you how to build and hook up the development board, this article will provide in-depth information on how to program it, including some sample software that will give you a good starting point. SILICON CHIP Breakout Board The ATtiny816 So we designed one! This board not only serves this purpose but also contains some extra components to let you take advantage of its inbuilt capacitive touch sensing. Basically, you get four pushbuttons and/or a slider control essentially for free – there are no components to install. The PCB itself provides these controls! We’ve also made provision on the board for five LEDs, because they’re useful for debugging and indication purposes and they also look nice. Plus we’ve provided a space to mount a CP2102-based USB/serial adaptor and a USB socket to get power to the chip. We read about the new ATtiny1607 chip in a Microchip advertisement in our November issue. We looked at its specifications and they seemed great but unfortunately, it is only available in a 24-pin VQFN package, which would PICkit 4 programming One of the thing that stops many people who are already into PICs from using AVRs is the need for a separate programmer. But now that Microchip and Atmel are one, they are starting to release AVR parts which can be programmed with the PICkit 4, and this is one of them. So 44 Silicon Chip ATtiny816 features Number of pins..................20 SRAM.............................512 bytes Flash memory...................8kB EEPROM..........................128 bytes Maximum clock freq............20MHz ADC channels....................12 x 10-bit Event System channels.........6 General Purpose I/O pins......18 (17 with UPDI enabled) Timers............................4 Communications................USART, SPI, TWI DAC................................1 x 8-bit Australia’s electronics magazine siliconchip.com.au be too challenging for many readers. That’s just the way things are going these days. But we decided to see if they had released any other, similar chips in larger packages. After extensive searching, we discovered that the ATtiny816 has many of the same new features and is available in a 20-pin SOIC package. If you compare it to the ubiquitous ATmega328P used in the Arduino Uno, the ATtiny816 is really not that “tiny”. It is at the lower end of the product range in terms of RAM and flash space but overall, its hardware features are a big step up from the ATmega328. The biggest change is the programming interface. The ATtiny816 is now programmed using the single-wire UPDI protocol, rather than the familiar four-wire SPI-compatible ICSP interface used on earlier ATmega and ATtiny chips. This is an evolution of the debugWire debugging interface. You can see a sample UPDI waveform in Scope.1. It uses a half-duplex asynchronous serial protocol. Since this programming signal is fed to the device’s reset pin, that maximises the number of available I/O pins for general purpose use. Despite using a single pin, this programming scheme is fast compared to the old ICSP system. Admittedly, the ATtiny816 only has 8kB of flash, but the delay between pressing the “Program” button and seeing the results is just a few seconds. We’ll now run through some of the outstanding features of this chip, especially those that jumped out as being bigger than we expected for such a “tiny” chip! For more detailed information, refer to the device’s data sheet at: http://ww1. microchip.com/downloads/en/DeviceDoc/40001913A.pdf You may want to refer to the panel “PIC vs AVR” at this stage, to get an idea of why we’re excited about the meeting of the two worlds. Analog inputs The 20-pin ATtiny816 has two power pins and seventeen I/O pins (eighteen if the programming function is disabled), of which twelve can be used as inputs for the 10-bit analog-to-digital converter (ADC) module. That’s twice as many possible ADC channels as the ATmega328 on an Arduino Uno board! The ADC can also be used to sample the output of an internal temperature sensor and the DAC module output. The chip also features a true (non-PWM) 8-bit DAC. It only has a single channel and can only use pin 4 (PA6) for its output, but it can be updated at 350kHz. It can be referenced to one of five internal reference voltages, but not, unfortunately, from Here’s the ATtiny816 Breakout Board connected to a PICkit4 programmer. The UPDI protocol only uses three pins, but we’ve included a header for all eight pins to ensure that it is connected correctly. siliconchip.com.au Scope.1: the UPDI one-wire program-ming signal used for this new generation of AVR chips. It appears to support reasonably fast re-programming of the chip. These new chips no longer support the old SPI-based incircuit programming system used in older AVRs like the ATmega328P used in the Arduino Uno. That frees up more pins for general purpose use. the 5V rail. The highest reference voltage available is 4.34V. It also has an analog comparator which can have its inputs connected to various I/O pins or the output of the internal DAC. Event System and Configurable Custom Logic The Event System and Configurable Custom Logic (CCL) are designed to reduce the software and hardware overhead of designs using the ATtiny816. The Event System runs independently of the core once set up, and is capable of triggering events when conditions are met, similarly to how interrupts are triggered. For example, a timer overflow can trigger the ADC module to start a conversion without a software interrupt handler being needed, removing the interrupt overhead and latency. Another possible use is to provide gated timing, using an internal timer to count how long a condition (eg, an analog comparator comparison) exists. CCL can be used to implement functions that would otherwise require external logic gates. CCL involves two programmable look-up tables, each of which takes three inputs from either external pins or internal peripherals. A truth table determines what the output value should be based on the input states, allowing the implementation of basic or relatively complex logic. A simple use case would be to mix the output from two timers to create a pulse modulated tone. There is an Application Note describing the Australia’s electronics magazine January 2019  45 USB POWER CON3 1 ICSP CON1 +5V 1–VDD 2–PA4/T1 4 CP2102 CON4 2 3–PA5/T2 3 4–PA6/LED1 GND 2 4 URX 3 5–PA7/T3 UTX 4 5 5 6–PB5 6 CP2102 CON5 +5V 1 GND 2 URX 3 4 6 7–PB4 7 8–PB3/RXD 8 9 9–PB2/TXD UTX 10 5 +5V 10–PB1/T4 Vcc PA4/AIN4 SCK/CLKI/AIN3 /PA3 PA5/AIN5 MISO /AIN2/PA2 MOSI/AIN1/PA1 PA6/AIN6 PA7/AIN7 PB5 /AIN8 RESET/UPDI/PA0 IC1 ATtiny 816 PC3 PB4 /AIN9 PC2 PB3/RXD/TOSC1 PC1 PB2/TXD/TOSC2 PC0 PB1/AIN10/SDA AIN11/SCL/PB 0 19 PA4 TOUCH 2 PA5 TOUCH 3 PA7 TOUCH 4 4 5 6 18 7 17–PA1 8 17 16–UPDI 16 15–PC3/LED5 15 MISO +5V 1 14 14–PC2/LED4 13 13–PC1/LED3 2 SCK 3 4 MOSI RST 5 12 6 AVRISP CON2 GND 12–PC0/LED2 11 11–PB0 20–GND 1k TOUCH 1 3 UPDI 18–PA2 GND 20 6 2 GND 19–PA3 1 +5V 1 1 +5V PB1 A LED  1 K 1k A LED  2 K 1k LED  3 1k A A A K 1k LED  4  LED 5 K K LED1 – LED5: ANY COLOUR AS REQUIRED LEDS < SLIDER > AT TINY816 BREAKOUT BOARD FOR PICKIT 4 SC 20 1 9 K A Fig.1: each pin of the chip is connected to a 3-pin header to make off-board connections easy. A programming header (CON1) is provided, along with a USB power input (CON3) and headers for a USB/serial adaptor (CON4/ CON5). Five LEDs are also included for debugging and feedback, plus the four capacitive buttons and slider. CCL and Event System that you can download at: http://ww1. microchip.com/downloads/en/AppNotes/DS00002451B.pdf Communications The ATtiny816 features a USART module, SPI module and TWI module. TWI stands for “two-wire interface”, and is a term often used to describe a bus compatible with I2C and SMBus. As well as a standard serial mode, the USART module also supports SPI master mode and RS-485 mode, and the SPI module supports master and slave modes. All three of the above modules have alternative pin mappings selectable in software, which allows the three modules to operate concurrently without interfering with each other. Timers The chip has three independent timer/counter modules as well as a 16-bit real-time clock (RTC) module. The RTC 46 Silicon Chip is suited for timekeeping tasks such as providing an application clock or generating periodic interrupts, and can be clocked from an internal low-power oscillator or an external watch crystal (for improved accuracy). This frees up the other timer/counters for duties such as input capture, waveform generation, PWM and motor control. The 12-bit Timer/Counter Type D (TCD) is specifically designed for motor control, being able to provide programmable dead time and respond to events from the Event System. That would be useful to react to faults (either from a digital input or the analog comparator), shutting down the motor control output under fault conditions without the delay of an interrupt service routine. 16-bit Timer/Counter A is suited for waveform generation and has three output compare channels. It can be split into two 8-bit timer/counters, each with three output compare channels, giving the possibility Australia’s electronics magazine siliconchip.com.au of up to six waveforms being generated simultaneously. Timer/Counter B is also a 16-bit unit, and is more suited for input capture type operations such as frequency and pulse width measurement. Its input is fed from the Event System, allowing both internal and external events to be measured. Both Timer/Counter A and B have selectable alternative output pins. Other features An internal voltage reference provides 0.55V, 1.1V, 1.5V, 2.5V and 4.34V references for use by the ADC, DAC and analog comparator. These are independent of the actual supply voltage. The 4.34V reference would only be usable with a 4.5-5.5V supply. The ADC can also use VDD as its reference. A CRC flash memory scan can be set to run and detect any errors which may occur over time in the flash memory. A non-maskable interrupt is generated if a CRC error is detected. Peripheral Touch Controller Details on this module in the data sheet are fairly scant. The data sheet states that “the user must use the Atmel Start QTouch Configurator to configure and link the QTouch Library firmware with the application software.” According to comments in online forums, the QTouch Library firmware can use up to 7kB of the ATtiny816’s 8kB of flash, and this is backed up by the fact that, according to the datasheet, the PTC is only available on the 8kB ATtiny816 and not the 4kB ATtiny416. That seems a bit excessive, and we didn’t like the idea of using the library code without fully understanding it. So, we went down a different path, and have written our own code to provide a basic touch interface using a similar technique. (See the Sidebar for more information about how the “Shared Capacitance Touch Sensing” works, and how we implemented it). We can’t claim that our software has the sensitivity or features of the QTouch Library firmware. For example, the QTouch Library can calibrate itself, and even detect when the touch sensors may be affected by moisture. Our system can’t do that. But it seems to work well despite this, Parts list – ATtiny816 development board 1 double-sided PCB coded 24110181, 99mm x 77m 1 CP2102 USB/Serial adaptor module (SILICON CHIP Online Shop Cat SC3543) 1 8-pin right-angle pin header (CON1) 1 2x3-pin header (CON2, optional) 1 mini type-B SMD USB socket (CON3) 1 6-pin header (CON4) OR 1 6-way female pin socket (CON5) 20 3-way pin headers (may be snapped from two 40-pin headers) 4 2-pin headers (optional; for external touchpads) Semiconductors 1 ATtiny816 8-bit microcontroller, wide SOIC-20 (IC1) 5 3mm LEDs, various colours (LED1-LED5) Resistors (all 1/4W or 1/2W 1% or 5%) 5 1kW (colour code brown-black-black-brown-brown or brown-black-red-gold) and uses a much smaller proportion of the flash memory. Microchip has made an excellent guide to the design of capacitive touch PCB buttons, wheels and sliders available at: http://ww1.microchip.com/downloads/en/appnotes/ doc10752.pdf We found some great ideas for what sort of touch sensors can be created from nothing more than PCB traces in that document. The development board The above is by no means a complete list of all of the features of the ATtiny816; just the ones that we thought were most notable. So that you can try out some of these features and incorporate one of these chips in a “breadboard” type set-up, we have designed a development/break-out board which allows you to program an ATtiny816 with a PICkit 4 and connect it up to external circuitry. PIC vs AVR We should explain the pros and cons of AVR vs PICs, as the ATtiny816 combines many of the advantages of both architectures. The main advantage that AVRs always had over 8-bit PICs was the use of a high-speed, high-efficiency RISC CPU core. It can process one instruction per clock and most AVRs can run with a clock up to 20MHz. So you could easily execute 20,000,000 instructions per second with a typical AVR chip. On the other hand, most 8-bit PICs execute one instruction for every four clock cycles. So even though some of them can run with a clock speed up to 48MHz, that equates to the execution of just 12,000,000 instructions per second – barely half that of the AVRs. Also, the AVR instruction set lends itself much better to compiler-generated code, so you generally get excellent results using the free avr-gcc “C” compiler, whereas PIC compilers used to cost money (they still do if you want all their features) and usually are far less efficient, generating larger and slower code by comparison. On the other hand, many PICs contain internal PLLs which allow them to run at maximum speed without an external crystal or siliconchip.com.au resonator. By comparison, AVRs are generally more limited. They mostly lack PLLs, but they usually do have one or more internal resonators. However, these may not allow them to operate at full speed. For that, you generally do need extra external components. Another advantage of PICs over AVRs is that they are programmed in one pass, with a single HEX file, whereas AVRs have a separate set of EEPROM “fuses” which need to be programmed to access all the device’s features. Not only is this a separate step but getting it wrong can effectively “brick” the chip. And even if you get it right, you may have difficulty reprogramming the chip afterwards, as the programming interface was traditionally clocked based on the crystal and oscillator settings. So there is a bit of a “chicken-and-egg” type problem programming many AVRs. Finally, PICs were usually cheaper than similarly-specced AVRs and often came with a much more full set of internal hardware peripherals. But that’s all changing now that Microchip is starting to add their generous hardware to AVR cores. Australia’s electronics magazine January 2019  47 VDD 19-PA3 3-PA5 18-PA2 IC1 ATtiny816 4-PA6 5-PA7 6-PB5 7-PB4 CON1 ICSP 1k GND 2-PA4 1 DAC 1k 1k 1k 1k USB POWER 17-PA1 16-UPDI 15-PC3 LED5 14-PC2 LED4 RX 8-PB3 13-PC1 LED3 TX 9-PB2 12-PC0 LED2 10-PB1 11-PB0 PA4 PA5 1 2 3V3 DTR RX TX GND 5V K PA7 3 24110181 K CON2 AVR ISP K SILICON18101142 CHIP CON5 CP2102 K R1 R2 R3 R4 R5 CON4 CP2102 K 3V3 DTR RX TX GND 5V LED1 LED2 LED3 LED4 LED5 CON3 PB1 4 < SLIDER > 24110181 ATtiny816 Breakout for PICKIT4 Fig.2: use this overlay diagram and photo of the development board as a guide during construction. You can choose to leave off parts that you don’t need. The most interesting feature of this board is the network of tracks at the bottom which provide the same function as four pushbuttons and a slider but with no actual parts needing to be soldered to the board! The circuit diagram for this board is shown in Fig.1. Each of the 20 pins on the chip (IC1) is broken out to three separate header pins, to make connections to external circuitry easier. There are five onboard LEDs, LED1-5, in case you need them. These light up when the following outputs go high: PA6 (pin 4), PC0 (pin 12), PC1 (pin 13), PC2 (pin 14) and PC3 (pin 15) respectively. Programming header CON1 has eight pins, to suit the PICkit 4 (the PICkit 3 only had six, and generally didn’t use the sixth). Theoretically, you only need the 5V, GND and UPDI connections to program the chip but the other pins are wired up for completeness. USB connector CON3 is purely to provide a source of 5V power to run the board (and IC1) – note that the PICkit 4 is not (currently) capable of supplying power to the board while programming a chip in UPDI mode. CON4 and CON5 make it easy to add a USB serial interface, which could be useful for debugging. These connectors are wired up to IC1’s default UART pins. If a CP2102 module is fitted, 5V power can come from this instead of CON3. As described earlier, the PCB incorporates four touch pads and a slider at the bottom. The pads and slider are both connected to the same I/O pins to simplify the code. The pins used to sense the four buttons are PA4 (pin 2), PA5 (pin 3), PA7 (pin 5) and PB1 (pin 10) respectively. An alternative use One thing to note is the presence of CON2, which is the old-style six-pin programming header. This is not provided for programming IC1 as this chip does not support such a programming scheme. Rather, it is included so that you 48 Silicon Chip can potentially use this board as a way to program older AVR chips using a PICkit 4. If you need to be able to do that, you can use this PCB and simply fit CON1 and CON2 – nothing else. You can then plug the PICkit 4 into CON1 and connect CON2 to your target device (eg, using a 6-wire IDC ribbon cable). It then simply acts as an adaptor between the two connector pinouts. Construction The PCB overlay for the development/breakout board is shown in Fig.2. Use this as a guide during construction. We recommend that you fit the ATtiny816 IC, IC1, first. Start by applying some solder flux to its pads, then locate the IC with its pin 1 dot towards the top left as per Fig.2. Tack solder one corner pin in place and check that all the other pins line up with their pads. If not, carefully adjust the IC by re-heating the solder joint and gently nudging it until it is located correctly. Then, tack the pin in the opposite corner and carefully solder each pin. Inspect the IC using a magnifier and remove any solder bridges using a dab of extra flux paste and some solder wick. Next, we suggest that you fit USB power socket CON3. Again, start by applying some flux to the pads, including the five small pins and the four large mounting pads. Drop the part in place and move it around until the plastic locating pins drop into the holes on the PCB. Then check that the five small signal pins line up correctly with the pads and tack one of the large mounting pins in place. Re-check the signal pin alignment, then solder the other three large mounting pins, followed by the five small sig- Australia’s electronics magazine siliconchip.com.au Shared Capacitance Touch Sensing Touch sensing technology allows simple and intuitive interfaces to be developed. While the touchscreens on our mobile phones are not quite the same thing as what we are demonstrating here, they utilise a similar phenomenon. The human body has a measurable capacitance, and we can change the intrinsic capacitance of a circuit by coming in contact with it. It may not even be a direct electrical contact; this effect works even when capacitively coupled across an insulating medium. Hence the two advantages of the touch sensor. There does not need to be direct contact between the circuit and user, and the actual sensor is nothing more than a means of coupling to the user; in effect, an antenna. In practice, the sensor is usually a PCB trace, perhaps matched by a second trace to shape and isolate the touch zone. This means the touch sensor has negligible extra manufacturing cost if the design already includes a PCB. We implemented two different touch sensing algorithms in our demo code. The first was inspired by some Arduino code dating from over ten years ago, which will work with any digital I/O pin. It measures the time constant of an RC network consisting of a pin’s internal pull-up resistance and the connected capacitance, including a finger if it is near the pad. While simple to implement, it is not very sensitive, with variations between the touch and no-touch state only differing by a count of one or two units. We haven’t used the code at all in our demonstration, but have left it in the “touch.c” file supplied, for interest’s sake. The second method, which the QTouch Library firmware also uses, is called shared capacitance sensing. From a theoretical point of view, it allows the value of an unknown capacitor to be determined using a known capacitance. Imagine a capacitor C1, with a known capacitance. We fully discharge this capacitor by shorting both ends to ground. Next, we take an unknown capacitor Cx and charge it up to a known voltage VS by connecting one end to ground and the other to a supply of VS. Now, we disconnect the capacitors from their respective supplies and connect them in parallel. This shares the charge between them, hence the name of the method. Once the voltages have settled, we separate the capacitors and measure the voltage across either of them (which will be the same), and call this VF. Starting with the capacitor charge formula Q=CV, and knowing that Q1 = 0 (because V1=0) and Qx = Cx.Vs thus: Qtotal = Cx.Vs We can solve this to give: Cx/C1 = VF/(VS-VF) From this, we can see that the larger CX is, the larger VF (our measured voltage) will be. In practice, for touch sensing, the exact value of CX does not need to be known. We just need to be able to detect a measurable change in its value. In our ATtiny816, C1 is the ADC module sampling capacitor, which has a value of around 10pF. CX is the capacitance of the item in contact with the sensor. Typical values for the human body are around 100pF, nal pins, which are partially hidden under the socket body. We have put slightly enlarged pads on the PCB to simplify soldering them. You should just need to touch the iron (with a bit of solder on the tip) to each pad and it will flow onto the pins. Only the two outside pads at the back of the USB socket are needed, as this socket is only used for power. The other pins may be soldered for completeness, but you must ensure they are not bridged to any pins, as they may stop the upstream USB socket from working correctly. If you have managed to bridged the pads, again use flux paste and solder wick to remove the bridges. Fit the resistors next, then the LEDs. Ensure that the cathode flat of each LED goes to the right (adjacent to the “K” mark), and that the longer anode leg is to the left. Solder right-angle programming header CON1 in place next. siliconchip.com.au so we can see that this is at a reasonable level for detecting with our method, keeping in mind that the touch circuitry will add extra capacitance to this amount. To discharge C1, we can instruct the ADC to take a sample from its internal ground reference. To charge up CX, we set the analog inpit pin to have its internal pull-up current source switched on (this is actually left on in between samples, so that the circuit is always ready). This brings Cx up to Vs. C1 will be disconnected from ground after its ADC sample is complete, and we disconnect CX from its supply by disabling the internal pull-up current. The capacitors are automatically connected together by taking an ADC sample of the pin, and the ADC reading becomes the voltage reading (VF), which we could put into the above formula if we wanted to work out the value of the connected capacitance. In practice, we take repeated ADC readings, and when we see a rise above a certain threshold, we report that a touch has occurred. Our prototype circuit gives readings of around 680 ADC counts whilst idle, rising to 900 when a touch occurs. These are equivalent to capacitances of around 20pF rising to around 100pF during a touch event. The slider uses a similar method, but combines the readings from several adjacent pins. In essence, the closer your finger is to one of the junctions in the slider, the more capacitance is detected at that point. By performing a linear interpolation between the pin positions in proportion to their measured capacitance, we can calculate the approximate touch location. You should only fit one of CON4 or CON5. Fit a vertical male header for CON4 if you want to mount a CP2102 module on the board permanently. Fit a vertical female header for CON4 or a right-angle female header for CON5 if you want to be able to plug a CP2102 module into the board. As noted above, you will probably not fit CON2 to the board. You would only do so if you are building it as a simple programming adaptor. In that case, CON1 and CON2 would normally be the only parts installed (possibly also CON3, if you want to be able to power the target from USB 5V). The 20 3-way male headers are the last essential components to fit. There is one for each pin on IC1. We find it easiest to solder one pin of each group before the rest; this allows the header to be adjusted if it is not quite vertical, before soldering the remaining pins. You may also choose to leave the header pads vacant if you don’t wish to do any prototyping, or you Australia’s electronics magazine January 2019  49 The challenges of working with a new micro With any new microcontroller, especially one that’s using a new compiler and programmer combination, you’re likely to run into a few minor roadblocks. Here’s what we found when we first started programming the ATtiny816 using MPLAB X. For a start, the XC8 compiler has traditionally been for PICs only but they have now added AVR capability (both Microchip’s XC8 and Atmel’s avr-gcc are based on the GNU gcc compiler). As a result of this history, the XC8 User Guide is PIC-oriented, and some of the documentation within does not apply to Atmel parts. For example, the syntax it gives for interrupt service routines (ISRs) is PIC-specific. The manual does not explain how to set up an ISR on an AVR part. Since we are using interrupts to handle the UART’s serial receive event, we had to resolve this. The code we were copying directly from the XC8 User Guide was being rejected by the compiler. Eventually, we found some code that from an Atmel Studio project (the software which was used to program AVRs before Microchip’s takeover). This compiled successfully. It has this format: ISR(USART0_RXC_vect){} We ran into similar problems trying to program the AVR’s configuration fuses (see the PIC vs AVR panel for an explanation of fuses). The tool for generating the micro’s configuration bits creates code in the same style as for a PIC microcontroller, but again, it does not compile. Like with the ISR, we found some Atmel Studio code that worked instead. It looks like this: FUSES = { .APPEND = 0, .BODCFG = ACTIVE_DIS_gc | LVL_BODLEVEL0_gc |    SAMPFREQ_1KHz_gc | SLEEP_DIS_gc,.BOOTEND = 0, .OSCCFG = FREQSEL_20MHZ_gc, .SYSCFG0 = CRCSRC_NOCRC_gc | RSTPINCFG_UPDI_gc, .SYSCFG1 = SUT_64MS_gc, .WDTCFG = PERIOD_OFF_gc | WINDOW_OFF_gc}; In any case, we have commented out this section in our code, so that the programmer will not touch the fuse settings on the chip. The chip’s default fuse values are suitable for our project, so leaving them as-is is a lower risk strategy. We also struggled to find the device I/O header file, which tells the compiler where all the various special registers are located in RAM and provides various handy macros for controlling I/O pins and so on. Eventually, we found it on our system in this folder: C:\ProgramFiles(x86)\Microchip\xc8\v2.00\dfp\include\ avr\iotn816.h We aren’t sure what “dfp” stands for. We also found, while experimenting with the compiler optimisation settings, that the code did not compile at all on optimisation level zero (no optimisation), but did so at level one. The error message said that the vector table had been truncated, which suggests that the compiled code may not fit in the available flash space, but it only uses 29% of flash space with optimisation enabled, so that seems like a huge difference. With all the above in mind, we eventually got the code to compile and work. The MPLAB X support for AVRs is still at a beta stage, so we expect many of these problems will disappear over the next few months as support matures. 50 Silicon Chip wish to solder components directly to the pads. The headers marked PA4, PA5, PA7 and PB1 allow you to connect to external touch-pads. These are not necessary if you will be using the onboard touchpads. We would recommend not fitting them until after you have experimented with the PCB touch pads, as having something extra connected will affect the pads’ capacitance and touch sensitivity. Installing the software You will need to install Microchip MPLAB X and the XC8 compiler on your system to compile the software and upload it to the chip. These are both free downloads from Microchip. But note that to get the full optimisations from XC8, you may need to pay for a license (not needed for this project. The MPLAB X IDE (integrated development environment) is cross-platform software that is available for Windows, macOS and Linux, so download the version appropriate for your system from www.microchip.com/mplab/ mplab-x-ide It allows you to edit and compile code, and upload the compiled code (HEX file) to the target chip – in this case, the ATtiny816. The XC8 compiler converts the C code into a HEX file (and optionally also an assembly language file). This is integrated with MPLAB X but you download and install it separately. When you install the MPLAB X IDE, it will also install drivers for the PICkit 4, if you don’t have them already. Ensure the PICkit 4 is plugged into your computer so that MPLAB X can identify it. By the way, this software can also be used to program PICs and some other Atmel chips. To use the AVR/PICkit 4 combination, you need to have MPLAB X version 5.05 or newer and XC8 version 2.00 or newer. Compilers, including XC8, can be downloaded from www.microchip.com/mplab/compilers You will also need to download the sample software for this project, available from the SILICON CHIP website. Extract the zip package to a convenient location. Compiling the demo code Once both packages are installed, launch the IDE, then use the File>Open Project menu option to locate and load the sample software that you extracted earlier. Next, rightclick on the project name which appears in the left-hand pane, and select Properties. Ensure Conf:[default] is selected, and check that your PICkit 4 is showing and selected under Hardware Tool, and that XC8 (v2.00) is selected under Compiler Toolchain. If all this is correct, click OK, and connect the ATtiny816 PCB to the PICkit 4 via the 8-way header, ensuring the arrows marking pin 1 line up. You will also need to ensure that the PCB is powered, either from a CP2102 module or via the Mini-B USB socket. Now click the button labelled “Make and Program Device”. This looks like an IC with a green arrow pointing down. The software should compile and then upload the program to the board. We have also provided a HEX file in the download package, which can be flashed directly to the ATtiny816 using the IPE (integrated programming environment) which is Australia’s electronics magazine siliconchip.com.au installed alongside the IDE, in case you are not interested in the code itself and don’t want to compile it. The demo code The sample software we have written demonstrates some of the exciting capabilities of the ATtiny816 chip. It includes functions to drive I/O pins, use the onboard DAC and ADC, the UART serial port, some basic real-time clock functions and capacitive touch sensing. The code to do this is contained within the “main” function of the “main.c” file, along with separate “library” files which perform specific functions. We were inspired by the Arduino language to create some similar intuitively named functions for these purposes. By default, the code continually monitors the touch pads on the PCB. If the pads are touched, then an LED lights up – LED lights for pad 1, LED3 for pad 2 and so on. The slider (which uses the same I/O pins as the pads) position is also read, and the position is displayed using LED1. It lights at a low intensity with a finger touching the left-hand end and with high intensity at the right-hand end. The granularity that can be achieved can be demonstrated by gradually moving a finger along the slider. This code also demonstrates the use of IC1’s internal DAC, which is used to fade LED1 in line with the touched position on the slider; it is not pulse-width modulated. Note that LEDs2-5 will also light up when the slider is used (and LED1 will change brightness when the pads are touched), since they are sharing the I/O pins on the microcontroller. Serial debugging data If you have a CP2102 USB-Serial module connected to CON4, you can also see the raw analog touch values that are being sampled. Open a serial terminal program (eg, the Arduino Serial Monitor, PuTTY or TeraTerm) at 9600 baud, select the appropriate COM port and you will see the data being sent to the terminal. If you have one of the more recent versions of the Arduino IDE (we are using version 1.8.5), you can also use its Serial Plotter function to show the values as a graph. This can be found under the Tools menu. The first four numbers printed on each line are the raw ADC readings from each touchpad on a scale from 0 to 1023 (see Fig.3). You can use this information, along with the formulas from the sidebar about Shared Capacitance Touch Sensing, to estimate the actual capacitance connected to the pin before, during and after a touch has occurred. The final number is the calculated slider value, which is zero if no touch has occurred and in the range 20 to 80 if a touch is occurring. The values are arbitrary but   demonstrate the resolution of the slider pad. Fig.3: example output of the ADC sample values corresponding to the sensed relative capacitance for each of the four pushbuttons and the slider. You can see that the four first values are fairly steady over time, while the last value is zero. If you bring your finger near or touch a button, one of the values will increase, indicating the added capacitance from your finger. If you find that touches are not being consistently and accurately detected, then the threshold and baseline levels in the program may need to be adjusted. A touch is detected when the raw ADC value rises above the baseline plus threshold value, so this should be set about halfway between the touched and untouched ADC values. Conclusion We found the ATtiny816 to be a capable device, and it was easy to work with once we had figured out the quirks of the compiler. But we were a bit disappointed that we could not think of good ways to demonstrate the other features of the microcontroller, such as the CCL or Event System. The 20MHz internal oscillator mode is rated to work down to around 4.5V supply voltage, but we did some quick tests with a 3.3V supply and found most things seemed to work adequately. But the performance does degrade slightly. For example, the ADC results appeared to drift more than with a 5V supply. Another ATtiny series chip, the ATtiny85, has even had a USB stack ported to it, so if the same can be done for the ATtiny816, then we can expect some interesting projects to appear. The small amount of RAM and flash memory appears to be limiting, but we expect this microcontroller will make a great peripheral IC to another micro, and we look forward SC to seeing if we can use it for other projects. If you want to experiment with programming other AVR ICs (such as the ATmega328 on an Arduino board), you can also use our PCB as an ICSP breakout for the PICkit 4. It appears configuration fuse programming is not supported yet. (We tried!) siliconchip.com.au Australia’s electronics magazine January 2019  51