Half-Byte’s Embedded Tiny Basic is ready!

Half-Byte’s Embedded Tiny Basic is ready!

The Half-Byte Embedded Tiny Basic is a subset of Half-Byte Tiny Basic. It does not contain the video or PS/2 style keyboard support and, thus, all of the graphical functionality has been removed.  Serial communication is the only way to upload or write Basic programs in this version.  The purpose to provide a quick, easy way to create applications for your devices.

Half-Byte developed a programmable clock using two 8×8 LED Arrays, using the Maxim 7219 chip, an HC-06 Bluetooth module, DS1307 based RTC, DHT-11 temperature sensor and a Half-Byte Console board.  Embedded Tiny Basic runs the device and, via Bluetooth, it is easy to program the clock.  I use Tera Term to connect to the device and can either type in a program or copy and paste one for quick upload.

Embedded Tiny Basic is tailored for these devices, the DHT-11 and the 8×8 LED Arrays, but it would be easy enough to change for what ever sensors you wish.

The download package contains the libraries, documentation and sample code as well as the Embedded Basic sketch.  Arduino IDE 1.6.x and up should work. I have used 1.6.7 and 1.8.1 for Windows Store and it compiled fine.

Embedded Basic Specific Features

  • 8×8 LED ARRAY
    • SCROLL variable or function
    • SCROLL “quoted text”
    • SET column, row, on or off
    • DIRECTION direction (where direction is 1 for left, 2 for right, 3 for up, 4 for down)
    • BRIGHT x (where x is a value from 0 to 15) Controls the brightness of the LED Array
  • CLOCK (DS1307)
    • TIME (displays the time and date on the array)
    • SETTIME hours, minutes, seconds, day, month, year (sets the time and date…all parameters must be supplied.)
    • x=HOUR(0) (returns the current hour to the variable ‘x’, can be any variable)
    • x=MINUTE(0) (returns the current minute to ‘x’)
    • x=DAY(0) (returns the current day to ‘x’)
    • x=MONTH(0) (returns the current month to ‘x’)
  • TEMPERATURE SENSOR
    • TEMP (sends the temperature to the array)
    • HUMID (sends the humidity to the array)
    • x=TEMP(0) (returns the current temperature to ‘x’)
    • x=HUMID(0) (returns the current humidity to ‘x’)
  • MISCELLANEOUS
    • TONE pin, pitch, duration (sends a tone, specified by pitch, to pin for the duration)
  • TIPS
    • Use IF IN(0)<>-1 GOTO xxxx as an interrupt.  This tests the Serial in pin for something other than a -1.  -1 means there is nothing coming in on the serial pin. A non -1 value means the user likely hit a key on the keyboard of the Serial device. Useful for Bluetooth connections over serial, like the HC-06.
    • SAVE your program and it will autorun when the device is restarted. You will have three seconds to interrupt the autorun sequence (pressing a key will do.)
    • Combine statements where possible to save space.
    • Use ? instead of PRINT
    • Every effort has been made to fully debug Embedded Tiny Basic, but there may be some things that have been missed. Please feel free to let us know on the blog via comments of the Facebook page.

Please feel free to share any programs you have written in Embedded Tiny Basic as well as suggestions, tips, tricks, complaints, etc. As stated above, you can do so here on the blog via comments or on the Facebook page (https://www.facebook.com/eightbitsblog/)

SAMPLE CODE:

100 SCROLL"   Half-Byte Clock. "
110 TIME
120 SCROLL " Indoor temp is "
125 IF IN(0)<>-1 GOTO 500
130 TEMP
140 SCROLL " Humidity is "
150 HUMID
160 SCROLL "% "
170 H=HOUR(0):M=MINUTE(0)
180 IF H=11 IF M>30 IF M<40 TONE 8,1024,2048
200 IF IN(0)<>-1 GOTO 500
300 GOTO 100
500 SCROLL "Done"

Note: line 180 acts as an alarm. If the time is 11:30am, a sound will play for
about two seconds. Lines 125 and 200 checks for a signal on the Serial in pin. 
If it is there, control transfers to line 500 and stops.

Download here.

 

Advertisements

Accurately reading analog pins, making Half-Byte Tiny Basic do the same and a fix for LiquidCrystal_I2C

temperaturesensor-128-300-225-80While experimenting with a new to me temperature sensor, I was a bit puzzled as to how to read the sensor. It has three pins, voltage, ground and signal. Well, it is obvious on how to connect the pins, power and ground and, since it was temperature sensor spitting out an analog signal, I figured one of the analog pins would suffice. I was correct about that, but, then, I did not know how to interpret the results. There is actually very little on the ‘net about this thing. It is a TMP-01 from OSEPP. Even the OSEPP web page has little on the device. I actually found out how to interpret the device on the SparkFun Galileo page (https://learn.sparkfun.com/…/sik-galileo—part-7-reading-a…)

One thing about Arduino chips (like the 328) have a built in voltage measuring mechanism. Yes, that’s right, it has a built in voltage meter of sorts.

On that page, there is this code:

Example sketch 07

TEMPERATURE SENSOR

Use the “serial monitor” window to read a temperature sensor.

The TMP36 is an easy-to-use temperature sensor that outputs
a voltage that’s proportional to the ambient temperature.
You can use it for all kinds of automation tasks where you’d
like to know or control the temperature of something.

More information on the sensor is available in the datasheet:
http://cdn.sparkfun.com/datasheets/Sensors/…/TMP35_36_37.pdf

Even more exciting, we’ll start using the Arduino’s serial port
to send data back to your main computer! Up until now, we’ve
been limited to using simple LEDs for output. We’ll see that
the Arduino can also easily output all kinds of text and data.

Hardware connections:

Be careful when installing the temperature sensor, as it is
almost identical to the transistors! The one you want has
a triangle logo and “TMP” in very tiny letters. The
ones you DON’T want will have “222” on them.

When looking at the flat side of the temperature sensor
with the pins down, from left to right the pins are:
5V, SIGNAL, and GND.

Connect the 5V pin to 5 Volts (5V).
Connect the SIGNAL pin to ANALOG pin 0.
Connect the GND pin to ground (GND).

/*

This sketch was written by SparkFun Electronics,
with lots of help from the Arduino community.
This code is completely free for any use.
Visit http://learn.sparkfun.com/products/2 for SIK information.
Visit http://www.arduino.cc to learn about the Arduino.

Version 2.0 6/2012 MDG
*/

// We’ll use analog input 0 to measure the temperature sensor’s
// signal pin.

const int temperaturePin = 0;

void setup()
{
// In this sketch, we’ll use the Arduino’s serial port
// to send text back to the main computer. For both sides to
// communicate properly, they need to be set to the same speed.
// We use the Serial.begin() function to initialize the port
// and set the communications speed.

// The speed is measured in bits per second, also known as
// “baud rate”. 9600 is a very commonly used baud rate,
// and will transfer about 10 characters per second.

Serial.begin(9600);
}

void loop()
{
// Up to now we’ve only used integer (“int”) values in our
// sketches. Integers are always whole numbers (0, 1, 23, etc.).
// In this sketch, we’ll use floating-point values (“float”).
// Floats can be fractional numbers such as 1.42, 2523.43121, etc.

// We’ll declare three floating-point variables
// (We can declare multiple variables of the same type on one line:)

float voltage, degreesC, degreesF;

// First we’ll measure the voltage at the analog pin. Normally
// we’d use analogRead(), which returns a number from 0 to 1023.
// Here we’ve written a function (further down) called
// getVoltage() that returns the true voltage (0 to 5 Volts)
// present on an analog input pin.

voltage = getVoltage(temperaturePin);

// Now we’ll convert the voltage to degrees Celsius.
// This formula comes from the temperature sensor datasheet:

degreesC = (voltage – 0.5) * 100.0;

// While we’re at it, let’s convert degrees Celsius to Fahrenheit.
// This is the classic C to F conversion formula:

degreesF = degreesC * (9.0/5.0) + 32.0;

// Now we’ll use the serial port to print these values
// to the serial monitor!

// To open the serial monitor window, upload your code,
// then click the “magnifying glass” button at the right edge
// of the Arduino IDE toolbar. The serial monitor window
// will open.

// (NOTE: remember we said that the communication speed
// must be the same on both sides. Ensure that the baud rate
// control at the bottom of the window is set to 9600. If it
// isn’t, change it to 9600.)

// Also note that every time you upload a new sketch to the
// Arduino, the serial monitor window will close. It does this
// because the serial port is also used to upload code!
// When the upload is complete, you can re-open the serial
// monitor window.

// To send data from the Arduino to the serial monitor window,
// we use the Serial.print() function. You can print variables
// or text (within quotes).

Serial.print(“voltage: “);
Serial.print(voltage);
Serial.print(” deg C: “);
Serial.print(degreesC);
Serial.print(” deg F: “);
Serial.println(degreesF);

// These statements will print lines of data like this:
// “voltage: 0.73 deg C: 22.75 deg F: 72.96”

// Note that all of the above statements are “print”, except
// for the last one, which is “println”. “Print” will output
// text to the SAME LINE, similar to building a sentence
// out of words. “Println” will insert a “carriage return”
// character at the end of whatever it prints, moving down
// to the NEXT line.

delay(1000); // repeat once per second (change as you wish!)
}

float getVoltage(int pin)
{
// This function has one input parameter, the analog pin number
// to read. You might notice that this function does not have
// “void” in front of it; this is because it returns a floating-
// point value, which is the true voltage on that pin (0 to 5V).

// You can write your own functions that take in parameters
// and return values. Here’s how:

// To take in parameters, put their type and name in the
// parenthesis after the function name (see above). You can
// have multiple parameters, separated with commas.

// To return a value, put the type BEFORE the function name
// (see “float”, above), and use a return() statement in your code
// to actually return the value (see below).

// If you don’t need to get any parameters, you can just put
// “()” after the function name.

// If you don’t need to return a value, just write “void” before
// the function name.

// Here’s the return statement for this function. We’re doing
// all the math we need to do within this statement:

return (analogRead(pin) * 0.004882814);

// This equation converts the 0 to 1023 value that analogRead()
// returns, into a 0.0 to 5.0 value that is the true voltage
// being read at that pin.
}

BUT

There is more to it. In order to get a more accurate voltage, you have come up with the reference voltage and use it instead of the .004882814 used above.

 This site: https://hackingmajenkoblog.wordpress.com/…/making-accurate…/
 has a really nice explanation and some code to get the reference voltage:
 long readVcc() {
 long result;
 // Read 1.1V reference against AVcc
 ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
 delay(2); // Wait for Vref to settle
 ADCSRA |= _BV(ADSC); // Convert
 while (bit_is_set(ADCSRA,ADSC));
 result = ADCL;
 result |= ADCH<<8;
 result = 1125300L / result; // Back-calculate AVcc in mV
 return result;
 }
And call it like this:
 unsigned int ADCValue;
 double Voltage;
 double Vcc;

 Vcc = readVcc()/1000.0;
 ADCValue = analogRead(0);
 Voltage = (ADCValue / 1024.0) * Vcc;

Call that function to get your reference and use that where ever you need, such as the temperature sensor.

Making Half-Byte Tiny Basic Accurately Those Analog Pins too!

I am adding a function to Half-Byte Tiny Basic to return this value.
It goes like this:
250 a=VOLT(0)
260 print a,”,”,a/1000
Line 250 gets the reference voltage
Line 260 displays the voltage and the voltage divided by 1000. The returned voltage is in the thousands, so you must divide by 1000 to get the actual value.

Using AREAD in conjunction with VOLT should give you the ability to read, accurately, the analog pins that have some kind of sensor attached to them that does not need a library to read them, like the TEMP-01.

Fix for LiquidCrystal_I2C not displaying the whole string

This also brings me to another issue…the LiquidCrystal_I2C library.  The newer versions of the GCC compiler that is used in the latest versions of the Arduino compiler have a problem: they only display one character instead of the entire string.  I spent a lot of time trying to figure out what I was doing wrong, but, it turns out, there is a bug in the library.  I found another that corrects the bug and you can download it from here.

Embedded Tiny Basic: build apps for your projects

Embedded Tiny Basic: build apps for your projects

I, recently, embarked on building a useful if not glitzy digital clock. My first idea involved something retro: using four, seven segment, LED’s to look like something from the late 1970’s.  At the same time, I was also playing around with 8×8 LED Arrays, using the MAX7219 chip.  While playing with that, I connected one of my 1307 RTC’s to the array and loaded up a sketch to show the date and time on the arrays.  Then, it hit me…this is a much cooler clock and I can do more with it.

So, I built a prototype using one of my Half-Byte Console boards, minus the video, audio and Nunchucky connector.  Hardware wise, it was really simple…connect the arrays to pins 10, 11 and 12, the RTC to A4 and A5 and, for extra coolness, a BMP180 temp and humidity sensor to the sca and scl on the RTC.  Viola! modify the code to handle the BMP180 and Presto! A cool clock.

wp_20170121_01_55_22_pro

Prototype clock for developing Embedded Tiny Basic

I decided to build a second one to take to work.  I thought it might be useful to be able to throw up a custom message to scroll for when, say, I was in a meeting. The more I thought, the more I was convinced this thing needed some kind of control program that would be easily modified from, say, a smartphone and Bluetooth.

Well, I already had the genesis of that control program: Half Byte Tiny Basic.

So, I looked at the source and made a copy.  I then went in and removed stuff I would not need, like all of the graphics statements and functions. I removed the TVOut library, and  all of the video handling code. And TONE.  I miss TONE.

I did not need the Nunchuck code, so it was gone as well.  What was left was a nice, small shell of my control program.  I added the libraries for the 8×8 LED Array (MAXMATRIX) and added statements to manipulate the arrays: SCROLL to display text, SET to turn on or off individual LEDs, and DIRECTION to tell the arrays  which way to scroll the text.  I already had code to handle the DHT-11 temperature sensor, so I left that in (and decided to use it instead of the BMP180) and added T

wp_20170122_21_13_11_pro

Random dots on the clock

EMP and HUMID to scroll those values across the arrays, and added code for the RTC.I was going to add a mechanism that would interrupt the running program if a signal from the serial device was detected, but, there was already one there…the IN(0) function. So I left it. I now had a decent little programming language for the clock.  With HB Tiny Basic’s ability to autorun whatever is in the EEPROM, if it lost power, th

wp_20170119_15_23_11_pro

Clock, in action

e clock would just start running on its own. Sweet!

 

The HC-06 Bluetooth module works very nicely. It connects to the serial pins and communicates as if the device were connected directly to the controlling device-a PC or smartphone.  Everything fits nicely into these cheap pencil boxes I picked up from Wal-Mart for a buck each. They are just big enough for the HB Console board and are wide enough for the LED Arrays.  They don’t look all that impressive, until you power up the clock…the bright LED’s shine through the translucent plastic nicely.

Embedded Tiny Basic is useful for giving some level of intelligence to other wise dumb devices.  While you only have about 1K of RAM to use for Embedded Tiny Basic, I think that will be adequate for most things.  There is, currently, no motor control, but it could be quickly and easily added.  The functionality that is there is probably going to be good for quite a few projects.  If not, it can be modified quickly.  I am already seeing where it can be modified, even for just this particular project.  I have a few others in mind, so stayed tuned for those.

In the mean time, below is a list of the additions and a release date for the language is forthcoming.  I need to clean up the code-a bunch-before releasing it and, as well, making sure I have all you will need in order to compile and use Embedded Tiny Basic.

 New statements and function:
  • SETTIME hours,minutes,seconds,day,month,year
    • sets the time and date for the RTC
  • SET col,row,on or off
    • Turn on or off the LED at column, row
  • X=HOUR(0)
    • Get the current hour
  • X=MINUTE(0)
    • Get the current minute
  • X=MONTH(0)
    • Get the current month
  • X=DAY(0)
    • Get the current day
  • SCROLL var or “text”
    • Scrolls whatever is in the quotes
    • If there are no quoted strings, a variable value or number is displayed
  • DIRECTION 1-4 (1 is left, 2 is right, 3 is up and 4 is down)
    • Specifies the direction of the scrolling text, 1 is the default.
  • TIME (sends the date and time to the LED array)
    • Scrolls the current date and time
  • HUMID (sends humidity to LED array)
    • Scrolls the current humidity
  • Temp (sends the temp to LED array)
    • Scrolls the current temperature
  • X=TEMP(0 or 1)
    • Get the current temperature and put it in variable 'x'
    • A zero means use Celsius, a one means Farenheit
  • X=HUMID(0)
    • Returns the humidity to the variable 'x'

Below is the listing for the current “HELLO” app:

100 PRINT “Welcome to Half-Byte LED Programmable Clock”
110 SCROLL ” HALF-”
111 SCROLL “BYTE Clock…..”
112 IF HOUR(0)<12 SCROLL ” Good Morning! ”
114 IF HOUR(0)>11 IF HOUR(0)<18 SCROLL ” Good Afternoon! ”
116 IF HOUR(0)>17 IF HOUR(0)<=23 SCROLL ”  Good Evening!  ”
120 TIME
125 IF IN(0)<>-1 GOTO 600
130 SCROLL “.   Temp is ”
140 TEMP
145 SCROLL “F  ”
150 SCROLL “Humidity is ”
155 SCROLL “%”
160 HUMID
170 SCROLL ”  Hello!  ”
180 IF IN(0)<>-1 GOTO 600
190 IF RND(99)>50 GOTO 110
200 SCROLL ”       ”
205 O=MINUTE(0)
210 W=15
220 H=7
230 X=RND(W)
240 Y=RND(H)
250 P=RND(W)
260 Q=RND(H)
265 IF IN(0)<>-1 GOTO 600
300 SET 16+(X),Y,1
310 SET 16+(X),H-Y,1
320 SET 16+(W-X),Y,1
330 SET 16+(W-X),H-Y,1
340 IF IN(0)<>-1 GOTO 600
350 SET 16+(P),Q,0
360 SET 16+(P),H-Q,0
370 SET 16+(W-P),Q,0
380 SET 16+(W-P),H-Q,0
390 IF IN(0)<>-1 GOTO 600
400 K=MINUTE(0)
410 IF K-O>1 GOTO 110
590 GOTO 230
600 SCROLL “DONE  “

A note about how the arrays are referenced, using SET.  Embedded Tiny Basic is setup to handle up to four arrays. My clock only uses two, but Basic does not know this, so individual LED addressing has to be offset by 16.  Normally, with four arrays, the upper left LED would be 0,0. In my clock, it would be 16,0 since I am only using the RIGHT MOST TWO arrays, each are 8 across and 8 down.

Some other things to note from the listing above…the line IF IN(0)<>-1 GOTO 600 that is sprinkled through out the program will poll the serial port to see if there is a key press. If there is a keypress, we want to stop execution and goto line 600.  In this case, it just says ‘Done’ and stops. Lines 205, 400 and 410 make up a timer. Lines 200 through 590 just displays a random dot pattern, as a distraction.  We don’t want this all day, so we only let it run for about a minute.  Line 205 records the minute it started and line 400 gets the minute after each pattern is displayed.  Line 410 evaluates the elapsed time by subtracting the start time from the end time. If the result is greater than a one, it goes back to the clock routine.  Otherwise, it displays a new pattern. Lines 112 through 116 determines if it is morning, afternoon or evening.

The Scroll statement is lacking and somewhat buggy. I am working on fixing it, and adding more functionality to it, to make it more versatile, like PRINT currently is. I also want to add a mechanism to the language to allow it to receive messages, via Bluetooth, from, say, a smartphone.  Limited gameplay may also show up in a future release.

Embedded Tiny Basic will be released soon.

Alcatel’s Idol 4s With Windows 10 Mobile

WP_20170103_21_30_52_Pro (2)Ever since I saw the announcement for the Alcatel Idol 4s With Windows 10 Mobile, I’ve wanted that phone.  Well, it is out and I finally bought it.  Why? Well, many reasons, biggest being its ability to support Continuum and its price: $469 from T-Mobile, in the United States.

The current package also includes Alcatel’s VR headset and the phone comes with a smattering of impressive imagery and a couple of VR games, both of which seem more like tech demos than actual games.

The phone is gorgeous, one of the prettiest phones I’ve ever seen, on par with the Apple iPhone 4, which I previously regarded as the best LOOKING piece of hardware.  The Idol 4s looks better.  It’s glass back, metallic rim and a screen that, for now, never WP_20170103_21_31_23_Pro (2)seems to get finger prints. It is just the right weight and the screen is amazing.

The phone sports a Snapdragon 820 CPU, which is a quad core processor running at 2.15ghz.  It has 4gb of RAM and 64gb of storage, expandable with an SD card.  It also features a 21megapixel back camera and an 8 megapixel forward camera.  The camera can be started via a hardware button on the side of the device, a convenient if annoying feature.

The phone ships with a release of Windows 10 Mobile that was a bit behind. It immediately wanted to update to, I think, the ‘anniversary update’ rollup.  Fortunately, it went off without a problem.

The camera, which I had read was a weak point, is actually pretty decent.  In lower light, the colors are a bit washed out, just like the Alcatel Fierce XL I have, but the resolution is excellent and the images still look really nice.  I have not yet tried outdoors at night, but will do so soon.

Perhaps the best thing about the phone…and Windows 10…is the ability to use the device as a deWP_20170103_20_06_00_Prosktop or laptop computer.  That is where this device really shines.  While I had to purchase a USB C to HDMI converter, the converter works great and also sports a spare USB 3.0 connector (for a keyboard or mouse) and a USB C female connector for charging the device while connected.  The HDMI port is 4k capable and is full size, so you don’t need any funky sized connector or adaptor. The particular hub I purchased was from Mokin and sold via Amazon. I paid $23 for the device.

Connecting the phone to the Mokin switched it to Continuum and presented the desktop, as you would expect from a desktop PC.  The phone screen turns into a mouse, though using this instead of an actual mouse can be frustrating as there is no obvious way to ‘click and hold’ to drag things. At least, I have not figured that out yet. A bluetooth keyboard was paired to the deviwp_ss_20170103_0001ce and, bam! There I was, using my phone as a desktop.

Continuum, admittedly, is not perfect. For example, nothing I had on the SD card would work. For whatever the reason, Microsoft is not allowing applications on the SD card to run in Continuum. Also, not every application is Continuum compatible either.  And, protected content will not work in this mode.

Overall, however, Continuum seems, to me, to be the killer feature (until MS introduces x86 emulation to the Snapdragon) for Windows Mobile 10.  I can see carrying just the phone and adapter.  Most places one would need a computer will, very likely, have an HDMI monitor along with keyboard and mouse. Or, you can take the travel size keyboard/mouse.  I can forsee this more than taking my old laptop or even a tablet, though, admittedly, tablets can be just as productive.

61tocr  emL._SL1500_While running Continuum, I was able to run Word, Excel, OneNote, Facebook and take a call…at the same time.  The phone showed no perceptible slowdown at all.

The VR gimmick is just that, a gimmick and really not a reason to buy this phone.  That said, and taking into account the limitation of the screen, it is still rather impressive, at first.  The screen is HD, 1080p.  That’s a problem only because the screen gets split in two to present the left and right images.  This makes things a bit fuzzy and pixelated. However, it is not so bad as to make the experience a poor one.  Quite the contrary, it works well.  Too well, I got a headache and was a bit nauseated by it because my brain knew I was not really experiencing anything, though my eyes said otherwise.

Overall, the Alcatel Idol 4s with Windows 10 Mobile is an excellent, premium phone at a great price…half what most others would cost.  It looks great, works well and is fast.  Windows 10 Mobile needs a little work, but it is, overall, a great operating system and works very well. Don’t let the notion of a poor ‘store’ steer you away. The app system on all of the mobile devices is bad, I don’t care if there aren’t five hundred fart apps.  I don’t even care that there is no Youtube app, the web site works and there are a few third party apps that fill in for what is missing.

I think you’d be satisfied with this phone. I sure am.

Build your own ATtiny85 programmer using an UNO

attiny85programmerAs part of my ATTiny 85 learning adventure, I had to create some way to actually load code on to the 85 itself. My first go ’round was a breadboard monster. The thing I hate about bread boarding are the bloody wires.  What a mess. Once I got my game working, I set out for a better way to program the chip.  I could have bought one, but what’s the fun in that? As it turns out, it is simple to build, provided you have an Arduino UNO handy.

I decided to make a shield for the UNO. I wasn’t concerned with passing through all of the pins, so only the ones I needed are exposed.  This is something I won’t do often, so I made no attempt to pretty it up either.  The whole thing consists of an 8 pin socket, one six pin header and one ten pin header and a 10 uf capacitor. Oh, a small perf board to mount it all.

Wiring is tedious and made the same mistake as I did with the game (see my last post) as I got the four pins (5 to 8) reversed. I know, I know.

Mistake aside, it took about a half hour for me to wire it up.

One thing that was a bit problematic for me, as I have a vision impairment, was getting the pins lined up to the proper UNO pins for the headers.  That took a few tries, but I got it.

The connections are below for using an UNO:

UNO Pins

ATTiny 85 Pins (actual pin)

+5v Vcc (8)
Gnd Gnd (4)
Pin 13 pb2 (7)
Pin 12 pb1 (6)
Pin 11 pb0 (5)
Pin 10 reset pb5 (1)

In the table above, the left is the Uno, the right is the ATTiny 85 socket. You need a 10uf cap between the Uno gnd and reset.

Before you can do anything with the Arduino IDE and the 85, you must first install the support…

By default Arduino IDE doesn’t support ATtiny85 so we should add ATtiny boards to Arduino IDE. Open File -> Preferences and in the Additional Boards Manager URLs give this url Arduino IDE Attiny support. Then, open Tools -> Board -> Board Manager, scroll down the list where it says “attiny by Davis A. Mellis”. Click toinstall it. Once installed, you can select ATtiny as the board type. You will also have to select chip type (45,85,etc.) Along with the processor, you will also need to specify the speed.  1 Mhz is the default, I used 8 Mhz for the code I downloaded for the game. Adjust to suit your needs.

You also need to upload the ‘ArduinoISP’ sketch to the UNO before programming the ATTiny 85. Once you upload this sketch, the UNO will pass along to the 85 what ever you send.

For my little handheld, I had to burn the bootloader first, then upload the game sketch. Don’t forget to  set the Arduino IDE to ‘Programmer ‘Arduino as ISP’. Once the bootloader is burned to ATtiny, you are ready to upload your code.

You should be good to go.  Here is a site (from Arduino) that goes into far greater detail.

An ATTiny85 based handheld game

WP_20161228_21_29_19_Pro (2)Yes, I love gaming.  And there is nothing more satisfying, to me, than building, sometimes coding and playing something I made.  Now, I don’t always WRITE the code, after all, time is a premium these days, but I don’t mind taking something someone else did and making it work with what I built.  For this project, I was very lazy: the design is also someone else’s.  I really wanted to do something with the ATTiny85, but have not really done anything outside of playing with the Adafruit Trinket or Digispark.

So, for this little project, I wanted to also use one of my cool little ssd1306 OLED screens.  While perusing the net, I came across Webboggles.com.  Here, they are selling a nifty little kit called the ATTiny Arcade Keychain. It looks to be of high quality and the author (Ilya Titov) goes through much detail in the design and build.  There are several posts about it and the games.  The game code and schematic have been made readily available. The first of the games was breakout and that is where I started. 

To build the little game, you will need the following:

  • Attiny85 + dip8 socket
  • SSD1306 OLED screen
  • 3x push buttons
  • 2x resistors (10kOhm optimal)
  • Piezo speaker
  • 3V 2032 coin cell battery
  • perf or vero board
  • I used a little speaker out of a toy cell phone instead of the piezo. I would also recommend socketing the screen instead of soldering it directly, you don’t have to, but I wish I had now.attiny85game_schem

    One other thing to keep in mind, you will need a way to program the ATtiny 85 chip, which I will describe in a follow up post. I actually built two programmers: one on breadboard and a quasi shield for the UNO.  I like that better.

    As you can see from the schematic, it is really simple. Even so, I made a few mistakes at first.  Not paying attention to the chip pinout, I got the pins reversed from pin 8 to pin 5. I, for whatever the reason, assumed the actual pin 8 was pin 5, instead of going from pin 4 to pin 5 at the bottom of the chip. Once I figured that out (I had yet to apply power) the rest was easy. I also got SCL and SDA backward (hey, I’m old).  Once I got my mistakes corrected, I was amazed that this simple circuit was now a little game machine.  Now, you aren’t going to play Call of Duty or even Doom, but you can play many classics on the devices.  I am going to build one or two more as this was a blast. I would also encourage ordering a kit from Webboggles as well.

    My next post will discuss creating an Attiny 85 programmer for the UNO.

    WP_20161231_15_20_15_Pro (2)

    Falling like a rock: Pebble is no more

    wp_20150708_22_15_12_proA few short years ago, a product came on the market that I got excited about. The product utilized ePaper, could go a week between charges and was programmable. Better yet, it was ‘crowd funded.’  The product took off, initially, and raised a lot of money from Kickstarter.  That product, the Pebble Smartwatch, was a successful kickstarter project, probably the most successful of any from that site.

    Last year, I finally got one.  I like it a lot.  The problem, though, was my smartphone. I use a Windows Mobile 10 device and there is no official app from Pebble. Eventually, someone developed a nice Pebble watch app for my favorite smartphone operating system.  For the last few months, I’ve been very happy with this setup: I see my notifications, calls, email, etc. on my watch, I don’t need to pull the phone out.  Great.

    The app even works with some of the back end plumbing from Pebble.  Nice. I get weather and some other things. Very cool.

    Last week (December of 2016) I see a rumor that Fitbit was purchasing Pebble.  I think, GREAT! My favorite smartwatch will get a much needed boost from an established company, that is also Windows Mobile friendly. Awesome. I may even get the new Pebble 2!  How sweet is that?

    Turns out, it is bitter.

    Fitbit did, in fact, buy Pebble. BUT…they only bought the services and software, NOT the hardware. So, Pebble is now history.  There is no word on when the services will cease. The watch will still work with phones, but the stuff that made it special, the heart of Pebble, will be pebble-geek-watchfaces_2-300x300going away.

    No more new watches.  Fitbit did not want the hardware. Nor did they want about sixty percent of the employees either.

    I now have one more piece of hardware that is orphaned.  Man, my ability to choose platforms is horrible.

    Zune, Windows Phone/Mobile, Palm OS, webOS for Palm, Vista, Windows 8, CED Video Disc, LaserDisk, HD-DVD, Pontiac…and, now…Pebble.  Wow.  What a record, huh?

    So, RIP, Pebble. It was nice while it lasted.