<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>AVR on Voltaicforge</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/tags/avr/</link>
        <description>Recent content in AVR on Voltaicforge</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-au</language>
        <lastBuildDate>Sun, 29 May 2016 00:00:00 +0000</lastBuildDate><atom:link href="https://6e2dbc8c.voltaicforge.pages.dev/tags/avr/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Multiplexing Seven Segment with AVR</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/</link>
        <pubDate>Sun, 29 May 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/multiplex_sevensegment_avr_teaser.jpg" alt="Featured image of post Multiplexing Seven Segment with AVR" /&gt;&lt;h2 id=&#34;multiplexing-a-dual-seven-segment-display&#34;&gt;Multiplexing a dual seven segment display&lt;/h2&gt;
&lt;p&gt;Following on from driving a seven segment with an ATTiny2313a last &lt;a class=&#34;link&#34; href=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/&#34; &gt;post&lt;/a&gt; I swapped out the single seven segment for a dual seven segment that I bought from AliExpress. This one was a dual display with a similar set of 10-pin inputs like the last, single one. The pins from A-G+DP are different to the last, but more tellingly instead of two anode pins for the single display, there is now an anode pin for each segment. Power one pin with some of the LEDs pulling to ground and one lights up, power the other and the other one lights up. And if you power both, you get both sides displaying the same thing.&lt;/p&gt;
&lt;p&gt;I found a post at (&lt;a class=&#34;link&#34; href=&#34;http://codeandlife.com/2012/02/24/7-segment-multiplexing-with-uln2003-pnp-transistors/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;codeandlife.com&lt;/a&gt;) that helped me out with the timers &amp;amp; interrupts, which again I&amp;rsquo;ve found harder to find relevant code for:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/F5261bh_pinout.png&#34;
  width=&#34;639&#34;
  height=&#34;292&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/F5261bh_pinout_hu0df951933de623a5a1b0397c38808473_16128_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/F5261bh_pinout_hu0df951933de623a5a1b0397c38808473_16128_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Dual sevent segment dual display pinout&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;218&#34;
    data-flex-basis=&#34;525px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Here we need to multiplex. What is that? Well, multiplexing is described as:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Telecommunications. of, relating to, or using equipment permitting the simultaneous transmission of two or more trains of signals or messages over a single channel.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In this case, to drive one seven segment we have already used 7 pins + power. If we added another stand alone display, that would become 14. What about building a clock with 4 digits, do we go and get an MCU with 28 or more pins?&lt;/p&gt;
&lt;p&gt;Nope. What we do is setup an array of seven segments (two in this proof-of-concept case) which share a common set of lines to drive each LED. But we split the input lines (in this case anode) to the LEDS so we can drive them independent of each other. This enables us to set the AVR pins to sink current to enable one number, and turn the first part of the display on. After a brief delay, we turn that segment off, change the AVR pins for the second number, and turn on the second part of the display.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve measured this rig at between 5-15mA, depending on what is lit up (with a number 8 being the most)&lt;/p&gt;
&lt;blockquote class=&#34;book-hint warning&#34;&gt;
  &lt;b&gt;Warning:&lt;/b&gt; Keep in mind as well that an ATTiny2313a is rated to 20mA sourcing of current. Exceed that and you might burn it out!
&lt;/blockquote&gt;

&lt;p&gt;If we do this very fast (I measured the frequency at around 250mhz) the human eye blends together images and we see both sides lit up simultaneously. This is extremely common and you may be surprised to find where this occurs. If you have a DSLR, try taking very short exposures of LED displays!&lt;/p&gt;
&lt;h2 id=&#34;wiring-up-the-breadboard&#34;&gt;Wiring up the breadboard&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/multiplex_sevensegment_avr.jpg&#34;
  width=&#34;1200&#34;
  height=&#34;795&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/multiplex_sevensegment_avr_hu9567584493ea639d53483572da38b97a_364426_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/multiplex_sevensegment_avr_hu9567584493ea639d53483572da38b97a_364426_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Multiplexing a dual seven segment display with a ATTiny2313a&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;150&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;So I rewired the breadboard up similar to last time, but taking into account the different pins. Also, instead of +5 going to one of the anode pins of the seven segment I wired one anode of the seven segment to PD4 and the other to PD5 of the ATTiny2313 - this time the AVR will drive the anodes.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;avr-pin&lt;/th&gt;
&lt;th&gt;letter&lt;/th&gt;
&lt;th&gt;led-pin&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PB7&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;pin 10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB6&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;pin 9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB5&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;pin 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB4&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;pin 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB3&lt;/td&gt;
&lt;td&gt;E&lt;/td&gt;
&lt;td&gt;pin 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB2&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;pin 6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB1&lt;/td&gt;
&lt;td&gt;G&lt;/td&gt;
&lt;td&gt;pin 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;mdash;&lt;/td&gt;
&lt;td&gt;&amp;mdash;&lt;/td&gt;
&lt;td&gt;&amp;mdash;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;schematic&#34;&gt;Schematic&lt;/h2&gt;
&lt;blockquote class=&#34;book-hint info&#34;&gt;
  &lt;b&gt;Info:&lt;/b&gt; I couldn&amp;rsquo;t find a common-anode dual seven segment display on octopart - this is a quad display but imagine its only a dual display.
&lt;/blockquote&gt;

&lt;blockquote class=&#34;book-hint warning&#34;&gt;
  &lt;b&gt;Warning:&lt;/b&gt; The pinouts on this dont match above, again because the part isn&amp;rsquo;t present. If you follow this, check your part datasheet.
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/schematic_seven_segment_multiplex.png&#34;
  width=&#34;1208&#34;
  height=&#34;796&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/schematic_seven_segment_multiplex_hu09faf03f7f0f098e1fb33e686bf45482_93690_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-multiplex-seven-segment/schematic_seven_segment_multiplex_hu09faf03f7f0f098e1fb33e686bf45482_93690_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Schematic for muiltplexing two seven segment displays with a ATTiny2313a&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;151&#34;
    data-flex-basis=&#34;364px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;AVR_Multiplex_Seven_Segment.PDF&#34; &gt;PDF Schematic Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://circuitmaker.com/Projects/0B2CC870-16DB-4604-87C3-4571C2FBB3D5&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;View on CircuitMaker&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;code&#34;&gt;Code&lt;/h2&gt;
&lt;p&gt;With the below code, the display counts from 0-99. Brightness is fine, but can be a problem with more displays. AVR is running interal clock with clockdiv/8 fuse set.&lt;/p&gt;
&lt;p&gt;Here we use a timer to increment a counter each second. A second timer runs the multiplexing, with ~500 interrupts per second. Thats almost it!&lt;/p&gt;
&lt;blockquote class=&#34;book-hint info&#34;&gt;
  &lt;b&gt;Info:&lt;/b&gt; I have started using bit flipping defines for legible code and easy of use. Might annoy the purists!
&lt;/blockquote&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * PoorMansSevenSegment.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * A bodge program to run a seven segment without a BCD - 7 segment display decoder
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Created: 15/05/2016 6:50:30 PM
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Author : Nat
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define F_CPU 1000000UL &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//CPU speed, set clockdiv/8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;avr/io.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;util/delay.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;avr/interrupt.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Defines for  easy bit flipping
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_set(...)        bit_set_(__VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_set_(x,y)        x |= 1&amp;lt;&amp;lt;y            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// set a bit
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_clear(...)        bit_clear_(__VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_clear_(x,y)        x &amp;amp;= ~(1&amp;lt;&amp;lt;y)            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// clear a bit
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_test(...)        bit_test_(__VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_test_(x,y)        (!!(x &amp;amp; (1&amp;lt;&amp;lt;y)))        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// test a bit
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/*** following macros related to the PORTx - register only !    ***/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/***                                ***/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_dir_outp(...)    bit_dir_outp_(__VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_dir_outp_(x,y)    *(&amp;amp;x-1) |= 1&amp;lt;&amp;lt;y            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// access DDRx of PORTx !
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_dir_inp(...)    bit_dir_inp_(__VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_dir_inp_(x,y)    *(&amp;amp;x-1) &amp;amp;= ~(1&amp;lt;&amp;lt;y)        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// access DDRx of PORTx !
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_test_in(...)    bit_test_in_(__VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define    bit_test_in_(x,y)    (!!(*(&amp;amp;x-2) &amp;amp; (1&amp;lt;&amp;lt;y)))        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// access PINx of PORTx !
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// pin defines
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#define PORT_LED PORTB
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define DDR_LED DDRB
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define PORT_PWR PORTD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define DDR_PWR DDRD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// define Seven segment output ports for Vcc to Seven Segment
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#define LED0    PORTD, 4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define LED1    PORTD, 5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//binary representations of binary required to light seven segment 0-9
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mb&#34;&gt;0b11111100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b01100000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b11011010&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mb&#34;&gt;0b11110010&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b01100110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b10110110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b10111110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b11100000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b11111110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b11100110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;volatile&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i_timer_seconds&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;volatile&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i_active_display&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;seven_write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i_digit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// write to entire LED port - invert due to the fact that in a common anode display LOW = on.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// to use in a common cathode display, remove inversion.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;PORT_LED&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=~&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i_digit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ISR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TIMER1_COMPA_vect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// increment timer count
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;i_timer_seconds&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ISR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TIMER0_OVF_vect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;PORT_PWR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i_active_display&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// turn off LED
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;//toggle active display
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;i_active_display&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;^=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i_active_display&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;seven_write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i_timer_seconds&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;n&#34;&gt;seven_write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i_timer_seconds&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;PORT_PWR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i_active_display&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// turn on LED
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//disable interupts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//Data Direction Register, set all bits high
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;DDR_LED&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0xFF&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;                &lt;span class=&#34;c1&#34;&gt;// enable entire LED port as output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// set led common anode wires to outputs (PD4/5)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;bit_dir_outp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LED0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;bit_dir_outp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LED1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// init timer 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;TIMSK&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TOIE0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// timer 0 overflow interupt
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;TCCR1B&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;WGM12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// config for CTC mode
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;TIMSK&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;OCIE1A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// CTC interupt
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;OCR1A&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;15625&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;             &lt;span class=&#34;c1&#34;&gt;// prescaler
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;sei&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;TCCR0B&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CS01&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//timer 0 at clk/8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;TCCR1B&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CS11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CS10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//timer 1 at clk/64
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
        </item>
        <item>
        <title>Poor man&#39;s seven segment LED display with AVR</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/</link>
        <pubDate>Sun, 15 May 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/seven_segment_teaser.jpg" alt="Featured image of post Poor man&#39;s seven segment LED display with AVR" /&gt;&lt;h2 id=&#34;driving-a-seven-segment-display-with-no-bcd-to-seven-segment-chip&#34;&gt;Driving a seven segment display with no BCD to seven segment chip&lt;/h2&gt;
&lt;p&gt;I have gotten a batch of cheap seven segments from DealExtreme, and it was high time I put them through their paces.&lt;/p&gt;
&lt;p&gt;However, I have no BCD to seven segment chips. No matter, I can bodge it up just using 7 pins. So I ran through some code to just drive each segment with a pin from an ATTiny2313a.&lt;/p&gt;
&lt;p&gt;I found from the data-sheet for the 7-seg LED that it was a common anode. So that means I had to drive LOW to sink current to light LEDs - and keep HIGH to keep segments off.&lt;/p&gt;
&lt;p&gt;Starting off by working out the seven segment display and working out in a table which logic levels for each led; to drive the segments for numbers 0-9. I&amp;rsquo;m sure it was searchable online, but where&amp;rsquo;s the fun in that?&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/poormans_seven_segment_writeup.jpg&#34;
  width=&#34;795&#34;
  height=&#34;1200&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/poormans_seven_segment_writeup_hub93b819d2670c4d60beff054f8df3c25_195200_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/poormans_seven_segment_writeup_hub93b819d2670c4d60beff054f8df3c25_195200_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Working out which led&amp;rsquo;s to drive for each number&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;66&#34;
    data-flex-basis=&#34;159px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Using my new target board to hook up the 2313a to a breadboard - with 330Ω from each LED. I saw from the datasheet for the LED seven segment that it had common anode on pins 3 &amp;amp; 8. Using the pinout below I was able to breadboard connections. It was a simple case of matching up PB0-PB7 to match up with the led segments from the datasheet, via the letters.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/led_datasheet.png&#34;
  width=&#34;335&#34;
  height=&#34;260&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/led_datasheet_hue7f50d361d67c20f732309dd83c160c6_11119_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/led_datasheet_hue7f50d361d67c20f732309dd83c160c6_11119_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;6161BS seven segment wiring from data-sheet&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;128&#34;
    data-flex-basis=&#34;309px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;I hooked up PB0 through PB7 to the seven segment display, using the pinouts above to correlate to the pinouts I drew out. I did get tripped up on the direction here - thinking that PB0 was the highest bit in the register! Of course, it isn&amp;rsquo;t!&lt;/p&gt;
&lt;p&gt;So I ended up with:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;avr-pin&lt;/th&gt;
&lt;th&gt;letter&lt;/th&gt;
&lt;th&gt;led-pin&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PB7&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;pin 7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB6&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;pin 6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB5&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;pin 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB4&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;pin 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB3&lt;/td&gt;
&lt;td&gt;E&lt;/td&gt;
&lt;td&gt;pin 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB2&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;pin 9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PB1&lt;/td&gt;
&lt;td&gt;G&lt;/td&gt;
&lt;td&gt;pin 10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;mdash;&lt;/td&gt;
&lt;td&gt;&amp;mdash;&lt;/td&gt;
&lt;td&gt;&amp;mdash;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote class=&#34;book-hint info&#34;&gt;
  &lt;b&gt;Info:&lt;/b&gt; Pin 0 is not connected! When I added the binary to the code I added a trailing 0 to the binary to bump it up to 8-bit.
&lt;/blockquote&gt;

&lt;h2 id=&#34;schematic&#34;&gt;Schematic&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/schematic_poormans_seven_segment.png&#34;
  width=&#34;855&#34;
  height=&#34;645&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/schematic_poormans_seven_segment_hubc3862dac8b35084a2eb907574a7df76_62161_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/schematic_poormans_seven_segment_hubc3862dac8b35084a2eb907574a7df76_62161_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Schematic for ATTiny2313a Seven Segment display&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;132&#34;
    data-flex-basis=&#34;318px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;PoorMans_Seven_Segment.pdf&#34; &gt;PDF Schematic Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://circuitmaker.com/Projects/77BEF137-9137-430F-81A3-6B6F78F57DEB&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;View on CircuitMaker&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;code&#34;&gt;Code&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * PoorMansSevenSegment.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * A bodge program to run a seven segment without a BCD - 7 segment display decoder
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Created: 15/05/2016 6:50:30 PM
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Author : Nat
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define F_CPU 8000000UL &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//CPU speed, remove clockdiv/8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;avr/io.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;util/delay.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//binary representations of binary required to light seven segment 0-9
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mb&#34;&gt;0b11111100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b01100000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b11011010&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mb&#34;&gt;0b11110010&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b01100110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b10110110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b10111110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b11100000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b11111110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mb&#34;&gt;0b11100110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;DDRB&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//Data Direction Register, set all bits high
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;//change output of entire portb register to above hex (inverted, as its common anode and LED on requires sinking current.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;PORTB&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=~&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;_delay_ms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;end-result&#34;&gt;End result&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/seven_segment_poorman.jpg&#34;
  width=&#34;795&#34;
  height=&#34;1200&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/seven_segment_poorman_hu018b86b423c8ee8d819f5d88e50bd969_403130_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/poormans-seven-segment/seven_segment_poorman_hu018b86b423c8ee8d819f5d88e50bd969_403130_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Seven segment display, poorman style&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;66&#34;
    data-flex-basis=&#34;159px&#34;
  
&gt;
&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Error with device 0x000102 whilst programming AVR</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-device-00102/</link>
        <pubDate>Sat, 14 May 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-device-00102/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-device-00102/device_0x000102_avr_reset_short_teaser.png" alt="Featured image of post Error with device 0x000102 whilst programming AVR" /&gt;&lt;h2 id=&#34;device-is-read-correctly-the-first-time-but-fails-to-be-read-on-subsequent-reads&#34;&gt;Device is read correctly the first time but fails to be read on subsequent reads&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m building an AVR target board for a few different flavours of AVR to make my life easier.&lt;/p&gt;
&lt;p&gt;I had some &lt;em&gt;real fun&lt;/em&gt; trying to read the data-sheet pins back to front whilst soldering down the sockets, and had to have more than one go at getting the ATMega328P socket wired up correctly.&lt;/p&gt;
&lt;p&gt;I was using Atmel Studio 7 to read the device ID of various AVR chips I had on my board. When suddenly it would work on the initial read after power up - but subsequent reads would fail with the device ID being returned reading &lt;code&gt;0x000102&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-device-00102/device_0x000102_avr_reset_short.png&#34;
  width=&#34;805&#34;
  height=&#34;374&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-device-00102/device_0x000102_avr_reset_short_hu525d38fc0e7772734b6a0ff259679fce_26308_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/avr-device-00102/device_0x000102_avr_reset_short_hu525d38fc0e7772734b6a0ff259679fce_26308_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Picture of Atmel Studio 7 returning devide 0x000102 after a reset line short to ground&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;215&#34;
    data-flex-basis=&#34;516px&#34;
  
&gt;
&lt;/p&gt;
&lt;h2 id=&#34;reset-line-short-to-ground-stopping-reset-line-returning-to-high-post-programming&#34;&gt;Reset line short to ground stopping reset line returning to high post-programming&lt;/h2&gt;
&lt;p&gt;I had introduced a short on the reset line to ground when fixing my wiring. This was causing the reset pin to be low regardless of what the programmer did.&lt;/p&gt;
&lt;p&gt;This makes sense - the initial read works OK as the reset line is LOW. But the AVR chip never leaves programming mode until reset returns to HIGH. This is the reason we add pullups to the reset line.&lt;/p&gt;
&lt;p&gt;With the reset pullup being forced LOW all the time, the AVR never leaves programming mode, and a second programming attempt fails as the AVR is not reset back to the start of its programming phase.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>First AVR LED blinky</title>
        <link>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/</link>
        <pubDate>Thu, 05 May 2016 00:00:00 +0000</pubDate>
        
        <guid>https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/</guid>
        <description>&lt;img src="https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/avr_attiny_2313a_first_blinky.jpg" alt="Featured image of post First AVR LED blinky" /&gt;&lt;h2 id=&#34;testing-out-new-avr-gear&#34;&gt;Testing out new AVR Gear&lt;/h2&gt;
&lt;p&gt;Well, I’ve received the new programmers I ordered. Amongst them was the &lt;a class=&#34;link&#34; href=&#34;http://www.atmel.com/tools/atatmel-ice.aspx&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Atmel ICE&lt;/a&gt;, which I have chosen to be the first thing I would test.&lt;/p&gt;
&lt;p&gt;I’ve been meaning to get fully into MCU development, but I have to say that the Arduino craze didn’t really grab me. A sketch? Shield? Buy pre-assembled gear and push it together, copy and paste code?&lt;/p&gt;
&lt;p&gt;Pass. I prefer to code, learning and assembling circuitry myself and learning code from examples.&lt;/p&gt;
&lt;p&gt;I’m actually struggling a bit to find decent tutorials for MCU programming (I can’t be looking in the right places). However, it wasn’t too hard to figure out the pinout of the Atmel-ICE and compare to the pinout of the ATtiny 2313A using the data-sheets. I build a miniature shield that plugged in over the top of the MCU and had a neat little 6-pin plugin header (I may cover it in another post).&lt;/p&gt;
&lt;blockquote class=&#34;book-hint info&#34;&gt;
  &lt;b&gt;Info:&lt;/b&gt; The Atmel-ICE data-sheet nicely doesn’t include the direction of the tab in the user guide. The pinout on the user guide doesn’t include the tab on the 6-pin connector. I have added it to the data-sheet image below - the tabbed connector is on the side of MISO, SCK and RESET (for SPI programming)
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/atmel_ice_SPI_pinout_clarified.png&#34;
  width=&#34;206&#34;
  height=&#34;100&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/atmel_ice_SPI_pinout_clarified_hue9c08831f19e3c45bc457bd14b623727_3651_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/atmel_ice_SPI_pinout_clarified_hue9c08831f19e3c45bc457bd14b623727_3651_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Pinout of Ateml-ICE SPI 6 pin wire clarified with tab connector&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;206&#34;
    data-flex-basis=&#34;494px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;So after plugging in the programmer I confirmed all was well in Atmel Studio 7. &lt;code&gt;Tools -&amp;gt; Device programming&lt;/code&gt; gets you to the device programming screen, and selecting &lt;code&gt;Atmel-ICE&lt;/code&gt; tool and your chosen device (in my case I had the ATTiny 2313A, so I selected &lt;code&gt;ATtiny2313a&lt;/code&gt; from the device selection). The interface is &lt;code&gt;ISP&lt;/code&gt; and you can click Apply.&lt;/p&gt;
&lt;p&gt;Once this has been selected, you should be able to click on Read for the device signature. If it reads an address and target voltage, you have succeeded.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/atmel_studio_check_device_id.png&#34;
  width=&#34;763&#34;
  height=&#34;231&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/atmel_studio_check_device_id_hu3165ed16cc1b0970999c2b5db3e5a8fd_13264_480x0_resize_catmullrom_3.png 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/atmel_studio_check_device_id_hu3165ed16cc1b0970999c2b5db3e5a8fd_13264_1024x0_resize_catmullrom_3.png 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;Atmel Studio 7 Device programming screen confirming Device signature for ATtiny2313a&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;330&#34;
    data-flex-basis=&#34;792px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;I proceeded to load up a blinky led program to confirm all was well, and well, all was well.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/avr_attiny_2313a_first_blinky.jpg&#34;
  width=&#34;1200&#34;
  height=&#34;795&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/avr_attiny_2313a_first_blinky_hu49ba83949d675dc6df701e038fdae511_287207_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/avr_attiny_2313a_first_blinky_hu49ba83949d675dc6df701e038fdae511_287207_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;ATtiny 2313A dual-led blinking circuit&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;150&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
&lt;p&gt;Out of curiosity, I was interested to know the maximum frequency this would have out of the box on the output pins with no &lt;code&gt;_delay_ms()&lt;/code&gt;, with its default 1Mhz clock cycle (8Mhz internal oscillator with the CKDIV8 fuse clocking it down to 1MHz)&lt;/p&gt;
&lt;p&gt;Whilst I did leave it with two I/O operations per cycle, I did come up with a frequency of 103khz.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/avr_stock_max_freq_103khz.jpg&#34;
  width=&#34;1200&#34;
  height=&#34;795&#34;
  srcset=&#34;https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/avr_stock_max_freq_103khz_huc755c4aec7c2ca909a660ba5465e9920_316907_480x0_resize_q75_catmullrom.jpg 480w, https://6e2dbc8c.voltaicforge.pages.dev/p/2016/05/first-avr-blinky/avr_stock_max_freq_103khz_huc755c4aec7c2ca909a660ba5465e9920_316907_1024x0_resize_q75_catmullrom.jpg 1024w&#34;
  loading=&#34;lazy&#34;
  
    alt=&#34;DS1054z showing 103khz for AVR blinking circuit&#34;
  
  
    class=&#34;gallery-image&#34; 
    data-flex-grow=&#34;150&#34;
    data-flex-basis=&#34;362px&#34;
  
&gt;
&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
