|Product Performed to Expectations:||10|
|Specifications were sufficient to design with:||10|
|Demo Software was of good quality:||10|
|Product was easy to use:||10|
|Support materials were available:||10|
|The price to performance ratio was good:||8|
|TotalScore:||58 / 60|
Firstly let me say thank you to element14 for the Roadtest opportunity as well as Arduino for providing the ATMega2560 for review.
when i received the package i the mail is was as it always is with element14, well packaged for shipping. in fact id even say it was a bit over packaged for transport however i feel that is a nice touch and gives piece of mind when wording products as you know its highly unlikely they will get damaged during shipping. The Arduino came in a silver-foiled bubblewrap sleave and upon opening it i was greeted by my first offical Arduino board in its own little box. inside there were a few stickers, the Ardunio Mega2560 as well as a persplex base plate that the board can be screwed into. i wasn't expecting a baseplate in the box however as soon as i saw it i understood the reasoning. as most of us who tinker with electronics know there is often some stray wires or so forth on our desks and by having a baseplate it minimises the risk of shorting something during the design/prototyping stage.
in comparison to some of my other dev boards the mega is somewhat larger but still smaller them i was expecting it to be, i took a photo of the Mega next to an UNO and a Nanoto give others some idea of the size difference, but again for the large amount of IO i still consider this board to be nice and compact while still allowing the use of shields.
My initial idea for a review of the Mega2560 was to design and build a EEPROM programmer so i can flash some 6502 assembly code while im learning and designing my own vintage 8-bit computer. However i soon found out that this has already been done before (DIY EEPROM programmer | The Oddbloke Geek Blog ) so i didnt want to rehash someone else work. i did actually build this programmer as you can see in the photo below and while it works it's very slow as it doesn't have pagewrite support. i takes about 4-8 min to program a EEPROM so its not to bad for the odd use however i ended up getting a TL866 programmer to use instead for flashing chips.
As I'm currently designing my own 8-bit 6502 computer to learn assembly and low level logic addressing i realised how handy it would be to read the address and/or data buss to see what was happening and display it in hex. my plan was to design a board that gets 8 or 16bit inputs, being either high or low and display the values on a 4-digit 7-segment display. during the design phase as well as the photo below you will notice that i had a i2c LCD connected up as well. this was done for debug reasons so i could be sure the Hex output was true to the LCD binary value. you many also notice that there are only about 10 wires going into the mega, this is due to using two 74HC165 shift registers to get this 16 inputs down ti about four wires on the mega. while i could have omitted those and read directly from the digital IO of the mega i had a longer term goal on actually packaging this into a small handheld case so i know i will likely be pin limited when i do that as i would be using an attiny. The way it works it that the two 74HC165's have 8 inputs each, they can be either high or low and the arduino will listen to the the shift registers using the 'shiftIn' function to get the 16 bits of 1's and 0's and then process and display on the LCD and 7-segment display.
here is the code i used to accomplish this:
// 16bit input to hex display using 2 74HC165's //
// this sketch will get a 16bit input from the //
// shift registers and output the values in HEX //
// to a 4-digit 7-segment display, as well as //
// send the 16bit binary to be displayed on LCD //
// Author: Matthew McPhail //
// Copyright: 22/09/2017 //
LiquidCrystal_I2C lcd(0x3F,20,4); //intilizing the I2C liquid crystal Display
#define enable 53
#define load 50
#define clock 52
#define data 51
byte incoming1 = 0;
byte incoming2 = 0;
// Initilizing the TN1637 diplay
const byte PIN_CLK = 47; // define CLK pin (any digital pin)
const byte PIN_DIO = 46; // define DIO pin (any digital pin)
SevenSegmentTM1637 display(PIN_CLK, PIN_DIO);
lcd.print("Input = ");
// TM1637 setup routine
Serial.begin(9600); // initializes the Serial connection @ 9600 baud
display.begin(); // initializes the display
display.setBacklight(100); // set the brightness to 100 %
//display.print("INIT"); // display INIT on the display
delay(1000); // wait 1000 ms
lcd.init(); //invoking initialized function of LCD in LiquidCrystal_I2C.h
delay(10); //delay for 10 milliseconds
lcd.backlight(); //turn on backlight of LCD2004
lcd.clear(); //clear screen
// for every 74HC165 added in series you must add another 'IncomingX' to get the SHiftIn data
incoming1=shiftIn(data,clock,LSBFIRST); //MSBFIRST=most significant bit first, LSBFIRST=least sig bit first
incoming2=shiftIn(data,clock,LSBFIRST); //MSBFIRST=most significant bit first, LSBFIRST=least sig bit first
// this section will send ShiftIn values to LCD and format in the correct order of bits
// so that you can see the 16bit binary input coming from the two 74HC165
// Send 'incoming' to the TM1637 display and output in hex
In conclusion i think overall the Arduino platform and the Arduino Mega2560 are a wonderful set of tools to have available in any hobbyist's lab due to the ease of use in rapid prototyping, the wealth of online examples and finally because the incredible community behind the arduino that are there to give examples and offer both advice and tips to young players. if you dont already have one i highly suggest you pick one up and start coding.