Skip navigation
> RoadTest Reviews

Arduino A000067 Mega2560 Rev3 Development Board - Review

Scoring

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
  • RoadTest: Arduino A000067 Mega2560 Rev3 Development Board
  • Buy Now
  • Evaluation Type: Development Boards & Tools
  • Was everything in the box required?: Yes - null
  • Comparable Products/Other parts you considered: 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.

     

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

    //                                                                           //

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

     

     

    #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.


Comments

Also Enrolling
Enrollment Closes: Oct 26 
Enroll
Enrollment Closes: Oct 27 
Enroll
Enrollment Closes: Nov 1 
Enroll
Enrollment Closes: Nov 14 
Enroll
Enrollment Closes: Nov 6 
Enroll
Enrollment Closes: Oct 30 
Enroll
Enrollment Closes: Nov 14 
Enroll