Arduino : Datasheet and facts of programming

I bought up a new Arduino board and have successfully installed the software and connectivity in/with my system.

But I feel that we should understand Arduino datasheet very well - like it's memory organization, timers, ports etc - is there any documentation for same? As a beginner what are the things I should do know to do development work?

448 pages http://www.atmel.com/Images/doc8161.pdf

Search port manipulation also.

Pretty awesome description of how the timers work: http://maxembedded.com/category/microcontrollers-2/atmel-avr/avr-timers-atmel-avr/

Fuse calculator, needed if you're programming bare chips: http://www.engbedded.com/fusecalc/

Thanks a lot for the link. Actually I was thinking that the micro-controller name is Arduino like what we have like 8051 or PIC16F870 etc. The link mentioned in the reply threads talks about ATmega48PA/88PA/168PA/328P AVR micro-controller.

Can anyone please confirm my queries:

Is it that Arduino belongs to Atmel family? How do I know the actual micro-controller type of the one that I bought? So why do we generally say that I am programming with Arduino if we have ATmega48PA/88PA/168PA/328P AVR (and more variants whose memory structures are different?) i.e. the architecture would differ?

No, Arduino doesn't belong to Atmel, it uses Atmel micro-controllers

all is explained here : http://arduino.cc/

If you want to know which controller is on your board, 2 solutions at least :

  • read what is written on your controller
  • have a look here http://arduino.cc/en/Main/Products if you click on a product, it will open a page on which you'll see which controller is used.

One of the big advantages of the Arduino development environment and runtime library is that it enables you to get started in microcontroller development without needing to know the details about the underlying microcontroller hardware. Of course there is nothing stopping you from learning how it works in more detail, but the Arduino project does not aim to do that so you rely on tutorials and articles that experienced users have produced, and the information supplied by the microcontroller manufacturers. By the time you are working at that low level, you should also consider the alternative development environments and runtime libraries available to you. Arduino's big strength is that it is designed to be suitable for novices to use, but that is IMO also its biggest weakness.

Thanks but please clarify me one more information - generally I have worked with 8051 and PIC development board so I state that I have worked with 8051 and PIC micro-controllers. But this does not seems to be the same case for Arduino.

The Arduino board that I am using is - http://arduino.cc/en/Main/ArduinoBoardUno which states that "The Arduino Uno is a microcontroller board based on the ATmega328" - so I am actually learning Atmel ATmega328 micro-controller. Then why again the main page states - "The microcontroller on the board is programmed using the Arduino programming language (based on Wiring) and the Arduino development environment (based on Processing)" Isn't it the language specific to ATmega328 micro-controller?

My confusion is that why we have its name as Arduino when the processor itself is not named as Arduino - is same regards to other micro-controller boards that I have worked is as mentioned above. As I understand that Arduino is a product using Atmel micro-controllers and build in circuits but its programming language is that for Atmel micro-controllers.

I hear people say that I have worked with ARM, PIC, ATmel - cause they are micro-controllers but when I say I am working with Arduino which is not a micro-controller and is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software - hence in actual is it that I am working with Atmel - right?

uunniixx: ...when I say I am working with Arduino which is not a micro-controller and is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software - hence in actual is it that I am working with Atmel - right?

That's an odd perspective for someone named "uunniixx".

The RISC architecture among the 8-bit AVR components is not all that different. What really changes is the number of ports, IO pins, how functions are overlapped on the IO pins, the amount of memory. They are all programmed in C/C++ (or assembler) using the same Compiler. So if you wanted to, you could say you are working on an Atmel 8-bit RISC architecture with an easy to use hardware platform.

Get over it … just enjoy the project.

…R

uunniixx:
I hear people say that I have worked with ARM, PIC, ATmel - cause they are micro-controllers but when I say I am working with Arduino which is not a micro-controller and is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software - hence in actual is it that I am working with Atmel - right?

C, C++ are high level languages, used to write softwares that will run on several processors. The compiler knows the target and produces the low-level code for it, if it has the libraries needed. Example : I also use a PIC32 from chipkit, with "mpide" IDE - Most programs that I've written for the UNO will compile for the UNO32 - Some won't : the "sofwareserial" library is not implemented for the PIC32, I can't use it in my uno32 programs ..... If you want to write your soft in assembly language, then yes, there are a lot of differences between each processors, and you have to learn the assembly for the family processors (actually, the processor) you want to use.

Edit : sure you still need to learn what is related to your controller family, the way to use the inputs/outputs, the words the compiler understands (pinMode, digitalWrite.....), the pins that are used for communications, interrupts etc.... but there are IDE projects that try to make this more "universal" http://uecide.org/