Arduino A000067 Mega2560 Rev3 Development Board - Review

Table of contents

RoadTest: Arduino A000067 Mega2560 Rev3 Development Board

Author: mmcphail

Creation date:

Evaluation Type: Development Boards & Tools

Did you receive all parts the manufacturer stated would be included in the package?: True

What other parts do you consider comparable to this product?: being an Arduino there are a range of different boards available that contain different amounts of ram/rom as well as differing amounts of IO. for simplicity sake I've mainly kept to the Arduino ecosystem however there are other offerings such as the Microchip PIC range, the MSP Lauchpad series as well as a large variety of microprocessor boards from STM.

What were the biggest problems encountered?: the main issues I've found when using the product is the limited functionality of the Arduino IDE. while suited quite well for beginners of for rapid prototyping of ideas i couldn't help but feel like this IDE is lacking in several key areas that make programming more efficient in the long run. For example: (1) There is no ability to change the interface colour scheme from the horrid greenish colour to something darker for those late night programming sessions or for working in direct sunlight such as i do at university during my lunchtimes. (2) there is no support for syntax autocomplete when typing, this would be a real handy feature to integrate to the Arduino IDE as is speeds up writing code a great deal. it appears that this functionality was at some stage being worked on however it was never merged with the main tree thus this feature is non-existent in the current IDE. see here for more details of autocomplete for Arduino - https://github.com/arduino/Arduino/pull/3484 (3) better 3rd-party support would be fantastic too. Currently i have ported some code to the attiny series chips but the IDE on my mac at least has had some issues getting the IDE to detect and program non Arduino branded boards using generic USB-to-serial adaptors. i haven't found out the exact cause of this problem and its not constant so its been hard to investigate.

Detailed Review:

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.

imageimage

 

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.

image

 

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.

\image

 

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.

image

 

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                                    //

//                                                                           //

//------------------------------------------------------//

 

 

#include <LiquidCrystal_I2C.h>

 

 

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

#include <SevenSegmentTM1637.h>

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);

 

 

 

 

void setup()

{

LCD2004_init();

pinMode(enable,OUTPUT);

pinMode(load,OUTPUT);

pinMode(clock,OUTPUT);

pinMode(data,INPUT);

digitalWrite(load,HIGH);

digitalWrite(enable,HIGH);

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

}

 

 

 

 

void LCD2004_init(void)

{

  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

}

 

void loop()

{

digitalWrite(load,LOW);

delayMicroseconds(5);

digitalWrite(load,HIGH);

delayMicroseconds(5);

digitalWrite(clock,HIGH);

digitalWrite(enable,LOW);

 

 

// 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

digitalWrite(enable,HIGH);

 

 

 

 

// 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

for(int i=7;i>=0;i--)

{

if(bitRead(incoming2,i)==1)

{

lcd.setCursor((15-i),1);

lcd.print("1");

}

else

{

lcd.setCursor((15-i),1);

lcd.print("0");

}

for(int i=7;i>=0;i--)

{

if(bitRead(incoming1,i)==1)

{

lcd.setCursor((7-i),1);

lcd.print("1");

}

else

{

lcd.setCursor((7-i),1);

lcd.print("0");

}

// Send 'incoming' to the TM1637 display and output in hex

    display.setCursor(0, 0);

  display.print(incoming1, HEX);

  display.setCursor(0, 2);

  display.print(incoming2, HEX);

  Serial.print(incoming1, HEX);

  Serial.print(incoming2, HEX);

  Serial.print('\n');

 

}

}

}

 

 

 

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.

Anonymous
  • images should me be fixed now, sorry about that Enrico, and thanks for letting me know so i could fix it up image

     

     

    btw, if anyone wants any further details about the 'hexOut display' just let me know. Also feel free to reuse any of the code as long as you give credit where credit is due, its opensource just haven't bothered to upload it anywhere as this was specifically for the roadtest and id rather people come here to read about it

  • hi Enrico,

    i just noticed the picture size issue, im away from my laptop atm but ill re-upload those pictures when i get back home (later today), thanks for letting me know image

  • Hi Matthew,

     

    I think it's not too short and not too long image It's concise but with a good content. What happened to the images you published? Are small like icons. I have experienced this behaviour in past with the new editor (after the previous last update) and I hoped that this issue was solved. In theory the images are checked in size and correctly resized by the system but this does not happens if you upload images larger than 1600x1200 or - better - 1024x768 pixels. I suggest you to check this detail and try to reload the images. It's a pity that as they are it is impossible to see the content in detail.

     

    Good job. Enrico

  • thank you, i appreciate that. its my first roadtest actually. hopefully its not to short?

  • Nice road test report.

     

    DAB