Opinion against Arduino platform and some way to improve

I raised a question in the project guidance section but solved it myself within the hour. It's about how to set TX1 pin as gpio while receiving on RX1. I figured out the register bit to reset.


This makes me think about some common arguments against Arduino, say from hackaday, from some people that prefer "bare metal". I never ever touch MCU registers. All my experience with x86 and especially 80386 architecture and registers are useless and forgotten now so why bother with AVR?! I must be considered by those people as dumbing down an AVR with Arduino because I use digitalWrite and libraries and I did hit a road block trying to use just arduino functions and languages to solve my problem.

But I did what should be done: I went in and read the HarewareSerial library code, identified approximately what commands are responsible for getting me back the gpio function of TX1, I then went and read atmel document on MEGA2560, on USART section with asm/C code example, then I understood how to set up USART "bare metal". I then went further into the document and found the name of the register (USART control status register B) and the bit (TXEN1), and reset the bit. This is exactly how I should have used arduino library code and atmel doc. I also was reminded that I/O must be mapped to SRAM address since I was reading register address (pretty low numbers). I did feel that my past life with x86 helped a tid bit but I didn't feel that arduino library and functions are preventing me from either learning or utilizing the so-called "bare metal" feature of the MCU. Instead, the library code provided me intermediate steps (of course without much comment) to reach the metal. I can see that another person, maybe a senior ECE student, only sticking to arduino libraries and functions and refusing to spend time to learn what's necessary to solve problems like the one I faced, that would be a bad example. But it's all about learning attitude. At me age, I mostly learn to solve an existing problem presented to me at work or in personal projects.

So my conclusion is: we need more instructional comments in official and contributed arduino library code to assist learning. We also need to provide learning objectives and paths to learners with the right attitude to achieve more hardware knowledge after they are comfortable with arduino environment, say with interrupts, timers, and all different registers and hardware they control. ATMEL's documents are pretty good but doesn't speak to most hobbyists. I might be able to make some video tutorials on what I learned so far, more people doing this will be quite useful as well. The arduino team can certainly host the content under learning -> advanced. Play ground is not perfect for learning.

Since arduino has made basic knowledge of MCU so easy to learn, why not making "more advanced" MCU knowledge also easy to learn and really laugh at those that thinks MCU should be difficult simply because they themselves felt it was difficult to learn in their schools.

Hi John,

Thanks for the detailed perspective on this. I too wish library writers (who are usually those who understand the detail better than most) would comment with more details of the WHY and HOW of what they do with 'lower level' constructs.

IS there any overview anyone has written about the ATmel chips that is somewhere between the spec. sheets and Arduino documents?? I have some fairly high-level stuff here: http://arduino-info.wikispaces.com/ArduinoChipDetails (Any suggestions/critique/adders for that welcomed!)

but I'd love to add something with more details for those who wish to go further.


Yes, I mean a bit lower-level knowledge. The main blame from the other side is no low-level access or knowledge, which is of course false. But to make lower-level knowledge more accessible to someone that has already done some arduino project is important for arduino to enter into education territory of electrical engineering. It is currently one of the weakest links. Classic ECE education is upside down. If you don't finish the first X years, you never get to enjoy a single bit of fun using your learned knowledge. Arduino can lead a curious mind towards ECE already, flipping the upside down structure. The next step is to smooth the gap between arduino and 2XX to 3XX level microcontroller course taught in college. I'll start with some tutorial while I learn the content myself.

Terry, I think we covered that kind of transitional level in my book.

I have only been using an Arduino for about a year. I LOVE how I just plugged it into my Linux netbook and "it just worked".

I leaned how to program a PIC microchip years ago mainly by following magazine articles. I don't think I could afford a modem or an internet connection. This was back when every PC had a parallel port.

I like reading/studying how things work - such as the Atmel datasheets. So I can empathise with @Liudr's exploratory process. It gives a great feeling of satisfaction.

Extending that concept as a general part of the Arduino educational infrastructure is a more complex question. A very large proportion of Arduino users will have no use for it. Those that do have a use for it and have an enthusiasm for the subject will probably learn for themselves. That leaves another group who, for some strange reason, expect to be taught but aren't much interested in the effort of learning. Frankly I think evolution should just let those people fall by the wayside.

There is a separate issue about the tools that people expect to be available. Back in the day I made my own PIC programmer for a few pence (following advice in a magazine). Now people are brought up to expect a fancy interface for everything. I'm not in favour of spending Arduino developer resources on extending the Arduino system to do stuff that can be done (I assume) using the Atmel programming system.